Talaan ng mga Nilalaman:

AVR / Arduino RFID Reader Na may UART Code sa C: 4 na Hakbang
AVR / Arduino RFID Reader Na may UART Code sa C: 4 na Hakbang

Video: AVR / Arduino RFID Reader Na may UART Code sa C: 4 na Hakbang

Video: AVR / Arduino RFID Reader Na may UART Code sa C: 4 na Hakbang
Video: Port Register Control | Increase speed of Read/Write - Arduino101 2024, Nobyembre
Anonim
AVR / Arduino RFID Reader Na may UART Code sa C
AVR / Arduino RFID Reader Na may UART Code sa C

Ang RFID ay ang pagkahumaling, matatagpuan kahit saan - mula sa mga sistema ng imbentaryo hanggang sa mga system ng badge ID. Kung napunta ka na sa isang department store at lumakad sa mga bagay na mukhang metal-detector sa mga puntong entrace / exit, nakita mo ang RFID. Mayroong maraming mga lugar upang makahanap ng mahusay na impormasyon sa pag-set up ng RFID, at ang itinuturo na ito ay nakatuon sa pag-install ng Parallax RFID reader (Serial TTL) sa isang AVR, na may diin sa kinakailangang C code upang mabasa ang serial input. Ang code ay nasa C at hindi gumagamit ng anumang mga panlabas na aklatan. Sa katunayan, nagsasalita ito ng 2400 baud nang direkta nang hindi ginagamit ang isang UART sa pamamagitan ng pagsabay sa rate ng baud ng mambabasa ng RFID at pagbabasa ng digital pin na konektado nito. Nasasabik? Ako rin.

Hakbang 1: Kunin ang Mga Produkto

Kunin ang Mga Bagay
Kunin ang Mga Bagay

