AVR/Arduino RFID -lukija UART -koodilla C: 4 vaihetta
AVR/Arduino RFID -lukija UART -koodilla C: 4 vaihetta
Anonim

RFID on villitys, joka löytyy kaikkialta - inventaariojärjestelmistä tunnistenumerojärjestelmiin. Jos olet koskaan käynyt tavaratalossa ja käynyt läpi metallinpaljastimen näköiset asiat sisäänkäynti-/poistumispisteissä, olet nähnyt RFID: n. On monia paikkoja löytää hyviä tietoja RFID: n määrittämisestä, ja tämä opas keskittyy Parallax RFID -lukijan (Serial TTL) asentamiseen AVR -laitteeseen painottaen sarjatulon lukemiseen tarvittavaa C -koodia. Koodi on C -muodossa eikä käytä ulkoisia kirjastoja. Itse asiassa se puhuu 2400 baudia suoraan ilman UARTia synkronoimalla RFID -lukijan baudinopeuteen ja lukemalla digitaalisen nastan, johon se on liitetty. Innoissaan? Minä myös.

Vaihe 1: Hanki tavarat

Tarvitset seuraavan luettelon osista:

  • RFID -lukija (Parallax #28140 39,99 dollaria)
  • RFID -tunniste (Parallax #32397 0,99 $)
  • AVR tai Arduino -klooni (jos käytät varastossa olevaa AVR -laitetta, tarvitset myös max232, 5 x 1uF -kondensaattoria ja DE9 -liittimen)
  • Juoton leipälauta

Valinnainen

  • 4 -asentoinen otsikko
  • Johto

(ja max232 jne. tunnistetietojen kommunikoimiseksi) Voit myös liittää suosikkisi LCD -näytön sen sijaan, että lähetät tunnistetietoja RS232: n kautta.

Vaihe 2: Liitä osat

Asioiden laitteistopuoli on melko helppo. Sen sijaan, että syöksin RFID -lukijani suoraan leipälevylleni, päätin tehdä nopean kaapelin, jotta voisin siirtää RFID -lukijaa hieman paremmin. Tätä varten katkaisin juuri 4 asemaa naaraspistokkeen otsikkoliuskalta, jonka olin maannut ja juottanut kolmeen johtoon. Sähköteippi valmisti ghetto -liitännän. RFID -lukijalla on 4 liitäntää:

  • Vcc
  • OTA KÄYTTÖÖN
  • ULOS
  • Gnd

Kuten luultavasti arvasit, kytke Vcc +5V ja Gnd maahan. Koska RFID -lukija kuluttaa niin paljon virtaa, voit lyödä ENABLE -nastan pois päältä ja käynnistää sen eri aikavälein. Päätin vain jatkaa sitä. Koska se on käänteinen, aktivoi se vetämällä sitä LOW -asentoon. Vaihtoehtoisesti voit liittää sen maahan. Yhdistin sen PIND3: een, jotta voin ottaa käyttöön/poistaa käytöstä, jos päätän. OUT -nasta on paikka, johon lukija lähettää sarjatiedot tagin lukemisen jälkeen. Yhdistin sen PIND2 -laitteeseen. Huomaa, Parallax Universumissa punainen tarkoittaa menoa. Toisin sanoen vihreä LED tarkoittaa, että laite on passiivinen ja käyttämätön, kun taas punainen LED tarkoittaa, että laite on aktiivinen. * kohauttaa olkiaan* Mene hahmolle.

Vaihe 3: Kirjoita koodi

Jos haluat lukea tietoja RFID -lukijalta, sinun on tiedettävä, milloin tunniste on lähetetty, vedettävä tiedot sarjaportista ja lähetettävä sitten jonnekin.

RFID Reader Data Format

Parallax RFID -lukija lähettää tietoja 2400 baudin kiinteällä jäätiköllä. RFID -tunniste on 10 tavua. Virheiden havaitsemisen/korjaamisen mahdollistamiseksi, koska lukija voidaan kytkeä pois satunnaisesta kohinasta, 10-tavuista RFID: tä rajoittaa käynnistys- ja lopetusvalvonta. Aloitusvalvoja on rivinsyöttö (0x0A) ja pysäytysvahti on kelkan paluu (0x0D). Se näyttää tältä:

[Käynnistä Sentinel | tavu 1 | tavu 2 | tavu 3 | tavu 4 | tavu 5 | tavu 6 | tavu 7 | tavu 8 | tavu 9 | tavu 10 | Lopeta Sentinel]Nämä ovat kolme ensisijaista vaihetta.

Tiedä, milloin tunniste on lähetetty

Käytin AVR: n nastanvaihdon keskeytystä, joka ilmoittaa laiteohjelmistolle, että valvotussa nastassa on tapahtunut muutos. AVR: n määrittäminen tälle on helppoa ja edellyttää lipun asettamista, MCU: lle kertomista, mitä nasta haluat seurata, ja globaalin keskeytysbitin asettamista. Määritä PCINT

BSET (PCICR, PCIE2); // pin change interrupt control register pcie2 BSET (PCMSK2, PCINT18); // ota nastanvaihdon keskeytys käyttöön PCINT18 (PD2) BSET: lle (SREG, 7); // Aseta SREG I-bitKirjoita keskeytyspalvelurutiini Haluat pitää ISR: n lyhyenä, joten keskeytysvektorissani luen koko tavun, kerrallaan ja tallennan tavun globaaliin haihtuvaan merkkijonoon. Teen jokaisen keskeytyksen yhteydessä seuraavaa:

  • Tarkista, että olen aloitusbitissä
  • Keskitä ajoitus keskipulssille 2400 baudilla (RFID -lukijan nopeus)
  • Ohita aloitusbitti ja keskeytä seuraavan bitin keskelle
  • Lue jokainen bitti allekirjoittamattomaan kokonaislukuun
  • Kun minulla on 8 bittiä, laita tavu merkkitaulukkoon
  • Kun olen kerännyt 12 tavua, kerro MCU: lle, että tagi on luettu virheiden havaitsemiseksi.

Muokkasin SoftSerial -koodia Mikal Hartilta, joka muutti David Mellisin koodia kokeellisesti määritettyjen viivästysten vuoksi sarjarutiineissa.

Jäsennys RS232 -lähtö

PCINT-rutiini sisältää koodin RS232-lähdön lukemiseksi RFID-lukijasta. Kun olen saanut 12 tavua (10 tavun RFID ja vartijat), asetan bDataReady-arvon 1: ksi ja annan pääsilmukan käsitellä tiedot ja näyttää ne.

// tämä on keskeytyskäsittelijä ISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // Aloitusbitti menee heikosti; uint8_t bitti = 0; TunedDelay (CENTER_DELAY); // Keskitä aloitusbitille kohteelle (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // ohita vähän, veli… if (BCHK (PIND, RFID_IN)) BSET (bit, x); muut BCLR (bitti, x); } TunedDelay (INTRABIT_DELAY); // ohita pysäytysbitti RFID_tag [rxIdx] = bitti; ++ rxIdx; jos (rxIdx == 12) bDataReady = 1;}

Näytä tunniste

Pääsivulla (), ikuisesti (ikuisesti) -silmukan aikana tarkistan, onko bDataReady asetettu, mikä osoittaa, että koko RFID -rakenne on lähetetty. Tarkistan sitten, onko se kelvollinen tunniste (eli aloitus- ja lopetusmerkit ovat vastaavasti 0x0A ja 0x0D), ja jos on, lähetän sen RS232 -yhteyden kautta.

for (;;) {if (bDataReady) {#ifdef _DEBUG_ USART_tx_S ("Aloita tavu:"); USART_tx_S (itoa (RFID_tag [0], & ibuff [0], 16)); ibuff [0] = 0; ibuff [1] = 0; USART_tx_S ("\ nPysäytä tavu:"); 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)); jos (x! = 10) USART_tx (& apos: & apos); } USART_tx_S ("\ n"); } rxIdx = 0; bDataReady = 0; }}

Vaihe 4: Koodi ja jäähyväiset

Tämä sivu sisältää zip -tiedoston asianomaisella koodilla. Se on kirjoitettu AVR Studio 4.16: ssa. Jos käytät ohjelmoijan muistilehtiöä, eclipseä tai vi (tai jotain muuta), sinun on kopioitava luotettu Makefile hakemistoon ja lisättävä nämä tiedostot lähderiville. 16 MHz: n MCU. Jos käytät eri kellotaajuutta, sinun on kokeellisesti määritettävä viritetyt viiveet siirtonopeuspulssien keskelle. Toivon, että tämä ohje auttoi sinua jollakin tavalla. Jos sinulla on ehdotuksia sen parantamiseksi, älä epäröi kertoa minulle!