INHOUDSOPGAWE:
Video: AVR/Arduino RFID -leser met UART -kode in C: 4 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:28
RFID is die gier wat oral gevind word - van voorraadstelsels tot kenteken -ID -stelsels. As u al ooit in 'n warenhuis was en deur die metaaldetektor-dinge by die ingangspunte gegaan het, dan het u RFID gesien. Daar is verskillende plekke om goeie inligting oor die opstel van RFID te vind, en hierdie instruksies fokus op die installering van die Parallax RFID -leser (Serial TTL) op 'n AVR, met die klem op die C -kode wat nodig is om die reeksinvoer te lees. Die kode is in C en gebruik geen eksterne biblioteke nie. In werklikheid spreek dit 2400 baud direk sonder die gebruik van 'n UART deur te sinchroniseer met die baud rate van die RFID -leser en die digitale pin waarmee dit gekoppel is, te lees. Opgewonde? Ek ook.
Stap 1: Kry die goedere
U benodig die volgende lys onderdele:
- RFID -leser (Parallax #28140 $ 39,99)
- RFID -tag (Parallax #32397 $ 0.99)
- AVR- of Arduino -kloon (as u 'n voorraad -AVR gebruik, benodig u ook 'n maksimum van 232, 5 x 1uF kapasitors en 'n DE9 -aansluiting)
- Soldeerlose broodbord
Opsioneel
- Kopskrif met 4 posisies
- Draad
(en die max232 ens. vir die kommunikasie van die etiketinligting) U kan ook u gunsteling LCD -skerm verbind in plaas van die stuur van data via RS232.
Stap 2: Koppel die onderdele
Die hardeware -kant van dinge is redelik maklik. In plaas daarvan om my RFID -leser direk in my broodbord te steek, het ek besluit om 'n vinnige kabel te maak sodat ek die RFID -leser 'n bietjie beter kon rondskuif. Daarvoor het ek net 4 posisies afgesny van 'n vroulike voetstukstrook waaroor ek gelê het en aan drie drade gesoldeer het. Elektriese band het die ghetto -aansluiting voltooi. Die RFID -leser het 4 verbindings:
- Vcc
- SKAKEL
- UIT
- Gnd
Soos u waarskynlik geraai het, koppel Vcc aan +5V en Gnd aan die grond. Omdat die RFID -leser soveel krag verbruik, kan u met die ENABLE -pen druk om dit met verskillende tussenposes aan en uit te skakel. Ek het eenvoudig gekies om dit aan te hou. Omdat dit omgekeerd is, trek u dit LOW om dit te aktiveer. Alternatiewelik kan u dit met die grond verbind. Ek het dit aan PIND3 gekoppel om my die opsies te gee om in/uit te skakel as ek besluit. Die OUT -pen is waarheen die leser sy seriële data stuur nadat hy 'n etiket gelees het. Ek het dit gekoppel aan PIND 2. Let wel, in die Parallax Heelal beteken rooi gaan. Dit wil sê, 'n groen LED beteken dat die eenheid onaktief en ledig is, terwyl 'n rooi LED beteken dat die eenheid aktief is. * trek sy skouers op* Gaan figuur.
Stap 3: Skryf die kode
Om die data van die RFID -leser te lees, moet u weet wanneer 'n etiket ingedien is, die data uit die seriële poort trek en dit dan iewers heen stuur.
RFID -leser dataformaat
Die Parallax RFID -leser stuur data teen 'n vaste, ystydige tempo van 2400 baud. 'N RFID -etiket is 10 grepe. Om die opsporing/regstelling van foute moontlik te maak, word die 10-byte RFID begrens deur 'n begin- en stopwagter, aangesien die leser van willekeurige geraas afgeskakel kan word. Die beginwag is lynvoer (0x0A) en die stopwagter is vervoeropgawe (0x0D). Dit lyk so:
[Begin Sentinel | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 | Byte 9 | Byte 10 | Stop Sentinel]Dit is die drie primêre stappe.
Weet wanneer 'n etiket ingedien is
Ek het 'n Pin Change Interrupt op die AVR gebruik wat die firmware in kennis stel dat 'n verandering op 'n gemonitorde pin plaasgevind het. Dit is maklik om die AVR hiervoor in te stel en dit is nodig om die vlag te stel, die MCU te vertel watter pen u wil monitor en die globale onderbrekingsbit in te stel. Stel PCINT op
BSET (PCICR, PCIE2); // pin change interrupt control register pcie2 BSET (PCMSK2, PCINT18); // maak onderbreking van pen verander vir PCINT18 (PD2) BSET (SREG, 7); // Stel SREG I-bit inSkryf u onderbrekingsdiensroetine: u wil u ISR kort hou, so in my onderbrekingsvektor lees ek die hele greep, stukkie vir stukkie, en stoor die greep in 'n globale wisselvallige karakterreeks. Ek doen die volgende by elke onderbreking:
- Kontroleer of ek aan die gang is
- Sentreer die tydsberekening op die middelste pols met 2400 baud (die snelheid van die RFID -leser)
- Slaan die beginpunt oor en wag tot die middel van die volgende bietjie
- Lees elke stukkie in 'n ongetekende heelgetal
- As ek 8 bisse het, sit die byte in 'n karakterreeks
- As ek 12 grepe versamel het, laat die MCU weet dat die etiket gelees is vir foutopsporing.
Ek het die SoftSerial -kode verander van Mikal Hart, wat die kode van David Mellis gewysig het vir die eksperimenteel bepaalde vertragings in die reeksroetines.
Ontleed RS232 -uitset
Die PCINT-roetine bevat die kode vir die lees van die RS232-uitset van die RFID-leser. Toe ek 12 grepe (10-byte RFID plus sentinels) gekry het, stel ek bDataReady op 1 en laat die hooflus die data verwerk en dit vertoon.
// dit is die interrupt handlerISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // Begin bietjie gaan lae opbrengs; uint8_t bietjie = 0; TunedDelay (CENTER_DELAY); // Sentreer op beginbit vir (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // slaan 'n bietjie oor, broer … as (BCHK (PIND, RFID_IN)) BSET (bietjie, x); anders BCLR (bit, x); } TunedDelay (INTRABIT_DELAY); // slaan stopbit RFID_tag [rxIdx] = bietjie oor; ++ rxIdx; as (rxIdx == 12) bDataReady = 1;}
Vertoon u merker
In die hoof (), tydens die vir (ooit) lus, kyk ek of bDataReady ingestel is, wat aandui dat die hele RFID -struktuur gestuur is. Ek kyk dan of dit 'n geldige etiket is (dws begin- en stopkarakters is onderskeidelik 0x0A en 0x0D), en indien wel, stuur ek dit uit my RS232 -verbinding.
vir (;;) {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 ("\ nStop byte:"); USART_tx_S (itoa (RFID_tag [11], & ibuff [0], 16));#endif if (ValidTag ()) {USART_tx_S ("\ nRFID Tag:"); vir (uint8_t x = 1; x <11; x ++) {USART_tx_S (itoa (RFID_tag [x], ibuff, 16)); as (x! = 10) USART_tx (& apos: & apos); } USART_tx_S ("\ n"); } rxIdx = 0; bDataReady = 0; }}
Stap 4: Kode en afskeid
Hierdie bladsy bevat 'n zip -lêer met die relevante kode. Dit is in AVR Studio 4.16 geskryf. As u 'n notaboek, verduistering of vi (of iets anders) van die programmeerder gebruik, moet u 'n betroubare Makefile in die gids kopieer en hierdie lêers by die bronlyn voeg. Let ook op dat die tydsberekening vir die reeksleesafdeling gebaseer is op 16 MHz MCU. As u op 'n ander klokfrekwensie werk, moet u die ingestelde vertragings eksperimenteel bepaal om die baudrate -pulse te konsentreer. Ek hoop dat hierdie instruksies u op 'n manier gehelp het. As u voorstelle het oor hoe dit verbeter kan word, moet u dit asseblief laat weet!
Aanbeveel:
Arduino As ISP -- Brand Hex -lêer in AVR -- Lont in AVR -- Arduino as programmeerder: 10 stappe
Arduino As ISP || Brand Hex -lêer in AVR || Lont in AVR || Arduino As programmeerder: ……………………… Teken asb in op my YouTube -kanaal vir meer video's …….. Hierdie artikel gaan alles oor arduino as isp. As u 'n hex -lêer wil oplaai of as u die lont in AVR wil plaas, hoef u nie 'n programmeerder te koop nie, u kan dit doen
Atmega128A proporsionele motorbestuur - ATMEL ICE AVR -timer UART PWM -beheer: 4 stappe
Atmega128A proporsionele motorbestuur - ATMEL ICE AVR -timer UART PWM -beheer: In hierdie instruksies sal ek u verduidelik hoe u 'n GS -motor met PWM kan kommunikeer via UART -handvatseltimeronderbrekings. Eerstens gebruik ons 'n AVR Core -stelselontwikkelingskaart wat u op Aliexpress ongeveer 4 USD kan vind. Die ontwikkelingsbord
AVR/Arduino flits met framboos Pi: 3 stappe (met foto's)
AVR/Arduino Flashing With Raspberry Pi: 'n Inprogram-programmeerder (ISP) is 'n toestel wat u kan gebruik om baie mikrobeheerders te programmeer, byvoorbeeld die ATMega328p wat die brein van 'n Arduino Uno is. U kan iets soos 'n USBtinyISP koop, of u kan selfs 'n Arduino gebruik. Hierdie opdragbare sal
Draadlose afstandsbediening met 2,4 GHz NRF24L01 -module met Arduino - Nrf24l01 4 -kanaals / 6 -kanaals sender -ontvanger voor quadcopter - Rc Helikopter - Rc -vliegtuig met Arduino: 5 stappe (met foto's)
Draadlose afstandsbediening met 2,4 GHz NRF24L01 -module met Arduino | Nrf24l01 4 -kanaals / 6 -kanaals sender -ontvanger voor quadcopter | Rc Helikopter | Rc -vliegtuig met Arduino: om 'n Rc -motor te bestuur | Quadcopter | Drone | RC -vliegtuig | RC -boot, ons het altyd 'n ontvanger en sender nodig, veronderstel dat ons vir RC QUADCOPTER 'n 6 -kanaals sender en ontvanger nodig het en dat die tipe TX en RX te duur is, so ons maak een op ons
Wireless Serial (UART) vir Arduino/STM32/ens .: 3 stappe (met foto's)
Wireless Serial (UART) vir Arduino/STM32/ens .: Hopelik sal almal met my saamstem dat die Arduino Serial 'n uitstekende hulpmiddel is om u projekte te ontfout. Dit is basies die enigste opsie om 'n Arduino te ontfout. Maar soms is dit nie moontlik of prakties om 'n USB -kabel van die Ard af te voer nie