Kakailanganin mo ang sumusunod na listahan ng mga bahagi:

  • RFID Reader (Parallax # 28140 $ 39.99)
  • Tag ng RFID (Parallax # 32397 $ 0.99)
  • AVR o Arduino clone (kung gumagamit ka ng stock AVR, kakailanganin mo rin ng isang max232, 5 x 1uF capacitors, at isang konektor ng DE9)
  • Solderless breadboard

Opsyonal

  • 4 na posisyon header
  • Kawad

(at ang max232 atbp para sa komunikasyon ng impormasyon ng tag) Maaari mo ring ikonekta ang iyong paboritong LCD screen kapalit ng pagpapadala ng data ng tag sa pamamagitan ng RS232.

Hakbang 2: Ikonekta ang Mga Bahagi

Ikonekta ang Mga Bahagi
Ikonekta ang Mga Bahagi
Ikonekta ang Mga Bahagi
Ikonekta ang Mga Bahagi
Ikonekta ang Mga Bahagi
Ikonekta ang Mga Bahagi

Ang panig ng hardware ng mga bagay ay medyo madali. Sa halip na i-plonking ang aking RFID reader nang direkta sa aking breadboard ay pinili ko upang makagawa ng isang mabilis na cable upang mailipat ko ang RFID reader nang medyo mas mahusay. Para sa mga iyon, pinutol ko lamang ang 4 na posisyon mula sa isang babaeng socket header strip na aking pinagsisinungalingan at hinihinang sa tatlong mga wire. Nakumpleto ng electrical tape ang konektor ng ghetto. Ang RFID reader ay may 4 na koneksyon:

  • Vcc
  • MAAARING
  • PALABAS
  • Gnd

Tulad ng malamang na nahulaan mo ito, ikonekta ang Vcc sa + 5V at Gnd sa lupa. Dahil ang RFID reader ay kumakain ng labis na lakas, maaari mong i-bang ang I-ENABLE pin upang i-off at i-on ito sa iba't ibang mga agwat. Pinili ko lang na panatilihin ito. Dahil baligtad, hinihila mo itong LOW upang maisaaktibo ito. Bilang kahalili, maaari mong ikonekta ito sa lupa. Ikinonekta ko ito sa PIND3 upang bigyan ako ng mga pagpipilian ng pagpapagana / hindi pagpapagana kung nagpasya akong. Ang OUT pin ay kung saan nagpapadala ang mambabasa ng serial data pagkatapos nitong mabasa ang isang tag. Ikinonekta ko ito sa PIND2. Tandaan, sa Parallax Universe, ang pula ay nangangahulugang go. Iyon ay, isang berdeng LED nangangahulugang ang yunit ay hindi aktibo at idle, habang ang isang pulang LED ay nangangahulugang ang yunit ay aktibo. * shrug * Go figure.

Hakbang 3: Isulat ang Code

Isulat ang Code
Isulat ang Code

Upang basahin ang data mula sa RFID reader, kailangan mong malaman kung kailan naisumite ang isang tag, hilahin ang data mula sa serial port, pagkatapos ipadala ito sa kung saan.

Format ng Data ng Reader ng RFID

Ang Parallax RFID reader ay nagpapadala ng data sa isang nakapirming, glacial na tulin ng 2400 baud. Ang isang tag ng RFID ay 10 bytes. Upang mapahintulutan ang pagtuklas ng error / pagwawasto, dahil ang mambabasa ay maaaring itakda mula sa random na ingay, ang 10-byte RFID ay nalilimitahan ng isang pagsisimula at paghinto ng sentinel. Ang pagsisimula ng sentinel ay feed ng linya (0x0A) at ang paghinto ng sentinel ay pagbalik ng karwahe (0x0D). Parang ganito:

[Start Sentinel | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 | Byte 9 | Byte 10 | Ihinto ang Sentinel]Ito ang tatlong pangunahing mga hakbang.

Alamin kung kailan naisumite ang isang tag

Gumamit ako ng isang Pin Change Interrupt sa AVR na aabisuhan ang firmware na may pagbabago na naganap sa isang sinusubaybayan na pin. Ang pag-configure ng AVR para sa ito ay madali at nangangailangan ng pagtatakda ng watawat, na sinasabi sa MCU kung aling pin ang nais mong subaybayan, at itatakda ang pandaigdigan na bit. I-configure ang PCINT

BSET (PCICR, PCIE2); // pin baguhin makagambala control magparehistro pcie2 BSET (PCMSK2, PCINT18); // paganahin ang pagbabago ng pin na magambala para sa PCINT18 (PD2) BSET (SREG, 7); // Itakda ang SREG I-bitIsulat ang iyong nakakagambala na gawain sa serbisyo Nais mong panatilihing maikli ang iyong ISR kaya't sa aking nakakagambalang vector nabasa ko ang buong byte, nang paunti-unti, at iniimbak ang byte sa isang pandaigdigan na hanay ng character na pabagu-bago. Ginagawa ko ang sumusunod sa bawat nakakagambala:

  • Suriin upang matiyak na nagsisimula ako
  • Itakda ang oras sa gitnang pulso sa 2400 baud (ang bilis ng RFID reader)
  • Laktawan ang panimulang bit at i-pause sa gitna ng susunod na bit
  • Basahin ang bawat piraso sa isang unsigned integer
  • Kapag nakuha ko ang 8 bits, ilagay ang byte sa isang character array
  • Kapag nakolekta ko ang 12 bytes, ipaalam sa MCU na ang tag ay nabasa para sa pagtuklas ng error.

Binago ko ang SoftSerial code mula sa Mikal Hart na nagbago ng code mula kay David Mellis para sa mga eksperimentong natukoy na pagkaantala sa mga serial routine.

Parse RS232 Output

Naglalaman ang gawain ng PCINT ng code para sa pagbabasa ng output ng RS232 mula sa RFID reader. Nang makakuha ako ng 12 bytes (10-byte RFID plus sentinels) Itinakda ko ang bDataReady sa 1 at hayaan ang pangunahing loop na maproseso ang data at ipakita ito.

// this is the interrupt handlerISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // Start bit goes low return; uint8_t bit = 0; TunedDelay (CENTER_DELAY); // Center on start bit for (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // laktawan ng kaunti, kapatid … kung (BCHK (PIND, RFID_IN)) BSET (bit, x); iba pa BCLR (bit, x); } TunedDelay (INTRABIT_DELAY); // skip stop bit RFID_tag [rxIdx] = bit; ++ rxIdx; kung (rxIdx == 12) bDataReady = 1;}

Ipakita ang Iyong Tag

Sa pangunahing (), sa panahon ng para sa (kailanman) loop, suriin ko upang makita kung ang bDataReady ay naitakda, na hudyat na ang buong istraktura ng RFID ay naipadala na. Sinusuri ko pagkatapos upang makita kung ito ay isang wastong tag (ibig sabihin, simulan at ihinto ang mga character ay 0x0A at 0x0D, ayon sa pagkakabanggit), at kung gayon, ipinapadala ko ito sa aking koneksyon sa RS232.

para sa (;;) {kung (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:"); para sa (uint8_t x = 1; x <11; x ++) {USART_tx_S (itoa (RFID_tag [x], ibuff, 16)); kung (x! = 10) USART_tx (& apos: & apos); } USART_tx_S ("\ n"); } rxIdx = 0; bDataReady = 0; }}

Hakbang 4: Code at Pamamaalam

Naglalaman ang pahinang ito ng isang zip file na may kaugnay na code. Isinulat ito sa AVR Studio 4.16. Kung gumagamit ka ng notepad, eclipse, o vi (o iba pa) ng programmer kailangan mong kopyahin ang isang pinagkakatiwalaang Makefile sa direktoryo at idagdag ang mga file na ito sa linya ng pinagmulan. Tandaan din, ang tiyempo para sa seksyon ng serial na pagbabasa ay batay sa isang 16MHz MCU. Kung tumatakbo ka sa ibang dalas ng orasan, kakailanganin mong eksperimentong matukoy ang mga na-antalang pagkaantala upang masentro ang mga boses ng pulso sa baud. Inaasahan kong nakatulong ito sa iyo sa ilang paraan. Kung mayroon kang anumang mga mungkahi sa kung paano ito maaaring mapabuti huwag mag-atubiling ipaalam sa akin!

Inirerekumendang: