Cuprins:

Cititor RFID AVR / Arduino cu cod UART în C: 4 pași
Cititor RFID AVR / Arduino cu cod UART în C: 4 pași

Video: Cititor RFID AVR / Arduino cu cod UART în C: 4 pași

Video: Cititor RFID AVR / Arduino cu cod UART în C: 4 pași
Video: №24-Подключение RFID модуля RC522 к Arduino UNO. [RUS] 2024, Noiembrie
Anonim
Cititor RFID AVR / Arduino cu cod UART în C
Cititor RFID AVR / Arduino cu cod UART în C

RFID este nebunia, găsită peste tot - de la sistemele de inventar la sistemele de identificare a insignelor. Dacă ați fost vreodată la un magazin universal și ați trecut prin acele lucruri cu aspect de detector de metale la punctele de intrare / ieșire, atunci ați văzut RFID. Există mai multe locuri pentru a găsi informații bune despre configurarea RFID, iar acest lucru instructiv se concentrează pe instalarea cititorului Parallax RFID (Serial TTL) pe un AVR, cu accent pe codul C necesar pentru citirea intrării seriale. Codul este în C și nu folosește nicio bibliotecă externă. De fapt, vorbește 2400 baud direct fără utilizarea unui UART, sincronizându-se la viteza baud a cititorului RFID și citind pinul digital la care este conectat. Excitat? Și eu.

Pasul 1: Obțineți bunurile

Obțineți mărfurile
Obțineți mărfurile

