Indholdsfortegnelse:
Video: AVR/Arduino RFID -læser med UART -kode i C: 4 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:31
RFID er dille, der findes overalt - fra beholdningssystemer til badge -ID -systemer. Hvis du nogensinde har været i et stormagasin og gået igennem de metaldetektorudseende ting ved indgangs-/udgangspunkterne, så har du set RFID. Der er flere steder at finde gode oplysninger om opsætning af RFID, og denne instrukser fokuserer på at installere Parallax RFID -læseren (Serial TTL) på en AVR, med vægt på C -koden, der er nødvendig for at aflæse det serielle input. Koden er i C og bruger ikke nogen eksterne biblioteker. Faktisk taler den 2400 baud direkte uden brug af en UART ved at synkronisere med RFID -læserens baudrate og læse den digitale pin, den er forbundet til. Begejstret? Også mig.
Trin 1: Få varerne
Du skal bruge følgende liste over dele:
- RFID -læser (Parallax #28140 $ 39.99)
- RFID -tag (Parallax #32397 $ 0.99)
- AVR- eller Arduino -klon (hvis du bruger en lager -AVR, skal du også bruge max232, 5 x 1uF kondensatorer og et DE9 -stik)
- Loddefrit brødbræt
Valgfri
- 4 position header
- Tråd
(og max232 osv. til kommunikation af taginformationen) Du kan også tilslutte din yndlings LCD -skærm i stedet for at sende tagdata via RS232.
Trin 2: Tilslut delene
Hardwaresiden af tingene er ret let. I stedet for at plonke min RFID -læser direkte ind i mit brødbræt valgte jeg at lave et hurtigt kabel, så jeg kunne flytte RFID -læseren lidt bedre rundt. Til det har jeg lige afskåret 4 positioner fra en hunstikkontakt, jeg havde liggende og loddet på tre ledninger. Elektrisk bånd afsluttede ghettostikket. RFID -læseren har 4 forbindelser:
- Vcc
- AKTIVER
- UD
- Gnd
Som du sikkert gættede det, skal du slutte Vcc til +5V og Gnd til jorden. Fordi RFID -læseren bruger så meget strøm, kan du slå på ENABLE -stiften for at slukke og tænde den med forskellige intervaller. Jeg valgte simpelthen at beholde den. Fordi den er omvendt, trækker du den LAVT for at aktivere den. Alternativt kan du slutte det til jorden. Jeg sluttede den til PIND3 for at give mig muligheder for at aktivere/deaktivere, hvis jeg besluttede mig for det. OUT -pin er, hvor læseren sender sine serielle data, efter at den har læst et tag. Jeg sluttede den til PIND2. Bemærk, i Parallax Universe betyder rødt go. Det vil sige, at en grøn LED betyder, at enheden er inaktiv og inaktiv, mens en rød LED betyder, at enheden er aktiv. * trækker på skuldrene* Gå figur.
Trin 3: Skriv koden
For at læse dataene fra RFID -læseren skal du vide, hvornår et tag er blevet indsendt, trække dataene ud af den serielle port og derefter sende det et sted.
RFID -læserdataformat
Parallax RFID -læseren sender data i et fast, glacialt tempo på 2400 baud. Et RFID -tag er 10 bytes. For at muliggøre fejldetektering/korrektion, da læseren kunne modregnes fra tilfældig støj, er 10-byte RFID afgrænset af en start- og stopvagt. Startvagten er line feed (0x0A), og stopvagten er vognretur (0x0D). Det ser sådan ud:
[Start Sentinel | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 | Byte 9 | Byte 10 | Stop Sentinel]Disse er de tre primære trin.
Ved, hvornår et tag er blevet indsendt
Jeg brugte en Pin Change Interrupt på AVR'en, der underretter firmwaren om, at der er sket en ændring på en overvåget pin. Konfiguration af AVR til dette er let og kræver indstilling af flaget, fortæller MCU'en hvilken pin du vil overvåge og indstilling af den globale afbrydelsesbit. Konfigurer PCINT
BSET (PCICR, PCIE2); // pin ændring afbryde kontrol register pcie2 BSET (PCMSK2, PCINT18); // Aktiver afbrydelse af pin -ændring for PCINT18 (PD2) BSET (SREG, 7); // Indstil SREG I-bitSkriv din rutine for afbrydelser Du vil holde din ISR kort, så i min afbrydelsesvektor læser jeg hele byte, bit for bit, og gemmer byten i et globalt flygtigt tegnarray. Jeg gør følgende ved hver afbrydelse:
- Kontroller, om jeg er i gang
- Centrer timingen på den midterste puls ved 2400 baud (RFID -læserens hastighed)
- Spring startbiten over, og hold pause til midten af den næste bit
- Læs hver bit ind i et usigneret heltal
- Når jeg har 8 bits, skal du sætte byte i et karakter array
- Når jeg har samlet 12 bytes, skal MCU fortælle, at tagget er blevet læst til fejlsøgning.
Jeg ændrede SoftSerial -kode fra Mikal Hart, der ændrede koden fra David Mellis for de eksperimentelt bestemte forsinkelser i de serielle rutiner.
Analyse RS232 -output
PCINT-rutinen indeholder koden til læsning af RS232-output fra RFID-læseren. Når jeg har fået 12 bytes (10-byte RFID plus vagtposter) sætter jeg bDataReady til 1 og lader hovedsløjfen behandle dataene og vise dem.
// dette er interrupt handlerISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // Start bit går lavt retur; uint8_t bit = 0; TunedDelay (CENTER_DELAY); // Center på startbit for (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // spring lidt over, bror … hvis (BCHK (PIND, RFID_IN)) BSET (bit, x); ellers BCLR (bit, x); } TunedDelay (INTRABIT_DELAY); // spring stop bit RFID_tag [rxIdx] = bit; ++ rxIdx; hvis (rxIdx == 12) bDataReady = 1;}
Vis dit tag
I main (), under for (ever) loop, kontrollerer jeg, om bDataReady er blevet indstillet, hvilket signalerer, at hele RFID -strukturen er blevet sendt. Jeg kontrollerer derefter, om det er et gyldigt mærke (dvs. start- og stoptegn er henholdsvis 0x0A og 0x0D), og i så fald sender jeg det ud af min RS232 -forbindelse.
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 ("\ nStop 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; }}
Trin 4: Kode og farvel
Denne side indeholder en zip -fil med den relevante kode. Det blev skrevet i AVR Studio 4.16. Hvis du bruger programmørens notesblok, formørkelse eller vi (eller noget andet), skal du kopiere en betroet Makefile til biblioteket og tilføje disse filer til kildelinjen. Bemærk også, at timingen for den serielle læsning er baseret på en 16MHz MCU. Hvis du kører med en anden urfrekvens, skal du eksperimentelt bestemme de indstillede forsinkelser for at centrere baudhastighedspulserne. Jeg håber, at denne instruktive hjalp dig på en eller anden måde. Hvis du har forslag til, hvordan det kan forbedres, tøv ikke med at give mig besked!
Anbefalede:
Arduino som internetudbyder -- Brænd hexfil i AVR -- Sikring i AVR -- Arduino som programmerer: 10 trin
Arduino som internetudbyder || Brænd hexfil i AVR || Sikring i AVR || Arduino som programmerer: ……………………… Abonner venligst på min YouTube -kanal for flere videoer …….. Denne artikel handler alt om arduino som isp. Hvis du vil uploade hex -fil, eller hvis du vil indstille din sikring i AVR, behøver du ikke købe en programmør, du kan gøre
Atmega128A proportional motorkørsel - ATMEL ICE AVR -timer UART PWM -kontrol: 4 trin
Atmega128A proportionel motorkørsel - ATMEL ICE AVR -timer UART PWM -kontrol: I denne instruktive forklarer jeg dig, hvordan du styrer en DC -motor med PWM -kommunikation via UART -håndtagstimerafbrydelser Først og fremmest vil vi bruge et AVR Core -systemudviklingskort som du kan finde på Aliexpress omkring 4 USD. Udviklingskortet
AVR/Arduino Blinker Med Raspberry Pi: 3 trin (med billeder)
AVR/Arduino Blinker Med Raspberry Pi: En in-system programmerer (ISP) er en enhed, du kan bruge til at programmere mange mikrokontrollere, for eksempel ATMega328p, der er hjernen i en Arduino Uno. Du kan købe noget som en USBtinyISP, eller du kan endda bruge en Arduino. Denne instruktive vil
Skift Bluetooth -headset/højttaler/adapternavn eller andre indstillinger via UART: 8 trin (med billeder)
Skift Bluetooth -headset/højttaler/adapterens navn eller andre indstillinger via UART: Har du tilfældigvis et par Bluetooth -headset eller andet Bluetooth -lydtilbehør, der har et virkelig modbydeligt navn, og hver gang du parrer dem, har du dette indre ønske om at ændre deres navn? Selvom årsagerne ikke er de samme, er der en
Trådløs seriel (UART) til Arduino/STM32/etc .: 3 trin (med billeder)
Wireless Serial (UART) til Arduino/STM32/etc .: Forhåbentlig er alle enige med mig om, at Arduino Serial er et godt værktøj til fejlfinding af dine projekter. Nå, det er dybest set den eneste mulighed for fejlfinding af en Arduino. Men nogle gange er det ikke muligt eller praktisk at køre et USB -kabel fra Ard