Tartalomjegyzék:

AVR/Arduino RFID olvasó UART kóddal C: 4 lépésben
AVR/Arduino RFID olvasó UART kóddal C: 4 lépésben

Videó: AVR/Arduino RFID olvasó UART kóddal C: 4 lépésben

Videó: AVR/Arduino RFID olvasó UART kóddal C: 4 lépésben
Videó: Arduino návody | Detektor barvy 2024, November
Anonim
AVR/Arduino RFID olvasó UART kóddal C -ben
AVR/Arduino RFID olvasó UART kóddal C -ben

Az RFID az őrület, mindenhol megtalálható - a készletrendszerektől a jelvényazonosító rendszerekig. Ha valaha volt egy áruházban, és végigjárta azokat a fémdetektor-kinézetű dolgokat a be- és kilépési pontokon, akkor látta az RFID-t. Számos helyen találhat jó információt az RFID beállításáról, és ez az utasítás a Parallax RFID olvasó (soros TTL) AVR -re történő telepítésére összpontosít, hangsúlyozva a soros bemenet olvasásához szükséges C kódot. A kód C -ben van, és nem használ semmilyen külső könyvtárat. Valójában 2400 baudról beszél közvetlenül, UART használata nélkül, az RFID -olvasó baud -sebességével szinkronizálva és a hozzá csatlakoztatott digitális tűt olvasva. Izgatott? Én is.

1. lépés: Szerezze be az árut

Szerezd meg az Árukat
Szerezd meg az Árukat

