Orodha ya maudhui:

Msomaji wa AVR / Arduino RFID Na Msimbo wa UART katika C: 4 Hatua
Msomaji wa AVR / Arduino RFID Na Msimbo wa UART katika C: 4 Hatua

Video: Msomaji wa AVR / Arduino RFID Na Msimbo wa UART katika C: 4 Hatua

Video: Msomaji wa AVR / Arduino RFID Na Msimbo wa UART katika C: 4 Hatua
Video: Конфигурация Marlin 2.0.9 — установка базовой прошивки 2024, Novemba
Anonim
Msomaji wa AVR / Arduino RFID Na Msimbo wa UART katika C
Msomaji wa AVR / Arduino RFID Na Msimbo wa UART katika C

RFID ni craze, inayopatikana kila mahali - kutoka kwa mifumo ya hesabu hadi mifumo ya kitambulisho cha beji. Ikiwa umewahi kwenda kwenye duka la idara na kutembea kupitia vitu vinavyoonekana kama chuma-detector kwenye sehemu ya kuingilia / kutoka, basi umeona RFID. Kuna maeneo kadhaa ya kupata habari nzuri juu ya kuanzisha RFID, na hii inazingatia kusanikisha msomaji wa Parallax RFID (Serial TTL) kwenye AVR, na kusisitiza nambari ya C inayohitajika kusoma uingizaji wa serial. Nambari iko katika C na haitumii maktaba yoyote ya nje. Kwa kweli, inazungumza baud 2400 moja kwa moja bila matumizi ya UART kwa kusawazisha na kiwango cha baud cha msomaji wa RFID na kusoma pini ya dijiti ambayo imeunganishwa nayo. Msisimko? Mimi pia.

Hatua ya 1: Pata Bidhaa

Pata Bidhaa
Pata Bidhaa

Utahitaji orodha ifuatayo ya sehemu:

  • Msomaji wa RFID (Parallax # 28140 $ 39.99)
  • Lebo ya RFID (Parallax # 32397 $ 0.99)
  • Clone ya AVR au Arduino (ikiwa unatumia hisa ya AVR, utahitaji pia capacitors max232, 5 x 1uF, na kiunganishi cha DE9)
  • Bodi ya mkate isiyo na waya

Hiari

  • Kichwa cha nafasi 4
  • Waya

(na max232 nk kwa mawasiliano ya habari ya lebo) Unaweza pia kuunganisha skrini yako ya LCD unayopenda badala ya kutuma data ya lebo kupitia RS232.

Hatua ya 2: Unganisha Sehemu

Unganisha Sehemu
Unganisha Sehemu
Unganisha Sehemu
Unganisha Sehemu
Unganisha Sehemu
Unganisha Sehemu

Upande wa vifaa ni rahisi sana. Badala ya kubandika msomaji wangu wa RFID moja kwa moja kwenye ubao wangu wa mkate nilichagua kutengeneza kebo haraka ili niweze kusogeza msomaji wa RFID karibu kidogo. Kwa hilo, nilikata tu nafasi 4 kutoka kwa ukanda wa kichwa cha tundu la kike nililokuwa nimelala juu na kuuzwa kwa waya tatu. Mkanda wa umeme ulikamilisha kiunganishi cha ghetto. Msomaji wa RFID ana unganisho 4:

  • Vcc
  • UWEZESHA
  • OUT
  • Ndugu

Kama unavyodhani, unganisha Vcc na + 5V na Gnd chini. Kwa sababu msomaji wa RFID hutumia nguvu nyingi, unaweza kubana pini INAYEWEZA kuizima na kuwaka kwa vipindi anuwai. Nilichagua tu kuendelea. Kwa sababu imegeuzwa, unaivuta CHINI ili kuiwasha. Vinginevyo, unaweza kuiunganisha na ardhi. Niliiunganisha na PIND3 kunipa chaguzi za kuwezesha / kulemaza ikiwa niliamua. Pini ya OUT ndio ambapo msomaji hutuma data yake ya serial baada ya kusoma lebo. Niliiunganisha na PIND2. Kumbuka, katika Ulimwengu wa Parallax, nyekundu ina maana kwenda. Hiyo ni, LED ya kijani inamaanisha kuwa kitengo hakifanyi kazi na inafanya kazi, wakati LED nyekundu inamaanisha kuwa kitengo kinafanya kazi. * shrug * Nenda takwimu.

Hatua ya 3: Andika Nambari

Andika Kanuni
Andika Kanuni

Ili kusoma data kutoka kwa msomaji wa RFID, lazima ujue wakati lebo imewasilishwa, vuta data kutoka kwenye bandari ya serial, kisha upeleke mahali.

Fomati ya Takwimu ya Msomaji wa RFID

Msomaji wa Parallax RFID hutuma data kwa kasi iliyowekwa, glacial ya baud 2400. Lebo ya RFID ni ka 10. Ili kuruhusu kugundua / kusahihisha makosa, kwani msomaji anaweza kutolewa kutoka kwa kelele za nasibu, 10-byte RFID imefungwa na mwanzo na simamisha sentinel. Sentinel ya kuanza ni kulisha laini (0x0A) na kituo cha kuacha ni kurudi kwa gari (0x0D). Inaonekana kama hii:

[Anza Sentinel | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 | Byte 9 | Byte 10 | Acha Sentineli]Hizi ni hatua tatu za msingi.

Jua wakati lebo imewasilishwa

Nilitumia Usumbufu wa Kubadilisha Pin kwenye AVR ambayo inarifu firmware kwamba mabadiliko yametokea kwenye pini inayofuatiliwa. Kusanidi AVR kwa hii ni rahisi na inahitaji kuweka bendera, kuambia MCU ni pini gani unayotaka kufuatilia, na kuweka kiwango cha kukatiza cha ulimwengu. Sanidi PCINT

BSET (PCICR, PCIE2); // mabadiliko ya pini usumbue rejista ya kudhibiti pcie2 BSET (PCMSK2, PCINT18); // kuwezesha usumbufu wa mabadiliko ya pini kwa PCINT18 (PD2) BSET (SREG, 7); // Weka SREG I-bitUnataka kuweka ISR yako fupi kwa hivyo katika vector yangu ya kukatiza nimesoma kaiti nzima, kidogo kidogo, na uhifadhi baiti katika safu ya tabia tete ya ulimwengu. Ninafanya yafuatayo kila kukatiza:

  • Angalia kuhakikisha kuwa nimeanza kidogo
  • Weka muda kwenye mapigo ya kati saa 2400 baud (kasi ya msomaji wa RFID)
  • Ruka mwanzo kidogo na usitishe katikati ya kitufe kinachofuata
  • Soma kila kidogo kwa nambari isiyosainiwa
  • Wakati ninayo bits 8, weka baiti katika safu ya tabia
  • Wakati nimekusanya ka 12, wacha MCU ijue lebo hiyo imesomwa kwa kugundua makosa.

Nilibadilisha nambari ya SoftSerial kutoka kwa Mikal Hart ambaye alibadilisha nambari kutoka kwa David Mellis kwa ucheleweshaji uliojaribiwa kwa majaribio katika safu za kawaida.

Chambua Pato la RS232

Utaratibu wa PCINT una nambari ya kusoma pato la RS232 kutoka kwa msomaji wa RFID. Wakati nimepata kaiti 12 (10-byte RFID pamoja na walinzi) nimeweka bDataReady kwa 1 na acha kitanzi kuu kifanye data na kuionyesha.

// huyu ndiye mshughulikiaji wa usumbufuISR (PCINT2_vect) {ikiwa (BCHK (PIND, RFID_IN)) // Anza kidogo inarudi chini; uint8_t kidogo = 0; TunedDelay (CENTER_DELAY); // Kituo cha kuanza kidogo kwa (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // ruka kidogo, kaka… ikiwa (BCHK (PIND, RFID_IN)) BSET (bit, x); mwingine BCLR (kidogo, x); } TunedDelay (INTRABIT_DELAY); // ruka kuacha kidogo RFID_tag [rxIdx] = kidogo; ++ rxIdx; ikiwa (rxIdx == 12) bDataReady = 1;}

Onyesha lebo yako

Katika kuu (), wakati wa kitanzi cha (milele), ninaangalia kuona ikiwa bDataReady imewekwa, kuashiria kwamba muundo wote wa RFID umetumwa. Kisha ninaangalia ikiwa ni lebo halali (yaani wahusika wa kuanza na kuacha ni 0x0A na 0x0D, mtawaliwa), na ikiwa ni hivyo, ninatuma unganisho langu la RS232.

kwa (;;) {if (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 ("\ n Stop byte:"); USART_tx_S (itoa (RFID_tag [11], & ibuff [0], 16)); # endif ikiwa (ValidTag ()) {USART_tx_S ("\ nRFID Tag:"); kwa (uint8_t x = 1; x <11; x ++) {USART_tx_S (itoa (RFID_tag [x], ibuff, 16)); ikiwa (x! = 10) USART_tx (& apos: & apos); } USART_tx_S ("\ n"); } rxIdx = 0; bDataReady = 0; }}

Hatua ya 4: Kanuni na Kuaga

Ukurasa huu una faili ya zip iliyo na nambari inayofaa. Iliandikwa katika Studio ya AVR 4.16. Ikiwa unatumia kijarida cha programu, kupatwa au vi (au kitu kingine chochote) utahitaji kunakili Faili ya kuaminika kwenye saraka na uongeze faili hizi kwenye laini ya chanzo. Pia kumbuka, wakati wa sehemu ya usomaji wa serial unategemea 16MHz MCU. Ikiwa unafanya mbio kwa masafa tofauti ya saa, utahitaji kujaribu majaribio ya ucheleweshaji uliowekwa ili kuweka katikati ya mapigo ya kiwango cha baud. Natumahi kufundisha huku kukusaidia kwa njia fulani. Ikiwa una maoni yoyote juu ya jinsi inaweza kuboreshwa usisite kunijulisha!

Ilipendekeza: