Sadržaj:

AVR/Arduino RFID čitač sa UART kodom u C: 4 koraka
AVR/Arduino RFID čitač sa UART kodom u C: 4 koraka

Video: AVR/Arduino RFID čitač sa UART kodom u C: 4 koraka

Video: AVR/Arduino RFID čitač sa UART kodom u C: 4 koraka
Video: RFID ридер HZ-1050 с Wiegand 26/34 и Arduino 2024, Juli
Anonim
AVR/Arduino RFID čitač sa UART kodom u C
AVR/Arduino RFID čitač sa UART kodom u C

RFID je ludost, nalazi se svuda - od sistema inventara do sistema identifikacije znački. Ako ste ikada bili u robnoj kući i prošli kroz one stvari koje izgledaju kao detektori metala na ulaznim/izlaznim mjestima, vidjeli ste RFID. Postoji nekoliko mjesta za pronalaženje dobrih informacija o postavljanju RFID -a, a ovo uputstvo se fokusira na instaliranje Parallax RFID čitača (Serial TTL) na AVR, s naglaskom na C kod potreban za čitanje serijskog ulaza. Kod je u jeziku C i ne koristi nikakve vanjske biblioteke. U stvari, on govori 2400 bauda direktno bez upotrebe UART -a sinhronizirajući se sa brzinom prijenosa RFID čitača i čitajući digitalni pin na koji je povezan. Uzbuđen? Ja također.

Korak 1: Nabavite robu

Uzmi robu
Uzmi robu

Trebat će vam sljedeća lista dijelova:

  • RFID čitač (Parallax #28140 39,99 USD)
  • RFID oznaka (Parallax #32397 0,99 USD)
  • AVR ili Arduino klon (ako koristite standardni AVR, trebat će vam i max232, 5 x 1uF kondenzatori i DE9 konektor)
  • Oplata za lemljenje

Opcionalno

  • Zaglavlje sa 4 pozicije
  • Žica

(i max232 itd. za komunikaciju informacija o oznakama) Također možete povezati svoj omiljeni LCD ekran umjesto slanja podataka oznaka putem RS232.

Korak 2: Povežite dijelove

Povežite delove
Povežite delove
Povežite delove
Povežite delove
Povežite delove
Povežite delove

Hardverska strana stvari je prilično jednostavna. Umjesto da svoj RFID čitač ubacim direktno u matičnu ploču, odlučio sam napraviti brzi kabel kako bih RFID čitač mogao pomaknuti malo bolje. Za to sam samo odrezao 4 položaja sa trake zaglavlja ženskog priključka oko koje sam ležao i lemio na tri žice. Električna traka upotpunila je geto konektor. RFID čitač ima 4 veze:

  • Vcc
  • ENABLE
  • OUT
  • Gnd

Kao što ste vjerojatno pogodili, spojite Vcc na +5V i Gnd na masu. Budući da RFID čitač troši toliko energije, možete udariti po ENABLE pin -u da biste ga isključili i uključili u različitim intervalima. Jednostavno sam odlučio da nastavim. Budući da je obrnut, povucite ga NIZKO da biste ga aktivirali. Alternativno, možete ga spojiti na masu. Povezao sam ga s PIND3 da bih dobio mogućnosti omogućavanja/onemogućavanja ako odlučim. OUT pin je mjesto gdje čitač šalje svoje serijske podatke nakon što pročita oznaku. Povezao sam ga sa PIND2. Napomena, u univerzumu Parallax, crveno znači idi. To jest, zelena LED označava da je jedinica neaktivna i u stanju mirovanja, dok crvena LED označava da je jedinica aktivna. * slegne ramenima* Idi figura.

Korak 3: Napišite kôd

Napišite kôd
Napišite kôd

Da biste pročitali podatke iz RFID čitača, morate znati kada je oznaka poslana, izvucite podatke sa serijskog porta, a zatim ih pošaljite negdje.

Format podataka RFID čitača

Parallax RFID čitač šalje podatke fiksnim, glacijalnim tempom od 2400 bauda. RFID oznaka ima 10 bajtova. Kako bi se omogućilo otkrivanje/ispravljanje grešaka, budući da je čitač mogao biti isključen iz slučajne buke, 10-bajtni RFID je ograničen startnim i zaustavnim nadzornikom. Startni nadzornik je linijski unos (0x0A), a stražni nadzorni je povratak nosača (0x0D). To izgleda ovako:

[Započni Sentinel | Bajt 1 | Bajt 2 | Bajt 3 | Bajt 4 | Bajt 5 | Bajt 6 | Bajt 7 | Bajt 8 | Bajt 9 | Bajt 10 | Zaustavi Sentinel]Ovo su tri osnovna koraka.

Saznajte kada je podnesena oznaka

Koristio sam prekid promjene pin -a na AVR -u koji obavještava firmver da je došlo do promjene na nadziranom pin -u. Konfiguriranje AVR -a za ovo je jednostavno i zahtijeva postavljanje zastavice, kazivanje MCU -u koji pin želite nadzirati i postavljanje globalnog bita prekida. Konfigurirajte PCINT

BSET (PCICR, PCIE2); // registar za upravljanje prekida prekida pcie2 BSET (PCMSK2, PCINT18); // omogući prekid promene pina za PCINT18 (PD2) BSET (SREG, 7); // Postavljanje SREG I-bitaNapišite svoju rutinu usluge prekida. Želite da vaš ISR bude kratak pa u vektoru prekida čitam cijeli bajt, malo po malo, i pohranjujem bajt u globalni nestabilni niz znakova. Prilikom svakog prekida radim sljedeće:

  • Provjerite jesam li na početku
  • Centrirajte mjerenje vremena na srednji impuls na 2400 bauda (brzina RFID čitača)
  • Preskočite početni bit i pauzirajte do sredine sljedećeg bita
  • Čitajte svaki bit u bezznačni cijeli broj
  • Kad dobijem 8 bitova, stavite bajt u niz znakova
  • Kada prikupim 12 bajta, obavijestite MCU da je oznaka pročitana radi otkrivanja greške.

Modificirao sam SoftSerial kod Mikala Harta koji je modificirao kod Davida Mellisa radi eksperimentalno utvrđenih kašnjenja u serijskim rutinama.

Raščlanite RS232 izlaz

PCINT rutina sadrži kôd za čitanje RS232 izlaza iz RFID čitača. Kada dobijem 12 bajtova (10-bajtni RFID plus čuvari), postavila sam bDataReady na 1 i pustila glavnu petlju da obradi podatke i prikaže ih.

// ovo je rukovalac prekidima ISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // Početni bit ide s malim povratom; uint8_t bit = 0; TunedDelay (CENTER_DELAY); // Centriraj početni bit za (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // preskoči malo, brate … if (BCHK (PIND, RFID_IN)) BSET (bit, x); else BCLR (bit, x); } TunedDelay (INTRABIT_DELAY); // preskoči bit zaustavljanja RFID_tag [rxIdx] = bit; ++ rxIdx; if (rxIdx == 12) bDataReady = 1;}

Prikažite svoju oznaku

U main (), tokom for (ever) petlje, proveravam da li je bDataReady postavljen, signalizirajući da je poslata cela RFID struktura. Zatim provjeravam je li to valjana oznaka (tj. Početni i završni znak su 0x0A i 0x0D, respektivno), i ako je tako, šaljem je putem svoje RS232 veze.

for (;;) {if (bDataReady) {#ifdef _DEBUG_ USART_tx_S ("Početni bajt:"); USART_tx_S (itoa (RFID_tag [0], & ibuff [0], 16)); ibuff [0] = 0; ibuff [1] = 0; USART_tx_S ("\ nZaustavi bajt:"); USART_tx_S (itoa (RFID_tag [11], & ibuff [0], 16));#endif if (ValidTag ()) {USART_tx_S ("\ nRFID oznaka:"); za (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; }}

Korak 4: Kôd i zbogom

Ova stranica sadrži zip datoteku s odgovarajućim kodom. Napisano je u AVR Studio 4.16. Ako koristite bilježnicu programera, pomrčinu ili vi (ili nešto drugo), morat ćete kopirati pouzdani Makefile u direktorij i dodati te datoteke u izvornu liniju. Također napominjemo da se vrijeme za odjeljak serijskog čitanja zasniva na 16MHz MCU. Ako radite na drugačijoj frekvenciji takta, morat ćete eksperimentalno odrediti podešena kašnjenja kako bi se centrirali impulsi brzine prijenosa. Nadam se da vam je ovo uputstvo na neki način pomoglo. Ako imate prijedloge o tome kako se to može poboljšati, ne ustručavajte se javiti mi!

Preporučuje se: