Satura rādītājs:

AVR/Arduino RFID lasītājs ar UART kodu C: 4 soļi
AVR/Arduino RFID lasītājs ar UART kodu C: 4 soļi

Video: AVR/Arduino RFID lasītājs ar UART kodu C: 4 soļi

Video: AVR/Arduino RFID lasītājs ar UART kodu C: 4 soļi
Video: RFID Reader Interface with AVR ATmega32 2024, Novembris
Anonim
AVR/Arduino RFID lasītājs ar UART kodu C
AVR/Arduino RFID lasītājs ar UART kodu C

RFID ir trakums, kas sastopams visur - no inventāra sistēmām līdz emblēmu ID sistēmām. Ja esat kādreiz apmeklējis universālveikalu un staigājis pa šīm metāla detektora izskata lietām ieejas/izejas vietās, tad esat redzējis RFID. Ir vairākas vietas, kur var atrast labu informāciju par RFID iestatīšanu, un šī pamācība ir vērsta uz Parallax RFID lasītāja (Serial TTL) uzstādīšanu AVR, uzsvaru liekot uz C kodu, kas nepieciešams sērijveida ievades nolasīšanai. Kods ir C un neizmanto nekādas ārējās bibliotēkas. Faktiski tas runā 2400 bodu tieši, neizmantojot UART, sinhronizējoties ar RFID lasītāja bodu ātrumu un nolasot digitālo tapu, ar kuru tas ir savienots. Satraukti? ES arī.

1. darbība: iegādājieties preces

Iegūstiet preces
Iegūstiet preces

Jums būs nepieciešams šāds detaļu saraksts:

  • RFID lasītājs (Parallax #28140 $ 39,99)
  • RFID tags (Parallax #32397 0,99 ASV dolāri)
  • AVR vai Arduino klons (ja izmantojat rezerves AVR, jums būs nepieciešami arī max232, 5 x 1uF kondensatori un DE9 savienotājs)
  • Maizes dēlis bez lodēšanas

Neobligāti

  • 4 pozīciju galvene
  • Vads

(un max232 utt., lai sazinātos ar informāciju par tagu) Varat arī pievienot savu iecienītāko LCD ekrānu, nevis sūtīt tagu datus, izmantojot RS232.

2. darbība: pievienojiet detaļas

Savienojiet detaļas
Savienojiet detaļas
Savienojiet detaļas
Savienojiet detaļas
Savienojiet detaļas
Savienojiet detaļas

Lietas aparatūras puse ir diezgan vienkārša. Tā vietā, lai ievilktu RFID lasītāju tieši savā maizes dēļa panelī, es izvēlējos izveidot ātru kabeli, lai varētu mazliet labāk pārvietot RFID lasītāju. Šim nolūkam es vienkārši nogriezu 4 pozīcijas no sieviešu ligzdas galvenes sloksnes, kurā es gulēju un pielodēju pie trim vadiem. Elektriskā lente pabeidza geto savienotāju. RFID lasītājam ir 4 savienojumi:

  • Vcc
  • ENABLE
  • ĀRĀ
  • Gnd

Kā jūs droši vien uzminējāt, pievienojiet Vcc pie +5V un Gnd ar zemi. Tā kā RFID lasītājs patērē tik daudz enerģijas, varat ar dažādu intervālu izsist un ieslēgt taustiņu ENABLE, lai to izslēgtu un ieslēgtu. Es vienkārši izvēlējos to turpināt. Tā kā tas ir apgriezts, jūs to pavelkat LOW, lai to aktivizētu. Alternatīvi, jūs varat to savienot ar zemi. Es to savienoju ar PIND3, lai dotu man iespēju iespējot/atspējot, ja es nolemju. OUT tapa ir vieta, kur lasītājs nosūta sērijas datus pēc taga nolasīšanas. Es to savienoju ar PIND2. Piezīme. Parallax Universe sarkans nozīmē iet. Tas nozīmē, ka zaļa gaismas diode nozīmē, ka iekārta ir neaktīva un dīkstāvē, savukārt sarkana gaismas diode nozīmē, ka iekārta ir aktīva. * parausta plecus* Iet figūru.

3. solis: uzrakstiet kodu

Uzrakstiet kodu
Uzrakstiet kodu

Lai nolasītu datus no RFID lasītāja, jums jāzina, kad ir iesniegts tags, jāizvelk dati no seriālā porta un pēc tam jānosūta kaut kur.

RFID lasītāju datu formāts

Parallax RFID lasītājs nosūta datus ar fiksētu, 2400 baudu ledus tempu. RFID tags ir 10 baiti. Lai ļautu noteikt/labot kļūdas, jo lasītāju var izslēgt no nejaušiem trokšņiem, 10 baitu RFID ierobežo sākuma un beigu signāls. Sākuma kontrolsargs ir līnijas padeve (0x0A) un beigu kontrolieris ir ratiņu atgriešana (0x0D). Tas izskatās šādi:

[Sākt Sentinel | 1. baitu | 2. baitu | 3. baitu | 4. baitu | 5. baitu | 6. baitu | 7. Baitu | 8. Baitu | 9. Baitu | Apturēt Sentinel]Šie ir trīs galvenie soļi.

Ziniet, kad atzīme ir iesniegta

AVR izmantoju PIN maiņas pārtraukumu, kas paziņo programmaparatūrai, ka uzraudzītajā tapā ir notikušas izmaiņas. AVR konfigurēšana šim nolūkam ir vienkārša un prasa iestatīt karodziņu, norādīt MCU, kuru tapu vēlaties pārraudzīt, un iestatīt globālo pārtraukšanas bitu. Konfigurējiet PCINT

BSET (PCICR, PCIE2); // pin change interrupt control register pcie2 BSET (PCMSK2, PCINT18); // iespējot tapas maiņas pārtraukšanu PCINT18 (PD2) BSET (SREG, 7); // Iestatiet SREG I bituJūs vēlaties, lai jūsu ISR būtu īss, tāpēc savā pārtraukšanas vektorā es lasu visu baitu, pa bitam un uzglabāju baitu globālā nepastāvīgā rakstzīmju masīvā. Katrā pārtraukumā es rīkojos šādi:

  • Pārbaudiet, vai esmu iesācējs
  • Centrējiet laiku uz vidējo impulsu ar 2400 baudām (RFID lasītāja ātrums)
  • Izlaidiet sākuma bitu un pauzējiet līdz nākamā bita vidum
  • Katru bitu izlasiet veselam skaitlim, kas nav parakstīts
  • Kad man ir 8 biti, ievietojiet baitu rakstzīmju masīvā
  • Kad esmu savācis 12 baitus, dariet zināmu MCU, ka tags ir nolasīts kļūdu noteikšanai.

Es modificēju SoftSerial kodu no Mikala Hārta, kurš modificēja David Mellis kodu, lai eksperimentāli noteiktu kavēšanos sērijveida darbībās.

Parsēt RS232 izvadi

PCINT rutīnā ir kods RS232 izvades nolasīšanai no RFID lasītāja. Kad esmu ieguvis 12 baitus (10 baitu RFID plus kontrolsargi), es iestatīju bDataReady uz 1 un ļauju galvenajai cilpai apstrādāt datus un parādīt to.

// tas ir pārtraukšanas apstrādātājsISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // Sākuma bits atgriežas zemā atdevē; uint8_t bits = 0; TunedDelay (CENTER_DELAY); // Sākuma bita centrs (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // mazliet izlaist, brāl… if (BCHK (PIND, RFID_IN)) BSET (bit, x); cits BCLR (bits, x); } TunedDelay (INTRABIT_DELAY); // izlaist pieturas bitu RFID_tag [rxIdx] = bits; ++ rxIdx; ja (rxIdx == 12) bDataReady = 1;}

Parādiet savu tagu

Galvenajā () cikla laikā uz visiem laikiem es pārbaudu, vai ir iestatīts bDataReady, norādot, ka visa RFID struktūra ir nosūtīta. Pēc tam es pārbaudu, vai tas ir derīgs tags (ti, sākuma un beigu rakstzīmes ir attiecīgi 0x0A un 0x0D), un, ja jā, es to izsūtu no sava RS232 savienojuma.

par (;;) {if (bDataReady) {#ifdef _DEBUG_ USART_tx_S ("Sākuma baits:"); USART_tx_S (itoa (RFID_tag [0], & ibuff [0], 16)); ibufs [0] = 0; ibufs [1] = 0; USART_tx_S ("\ nPārtraukt baitu:"); USART_tx_S (itoa (RFID_tag [11], & ibuff [0], 16));#endif if (ValidTag ()) {USART_tx_S ("\ nRFID tags:"); par (uint8_t x = 1; x <11; x ++) {USART_tx_S (itoa (RFID_tag [x], ibuff, 16)); ja (x! = 10) USART_tx (& apos: & apos); } USART_tx_S ("\ n"); } rxIdx = 0; bDataReady = 0; }}

4. darbība: kods un atvadīšanās

Šajā lapā ir ZIP fails ar atbilstošo kodu. Tas tika rakstīts AVR studijā 4.16. Ja izmantojat programmētāja piezīmju grāmatiņu, aptumsumu vai vi (vai kaut ko citu), jums vajadzēs nokopēt uzticamu Makefile direktorijā un pievienot šos failus avota rindai. Ņemiet vērā arī to, ka sērijas lasīšanas sadaļas laiks ir balstīts uz 16MHz MCU. Ja jūs izmantojat citu pulksteņa frekvenci, jums būs eksperimentāli jānosaka noregulētie kavējumi, lai centrētu uz bodu ātruma impulsiem. Es ceru, ka šī pamācība jums kaut kādā veidā palīdzēja. Ja jums ir kādi ieteikumi, kā to uzlabot, nevilcinieties ziņot man!

Ieteicams: