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   1139 / 1203
(#) kissi válasza glaci hozzászólására (») Nov 22, 2020 / 1
 
Szia!

Az analóg funkciót is le kell tiltani, az ANSELH-ról ne feledkezz meg !
(#) glaci válasza kissi hozzászólására (») Nov 23, 2020 /
 
Köszönöm szépen!
(#) slimcolt hozzászólása Nov 23, 2020 /
 
Sziasztok!

Egy PIC32MM-el szeretnék CRC-t generálni, egy soros adat integritásának ellenőrzésére.
Elég sokat olvasgattam a témában, de sajnos még mindig vannak sötét foltok...
Ezt a kódot használom CRC-8 generálására, ami működik is jól.
  1. #define CRC_POLY 0x94
  2. uint8_t genCRC( uint8_t *data, size_t length)
  3. {
  4.     uint8_t crc = 0x00;
  5.     size_t i, j;
  6.     for (i = 0; i < length; i++)
  7.     {
  8.         crc ^= data[i];
  9.         for (j = 0; j < 8; j++)
  10.         {
  11.             if ((crc & 0x80) != 0)
  12.             {
  13.                 crc = (uint8_t)((crc << 1) ^ CRC_POLY);
  14.             }
  15.             else
  16.             {
  17.                 crc <<= 1;
  18.             }
  19.         }
  20.     }
  21.     return crc;
  22. }


Olvastam több helyen, hogy ettől a bit-ről bitre számolós módszertől a kereső táblás módszer 10x gyorsabb. Sajnos ezt a táblás módszert nem igazán értem. Nagy vonalakban valaki eltudná nekem ezt magyarázni hogyan is működik?
A hozzászólás módosítva: Nov 23, 2020
(#) Bakman válasza slimcolt hozzászólására (») Nov 23, 2020 / 1
 
Lásd példa (DS18B20-hoz is használható). Bejövő bájtok B0 - B7.
  1. rom char* CRCTABLE = {0,94,188,226,97,63,221,131,194,156,126,32,163,253,31,65,157,195,33,127,252,162,64,30,95,1,227,189,62,96,130,220,35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98,190,224,2,92,223,129,99,61,124,34,192,158,29,67,161,255,70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,7,219,133,103,57,186,228,6,88,25,71,165,251,120,38,196,154,101,59,217,135,4,90,184,230,167,249,27,69,198,152,122,36,248,166,68,26,153,199,37,123,58,100,134,216,91,5,231,185,140,210,48,110,237,179,81,15,78,16,242,172,47,113,147,205,17,79,173,243,112,46,204,146,211,141,111,49,178,236,14,80,175,241,19,77,206,144,114,44,109,51,209,143,12,82,176,238,50,108,142,208,83,13,239,177,240,174,76,18,145,207,45,115,202,148,118,40,171,245,23,73,8,86,180,234,105,55,213,139,87,9,235,181,54,104,138,212,149,203,41,119,244,170,72,22,233,183,85,11,136,214,52,106,43,117,151,201,74,20,246,168,116,42,200,150,21,75,169,247,182,232,10,84,215,137,107,53};
  2.  
  3. A crc számítása:
  4.  
  5. CRC=CRCTABLE[B0];
  6. CRC=CRCTABLE[B1 ^ CRC];
  7. CRC=CRCTABLE[B2 ^ CRC];
  8. CRC=CRCTABLE[B3 ^ CRC];
  9. CRC=CRCTABLE[B4 ^ CRC];
  10. CRC=CRCTABLE[B5 ^ CRC];
  11. CRC=CRCTABLE[B6 ^ CRC];
  12. CRC=CRCTABLE[B7 ^ CRC];
(#) slimcolt válasza Bakman hozzászólására (») Nov 23, 2020 /
 
Köszi, és a táblát hogy generáltad?
A tábla végül is a CRC polinomból generálható 256 változat?
(#) Bakman válasza slimcolt hozzászólására (») Nov 23, 2020 /
 
A táblázatot találtam valahol. Nem ellenőriztem, de minden bizonnyal onnan származik. Ezzel generálsz magadnak egy CRC bájtot, a vevő oldalon szintén ezzel ellenőrzöd, nagy baj nem lehet.
(#) slimcolt válasza Bakman hozzászólására (») Nov 23, 2020 /
 
Rendben. Viszont pont arra lennék kíváncsi, hogyan tudnék generálni egy ilyen táblát egy polinomból a PIC-ben.
(#) Hp41C válasza slimcolt hozzászólására (») Nov 23, 2020 / 1
 
(#) Bakman válasza slimcolt hozzászólására (») Nov 23, 2020 / 1
 
(#) slimcolt hozzászólása Nov 23, 2020 /
 
Köszi srácok!
Sikerült összehozni, közben meg is értettem. Sok byte ellenőrzésére ez sokkal gyorsabb. Bemásolom, hátha valakinek jól jön, azért nézzétek át.
Ez most működik:

  1. void CREATE_CRC_TABLE()
  2. {
  3.     size_t i , j , crc;
  4.     for (i = 0; i < 256; i++)
  5.     {
  6.         crc = i;
  7.         for (j = 0; j < 8; j++)
  8.         {
  9.             if ((crc & 0x80) != 0)
  10.             {
  11.                 crc = ((crc << 1) ^ CRC_POLY);
  12.             }
  13.             else
  14.             {
  15.                 crc <<= 1;
  16.             }
  17.         }
  18.         CRC_TABLE[i] = crc;
  19.     }
  20. }
  21.  
  22. uint8_t genCRC_fast(uint8_t *data, size_t length)
  23. {
  24.     uint8_t crc = 0;
  25.     size_t i;
  26.     for(i = 0; i < length; i++)
  27.     {
  28.         crc = CRC_TABLE[data[i] ^ crc];
  29.     }
  30.     return crc;
  31. }


Egyébként a polinomot mi alapján választják ki?
(#) cross51 válasza slimcolt hozzászólására (») Nov 23, 2020 /
 
MM-ben nincs HW CRC?
A polinom a "trukk" az egeszben, de ezt mar kitalatak helyettunk melyik polinomok a legjobbak de, ajanlom ben eater crc-s videoit o beszel a polinomokrol is.
(#) Hp41C válasza cross51 hozzászólására (») Nov 24, 2020 / 1
 
A CRC -val fel nem derített hiba aránya a hossztól függ: 1 / 2^n. Ez csak akkor teljesül, ha a polinom primitív polinom, azaz nem írható fel két vagy több polinom szorzataként.
(#) slimcolt válasza cross51 hozzászólására (») Nov 24, 2020 /
 
Szerintem maradok a CRC8-CCITT -nél, ennek a polinomja 0x07.
Egyébként az MM-ben van CRC modul a DMA vezérlőhöz. Viszont DMA-t jelenleg nem használok. Ideje lenne már megtanulnom azt is...
(#) glaci hozzászólása Nov 25, 2020 /
 
Sziasztok!
PIC16F887-ben nem tudok az RB1 portról megszakítást generálni. Mellékelem a megszakítás kódját és a regiszterek beállítását.

  1. void InitTimer0(){
  2.   OPTION_REG         = 0x82;
  3.   TMR0                 = 6;
  4.   INTCON         = 0xA0;
  5. }
  6.  
  7. Szeretném, ha segítenétek.
  8.  
  9. Szeretném, ha segítenétek!
  10. void Interrupt()
  11. {
  12.   if (TMR0IF_bit)
  13.   {
  14.     TMR0IF_bit         = 0;
  15.     TMR0                 = 6;
  16.     //Enter your code here
  17.     szamlal++;  figyel++;
  18.     if (figyel == 100)
  19.        {
  20.           figyel=0;
  21.           if (PORTA.RA1==1 && PORTA.RA2==1)   PORTD.RD0=0;
  22.           if (PORTA.RA1==0 && PORTA.RA2==0)   PORTD.RD0=1;
  23.        }
  24.     if(szamlal==500)      //500*2ms=1000ms=1sec  1 másodperc
  25.       {
  26.           szamlal=0; sek++;  PORTA.RA0=~PORTA.RA0;   //minden rendben
  27.       }
  28.     if(sek==60)
  29.        {
  30.           sek=0;
  31.        }
  32.     //Enter your code here
  33.    
  34.   }
  35.  
  36.  
  37.     if(INTCON.INTF)     //stop
  38.      {
  39.          allapot.F0=0;
  40.  
  41.          INTCON.INTF=0;
  42.      }
  43.      if(INTCON.RBIE)     //start
  44.      {
  45.         if(!PORTB.RB1)
  46.         {
  47.           //allapot.F6=1;
  48.          // PORTE.RE2=1;
  49.           PORTE.RE2=~PORTE.RE2;
  50.         }
  51.         INTCON.RBIF=0;
  52.      }
  53.  
  54. }


  1. //változó beállítások
  2.   ANSEL  = 0;                        // Configure AN pins as digital I/O
  3.   ANSELH = 0;                        //nincs analóg port kiválasztva
  4.   C1ON_bit = 0;                      // Disable comparators
  5.   C2ON_bit = 0;                      //nincsen komparátor bemenet
  6.   INTCON.GIE = 1;               //intcon regiszter beállításai
  7.   INTCON.PEIE=1;
  8.   INTCON.INTE=1;
  9.   INTCON.RBIE=1;
  10.   INTCON.RBIF=0;
  11. //  OPTION_REG.INTEDG=0;
  12.   IOCB.IOCB1=1;                       //az RB2 port sto gombnak kiválasztva
  13.    InitTimer0();
  14.    //megszakítások
  15.    szamlal=0; sek=0;  perc=0;  ora=0;
  16.    TRISA=0b00111110;                //1,2 portok vízszint bemenetek
  17.    TRISB=1;                //csapok záró-nyitó  kimenetei nyomó gombok bemenetei
  18.    TRISC=0b00001100;                    //kimenetek
  19.    TRISD=0b00000000;
  20.    TRISE=0;
  21.    TRISE.RE2=0;
A hozzászólás módosítva: Nov 25, 2020
(#) Hp41C válasza glaci hozzászólására (») Nov 25, 2020 /
 
Első ránézésre:
- Az INTCON GIE bitjét csak akkor állítsd be, ha már minden elő van készítve: TRIS, ANSEL regiszterek, komparátor, stb.
- A PORTB megszakítás beérkezése után a PORTB regiszter kiolvasásával tárolódik az űj minta, amihez képest figyeli a következőkben a változás. Ez egyben meg is szünteti a PORTB megszakítás kérést.
(#) glaci válasza Hp41C hozzászólására (») Nov 25, 2020 /
 
Szia!
Úgy néz ki, hogyha az INTCON bitek beállítására, az általad felsorolt regiszterek beállítása után kerül sor, van megszakítás, az RB1 porton levő gomb megnyomása után.
Köszönöm szépen!
(#) Peet19 hozzászólása Nov 25, 2020 /
 
Sziasztok!

A TMR4 és TMR6-ot ugyanúgy külön-külön lehet használni mint a TMR2-t? Csak azért kérdem mert mind a háromnak van külön periódusszámlálója de úgy hallottam hogy ezeket a 8bites számlálókat együtt kell vagy lehet használni. Össze lehet kapcsolni őket egy 16bites számlálóként. Nem akarom összekapcsolni őket, csak kérdem hogy teljesen külön más más beállításokkal lehet-e használni őket.

Előre is köszi a segítséget!
(#) Bakman válasza Peet19 hozzászólására (») Nov 25, 2020 /
 
Alapesetben önálló modulok, külön-külön életet élnek. Általában nem pontosan egyformák, pl. a 18F26K22-ben csak a TMR2 tudja órajellel ellátni az MSSP modult.

Az összekapcsolás valószínűleg csak lehetőség, már amelyikben ez a fícsör benne van.
(#) Peet19 válasza Bakman hozzászólására (») Nov 25, 2020 /
 
Értem, köszi. Nálam az adatlapon csak TxCON és TxTMR ..stb van. Nézegettem a regisztereket és vannak T0TMR -től T6TMR -ig, de csak a TMR2, 4, 6 -nél van PR. Ez is T2PR, T4PR, T6PR -ként van jelölve, ami tök jó, csak nem tudtam hogy külön is lehet őket használni. A periódusidő számlálós időzítők szerintem sokkal jobbak.
(#) Bakman válasza Peet19 hozzászólására (») Nov 25, 2020 /
 
Azért van az adatlapon TxCON, mert így egyszerűbb leírni, olvasni, mintha T2CON, T4CON és T6CON-t írnának mindenhova, vagy háromszor leírnának mindent a három időzítőhöz, miközben a tartalom egyezik. Erre viszont van utalás az adatlapban.
(#) Peet19 válasza Bakman hozzászólására (») Nov 25, 2020 /
 
Akkor jól gondoltam, köszi. Ezt még nem találtam meg de rákeresek az adatlapon. Csak az tűnt fel hogy a regiszterekben ott vannak de az adatlapon meg nem láttam őket.
(#) Peet19 válasza Bakman hozzászólására (») Nov 25, 2020 /
 
A 18F27K40 most tényleg túl van egy kicsit bonyolítva, vagy csak én látom annak más PIC-ekhez képest mint pl. a 18F26K80.
A hozzászólás módosítva: Nov 25, 2020
(#) Bakman válasza Peet19 hozzászólására (») Nov 25, 2020 /
 
Már láttam, új stílusú adatlap, szerintem borzasztó. Az életben nem fogom megérteni hogy ami jól működik és kielégíti az igényeket, miért kell piszkálni.
(#) Peet19 válasza Bakman hozzászólására (») Nov 25, 2020 /
 
Akkor jó, köszi. Azt hittem hogy csak nekem ilyen furcsa.
Szerintem már túl sokat tud
(#) Hp41C válasza Peet19 hozzászólására (») Nov 26, 2020 /
 
- A timer 2, 4, 6 stb. modult külön lehet használni, egyedi beállításokkal is.
- Azokon a típusokon, amik rendelkeznek konfigurálható logikai cellákkal (CLC), a timer -ek kimenete felhasználható a másik timer órajelének is. Ld 18F2xQ43
(#) Peet19 válasza Hp41C hozzászólására (») Nov 26, 2020 /
 
Értem, köszi. Épp most nézegetek egy 18F27Q43-ast. Ez talán egy kicsit egyszerűbb és szimpatikusabb is mint a 18F27K40-es.
(#) Peet19 hozzászólása Nov 27, 2020 /
 
Sziasztok!
Mplabx -ben ha nincs olyan PIC ami éppen kellene a projekt létrehozásánál, akkor van valami lehetőség valahogy beintegrálni valahonnan?
Előre is köszi a segítséget!
(#) pipi válasza Peet19 hozzászólására (») Nov 28, 2020 /
 
Hali!
Az aktuális MPLABX van feltelepítve, vagy régebbi?
Esetleg választhatsz ugyanabból a családból nagyobb testvért regiszter szinten elképzelhető hogy felülről kompatibilis (általában amik egy adatlapban vannak tárgyalva).
(#) Peet19 válasza pipi hozzászólására (») Nov 28, 2020 /
 
Felraktam egy régebbit mert az újjal valami gond volt. Eddig az MPLABX v5.40 volt de kicseréltem a v3.00 -ra.
Itt meg nincs semmiilyen Q43 -as sorozat, de még 18F27K40 sincs.
(#) gyoran válasza Peet19 hozzászólására (») Nov 28, 2020 /
 
Szia
Van már v5.45, ami kiküszöbölte az 5.40 hibáit - legalábbis MAC-en. Q43-as persze van benne.
Következő: »»   1139 / 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