Obsah:

Čítačka RFID AVR/Arduino s kódom UART v C: 4 kroky
Čítačka RFID AVR/Arduino s kódom UART v C: 4 kroky

Video: Čítačka RFID AVR/Arduino s kódom UART v C: 4 kroky

Video: Čítačka RFID AVR/Arduino s kódom UART v C: 4 kroky
Video: Точный ГЕНЕРАТОР на ARDUINO 1Гц - 8 MHz. DIY генератор с управлением от компьютера на Arduino NANO 2024, November
Anonim
Čítačka RFID AVR/Arduino s kódom UART v C
Čítačka RFID AVR/Arduino s kódom UART v C

RFID je šialenstvo, ktoré sa vyskytuje všade - od inventárnych systémov až po systémy ID odznakov. Ak ste niekedy boli v obchodnom dome a prechádzali ste sa po tých veciach, ktoré vyzerajú ako detektory kovov, v miestach vstupu/výstupu, potom ste videli RFID. Existuje niekoľko miest, kde nájdete dobré informácie o nastavení RFID, a tento návod sa zameriava na inštaláciu čítačky RFID Parallax (Serial TTL) na AVR s dôrazom na kód C potrebný na čítanie sériového vstupu. Kód je v jazyku C a nepoužíva žiadne externé knižnice. V skutočnosti hovorí 2400 baudov priamo bez použitia UART synchronizáciou s prenosovou rýchlosťou čítačky RFID a čítaním digitálneho pinu, ku ktorému je pripojený. Nadšení? Ja tiež.

Krok 1: Získajte tovar

Získajte tovar
Získajte tovar

