Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   1092 / 1210
(#) c27 válasza kissi hozzászólására (») Jún 6, 2019 /
 
Lényegében hasonlóan csináltam:
Temp2=Temp/10;
printf("%d.%d", Temp2, Temp-Temp2*10);
(#) Hp41C válasza lóri hozzászólására (») Jún 6, 2019 /
 
Idézet:
„typedef _16 {
uint16 word;

struct {
uint8 lo_byte;
uint8 hi_byte;
} ;
} 16;

typedef _32 {
uint32 dword;

struct {
uint16 lo_word;
uint16 hi_word;
} ;
uint8 byte[4];
} 32;

16 adat2;
32 adat4;”

Nem okoz gondot, hogy két számot a tizenhatot és a harminckettőt felüldefiniálod?
Idézet:
„A C identifier is a name used to identify a variable, function, or any other user-defined item. An identifier starts with a letter A to Z, a to z, or an underscore '_' followed by zero or more letters, underscores, and digits (0 to 9).”
(#) lóri válasza Hp41C hozzászólására (») Jún 6, 2019 /
 
Nekem nem, mert nem tudok programozni, de továbbítom barátomnak. Köszönöm, hogy ránéztél, majd jelentkezem.
(#) kissi válasza c27 hozzászólására (») Jún 6, 2019 /
 
OK.
(#) Albrecht3 hozzászólása Jún 6, 2019 /
 
Sziasztok! Kezdőknek milyen fejlesztőapanelt ajánlanátok? Szeretnék venni egyet,de persze kezdő révén tanácstalan vagyok
(#) Bakman válasza Albrecht3 hozzászólására (») Jún 6, 2019 / 1
 
Dugdosós próbapanel, jumper vezetékek, DIP tokozású kontrollerek és egy-két kiegészítő alkatrész mint 100 nF-os kondenzátor, 1 kΩ-os ellenállás, 10 kΩ-os poti, pár LED. Amikor már megy a dolog, tudni fogod, mi hiányzik még.
(#) Albrecht3 válasza Bakman hozzászólására (») Jún 6, 2019 /
 
Köszönöm szépen,ilyen panel van is már itthon,ja és persze a többi alkatrész is
(#) Bakman válasza Albrecht3 hozzászólására (») Jún 6, 2019 /
 
Kezdőknem nem nagyon lehet ajánlani fejlesztői panelt. Azok általában összetettebbek a kelleténél vagy nem sok variálási lehetőséget tartalmaznak vagy az egyszerűbbeket gyorsan meg lehet tanulni használni, aztán már nincs rá szükség. A próbapanel olyan mint egy tégla, kb. bármit lehet belőle építeni.
(#) Tasznka válasza lastewer hozzászólására (») Jún 7, 2019 /
 
Kellene az egész kód,mert nem is bizti,hogy ezzel a pollival van a gond.
(#) Tasznka válasza Hp41C hozzászólására (») Jún 7, 2019 /
 
A fordító úgy is kiáll ott hibára,csak még előtte kiakadt valamin,és még nem jutottak el odáig,hogy észrevegyék .De majd belejönnek .
(#) lastewer válasza Tasznka hozzászólására (») Jún 7, 2019 /
 
Ez az egész , köszi.

  1. // Órajel beállítása (Kvarc)
  2.     #define _XTAL_FREQ 16000000
  3.     #define PUFF_SIZE 3
  4.      
  5.      
  6.     // Változók beállítása
  7.        unsigned int cnt;
  8.        char puffer[PUFF_SIZE];
  9.        char tail = 0;
  10.        char head = 0;
  11.        char full = 0;
  12.        
  13.     // Vezérlő parancsok beállítása
  14.        char off_cm[]      = "off";
  15.        char on_cm[]       = "one";
  16.        char dev_id[]      = "ID: sh";
  17.    
  18. //---------------------------------------------------------------------------------------------------------
  19.    void initTimer()
  20.    {
  21.           T2CON = 0b00000100;         // TR2 postscale 1:1, TMR2 ON, prescale 1:1
  22.           TMR2  = 0;                  // Initialize Timer2 register
  23.           PR2 = 200;                  // itt miért 200-1 van? 200-1 akkor 0.0995 ms ha 200 akkor 0.1 ms a megszakítási idő
  24.           TMR2IE_bit = 1;             // Enable interupt
  25.           INTCON = 0b11000000;        // GIE = ON, PEIE = ON
  26.    }
  27.    void interrupt()
  28.    {
  29.       if (TMR2IF_bit)
  30.       {
  31.         cnt++;
  32.         TMR2 = 0;
  33.         TMR2IF_bit = 0;           //A TMR2IF_bit és a PIR1.TMR2IF ugyan azt a bit-et jelöli
  34.        
  35.  
  36.         if(PORTB.F0 == 1 )
  37.         {
  38.                 PORTB.F4 = 0;
  39.         }
  40.         if(PORTB.F0 == 0 )
  41.         {
  42.                 PORTB.F4 = 1;
  43.         }
  44.       }
  45.    }
  46.  
  47. //MAIN-----------------------------------------------------------------------------------------------------
  48. void main()
  49. {
  50.   cnt = 0;
  51.   initTimer();
  52.  
  53.  
  54.  
  55. // UART --------- ---
  56.  
  57.    UART1_Init(4800);          
  58.                                  
  59.    delay_ms(500);
  60.    UART1_Write_Text(dev_id);
  61.    UART1_Write(13);    
  62.    UART1_Write(10);
  63.    
  64.    TRISB.F7 = 0;  // RB7
  65.    TRISB.F3 = 0; // RB3 as láb villogtatása (status led)
  66.    TRISB.F4 = 0; // RB4 es láb állapot jelző a kézi kapcsolótól
  67.    TRISB.F0 = 1; // RA 1 láb bemenet
  68.    
  69.    TRISB.F1 = 1;      // RX bemenet
  70.    TRISB.F2 = 0;      // TX kimenet
  71.    
  72.    PORTB.F7 = 0;
  73.  
  74.   while (1)
  75.   {
  76.  
  77.       if (cnt >= 5000)    // 10000 * 0.1 ms = 1 mp
  78.       {
  79.                 PORTB.F3 = ~PORTB.F3;   // B lábak villogtatása
  80.                 cnt = 0;                // Számláló reset
  81.       }
  82.  
  83.        if (UART1_Data_ready())
  84.     {
  85.        if (!full)
  86.                {
  87.                puffer[head]= UART1_Read(); // Get received byte
  88.                head = (head +1) % PUFF_SIZE;
  89.                if(head == tail)
  90.                     {
  91.                       full = 1;
  92.                     }
  93.                  }
  94.        if (full)
  95.                {
  96.                    head = 0;
  97.                    full = 0;
  98.                }
  99.                            
  100.            
  101.                   // Bekapcsolás
  102.                   if(strstr(puffer, on_cm))
  103.                   {
  104.                        UART1_Write(13);
  105.                        UART1_Write_text("Bekapcs.");
  106.                        UART1_Write(13);
  107.                        PORTB.F7 = 1;
  108.                          memset(puffer, 0, sizeof puffer);
  109.      
  110.                   }
  111.                   //Kikapcsolás
  112.                   if(strstr(puffer, off_cm))
  113.                   {
  114.                      UART1_Write(13);
  115.                      UART1_Write_text("Kikapcs.");
  116.                      UART1_Write(13);
  117.                      PORTB.F7 = 0;
  118.      
  119.                       memset(puffer, 0, sizeof puffer);
  120.      
  121.                   }
  122.     }
  123.  
  124.   }
  125. }
(#) icserny válasza Albrecht3 hozzászólására (») Jún 7, 2019 /
 
Ez így elég értelmetlen kérdés, ha nem árulod el, hogy mivel akarsz kezdeni:
- PIC16, 18, 24, 32 stb.
- MPLAB X, MikroC, miegyéb
és mivel akarod összekapcsolni (pl. Mikroelektronika click modulokkal, vagy más egyéb).
Ezek mind más utat jelölnek ki.
(#) Tasznka válasza lastewer hozzászólására (») Jún 7, 2019 /
 
Elméletileg mennie kellene...Az uart-os lekérdezésen csúszhat el valami,azt kellene látni,hogy mit is csinál.
(#) lastewer válasza Tasznka hozzászólására (») Jún 7, 2019 /
 
Proteusban szimulálva megy is. A gond akkor kezdődik, ha beleégetem a PIC-be .
(#) Vfr72 hozzászólása Jún 7, 2019 /
 
Sziasztok!
Szeretnék segítséget kérni tőletek, egy probléma megoldásában.
Adott egy 8bites érték. Az értéknek megfelelően szeretnék megadott frekvenciájú jelet előállítani.
pl.: 0=10Hz, 255=500Hz.
Törtem a fejem, de a jó megoldásra nem jöttem rá. Gondoltam arra, hogy IF szerkezettel megvizsgálom az értéket és az értéknek megfelelő adattal töltöm fel a azámlálót. Ez elméletben jó lehet, de 255 feltételt kellne vizsgálnom... Nem hiszem, hogy ez a jó megoldás. ASM-el "kinlódom".
Üdv.
(#) Bakman válasza Vfr72 hozzászólására (») Jún 7, 2019 /
 
Egyenes egyenlete.

x1: 0; y1: 10
x2: 255 ; y2: 500

y = 1.9215686274509804x + 10

Forrás: Maths Is Fun.

szerk.:
Már ha lineáris az összefüggés. Ha nem, egy 256 elemű tömbbel is megoldható.
A hozzászólás módosítva: Jún 7, 2019
(#) Peter65 válasza Vfr72 hozzászólására (») Jún 7, 2019 /
 
Erre való a táblázat. Mivel a tárolt adat nem fog elférni egy bájtban (pl.: az "500"), ezért célszerű egymás után kettő táblázatot tenni (feltéve, hogy 8 bites mikrokontroller küzdesz). Az egyikben lehet a felső, a másikban az alsó bájt. A táblázat kezelésre vannak assembly példák, pl.: ez is .
Jó lenne tudni a processzor típusát, mert az újabbakkal még egyszerűbb a táblázat kezelése a MOVIW utasítással.
A hozzászólás módosítva: Jún 7, 2019
(#) Hp41C válasza Vfr72 hozzászólására (») Jún 7, 2019 / 2
 
1.9215686 * 256 = 491.92
Azaz, ha x -et megszorozzuk 492 -vel, vesszük a szorzat 2 magasabb byte -jéből képzett 16 bites egész értéket (azaz 256 -tal osztjuk) és hozzáadunk 10 -et nem tévedünk nagyot.
A 492 pedig 256 + 236, így csak egy szorzást kell végrehajtani
x a byte -os bemeneti érték, temp24: 3 byte-os munkaváltozó:
  1. clrf temp+2
  2. movf x,w
  3. movwf temp+1
  4. mullw 236
  5. movf PRODL,w
  6. movwf temp
  7. movf PRODH,w
  8. addwf temp+1,f
  9. movlw 0
  10. addwfc temp+2,f
  11. movlw .10
  12. addwf temp+1,f
  13. movlw 0
  14. addwfc temp+2,f

A keresett érték a temp + 1 és temp + 2 címen található [temp+2 * 256] + [temp+1].
(#) suszitibi hozzászólása Jún 8, 2019 /
 
Sziasztok
Újabb problémára kérnék segítséget.
Készítettem egy MIDI merger kapcsolást. Két bemenet, egy kimenet.
Ha valamelyik bemenetre midi eszközt kötök, a hozzá tartozó csatorna ledje és a kimeneti csatorna ledje is, látszólag úgy villog, ahogy kell. Ha a kimenetre kötök egy ledet, az is villog, ha pl. note on, vagy off van. A gond, hogy a kimeneten lévő villogás, mégsem midi adat, mert sem a hangmodul, sem a midi ox, nem jelez midi kódokat. Látszólag a program rendesen felmegy. Mi lehet a gond?
Csatolom a kapcsolási rajzot és a programot.
Köszönettel: Tibi
(#) sonajkniz válasza Hp41C hozzászólására (») Jún 8, 2019 /
 
És még rám mondják, hogy túlzásba viszem az egyszerűsítést!
Bár nem minden linearizációhoz alkalmazható ez a megoldás, de jelen helyzetre zseniális!
Ment a mancs!
(#) suszitibi válasza suszitibi hozzászólására (») Jún 9, 2019 /
 
Sziasztok
Ha esetleg segítség, így néz ki a jelenlegi konfigurációs bitek beállítása.
Lehet, hogy csak ezekkel van gond? Atmegánál, már jártam úgy, hogy volt jel, de össze-vissza jelként érzékelte, nem annak, aminek kellett volna. Ott a fuse bitek nem voltak jól beállítva.
(#) eSDi válasza suszitibi hozzászólására (») Jún 10, 2019 /
 
Hali!

A HEX fájlban ezek vannak benne, szóval elvileg jónak kellene lennie.
(#) lastewer hozzászólása Jún 12, 2019 /
 
Sziasztok!

MikroC-ben hogy lehet változót beletenni egy stringbe?
(#) pipi válasza lastewer hozzászólására (») Jún 12, 2019 /
 
Hali!
Változót szerintem sehogy, a változó értékét viszont lehet, pl sprintf...
Ha használod az sprintf-et, ez elég sok programmemóriát képes lezabálni.
Ha tudnánk konkrétan mit szeretnél, lehet mást is javasolni...
pl itoa, ltoa is jó lehet
(#) lastewer válasza pipi hozzászólására (») Jún 13, 2019 /
 
UART-on szeretnék egy szöveget elküldeni + benne egy változó értékét.
(#) Hp41C válasza lastewer hozzászólására (») Jún 13, 2019 /
 
Sokadszorra: Bővebben: Link
- Decimális: byte -> 3 digit, word -> 5 digit.
- Hexadecimális: byte -> 2 digit, word -> 4 digit.
---- Hex esetén a word küldése azonos a két byte küldésével.
Hogyan tudod megállapítani hibás vétel után hol kezdődik a következő távirat?
pl:
- Parancskód nagybetü, paraméter kisbetü.
Hogyan tudod megállapítani, ki küldte a táviratot?
- Master által küldött táviratban a 7. bit mindig 0, slave által küldött táviratban a 7. bit mindig 1.
Honnan tudod megállapítani, hogy egy távirat sérült?
- Ellenőrző összeg képzése adás oldalon, ellenőrzése vételi oldalon.
A hozzászólás módosítva: Jún 13, 2019
(#) lastewer válasza Hp41C hozzászólására (») Jún 13, 2019 /
 
Nem ez volt a kérdésem , de köszi.
(#) pipi válasza lastewer hozzászólására (») Jún 13, 2019 /
 
sprintf tökéletes neked
(#) lastewer válasza pipi hozzászólására (») Jún 13, 2019 /
 
Köszi
(#) suszitibi válasza eSDi hozzászólására (») Jún 14, 2019 /
 
Köszönöm, én is így látom, de valamiért, mégsem működik. A villogás OK, de mégsem mutat értékelhető midi adatot.
Következő: »»   1092 / 1210
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem