Sisällysluettelo:

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

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

Video: AVR/Arduino RFID -lukija UART -koodilla C: 4 vaihetta
Video: RFID считыватель с UART интерфейсом RDM6300, Обзор 2024, Marraskuu
Anonim
AVR/Arduino RFID -lukija UART -koodilla C -muodossa
AVR/Arduino RFID -lukija UART -koodilla C -muodossa

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

Hanki Tavarat
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

Liitä osat
Liitä osat
Liitä osat
Liitä osat
Liitä osat
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

Kirjoita koodi
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!

Suositeltava: