Sadržaj:

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

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

Video: AVR/Arduino RFID čitač s UART kodom u C: 4 koraka
Video: Уроки Arduino. Общение по Serial, парсинг данных, протоколы связи 2024, Studeni
Anonim
AVR/Arduino RFID čitač s UART kodom u C
AVR/Arduino RFID čitač s UART kodom u C

RFID je ludost, nalazi se posvuda - od sustava inventara do sustava 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. Kôd je u jeziku C i ne koristi nikakve vanjske knjižnice. Zapravo, on govori 2400 bauda izravno bez upotrebe UART -a sinkronizirajući se s brzinom prijenosa čitača RFID -a i čitajući digitalni pin na koji je spojen. Uzbuđen? Ja isto.

Korak 1: Nabavite robu

Nabavite robu
Nabavite robu

Trebat će vam sljedeći popis 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)
  • Mašina za lemljenje

Opcionalno

  • Zaglavlje s 4 položaja
  • Žica

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

Korak 2: Spojite dijelove

Spojite dijelove
Spojite dijelove
Spojite dijelove
Spojite dijelove
Spojite dijelove
Spojite dijelove

Hardverska strana stvari je prilično jednostavna. Umjesto da svoj RFID čitač ubacim izravno u moju ploču, odlučio sam napraviti brzi kabel kako bih mogao pomaknuti čitač RFID -a malo bolje. Za to sam samo odrezao 4 položaja sa trake zaglavlja ženske utičnice oko koje sam ležao i lemio na tri žice. Električna traka dovršila je konektor za geto. RFID čitač ima 4 veze:

  • Vcc
  • OMOGUĆITI
  • 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 nastaviti. Budući da je obrnut, povucite ga NIZKO da biste ga aktivirali. Alternativno, možete ga spojiti na masu. Povezao sam ga s PIND3 kako bih dobio mogućnosti uključivanja/isključivanja ako to odlučim. OUT pin je mjesto gdje čitač šalje svoje serijske podatke nakon što pročita oznaku. Spojio sam ga na PIND2. Napomena, u svemiru Parallax crveno znači ići. To jest, zelena LED označava da je jedinica neaktivna i u stanju mirovanja, dok crvena LED označava da je jedinica aktivna. * slegnuti ramenima* Idi figura.

Korak 3: Napišite kôd

Napišite kod
Napišite kod

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

Oblik podataka RFID čitača

Čitač Parallax RFID šalje podatke fiksnim, glacijalnim tempom od 2400 bauda. RFID oznaka ima 10 bajtova. Kako bi se omogućilo otkrivanje/ispravljanje pogrešaka, budući da se čitač mogao isključiti iz slučajne buke, 10-bajtni RFID omeđen je startnim i zaustavnim nadzornikom. Početni nadzornik je unos linije (0x0A), a zaustavni nadzor povratka nosača (0x0D). Izgleda ovako:

[Start Sentinel | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 | Byte 9 | Byte 10 | Zaustavi Sentinel]To su tri primarna koraka.

Saznajte kada je oznaka poslana

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

BSET (PCICR, PCIE2); // registar upravljanja prekidima izmjene pinova pcie2 BSET (PCMSK2, PCINT18); // omogući prekid promjene pina za PCINT18 (PD2) BSET (SREG, 7); // Postavite SREG I-bitNapiš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 puls na 2400 bauda (brzina RFID čitača)
  • Preskočite početni bit i pauzirajte do sredine sljedećeg bita
  • Pročitajte svaki bit u bezznačni cijeli broj
  • Kad dobijem 8 bitova, stavite bajt u niz znakova
  • Kad prikupim 12 bajta, obavijestite MCU da je oznaka pročitana radi otkrivanja pogreške.

Izmijenio 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. Kad dobijem 12 bajtova (10-bajtni RFID plus stražari), postavio sam bDataReady na 1 i pustio glavnu petlju da obradi podatke i prikaže ih.

// ovo je rukovatelj prekida 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); inače 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 (), tijekom for (ever) petlje provjeravam je li bDataReady postavljen, signalizirajući da je poslana cijela RFID struktura. Zatim provjeravam je li to valjana oznaka (tj. Početni i završni znak su 0x0A, odnosno 0x0D), a 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 temelji na 16MHz MCU. Ako radite na drugačijoj frekvenciji takta, morat ćete eksperimentalno odrediti podešena kašnjenja kako bi se usredotočili na impulse 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čeni: