Innholdsfortegnelse:
Video: AVR/Arduino RFID -leser med UART -kode i C: 4 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:26
RFID er mani, funnet overalt - fra beholdningssystemer til merke -ID -systemer. Hvis du noen gang har vært på et varehus og gått gjennom de metalldetektor-utseende tingene ved inngangs-/utgangspunkter, så har du sett RFID. Det er flere steder å finne god informasjon om konfigurering av RFID, og denne instruksjonsfokus fokuserer på å installere Parallax RFID -leseren (Serial TTL) på en AVR, med vekt på C -koden som er nødvendig for å lese seriell inngang. Koden er i C og bruker ikke eksterne biblioteker. Faktisk snakker den 2400 baud direkte uten bruk av en UART ved å synkronisere med RFID -leserens baudhastighet og lese den digitale pinnen den er koblet til. Spent? Jeg også.
Trinn 1: Få varene
Du trenger følgende liste over deler:
- RFID -leser (Parallax #28140 $ 39.99)
- RFID -tag (Parallax #32397 $ 0.99)
- AVR- eller Arduino -klon (hvis du bruker en lager -AVR, trenger du også en maks232, 5 x 1uF kondensatorer og en DE9 -kontakt)
- Loddefritt brødbrett
Valgfri
- To posisjon overskrift
- Metalltråd
(og max232 osv. for kommunikasjon av taginformasjonen) Du kan også koble til din favoritt LCD -skjerm i stedet for å sende tagdata via RS232.
Trinn 2: Koble delene
Maskinvaresiden av ting er ganske enkel. I stedet for å plonere RFID -leseren min direkte inn i brødbrettet, valgte jeg å lage en rask kabel slik at jeg kunne flytte RFID -leseren litt bedre rundt. For det, kuttet jeg bare 4 posisjoner fra en hunkontakthodestrimmel jeg hadde liggende og loddet på tre ledninger. Elektrisk tape fullførte ghettokontakten. RFID -leseren har 4 tilkoblinger:
- Vcc
- MULIGGJØRE
- UTE
- Gnd
Som du sannsynligvis gjettet det, kobler du Vcc til +5V og Gnd til bakken. Fordi RFID -leseren bruker så mye strøm, kan du slå på ENABLE -pinnen for å slå den av og på med forskjellige intervaller. Jeg valgte ganske enkelt å beholde den. Fordi den er invertert, trekker du den LAV for å aktivere den. Alternativt kan du koble den til bakken. Jeg koblet den til PIND3 for å gi meg muligheter for å aktivere/deaktivere hvis jeg bestemte meg for det. OUT -pinnen er der leseren sender sine serielle data etter at den har lest en tag. Jeg koblet den til PIND2. Merk, i Parallax Universe betyr rødt go. Det vil si at en grønn LED betyr at enheten er inaktiv og inaktiv, mens en rød LED betyr at enheten er aktiv. * trekker på skuldrene* Gå figur.
Trinn 3: Skriv koden
For å lese dataene fra RFID -leseren må du vite når en tag er sendt inn, trekke dataene ut av serieporten og deretter sende dem et sted.
RFID Reader Data Format
Parallax RFID -leseren sender data i et fast istid på 2400 baud. En RFID -kode er 10 byte. For å gjøre det mulig å oppdage/korrigere feil, siden leseren kan settes av fra tilfeldig støy, er 10-byte RFID begrenset av en start- og stoppvakt. Startvaktmesteren er linjemating (0x0A) og stoppvaktmesteren er vognretur (0x0D). Det ser slik ut:
[Start Sentinel | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 | Byte 9 | Byte 10 | Stopp Sentinel]Dette er de tre hovedtrinnene.
Vet når en tag er sendt inn
Jeg brukte en Pin Change Interrupt på AVR som varsler fastvaren om at det har skjedd en endring på en overvåket pin. Det er enkelt å konfigurere AVR for dette og krever å sette flagget, fortelle MCU hvilken pin du vil overvåke og sette den globale avbruddsbiten. Konfigurer PCINT
BSET (PCICR, PCIE2); // pin -change interrupt control register pcie2 BSET (PCMSK2, PCINT18); // aktivere avbrudd for pin -endring for PCINT18 (PD2) BSET (SREG, 7); // Sett SREG I-bitSkriv din avbruddstjenesterutine Du vil beholde din ISR kort, så i min avbruddsvektor leser jeg hele byten, bit for bit, og lagrer byten i et globalt flyktig tegnsett. Jeg gjør følgende ved hvert avbrudd:
- Kontroller at jeg er i gang
- Sentrer timingen på midtpulsen ved 2400 baud (hastigheten til RFID -leseren)
- Hopp over startbiten og pause til midten av neste bit
- Les hver bit inn i et usignert heltall
- Når jeg har 8 bits, setter du byten inn i en tegnserie
- Når jeg har samlet 12 byte, må MCU vite at taggen er lest for feildeteksjon.
Jeg endret SoftSerial -koden fra Mikal Hart som endret koden fra David Mellis for de eksperimentelt bestemte forsinkelsene i serierutinene.
Analyse RS232 -utgang
PCINT-rutinen inneholder koden for lesing av RS232-utdata fra RFID-leseren. Når jeg har fått 12 byte (10-byte RFID pluss sentineler) setter jeg bDataReady til 1 og lar hovedsløyfen behandle dataene og vise dem.
// dette er interrupt handlerISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // Start bit går lav retur; uint8_t bit = 0; TunedDelay (CENTER_DELAY); // Senter på startbit for (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // hoppe over litt, bror … hvis (BCHK (PIND, RFID_IN)) BSET (bit, x); annet BCLR (bit, x); } TunedDelay (INTRABIT_DELAY); // hopp over stoppbit RFID_tag [rxIdx] = bit; ++ rxIdx; hvis (rxIdx == 12) bDataReady = 1;}
Vis taggen din
I main (), under for (ever) loop, sjekker jeg for å se om bDataReady er satt, og signaliserer at hele RFID -strukturen er sendt. Jeg sjekker deretter om det er en gyldig tag (dvs. start- og stopptegn er henholdsvis 0x0A og 0x0D), og i så fall sender jeg den ut min RS232 -tilkobling.
for (;;) {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 ("\ nStopp byte:"); 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)); hvis (x! = 10) USART_tx (& apos: & apos); } USART_tx_S ("\ n"); } rxIdx = 0; bDataReady = 0; }}
Trinn 4: Kode og farvel
Denne siden inneholder en zip -fil med den relevante koden. Den ble skrevet i AVR Studio 4.16. Hvis du bruker programmererens notisblokk, formørkelse eller vi (eller noe annet), må du kopiere en klarert Makefile til katalogen og legge disse filene til kildelinjen. Vær oppmerksom på at timingen for den serielle leseseksjonen er basert på en 16MHz MCU. Hvis du kjører med en annen klokkefrekvens, må du eksperimentelt bestemme de innstilte forsinkelsene for å sentrere baudfrekvenspulsene. Jeg håper at denne instruktøren hjalp deg på en eller annen måte. Hvis du har forslag til hvordan det kan forbedres, ikke nøl med å gi meg beskjed!
Anbefalt:
Arduino As ISP -- Brenn sekskantfil i AVR -- Sikring i AVR -- Arduino som programmerer: 10 trinn
Arduino As ISP || Brenn sekskantfil i AVR || Sikring i AVR || Arduino Som programmerer: ……………………… Vennligst abonner på YouTube -kanalen min for flere videoer …….. Denne artikkelen handler om arduino som isp. Hvis du vil laste opp hex -fil eller hvis du vil sette sikringen i AVR, trenger du ikke kjøpe en programmerer, du kan gjøre
Atmega128A proporsjonal motorkjøring - ATMEL ICE AVR -timer UART PWM -kontroll: 4 trinn
Atmega128A proporsjonal motorkjøring - ATMEL ICE AVR -timer UART PWM -kontroll: I denne instruksen vil jeg forklare deg hvordan du styrer en likestrømsmotor med PWM -kommunikasjon via UART -håndtakstimer Avbrudd Først av alt bruker vi et AVR Core -systemutviklingskort som du finner på Aliexpress rundt 4 USD. Utviklingskortet
AVR/Arduino blinkende med bringebær Pi: 3 trinn (med bilder)
AVR/Arduino Flashing With Raspberry Pi: En in-system programmerer (ISP) er en enhet du kan bruke til å programmere mange mikrokontrollere, for eksempel ATMega328p som er hjernen til en Arduino Uno. Du kan kjøpe noe som en USBtinyISP, eller du kan til og med bruke en Arduino. Denne instruerbare vil
Endre Bluetooth -hodesett/høyttaler/adapternavn eller andre innstillinger gjennom UART: 8 trinn (med bilder)
Endre Bluetooth -hodesett/høyttaler/adapternavn eller andre innstillinger gjennom UART: Har du tilfeldigvis et par Bluetooth -hodesett eller annet Bluetooth -lydtilbehør som har et virkelig ekkelt navn, og hver gang du kobler dem sammen, har du dette indre ønsket om å endre Navn? Selv om årsakene ikke er de samme, er det en
Trådløs serie (UART) for Arduino/STM32/etc .: 3 trinn (med bilder)
Wireless Serial (UART) for Arduino/STM32/etc .: Forhåpentligvis er alle enige med meg om at Arduino Serial er et flott verktøy for feilsøking av prosjektene dine. Vel, det er i utgangspunktet det eneste alternativet for feilsøking av en Arduino. Men noen ganger er det ikke mulig eller praktisk å kjøre en USB -kabel fra Ard