This is an old revision of the document!
RFID on tehnoloogia andmevahetuseks raadiolainete kaudu lugeja ja elektroonilise identiteedi vahel, mis on paigaldatud mõne objekti külge identifitseerimise ja jälgimise eesmärgil. RFID võimaldab iga objektiga siduda unikaalse ID-numbri. Passiivsed identiteedid, millel pole patareid, on võimalik lugeda möödumisel küllalt lähedalt lugejast.
Järgnev kood kasutab RFID lugejat ja LCD ekraani.
// RFID reader with Interstudy ATmegal28 board // Reader pins : Enable - PD3, Serout - PD2 (RXD1) // Reads and displays ID // Includes #include <avr/io.h> #include <util\delay.h> #include "lcd.h" #include "pin.h" // Configuration #define RFID_BAUDRATE 2400 #define RFID_BAUD_VALUE (((F_CPU / (RFID_BAUDRATE * 16UL))) - 1) #define RFID_ENABLE PORTPIN(D, 3) #define RFID_RX PORTPIN(D, 2) #define LED_GREEN PORTPIN(C, 3) #define LED_DEBUG PORTPIN(B, 7) // // Display initialization // void display_init(void) { lcd_init(LCD_DISP_ON); lcd_clrscr(); lcd_puts(" RFID reader\n waiting for ID"); } // // Write ID on display // void display_write_id(char *id) { lcd_gotoxy(0, 0); lcd_puts("ID: "); lcd_puts(id); } // // UART configuring // void uart_setup() { // Setup serial interface SET_BIT(UCSR1B, RXEN); // Activate RX only SET_BIT(UCSR1C, UCSZ0); // 8 data bits, 1 stop bit, no parity SET_BIT(UCSR1C, UCSZ1); // Set baud rate UBRR1L = (RFID_BAUD_VALUE & 0xFF); UBRR1H = (RFID_BAUD_VALUE >> 8); } // // Wait for UART incoming data // void uart_wait_rx() { while (!IS_BIT_SET(UCSR1A, RXC)) { } } // // Read UART data // inline unsigned char uart_read() { return UDR1; } // // RFID interface initialization // void rfid_init(void) { // Setup UART uart_setup(); // Setup enable and RX pin pin_setup_output(RFID_ENABLE); pin_setup_input(RFID_RX); } // // RFID ID reading // void rfid_read_id(char *id) { enum States { BEGIN, DATA, END } state = BEGIN; unsigned char data; unsigned char digits = 0; // Enable RFID with low signal pin_clear(RFID_ENABLE); // Cycle until tag ID received while (1) { // Wait for data uart_wait_rx(); data = uart_read(); // Toggle debug indicator pin_toggle(LED_DEBUG); // What's present state and what's next ? switch (state) { // Begin state - we expect start byte (0x0A) case BEGIN: // Got the start ? if (data == 0x0A) { state = DATA; // Disable RFID pin_set(RFID_ENABLE); } break; // Data state - we expect 10 bytes of ID case DATA: // Fill ID string id[digits++] = data; // All digits arrived ? if (digits == 10) state = END; break; // End state - we expect end byte (0x0D) case END: // Got the end ? if (data == 0x0D) { // Terminate the string id[digits] = '\0'; // All done - return return; } // Any other case - restart else { state = BEGIN; // Enable RFID with low signal pin_clear(RFID_ENABLE); } break; } } } // // Main function // int main(void) { char id[11]; // Initialization display_init(); rfid_init(); // Setup indicator pins pin_setup_output(LED_GREEN); pin_setup_output(LED_DEBUG); // Endless loop while (1) { // Turn off green LED pin_set(LED_GREEN); // Read RFID tag ID rfid_read_id(id); // Light green LED pin_clear(LED_GREEN); // Display ID display_write_id(id); } }