Szüksége lesz a következő alkatrészlistára:

  • RFID olvasó (Parallax #28140 39,99 $)
  • RFID címke (Parallax #32397 0,99 USD)
  • AVR vagy Arduino klón (ha készenléti AVR -t használ, akkor max232, 5 x 1uF kondenzátorra és DE9 csatlakozóra is szüksége lesz)
  • Forrasztás nélküli kenyeretábla

Választható

  • 4 pozíciós fejléc
  • Huzal

(és a max232 stb. a címkeinformációk közléséhez) Csatlakoztathatja kedvenc LCD -képernyőjét is a címkeadatok RS232 -n keresztüli küldése helyett.

2. lépés: Csatlakoztassa az alkatrészeket

Csatlakoztassa az alkatrészeket
Csatlakoztassa az alkatrészeket
Csatlakoztassa az alkatrészeket
Csatlakoztassa az alkatrészeket
Csatlakoztassa az alkatrészeket
Csatlakoztassa az alkatrészeket

A hardver oldala nagyon egyszerű. Ahelyett, hogy az RFID -olvasómat közvetlenül a kenyértáblámba dugnám, úgy döntöttem, hogy készítek egy gyors kábelt, hogy egy kicsit jobban mozoghassak. Ehhez csak levágtam 4 pozíciót egy női aljzat fejlécről, amelyen feküdtem és három vezetékre forrasztottam. Elektromos szalag befejezte a gettó csatlakozót. Az RFID olvasó 4 csatlakozással rendelkezik:

  • Vcc
  • ENGEDÉLYEZZE
  • KI
  • Gnd

Ahogy valószínűleg sejtette, csatlakoztassa a Vcc -t +5V -ra, a Gnd -et pedig a földre. Mivel az RFID -olvasó olyan sok energiát fogyaszt, különböző időközönként le- és bekapcsolhatja az ENABLE tűt. Egyszerűen a folytatás mellett döntöttem. Mivel fordítva van, LOW -ra húzza, hogy aktiválja. Alternatív megoldásként csatlakoztathatja a földhöz. Csatlakoztattam a PIND3 -hoz, hogy lehetőséget adjak az engedélyezésre/letiltásra, ha úgy döntök. Az OUT pin az, ahová az olvasó elküldi soros adatait, miután elolvasta a címkét. Csatlakoztattam a PIND2 -hez. Megjegyzés, a Parallax Univerzumban a piros azt jelenti, hogy menj. Vagyis a zöld LED azt jelenti, hogy az egység inaktív és tétlen, míg egy piros LED azt jelenti, hogy az egység aktív. * vállat vont* Menj.

3. lépés: Írja be a kódot

Írja be a kódot
Írja be a kódot

Az adatok RFID -olvasóból történő olvasásához tudnia kell, hogy mikor küldtek be címkét, le kell húzni az adatokat a soros portról, majd el kell küldeni valahová.

RFID olvasó adatformátum

A Parallax RFID olvasó rögzített, 2400 baudos jégtempóban küld adatokat. Egy RFID címke 10 bájt. Annak érdekében, hogy lehetővé tegyük a hibafelismerést/-javítást, mivel az olvasót ki lehet kapcsolni a véletlenszerű zajból, a 10 bájtos RFID-t kezdő és leállító jelző határolja. A kezdő őrsor a sor előtolása (0x0A), a végső pedig a kocsi visszatérése (0x0D). Ez így néz ki:

[Start Sentinel | 1. bájt | 2. bájt | 3. bájt | 4. bájt | 5. bájt | 6. bájt | 7. bájt | 8. bájt | 9. bájt | 10. bájt | Állítsa le a Sentinelt]Ez a három elsődleges lépés.

Tudja meg, hogy mikor küldtek be címkét

Tűcsere -megszakítást használtam az AVR -n, amely értesíti a firmware -t, hogy változás történt a megfigyelt tűn. Az AVR konfigurálása erre egyszerű, és be kell állítani a zászlót, meg kell mondani az MCU -nak, hogy melyik tűt szeretné figyelni, és beállítani a globális megszakítási bitet. A PCINT konfigurálása

BSET (PCICR, PCIE2); // pin change interrupt control register pcie2 BSET (PCMSK2, PCINT18); // tűcsere megszakítás engedélyezése PCINT18 (PD2) BSET (SREG, 7) esetén; // SREG I-bit beállításaÍrja meg a megszakítási szolgáltatási rutinját. Az ISR -t rövidre szeretné tartani, így a megszakítási vektoromban a teljes bájtot olvasom, apránként, és tárolom a bájtot egy globális illékony karakter tömbben. Minden megszakításnál a következőket teszem:

  • Ellenőrizze, hogy az elején vagyok -e
  • Központosítsa az időzítést a középső impulzusra 2400 baudon (az RFID olvasó sebessége)
  • Hagyja ki a kezdő bitet, és álljon meg a következő bit közepéig
  • Olvasson be minden bitet előjel nélküli egész számba
  • Ha 8 bitem van, tegye a bájtot egy karakter tömbbe
  • Amikor 12 bájtot gyűjtöttem össze, közölje az MCU -val, hogy a címkét elolvasták a hiba észlelése érdekében.

Módosítottam a SoftSerial kódot Mikal Harttól, aki módosította David Mellis kódját a soros rutinok kísérletileg meghatározott késései miatt.

RS232 kimenet elemzése

A PCINT rutin tartalmazza az RS232 kimenet RFID olvasóból történő olvasásának kódját. Amikor 12 bájt (10 bájtos RFID és őrszemek) van, akkor a bDataReady értéket 1-re állítom, és hagyom, hogy a fő hurok feldolgozza az adatokat és megjelenítse azokat.

// ez a megszakításkezelő ISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // // A kezdő bit alacsony hozammal megy; uint8_t bit = 0; TunedDelay (CENTER_DELAY); // A kezdő bit középpontja a következőhöz: (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // ugorj egy kicsit, testvér… if (BCHK (PIND, RFID_IN)) BSET (bit, x); else BCLR (bit, x); } TunedDelay (INTRABIT_DELAY); // kihagyási bit kihagyása RFID_tag [rxIdx] = bit; ++ rxIdx; ha (rxIdx == 12) bDataReady = 1;}

Jelenítse meg a címkét

A main () -ban a for (ever) ciklus során ellenőrzöm, hogy a bDataReady be van -e állítva, jelezve, hogy a teljes RFID -struktúra el lett küldve. Ezután ellenőrzöm, hogy érvényes címke -e (azaz a kezdő és a befejező karakter 0x0A, illetve 0x0D), és ha igen, elküldöm az RS232 -es kapcsolatomat.

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 byte:"); USART_tx_S (itoa (RFID_tag [11], & ibuff [0], 16));#endif if (ValidTag ()) {USART_tx_S ("\ nRFID Tag:"); for (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; }}

4. lépés: Kód és búcsú

Ez az oldal egy zip fájlt tartalmaz a megfelelő kóddal. Az AVR Studio 4.16 -ban írták. Ha a programozó jegyzettömbjét, az eclipse -t vagy a vi -t (vagy valami mást) használ, akkor egy megbízható Makefile fájlt kell a könyvtárba másolnia, és ezeket a fájlokat hozzá kell adnia a forrássorhoz. Felhívjuk figyelmét, hogy a soros olvasás szakasz időzítése egy 16 MHz -es MCU. Ha más órajel -frekvencián fut, akkor kísérletileg meg kell határoznia a hangolt késleltetéseket, amelyek a baud -impulzusok középpontjába kerülnek. Remélem, hogy ez az utasítás segít valamilyen módon. Ha bármilyen javaslata van, hogyan lehetne javítani, ne habozzon, jelezze nekem!

Ajánlott: