Inhoudsopgave:
- Stap 1: Verkrijg de goederen
- Stap 2: Verbind de onderdelen
- Stap 3: Schrijf de code
- Stap 4: Code en afscheid
Video: AVR/Arduino RFID-lezer met UART-code in C - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:20
RFID is de rage, overal te vinden - van voorraadsystemen tot badge-ID-systemen. Als je ooit in een warenhuis bent geweest en door die metaaldetector-achtige dingen bij de in- en uitgangen bent gelopen, dan heb je RFID gezien. Er zijn verschillende plaatsen om goede informatie te vinden over het instellen van RFID, en deze instructable richt zich op het installeren van de Parallax RFID-lezer (Serial TTL) op een AVR, met de nadruk op de C-code die nodig is om de seriële invoer te lezen. De code is in C en gebruikt geen externe bibliotheken. In feite spreekt het direct 2400 baud zonder het gebruik van een UART door te synchroniseren met de baudrate van de RFID-lezer en de digitale pin te lezen waarmee het is verbonden. Opgewonden? Ik ook.
Stap 1: Verkrijg de goederen
Je hebt de volgende lijst met onderdelen nodig:
- RFID-lezer (Parallax #28140 $ 39,99)
- RFID-tag (Parallax #32397 $ 0,99)
- AVR- of Arduino-kloon (als je een standaard AVR gebruikt, heb je ook een max232, 5 x 1uF-condensatoren en een DE9-connector nodig)
- Soldeerloze breadboard
Optioneel
- 4 positie koptekst
- Draad
(en de max232 enz. voor communicatie van de tag-informatie) U kunt ook uw favoriete LCD-scherm aansluiten in plaats van taggegevens via RS232 te verzenden.
Stap 2: Verbind de onderdelen
De hardwarekant is vrij eenvoudig. In plaats van mijn RFID-lezer direct in mijn breadboard te stoppen, heb ik ervoor gekozen om een snelle kabel te maken, zodat ik de RFID-lezer iets beter kon verplaatsen. Daarvoor heb ik gewoon 4 posities afgesneden van een vrouwelijke socket-headerstrip die ik had liggen en op drie draden gesoldeerd. Elektrische tape voltooide de getto-connector. De RFID-lezer heeft 4 aansluitingen:
- Vcc
- INSCHAKELEN
- UIT
- Gnd
Zoals je waarschijnlijk al geraden had, sluit Vcc aan op +5V en Gnd op aarde. Omdat de RFID-lezer zoveel stroom verbruikt, kunt u met verschillende tussenpozen op de ENABLE-pin slaan om hem aan en uit te zetten. Ik heb er gewoon voor gekozen om het aan te houden. Omdat het omgekeerd is, trek je het LAAG om het te activeren. Als alternatief kunt u het op aarde aansluiten. Ik heb het aangesloten op PIND3 om me opties te geven om in / uit te schakelen als ik besloot dat te doen. De OUT-pin is waar de lezer zijn seriële gegevens naartoe stuurt nadat hij een tag heeft gelezen. Ik heb het aangesloten op PIND2. Let op, in het Parallax-universum betekent rood gaan. Dat wil zeggen, een groene LED betekent dat de unit inactief en inactief is, terwijl een rode LED betekent dat de unit actief is. *schouderop* Ga figuur.
Stap 3: Schrijf de code
Om de gegevens van de RFID-lezer te lezen, moet u weten wanneer een tag is verzonden, de gegevens van de seriële poort halen en vervolgens ergens naartoe sturen.
Gegevensformaat RFID-lezer
De Parallax RFID-lezer verzendt gegevens met een vast, ijskoud tempo van 2400 baud. Een RFID-tag is 10 bytes. Om foutdetectie/-correctie mogelijk te maken, aangezien de lezer zou kunnen worden uitgeschakeld van willekeurige ruis, wordt de 10-byte RFID begrensd door een start- en stop-schildwacht. De start-sentinel is line feed (0x0A) en de stop-sentinel is carriage return (0x0D). Het ziet er zo uit:
[Start Sentinel |Byte 1|Byte 2|Byte 3|Byte 4|Byte 5|Byte 6|Byte 7|Byte 8|Byte 9|Byte 10| Stop Sentinel]Dit zijn de drie belangrijkste stappen.
Weet wanneer een tag is verzonden
Ik heb een Pin Change Interrupt op de AVR gebruikt die de firmware meldt dat er een wijziging is opgetreden op een bewaakte pin. Het configureren van de AVR hiervoor is eenvoudig en vereist het instellen van de vlag, het vertellen aan de MCU welke pin u wilt bewaken en het instellen van de globale interruptbit. PCINT configureren
BSET(PCICR, PCIE2); // pin change interrupt control register pcie2 BSET (PCMSK2, PCINT18); // schakel pin-wijzigingsonderbreking in voor PCINT18 (PD2) BSET (SREG, 7); // Stel SREG I-bit inSchrijf uw interruptserviceroutine U wilt uw ISR kort houden, dus in mijn interruptvector lees ik de hele byte, beetje bij beetje, en sla de byte op in een globale vluchtige karakterarray. Ik doe het volgende bij elke interrupt:
- Controleer om er zeker van te zijn dat ik een begin heb
- Centreer de timing op de middelste puls op 2400 baud (de snelheid van de RFID-lezer)
- Sla het startbit over en pauzeer tot het midden van het volgende bit
- Lees elke bit in een geheel getal zonder teken
- Als ik 8 bits heb, zet de byte dan in een tekenreeks
- Als ik 12 bytes heb verzameld, laat de MCU dan weten dat de tag is gelezen voor foutdetectie.
Ik heb de SoftSerial-code van Mikal Hart aangepast, die de code van David Mellis heeft aangepast voor de experimenteel bepaalde vertragingen in de seriële routines.
RS232-uitgang ontleden
De PCINT-routine bevat de code voor het lezen van de RS232-uitvoer van de RFID-lezer. Wanneer ik 12 bytes (10-byte RFID plus sentinels) heb gekregen, stel ik bDataReady in op 1 en laat de hoofdlus de gegevens verwerken en weergeven.
// dit is de interrupt-handlerISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // Startbit gaat laag terug; uint8_t bit = 0; TunedDelay (CENTER_DELAY); // Centreren op startbit voor (uint8_t x = 0; x <8; x++) { TunedDelay (INTRABIT_DELAY); // sla een beetje over, broer… if (BCHK(PIND, RFID_IN)) BSET(bit, x); anders BCLR(bit, x); } Afgestemde vertraging (INTRABIT_DELAY); // stopbit overslaan RFID_tag [rxIdx] = bit; ++rxIdx; if (rxIdx == 12) bDataReady = 1;}
Toon uw tag
In de main(), tijdens de for(ever) loop, controleer ik of bDataReady is ingesteld, wat aangeeft dat de hele RFID-structuur is verzonden. Ik controleer dan of het een geldige tag is (dwz start- en stoptekens zijn respectievelijk 0x0A en 0x0D), en als dat zo is, stuur ik het mijn RS232-verbinding.
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("\nStopbyte: "); 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)); if (x != 10) USART_tx(&apos:&apos); } USART_tx_S("\n"); } rxIdx = 0; bDataReady = 0; }}
Stap 4: Code en afscheid
Deze pagina bevat een zip-bestand met de bijbehorende code. Het is geschreven in AVR Studio 4.16. Als je het kladblok van de programmeur, eclipse of vi (of iets anders) gebruikt, moet je een vertrouwde Makefile naar de map kopiëren en deze bestanden toevoegen aan de bronregel. Merk ook op dat de timing voor de seriële leessectie is gebaseerd op een 16 MHz MCU. Als u op een andere klokfrequentie werkt, moet u de afgestelde vertragingen experimenteel bepalen om zich op de baudrate-pulsen te concentreren. Ik hoop dat deze instructie u op de een of andere manier heeft geholpen. Als je suggesties hebt over hoe het kan worden verbeterd, laat het me dan weten!
Aanbevolen:
Arduino als ISP -- Hex-bestand branden in AVR -- Zekering in AVR -- Arduino als programmeur: 10 stappen
Arduino als ISP || Hex-bestand branden in AVR || Zekering in AVR || Arduino als programmeur:…………………….. ABONNEER aub op mijn YouTube-kanaal voor meer video's…….. Dit artikel gaat helemaal over arduino als isp. Als u een hex-bestand wilt uploaden of als u uw zekering in AVR wilt plaatsen, hoeft u geen programmeur te kopen, u kunt dit doen
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino - Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter - RC Helikopter - RC-vliegtuig met Arduino: 5 stappen (met afbeeldingen)
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino | Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter | RC Helikopter | Rc-vliegtuig met Arduino: een Rc-auto besturen | Quadcopter | Drone | RC vliegtuig | RC-boot, we hebben altijd een ontvanger en zender nodig, stel dat we voor RC QUADCOPTER een 6-kanaals zender en ontvanger nodig hebben en dat type TX en RX is te duur, dus we gaan er een maken op onze
AVR-microcontroller. Schakel LED's met behulp van een drukknopschakelaar. Debouncen met drukknop: 4 stappen
AVR-microcontroller. Schakel LED's met behulp van een drukknopschakelaar. Drukknop debouncing.: In deze sectie zullen we leren hoe we programma C-code voor ATMega328PU kunnen maken om de status van de drie LED's te wisselen volgens de invoer van een knopschakelaar. We hebben ook een oplossing onderzocht voor het probleem van 'Switch Bounce'. Zoals gewoonlijk zullen we
Nog een andere instructie over het gebruik van de DIYMall RFID-RC522 en Nokia LCD5110 met een Arduino: 8 stappen (met afbeeldingen)
Nog een andere Instructable over het gebruik van de DIYMall RFID-RC522 en Nokia LCD5110 met een Arduino: waarom voelde ik de behoefte om nog een Instructable te maken voor de DIYMall RFID-RC522 en de Nokia LCD5110? Nou, om je de waarheid te zeggen, ik werkte ergens vorig jaar aan een Proof of Concept met beide apparaten en op de een of andere manier "misplaatst"
Wireless Serial (UART) voor Arduino/STM32/etc.: 3 stappen (met afbeeldingen)
Wireless Serial (UART) voor Arduino/STM32/etc.: Hopelijk zal iedereen het met me eens zijn dat de Arduino Serial een geweldig hulpmiddel is om je projecten te debuggen. Nou, het is eigenlijk de enige optie voor het debuggen van een Arduino. Maar soms is het niet mogelijk of praktisch om een USB-kabel van de Ard