Obsah:

Čtečka RFID AVR/Arduino s kódem UART v C: 4 kroky
Čtečka RFID AVR/Arduino s kódem UART v C: 4 kroky

Video: Čtečka RFID AVR/Arduino s kódem UART v C: 4 kroky

Video: Čtečka RFID AVR/Arduino s kódem UART v C: 4 kroky
Video: Arduino návody | Joystick PS2 2024, Listopad
Anonim
Čtečka AVR/Arduino RFID s kódem UART v C
Čtečka AVR/Arduino RFID s kódem UART v C

RFID je šílenství, které najdete všude - od inventárních systémů po systémy ID odznaků. Pokud jste někdy byli v obchodním domě a procházeli se těmi věcmi, které vypadaly jako detektory kovů v místech vstupu/výstupu, pak jste viděli RFID. Existuje několik míst, kde najdete dobré informace o nastavení RFID, a tento návod se zaměřuje na instalaci čtečky Parallax RFID (Serial TTL) na AVR s důrazem na kód C potřebný ke čtení sériového vstupu. Kód je v jazyce C a nepoužívá žádné externí knihovny. Ve skutečnosti mluví 2400 baudů přímo bez použití UART synchronizací s přenosovou rychlostí čtečky RFID a čtením digitálního pinu, ke kterému je připojen. Vzrušený? Já také.

Krok 1: Získejte zboží

Získejte zboží
Získejte zboží