Budete potrebovať nasledujúci zoznam dielov:

  • Čítačka RFID (paralaxa #28140, 39,99 dolárov)
  • RFID tag (Paralaxa #32397 0,99 USD)
  • Klon AVR alebo Arduino (ak používate štandardný AVR, budete potrebovať aj kondenzátory max232, 5 x 1uF a konektor DE9)
  • Nepájkovateľné nepájivé pole

Voliteľné

  • 4polohová hlavička
  • Drôt

(a max232 atď. pre komunikáciu informácií o značke) Môžete tiež pripojiť svoj obľúbený LCD displej namiesto odosielania údajov o značke cez RS232.

Krok 2: Pripojte diely

Pripojte diely
Pripojte diely
Pripojte diely
Pripojte diely
Pripojte diely
Pripojte diely

Hardvérová stránka veci je celkom jednoduchá. Namiesto toho, aby som svoju čítačku RFID vrhal priamo do dosky, rozhodol som sa vytvoriť rýchly kábel, aby som s čítačkou RFID mohol pohybovať o niečo lepšie. Za týmto účelom som len odrezal 4 polohy zo ženského kolíkového konektora, na ktorom som ležal a spájkoval som na tri drôty. Konektor geta doplnila elektrická páska. Čítačka RFID má 4 pripojenia:

  • Vcc
  • POVOLIŤ
  • VON
  • Gnd

Ako ste asi uhádli, pripojte Vcc k +5V a GND k zemi. Pretože čítačka RFID spotrebováva toľko energie, môžete v rôznych intervaloch buchnutím kolíka ENABLE vypnúť a zapnúť. Jednoducho som sa rozhodol nechať to tak. Pretože je obrátený, aktivujete ho potiahnutím LOW. Prípadne ho môžete pripojiť k zemi. Pripojil som ho k PIND3, aby mi poskytol možnosti zapnutia/vypnutia, ak som sa tak rozhodol. Konektor OUT je miesto, kde čítačka odosiela svoje sériové údaje po prečítaní značky. Pripojil som ho k PIND2. Všimnite si toho, v Parallax Universe, červená znamená ísť. To znamená, že zelená LED znamená, že jednotka je neaktívna a nečinná, zatiaľ čo červená LED znamená, že jednotka je aktívna. * pokrčiť ramenami* Choď na to.

Krok 3: Napíšte kód

Napíšte kód
Napíšte kód

Ak chcete čítať údaje z čítačky RFID, musíte vedieť, kedy bola odoslaná značka, vytiahnite údaje zo sériového portu a potom ich niekam odošlite.

Formát údajov čítačky RFID

Čítačka Parallax RFID odosiela údaje pevným, ľadovcovým tempom 2400 baudov. Značka RFID má 10 bajtov. Aby sa umožnila detekcia/korekcia chýb, pretože čítačku je možné vyradiť z náhodného šumu, 10-bajtový RFID je ohraničený štartovacím a stopovým indikátorom. Počiatočný indikátor je posun riadka (0x0A) a koncový indikátor je návrat vozíka (0x0D). Vyzerá to takto:

[Spustiť Sentinel | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 | Byte 9 | Byte 10 | Zastaviť Sentinel]Toto sú tri základné kroky.

Zistite, kedy bola značka odoslaná

Na AVR som použil prerušenie zmeny pinov, ktoré upozorní firmvér na to, že na monitorovanom pine nastala zmena. Konfigurácia AVR je jednoduchá a vyžaduje nastavenie príznaku, informovanie MCU o tom, ktorý pin chcete monitorovať, a nastavenie globálneho bitu prerušenia. Konfigurujte PCINT

BSET (PCICR, PCIE2); // riadiaci register zmeny pinu pcie2 BSET (PCMSK2, PCINT18); // povoliť prerušenie zmeny pinov pre PCINT18 (PD2) BSET (SREG, 7); // Nastavte SREG I-bitNapíšte svoju rutinu služby prerušenia Chcete, aby bol váš ISR krátky, aby som vo svojom vektore prerušenia prečítal celý bajt, kúsok po kúsku, a uložil bajt do globálneho poľa volatilných znakov. Pri každom prerušení robím nasledovné:

  • Skontrolujte, či som na začiatku
  • Vycentrujte časovanie na stredný impulz pri 2400 baudoch (rýchlosť čítačky RFID)
  • Preskočte začiatočný bit a pozastavte ho v strede nasledujúceho bitu
  • Prečítajte každý bit do celého čísla bez znamienka
  • Keď mám 8 bitov, vložte bajt do poľa znakov
  • Keď zhromaždím 12 bajtov, oznámte MCU, že značka bola prečítaná na detekciu chýb.

Upravil som kód SoftSerial od Mikala Harta, ktorý upravil kód od Davida Mellisa pre experimentálne určené oneskorenia v sériových rutinách.

Analyzujte výstup RS232

Rutina PCINT obsahuje kód na čítanie výstupu RS232 z čítačky RFID. Keď som získal 12 bajtov (10-bajtový RFID plus sentinely), nastavil som bDataReady na 1 a nechal hlavnú slučku spracovať údaje a zobraziť ich.

// toto je obsluha prerušeniaISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // Počiatočný bit klesá s nízkou návratnosťou; uint8_t bit = 0; TunedDelay (CENTER_DELAY); // Vycentrovanie na štartovací bit pre (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // trocha preskoč, brat … if (BCHK (PIND, RFID_IN)) BSET (bit, x); else BCLR (bit, x); } TunedDelay (INTRABIT_DELAY); // preskočiť stop bit RFID_tag [rxIdx] = bit; ++ rxIdx; if (rxIdx == 12) bDataReady = 1;}

Zobrazte svoju značku

V main (), počas (navždy) slučky, kontrolujem, či je nastavené bDataReady, čo signalizuje, že bola odoslaná celá štruktúra RFID. Potom skontrolujem, či je to platný štítok (tj počiatočný a koncový znak sú 0x0A a 0x0D), a ak áno, pošlem ho cez moje pripojenie 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 ("\ nZastaviť bajt:"); USART_tx_S (itoa (RFID_tag [11], & ibuff [0], 16));#endif if (ValidTag ()) {USART_tx_S ("\ nRFID Tag:"); pre (uint8_t x = 1; x <11; x ++) {USART_tx_S (itoa (RFID_tag [x], ibuff, 16)); ak (x! = 10) USART_tx (& apos: & apos); } USART_tx_S ("\ n"); } rxIdx = 0; bDataReady = 0; }}

Krok 4: Kód a rozlúčka

Táto stránka obsahuje súbor zip s príslušným kódom. To bolo napísané v AVR Studio 4.16. Ak používate programátorský poznámkový blok, zatmenie alebo vi (alebo niečo iné), budete musieť skopírovať dôveryhodný súbor Makefile do adresára a pridať tieto súbory do zdrojového riadku. Tiež upozorňujeme, že načasovanie sekcie sériového čítania je založené na 16 MHz MCU. Ak bežíte na inej hodinovej frekvencii, budete musieť experimentálne určiť vyladené oneskorenia tak, aby sa vycentrovali na impulzy prenosovej rýchlosti. Dúfam, že vám tento návod nejakým spôsobom pomohol. Ak máte nejaké návrhy na to, ako by sa to dalo zlepšiť, dajte mi vedieť!

Odporúča: