Innehållsförteckning:
Video: AVR/Arduino RFID -läsare med UART -kod i C: 4 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:48
RFID är vurmen, som finns överallt - från lagersystem till ID -system för märken. Om du någonsin har varit på ett varuhus och gått igenom de metalldetektor-snygga sakerna vid ingångs-/utgångspunkterna, har du sett RFID. Det finns flera ställen att hitta bra information om hur man konfigurerar RFID, och den här instruerbara fokuserar på att installera Parallax RFID -läsaren (Serial TTL) på en AVR, med tonvikt på C -koden som behövs för att läsa serieingången. Koden finns i C och använder inga externa bibliotek. Faktum är att den talar 2400 baud direkt utan att använda en UART genom att synkronisera med RFID -läsarens baudhastighet och läsa den digitala stift som den är ansluten till. Upphetsad? Jag med.
Steg 1: Skaffa varorna
Du behöver följande lista med delar:
- RFID -läsare (Parallax #28140 $ 39,99)
- RFID -tagg (Parallax #32397 $ 0,99)
- AVR- eller Arduino -klon (om du använder en AVR i lager behöver du också max232, 5 x 1uF kondensatorer och en DE9 -kontakt)
- Lödlös brödbräda
Frivillig
- Sidhuvud med 4 positioner
- Tråd
(och max232 etc för kommunikation av etikettinformationen) Du kan också ansluta din favorit LCD -skärm istället för att skicka taggdata via RS232.
Steg 2: Anslut delarna
Hårdvarusidan är en ganska enkel sak. Istället för att plonka in min RFID -läsare direkt i min brödbräda valde jag att göra en snabbkabel så att jag kunde flytta runt RFID -läsaren lite bättre. För det klippte jag bara av 4 positioner från en honkontaktremsa som jag hade liggande och lödde på tre ledningar. Eltejp slutförde ghettokontakten. RFID -läsaren har 4 anslutningar:
- Vcc
- GÖR DET MÖJLIGT
- UT
- Gnd
Som du säkert gissade, anslut Vcc till +5V och Gnd till jord. Eftersom RFID -läsaren förbrukar så mycket ström kan du slå på ENABLE -stiftet för att stänga av och på med olika intervall. Jag valde helt enkelt att fortsätta. Eftersom den är inverterad drar du den LÅG för att aktivera den. Alternativt kan du ansluta den till jord. Jag kopplade den till PIND3 för att ge mig alternativ för att aktivera/inaktivera om jag bestämde mig för det. OUT -stiftet är dit läsaren skickar sina seriella data efter att den läst en tagg. Jag kopplade den till PIND2. Observera, i Parallax -universum betyder rött att gå. Det vill säga en grön lysdiod betyder att enheten är inaktiv och inaktiv, medan en röd lysdiod betyder att enheten är aktiv. * rycka på axlarna* Gå figur.
Steg 3: Skriv koden
För att läsa data från RFID -läsaren måste du veta när en tagg har skickats in, dra ut data från serieporten och skicka den någonstans.
RFID Reader Data Format
Parallax RFID -läsare skickar data i en fast, glacial takt på 2400 baud. En RFID -tagg är 10 byte. För att möjliggöra feldetektering/-korrigering, eftersom läsaren kan avstängas från slumpmässigt brus, begränsas 10-bytes RFID av en start- och stoppvakt. Startvaktmästaren är radmatning (0x0A) och stoppvaktposten är vagnretur (0x0D). Det ser ut så här:
[Start Sentinel | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 | Byte 9 | Byte 10 | Stop Sentinel]Det här är de tre primära stegen.
Vet när en tagg har skickats in
Jag använde ett Pin Change Interrupt på AVR som meddelar firmware att en ändring har skett på en övervakad pin. Att konfigurera AVR för detta är enkelt och kräver att flaggan ställs in, meddelar MCU vilken pin du vill övervaka och ställer in den globala avbrottsbiten. Konfigurera PCINT
BSET (PCICR, PCIE2); // stiftbyte avbryt kontrollregister pcie2 BSET (PCMSK2, PCINT18); // aktivera stiftbytesavbrott för PCINT18 (PD2) BSET (SREG, 7); // Ställ in SREG I-bitSkriv din avbrottsrutin Du vill hålla din ISR kort så i min avbrottsvektor läser jag hela byten bit för bit och lagrar byten i en global flyktig teckenmatris. Jag gör följande vid varje avbrott:
- Kontrollera att jag är igång
- Centrera timingen på mittpulsen vid 2400 baud (RFID -läsarens hastighet)
- Hoppa över startbiten och pausa till mitten av nästa bit
- Läs in varje bit i ett osignerat heltal
- När jag har 8 bitar lägger du in byten i en teckenmatris
- När jag har samlat 12 byte, låt MCU veta att taggen har lästs för feldetektering.
Jag modifierade SoftSerial -koden från Mikal Hart som ändrade koden från David Mellis för de experimentellt bestämda förseningarna i serierutinerna.
Analysera RS232 -utgång
PCINT-rutinen innehåller koden för att läsa RS232-utmatningen från RFID-läsaren. När jag har fått 12 byte (10-byte RFID plus vaktposter) ställer jag in bDataReady till 1 och låter huvudslingan bearbeta data och visa dem.
// detta är interrupt handlerISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // Startbiten blir låg avkastning; uint8_t bit = 0; TunedDelay (CENTER_DELAY); // Center på startbiten för (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // hoppa över lite, bror … om (BCHK (PIND, RFID_IN)) BSET (bit, x); annars BCLR (bit, x); } TunedDelay (INTRABIT_DELAY); // hoppa över stoppbit RFID_tag [rxIdx] = bit; ++ rxIdx; if (rxIdx == 12) bDataReady = 1;}
Visa din tagg
I main (), under för (någonsin) loop, kontrollerar jag om bDataReady har ställts in, vilket signalerar att hela RFID -strukturen har skickats. Jag kontrollerar sedan om det är en giltig tagg (dvs. start- och stopptecken är 0x0A respektive 0x0D), och i så fall skickar jag ut min RS232 -anslutning.
för (;;) {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 ("\ nStoppbyte:"); USART_tx_S (itoa (RFID_tag [11], & ibuff [0], 16));#endif if (ValidTag ()) {USART_tx_S ("\ nRFID Tag:"); för (uint8_t x = 1; x <11; x ++) {USART_tx_S (itoa (RFID_tag [x], ibuff, 16)); om (x! = 10) USART_tx (& apos: & apos); } USART_tx_S ("\ n"); } rxIdx = 0; bDataReady = 0; }}
Steg 4: Kod och avsked
Denna sida innehåller en zip -fil med relevant kod. Det skrevs i AVR Studio 4.16. Om du använder programmerarens anteckningsblock, eclipse eller vi (eller något annat) måste du kopiera en betrodd Makefile till katalogen och lägga till dessa filer på källraden. Observera också att tidpunkten för den seriella lässektionen är baserad på en 16MHz MCU. Om du kör med en annan klockfrekvens måste du experimentellt bestämma de inställda fördröjningarna för att centrera baudfrekvenspulserna. Jag hoppas att denna instruerbara hjälpte dig på något sätt. Om du har några förslag på hur det kan förbättras, tveka inte att meddela mig!
Rekommenderad:
Arduino Som ISP -- Bränn hexfil i AVR -- Säkring i AVR -- Arduino som programmerare: 10 steg
Arduino Som ISP || Bränn hexfil i AVR || Säkring i AVR || Arduino som programmerare: ……………………… Prenumerera på min YouTube -kanal för fler videor …….. Denna artikel handlar om arduino som isp. Om du vill ladda upp hex -fil eller om du vill ställa in din säkring i AVR behöver du inte köpa en programmerare, du kan göra
Atmega128A proportionell motorkörning - ATMEL ICE AVR -timer UART PWM -kontroll: 4 steg
Atmega128A proportionell motorkörning - ATMEL ICE AVR -timer UART PWM -kontroll: I den här instruktören kommer jag att förklara hur du styr en likströmsmotor med PWM -kommunikation via UART -handtagstimer Avbrott Först och främst använder vi ett AVR Core -systemutvecklingskort som du hittar på Aliexpress runt 4 USD. Utvecklingskortet
AVR/Arduino blinkar med hallon Pi: 3 steg (med bilder)
AVR/Arduino blinkar med Raspberry Pi: En in-system programmerare (ISP) är en enhet du kan använda för att programmera många mikrokontroller, till exempel ATMega328p som är hjärnan i en Arduino Uno. Du kan köpa något som en USBtinyISP, eller så kan du till och med använda en Arduino. Denna instruerbara kommer
Ändra Bluetooth -headset/högtalare/adapterens namn eller andra inställningar via UART: 8 steg (med bilder)
Ändra Bluetooth -headset/högtalare/adapterens namn eller andra inställningar genom UART: Har du ett par Bluetooth -headset eller andra Bluetooth -ljudtillbehör som har ett riktigt äckligt namn och varje gång du kopplar ihop dem har du denna inre önskan att ändra sina namn? Även om orsakerna inte är desamma finns det
Trådlös seriell (UART) för Arduino/STM32/etc: 3 steg (med bilder)
Wireless Serial (UART) för Arduino/STM32/etc: Förhoppningsvis håller alla med mig om att Arduino Serial är ett bra verktyg för att felsöka dina projekt. Tja, det är i princip det enda alternativet för felsökning av en Arduino. Men ibland är det inte möjligt eller praktiskt att köra en USB -kabel från Ard