Veți avea nevoie de următoarea listă de piese:

  • Cititor RFID (Parallax # 28140 39,99 USD)
  • Etichetă RFID (Parallax # 32397 $ 0.99)
  • Clona AVR sau Arduino (dacă utilizați un AVR stoc, veți avea nevoie și de un condensator max232, 5 x 1uF și un conector DE9)
  • Pană de sudură fără sudură

Opțional

  • Antet cu 4 poziții
  • Sârmă

(și max232 etc. pentru comunicarea informațiilor despre etichetă) De asemenea, puteți conecta ecranul LCD preferat în loc să trimiteți date de etichetă prin RS232.

Pasul 2: Conectați piesele

Conectați piesele
Conectați piesele
Conectați piesele
Conectați piesele
Conectați piesele
Conectați piesele

Partea hardware a lucrurilor este destul de ușoară. În loc să îmi introduc cititorul RFID direct în panoul meu de calcul, am ales să fac un cablu rapid pentru a putea muta cititorul RFID puțin mai bine. Pentru asta, tocmai am tăiat 4 poziții dintr-o bandă de antet femelă pe care o întinsesem și am lipit pe trei fire. Banda electrică a completat conectorul ghetoului. Cititorul RFID are 4 conexiuni:

  • Vcc
  • PERMITE
  • OUT
  • Gnd

După cum probabil ați ghicit, conectați Vcc la + 5V și Gnd la masă. Deoarece cititorul RFID consumă atât de multă energie, puteți bate pinul ENABLE pentru a-l opri și porni la diferite intervale. Pur și simplu am ales să-l mențin. Deoarece este inversat, îl trageți LOW pentru al activa. Alternativ, îl puteți conecta la masă. L-am conectat la PIND3 pentru a-mi oferi opțiuni de activare / dezactivare dacă am decis. Pinul OUT este locul în care cititorul își trimite datele seriale după ce citește o etichetă. L-am conectat la PIND2. Notă, în Universul Parallax, roșu înseamnă a merge. Adică, un LED verde înseamnă că unitatea este inactivă și inactivă, în timp ce un LED roșu înseamnă că unitatea este activă. * ridică din umeri * Du-te la figură.

Pasul 3: Scrieți codul

Scrieți Codul
Scrieți Codul

Pentru a citi datele din cititorul RFID, trebuie să știți când a fost trimisă o etichetă, scoateți datele din portul serial, apoi trimiteți-le undeva.

Format de date RFID Reader

Cititorul RFID Parallax trimite date la un ritm glacial fix de 2400 baud. O etichetă RFID are 10 octeți. Pentru a permite detectarea / corectarea erorilor, deoarece cititorul ar putea fi deconectat de zgomotul aleatoriu, RFID-ul de 10 octeți este delimitat de o sentinelă de pornire și oprire. Sentinela de pornire este alimentarea liniei (0x0A), iar sentinela de oprire este returul transportului (0x0D). Arată așa:

[Start Sentinel | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 | Byte 9 | Byte 10 | Stop Sentinel]Acestea sunt cele trei etape principale.

Aflați când a fost trimisă o etichetă

Am folosit un Pin Change Interrupt pe AVR care notifică firmware-ul că s-a produs o modificare pe un pin monitorizat. Configurarea AVR pentru acest lucru este ușoară și necesită setarea semnalizatorului, indicarea MCU-ului care pin doriți să monitorizați și setarea bitului de întrerupere global. Configurați PCINT

BSET (PCICR, PCIE2); // registru control control întrerupere pin pcie2 BSET (PCMSK2, PCINT18); // activați întreruperea schimbării pinului pentru PCINT18 (PD2) BSET (SREG, 7); // Setați SREG I-bitScrieți rutina de servicii de întrerupere Doriți să vă mențineți ISR scurt, așa că în vectorul meu de întrerupere citesc întregul octet, bit cu bit, și stochez octetul într-o matrice globală de caractere volatile. Fac următoarele la fiecare întrerupere:

  • Verificați pentru a vă asigura că sunt pe un pic de început
  • Centrați sincronizarea pe impulsul mediu la 2400 baud (viteza cititorului RFID)
  • Omiteți bitul de început și faceți o pauză până la mijlocul bitului următor
  • Citiți fiecare bit într-un număr întreg nesemnat
  • Când am 8 biți, puneți octetul într-o matrice de caractere
  • Când am colectat 12 octeți, anunțați MCU că eticheta a fost citită pentru detectarea erorilor.

Am modificat codul SoftSerial de la Mikal Hart, care a modificat codul de la David Mellis pentru întârzierile determinate experimental în rutinele seriale.

Analizați ieșirea RS232

Rutina PCINT conține codul pentru citirea ieșirii RS232 din cititorul RFID. Când am obținut 12 octeți (RFID de 10 octeți plus sentinele) am setat bDataReady la 1 și las bucla principală să proceseze datele și să le afișeze.

// acesta este instrumentul de gestionare a întreruperii ISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // Bitul de pornire este redus; uint8_t bit = 0; TunedDelay (CENTER_DELAY); // Centrează pe bitul de start pentru (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // săriți puțin, frate … dacă (BCHK (PIND, RFID_IN)) BSET (bit, x); altfel BCLR (bit, x); } TunedDelay (INTRABIT_DELAY); // skip stop bit RFID_tag [rxIdx] = bit; ++ rxIdx; if (rxIdx == 12) bDataReady = 1;}

Afișați eticheta dvs

În main (), în timpul buclei pentru (pentru totdeauna), verific dacă bDataReady a fost setat, semnalând că întreaga structură RFID a fost trimisă. Verific apoi dacă este o etichetă validă (adică caracterele de pornire și oprire sunt 0x0A și respectiv 0x0D) și, dacă da, îi trimit conexiunea RS232.

for (;;) {if (bDataReady) {#ifdef _DEBUG_ USART_tx_S ("Start byte:"); USART_tx_S (itoa (RFID_tag [0], & ibuff [0], 16)); ibuff [0] = 0; ibuff [1] = 0; USART_tx_S ("\ nStop octet:"); USART_tx_S (itoa (RFID_tag [11], & ibuff [0], 16)); # endif if (ValidTag ()) {USART_tx_S ("\ nRFID Tag:"); pentru (uint8_t x = 1; x <11; x ++) {USART_tx_S (itoa (RFID_tag [x], ibuff, 16)); if (x! = 10) USART_tx (& apos: & apos); } USART_tx_S ("\ n"); } rxIdx = 0; bDataReady = 0; }}

Pasul 4: Cod și Adio

Această pagină conține un fișier zip cu codul relevant. A fost scris în AVR Studio 4.16. Dacă utilizați blocnotesul programatorului, eclipsa sau vi (sau altceva), va trebui să copiați un Makefile de încredere în director și să adăugați aceste fișiere la linia sursă. MCU de 16 MHz. Dacă rulați la o frecvență de ceas diferită, va trebui să determinați experimental întârzierile reglate pentru a se concentra pe impulsurile ratei de transmisie. Sper că acest lucru instructabil v-a ajutat într-un fel. Dacă aveți sugestii despre cum ar putea fi îmbunătățit, nu ezitați să mă anunțați!

Recomandat: