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   1131 / 1203
(#) Bakman válasza Georgee hozzászólására (») Szept 11, 2020 /
 
A kettő között annyi a különbség, hogy az LF jelzésű alacsonyabb tápfeszültségről is üzemel. Más kontrollereknél nem feltétlen van így, az újabb PIC-eknél az LF verzójúak 3.3 V-os rendszerhez illeszkednek, nem bírják az 5 V-ot, esetleg van néhány lábuk, amelyek tolerálják az 5 V-ot.

Adatlapot kell megnézni minden esetben.
(#) Georgee válasza Bakman hozzászólására (») Szept 11, 2020 /
 
Köszönöm, akkor így felejtős a csere.
(#) Bakman válasza Georgee hozzászólására (») Szept 11, 2020 / 1
 
18F458 helyett használhatsz 18LF458-at.
(#) Pali79 válasza Georgee hozzászólására (») Szept 11, 2020 / 1
 
Ennél a típusnál annyit jelent az "L" jelzés, hogy 2V-ról is üzemel, de max feszültség ennél is 5,5V. Tehát kicserélheted nyugodtan.
(#) Peet19 hozzászólása Szept 16, 2020 /
 
Sziasztok!
A VDDCORE/VCAP lábat hogy kell bekötni? Ha jól tudom akkor stabilizálja a tápfeszültséget? Hogy kell ezt engedélyezni, vagy tiltani, mert ezen a PIC-en nincs ENVREG láb. 18LF26K80
Nem értem, hogy most a VDD-re kell kötni, vagy csak egy 100nF kondival a földre?
Előre is köszönöm a segítséget!
(#) Tasznka válasza Peet19 hozzászólására (») Szept 16, 2020 /
 
(#) Peet19 válasza Tasznka hozzászólására (») Szept 16, 2020 /
 
Köszi.
(#) aroxol hozzászólása Szept 16, 2020 /
 
Sziasztok!

Szoftveres UART-ban kérnék segítséget. Még pedig hogy PIC18F26K22 pl.RC2-RC3 lábakra hogy lehetséges megoldani. Néztem az adatlapot, nem találtam benne. Feltúrtam a netet példáért, nem sok sikerrel.
A hozzászólás módosítva: Szept 16, 2020
(#) aroxol válasza aroxol hozzászólására (») Szept 16, 2020 /
 
Bocsánat lemaradt hogy assembly.
(#) sonajkniz válasza aroxol hozzászólására (») Szept 16, 2020 /
 
Mit szeretnél tudni? A protokolt, vagy az átvitelre szeretnél megoldást?
Esetleg egy konkrét eszközhöz kapcsolódna?
A hozzászólás módosítva: Szept 16, 2020
(#) aroxol válasza sonajkniz hozzászólására (») Szept 16, 2020 /
 
Két PIC között kellene adatokat átküldenem.
(#) sonajkniz válasza aroxol hozzászólására (») Szept 16, 2020 /
 
Akkor szabadon választott a kommunikáció mikéntje. Van mester-szolga viszony? Milyen távolságra? Tudok benne segíteni, de akkor folytassuk privátban!
(#) kissi válasza aroxol hozzászólására (») Szept 16, 2020 /
 
Szia!

Ott csak szoftveres USART-ot tudsz használni, jobb lenne ( ha van lehetőség!) az RC6, RC7 vagy az RB6, RB7 !
(#) aroxol válasza kissi hozzászólására (») Szept 16, 2020 /
 
Szia!

Igen tudom, de azok már foglaltak.
(#) kissi válasza aroxol hozzászólására (») Szept 16, 2020 /
 
Akkor nehezebb dolgod lesz ! Láb/bit figyelés, időmérés, shiftelés megoldása, úgy, hogy közben ne maradj le másról ( persze, ha nincs közben más...)!
(#) Bakman válasza kissi hozzászólására (») Szept 16, 2020 /
 
Ráadásul azokra a lábakra INT/IOC megszakítást sem lehet beállítani. Szép feladat.
(#) pipi válasza aroxol hozzászólására (») Szept 17, 2020 /
 
Hali!
Timer interruptban figyelheted a szoftveres RX lábat, ha meg van küldendő adat, birizgálhatod a TX lábat. Ne számíts nagy elérhető baudrate-ra...
A két pic között az uarton kívül az i2c vagy spi kommunikáció nem jó?
(#) lastewer hozzászólása Szept 17, 2020 /
 
Sziasztok,

Tudnátok segíteni nekem egy kicsit? Az a helyzet, hogy ha ez a 2 blokk benne van:

  1. // Kommunikációs hiba ellenőrzés -> overrun szoftveres törlés lehetséges
  2.                if (RCSTA.OERR == 1)
  3.                {
  4.                        RCSTA.CREN = 0; // folyamatos adatfogadás letiltva
  5.                        UART1_send_string("Overrun hiba."); // Elküldjük a hiba okát
  6.                        //UART1_Write(13); // Kocsivissza
  7.                        RCSTA.CREN = 1; // folyamatos adatfogadás engedélyezve
  8.                }
  9.                /* Kommunikációs hiba ellenőrzés -> Framing error a hiba törlése
  10.                a RCREG regiszter kiolvasásval lehetséges*/
  11.                if (RCSTA.FERR == 1)
  12.                {
  13.                        while (RCSTA.FERR == 1)
  14.                        {
  15.                                puffer[0]=RCREG;
  16.                                puffer[0]='0';
  17.                        }
  18.                        UART1_send_string("Frame hiba."); // Elküldjük a hiba okát
  19.                        //UART1_Write(13); // Kocsivissza
  20.                }


Akkor nem villogtatja az RB 7 - es lábon levő ledet. Ha kiveszem, akkor minden rendben van.

De viszont kellene ez a 2 blokk is bele a hibakezelés miatt az UART használatához.

  1. // Fő program
  2. void main() {
  3.  
  4.          cts = 0;       // Számláló kezdő értéke 0
  5.          initTimer();
  6.         // CMCON = 0x07;
  7.         // CCP1CON = 0;
  8.          TRISA = 0;       // Az összes RA láb kimenet
  9.          TRISB = 0;       // AZ összes RB láb kinenet
  10.          PORTB.F6 = 1;    // power led alap világít
  11.          PORTA.F1 = 0;    // relé alap nics meghúzva
  12.          
  13.          UART1_Init(9600); // Inicializáljuk a hardveres UART-ot
  14.          Delay_ms(100);    // Várunk 100 ms-t a port beállítására
  15.          head = 0;         // Biztos ami biztos
  16.  
  17.          Del_buffer();     // Buffer törlést csinálunk
  18.  
  19.          UART1_send_string(dev_id); // Elküldjük az inicializálás befejezését
  20.         // UART1_Write(13); // Kocsivissza
  21.         // UART1_Write(10); // Soremelés
  22.        
  23.        
  24.          while (1) // Innen fut a pic kód folyamatosan -> végtelen ciklus
  25.          {
  26.             if (cts >= 5000)    // 10000 * 0.1 ms = 1 mp
  27.                 {
  28.                                       PORTB.F7 = ~PORTB.F7;   // B lábak villogtatása
  29.                                       cts = 0;                // Számláló reset
  30.                 }
  31.          
  32.          
  33.                 // Kommunikációs hiba ellenőrzés -> overrun szoftveres törlés lehetséges
  34.                if (RCSTA.OERR == 1)
  35.                {
  36.                        RCSTA.CREN = 0; // folyamatos adatfogadás letiltva
  37.                        UART1_send_string("Overrun hiba."); // Elküldjük a hiba okát
  38.                        //UART1_Write(13); // Kocsivissza
  39.                        RCSTA.CREN = 1; // folyamatos adatfogadás engedélyezve
  40.                }
  41.                /* Kommunikációs hiba ellenőrzés -> Framing error a hiba törlése
  42.                a RCREG regiszter kiolvasásval lehetséges*/
  43.                if (RCSTA.FERR == 1)
  44.                {
  45.                        while (RCSTA.FERR == 1)
  46.                        {
  47.                                puffer[0]=RCREG;
  48.                                puffer[0]='0';
  49.                        }
  50.                        UART1_send_string("Frame hiba."); // Elküldjük a hiba okát
  51.                        //UART1_Write(13); // Kocsivissza
  52.                }
  53.  
  54.                if (UART1_Data_Ready() == 1) /* Van kiolvasható karakter az UART-ban*/
  55.                {
  56.                        puffer[head]= UART1_Read(); /* Beolvassuk a beérkzett byte-ot a buffer
  57.                        aktuális helyére*/
  58.                        if (puffer[0]=='o')
  59.                        {
  60.                                head++; /* Csak akkor növeljük a buffer mutatót 1-el,
  61.                                ha az első beérkező karakter az o betű */
  62.                        }
  63.                        if (head==5) // Adat összehasonlítás
  64.                        {
  65.                                head = 0;
  66.                               // Ha van bekapcsoló parancs
  67.                                if (Check_data(on_cm))
  68.                                {
  69.                                        UART1_send_string(on_cmt);
  70.                                        //UART1_Write(13);
  71.                                        PORTA.F1 = 1;
  72.                                        delay_ms(1000);
  73.                                        PORTA.F1 = 0;
  74.                                }
  75.                                Del_buffer(); // Buffer törlést csinálunk
  76.                        } // Adat összehasonlítás if vége
  77.  
  78.                }
(#) Hp41C válasza lastewer hozzászólására (») Szept 17, 2020 / 1
 
A cts növelése hiányzik. Szegény a kód javítás áldozata lett.
Az Rx láb fel van húzva a Vdd -re?
(#) lastewer válasza Hp41C hozzászólására (») Szept 17, 2020 /
 
Szia,

a cts növelése fentebb van a kódban, csak elég nagy és nem akartam felesleges dolgokat bemásolni, nehogy átláthatatlan legyen.

Nincs felhúzva. Csak egy az egyben rákötöm a VDD-re és kész?

Köszi.
(#) Hp41C válasza lastewer hozzászólására (») Szept 17, 2020 / 1
 
Az Rx láb alacsony szintje indítja a vevőt. La lebeg, rengeteg hibásan vett karakter lesz. Ellenállással kellene a Vdd -re húzni.
(#) lastewer válasza Hp41C hozzászólására (») Szept 17, 2020 /
 
Működik. Köszönöm szépen a segítséged.
(#) giskard hozzászólása Szept 22, 2020 /
 
Sziasztok
PIC18F47Q43-at mivel lehet programozni ?
(nem szeretném ha csak pickit4-el lehetne)
(#) usane válasza giskard hozzászólására (») Szept 22, 2020 /
 
A nálam feltelepített MPlab szerint igen (5.3). Szereted vagy sem
Sőt még a PICkit4 sem teljesen támogatja, mert sárgának jelöli.
(#) lastewer hozzászólása Szept 24, 2020 /
 
Sziasztok!

Valamiért, ahogy HIGH lesz az RB4, onnantól kezdve folyamatosan küldi a UART1_send_string(on_cm); - t. Olyan mintha figyelmen kívűl hagyná a PORTB.F4 = 0; - t.

Mit nézek be?


Azt szeretném, ha az RB4 láb HIGH, akkor küldje el a UART1_send_string(on_cm); - t és állítsa vissza az RB4 láb állapotát LOW-ra.



  1. // Fő program
  2. void main() {
  3.  
  4.          cts = 0;               // Számláló kezdő értéke 0
  5.          initTimer();
  6.  
  7.         // CCP1CON = 0;          // Capt/Comp/PWM kikapcsolva
  8.          
  9.  
  10.          TRISA = 0;            // Minden A láb kimenet
  11.          TRISB = 0;
  12.          Delay_ms(100);
  13.          TRISB.F1 = 1;         // RB1 (RX) bemenet
  14.          PORTB.F6 = 1;    // Statusz jelző led bekapcsol
  15.          
  16.          TRISB.F4 = 1;         // RB4 bemenet
  17.          PORTB.F4 = 0;       // RB4 low-ra
  18.  
  19.          UART1_Init(4800); // Inicializáljuk a hardveres UART-ot 4800 baud rate-re
  20.          Delay_ms(100); // Várunk 100 ms-t a port beállítására
  21.          head = 0; // Biztos ami biztos
  22.  
  23.  
  24.  
  25.          UART1_send_string(dev_id); // Elküldjük az inicializálás befejezését
  26.  
  27.          while (1) // Innen fut a pic kód folyamatosan -> végtelen ciklus
  28.          {
  29.             if (cts >= 5000)    // 10000 * 0.1 ms = 1 mp
  30.             {
  31.                                   PORTB.F7 = ~PORTB.F7;   // B lábak villogtatása
  32.                                   cts = 0;                // Számláló reset
  33.             }
  34.            if(PORTB.F4 == 1)
  35.            {
  36.                   UART1_send_string(on_cm);
  37.                   Delay_ms(1000); // Várunk 100 ms-t a port beállítására
  38.                   PORTB.F4 = 0;
  39.  
  40.            }
  41.  
  42.          } // while adat fogadó-küldő ciklus vége
  43.  }
A hozzászólás módosítva: Szept 24, 2020
(#) Bakman válasza lastewer hozzászólására (») Szept 24, 2020 / 1
 
Ha az RB4 bemenet, mindegy, mit írsz a PORTB vagy LATB regiszterbe (38. sor). Ha valami magasan tartja az RB4-et, te kimenetre állítod és L szintre, bajok lehetnek, ha a forrás nincs korlátozva, erre azért figyelj.
(#) lastewer válasza Bakman hozzászólására (») Szept 24, 2020 /
 
Uh, köszi szépen. Akkor átállítom előbb kimenetre és úgy állítom be lowra.
(#) usane válasza lastewer hozzászólására (») Szept 24, 2020 /
 
Fordítva célszerűbb.
Egyébként is, mi a célja a bemenetre állításnak a 16. sorban ha utána írod és nem olvasod.
A hozzászólás módosítva: Szept 24, 2020
(#) lastewer válasza usane hozzászólására (») Szept 24, 2020 /
 
A 34. sorban olvasom, majd a 38.-ban írom.
(#) Bakman válasza lastewer hozzászólására (») Szept 24, 2020 /
 
Tulajdonképpen mi van az RB4-es lábon?
Következő: »»   1131 / 1203
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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