Budete potřebovat následující seznam dílů:

  • Čtečka RFID (paralaxa #28140 39,99 $)
  • RFID tag (Paralaxa #32397 0,99 $)
  • Klon AVR nebo Arduino (pokud používáte standardní AVR, budete také potřebovat max232, 5 x 1uF kondenzátory a konektor DE9)
  • Nepájivá deska

Volitelný

  • 4polohová hlavička
  • Drát

(a max232 atd. pro komunikaci informací o tagu) Místo odesílání dat tagu přes RS232 můžete také připojit svůj oblíbený LCD displej.

Krok 2: Připojte součásti

Připojte díly
Připojte díly
Připojte díly
Připojte díly
Připojte díly
Připojte díly

Hardwarová stránka věci je docela snadná. Místo toho, abych svou čtečku RFID vrhl přímo do prkénka, rozhodl jsem se vytvořit rychlý kabel, abych mohl čtečku RFID přesunout o něco lépe. Za tímto účelem jsem odřízl 4 polohy z pásku záhlaví zásuvky, kolem kterého jsem ležel a připájel na tři dráty. Konektor ghetta doplnila elektrická páska. Čtečka RFID má 4 připojení:

  • Vcc
  • UMOŽNIT
  • VEN
  • Gnd

Jak jste pravděpodobně uhodli, připojte Vcc k +5V a Gnd k zemi. Protože čtečka RFID spotřebovává tolik energie, můžete v různých intervalech bouchnout pinem ENABLE a vypnout a zapnout. Prostě jsem se rozhodl to udržet. Protože je obrácený, aktivujete ho LOW. Případně jej můžete připojit k zemi. Připojil jsem ho k PIND3, aby mi poskytl možnosti povolení/zakázání, pokud jsem se rozhodl. Kolík OUT je místo, kam čtečka odesílá svá sériová data poté, co přečte značku. Připojil jsem to k PIND2. Všimněte si, že v Parallax Universe, červená znamená jít. To znamená, že zelená LED znamená, že jednotka je neaktivní a nečinná, zatímco červená LED znamená, že je jednotka aktivní. * pokrčil rameny* Jdi na to.

Krok 3: Napište kód

Napište kód
Napište kód

Chcete -li přečíst data ze čtečky RFID, musíte vědět, kdy byla odeslána značka, vytáhnout data ze sériového portu a poté je někam poslat.

Formát dat čtečky RFID

Čtečka Parallax RFID odesílá data pevným, ledovcovým tempem 2400 baudů. RFID tag má 10 bytů. Aby byla umožněna detekce/korekce chyb, protože čtečka by mohla být vypnuta z náhodného šumu, je 10bajtový RFID ohraničen indikátorem start a stop. Počáteční sentinel je line feed (0x0A) a stop sentinel je carriage return (0x0D). Vypadá to takto:

[Start Sentinel | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 | Byte 9 | Byte 10 | Zastavit Sentinel]Toto jsou tři hlavní kroky.

Zjistěte, kdy byla značka odeslána

Na AVR jsem použil přerušení změny PIN, které upozorní firmware, že došlo ke změně na monitorovaném pinu. Konfigurace AVR pro toto je snadná a vyžaduje nastavení vlajky, sdělení MCU, který pin chcete monitorovat, a nastavení globálního bitu přerušení. Konfigurujte PCINT

BSET (PCICR, PCIE2); // registr změny řízení přerušení pcie2 BSET (PCMSK2, PCINT18); // povolit přerušení změny pinů pro PCINT18 (PD2) BSET (SREG, 7); // Nastavit I-bit SREGNapište si rutinu služby přerušení Chcete, aby vaše ISR byla krátká, takže ve svém vektoru přerušení čtu celý bajt, kousek po kousku, a ukládám bajt do pole globálních nestálých znaků. Při každém přerušení dělám následující:

  • Zkontrolujte, zda jsem na startu
  • Vycentrujte časování na střední impuls 2400 baudů (rychlost čtečky RFID)
  • Přeskočte počáteční bit a pozastavte doprostřed dalšího bitu
  • Přečíst každý bit do celého čísla bez znaménka
  • Když mám 8 bitů, vložte bajt do pole znaků
  • Když shromáždím 12 bajtů, dejte MCU vědět, že značka byla přečtena pro detekci chyb.

Upravil jsem kód SoftSerial od Mikala Harta, který upravil kód od Davida Mellise pro experimentálně určená zpoždění v sériových rutinách.

Analyzujte výstup RS232

Rutina PCINT obsahuje kód pro čtení výstupu RS232 ze čtečky RFID. Když jsem získal 12 bajtů (10bajtový RFID plus hlídače), nastavil jsem bDataReady na 1 a nechal hlavní smyčku zpracovat data a zobrazit je.

// toto je obsluha přerušeníISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // Start bit goes low return; bit uint8_t = 0; TunedDelay (CENTER_DELAY); // Vycentrování na start bit pro (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // trochu přeskoč, bratře … if (BCHK (PIND, RFID_IN)) BSET (bit, x); jinak BCLR (bit, x); } TunedDelay (INTRABIT_DELAY); // přeskočit stop bit RFID_tag [rxIdx] = bit; ++ rxIdx; if (rxIdx == 12) bDataReady = 1;}

Zobrazte svou značku

V main (), během smyčky for (ever), kontroluji, zda bylo nastaveno bDataReady, což signalizuje, že byla odeslána celá struktura RFID. Poté zkontroluji, zda je to platný tag (tj. Počáteční a koncový znak jsou 0x0A a 0x0D, v daném pořadí), a pokud ano, rozesílám své připojení 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 ("\ nZastavit bajt:"); USART_tx_S (itoa (RFID_tag [11], & ibuff [0], 16));#endif if (ValidTag ()) {USART_tx_S ("\ nRFID Tag:"); pro (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; }}

Krok 4: Kód a rozloučení

Tato stránka obsahuje zip soubor s příslušným kódem. To bylo napsáno v AVR Studio 4.16. Pokud používáte programátorský poznámkový blok, zatmění nebo vi (nebo něco jiného), budete muset zkopírovat důvěryhodný soubor Makefile do adresáře a přidat tyto soubory do zdrojového řádku. Všimněte si také, že načasování sekce sériového čtení je založeno na 16 MHz MCU. Pokud běžíte na jiné hodinové frekvenci, budete muset experimentálně určit vyladěná zpoždění tak, aby se soustředila na impulsy přenosové rychlosti. Doufám, že vám tento instruktáž nějakým způsobem pomohl. Pokud máte nějaké návrhy, jak by to šlo zlepšit, dejte mi vědět!

Doporučuje: