How to interface RFID with AVR ATmega32 microcontroller

Summary of How to interface RFID with AVR ATmega32 microcontroller


This article explains how to interface an RFID system with an AVR ATmega32 microcontroller. It details the working principle of RFID tags and readers, the use of a MAX232 level converter for RS232 logic, and provides C code to read unique IDs from tags and display corresponding names on an LCD.

Parts used in the RFID with AVR Interface Project:

  • RFID Reader Module
  • RFID Tags
  • ATmega32 Microcontroller
  • MAX232 Level Converter IC
  • LCD Module
  • Cable/Wires for connections

RFID is most arguably a evolutionary wireless technology which boosted working of embedded devices up to great mark. And there is plenty of systems and devices working based on this technology. This article is focused to teach you how to interface RFID with AVR microcontroller. Before moving on to that interfacing part let’s begin with what RFID exactly is and how it works?How to interface RFID with AVR ATmega32 microcontroller
Radio Frequency identification describes the system in which the identity of an individual or object is transmitted by means of a unique serial number through radio waves. Usually RFID system consists of two basic components they are

  • Tag
  • Reader

RFID tags consists of a simple Microchip which stores 12 byte unique ID and an antenna through which the unique ID is read by the reader. Whereas Reader is nothing but a specifically designed hardware module that senses the tag whenever it brought within a specific range say for example 10cms. The reader emit radio waves and receive signals back from the tag which comes with different operating frequency and sensing distance.
When a RFID tag is brought within the specific range of the reader the unique ID is sensed. After reading the ID from the tag is read by the reader and then that unique id is passed onto a controller/processor. The controller in turn performs specific action using that ID based on the written code

SCHEMATIC DESIGN OF RFID INTERFACE WITH AVR:Schematic How to interface RFID with AVR ATmega32 microcontroller

RFID module works at RS232 logic levels hence ATmega32 is connected to RFID module by means of a level converter IC MAX232. The unique ID from the RFID tag is converted into serial mode by means of the reader module and then transmitted to controller via MAX232. The baud rate is set to 9600bps for data transmission. The code was written in such a way when a card/tag comes in the proximity of RFID reader, the microcontroller reads the code and sends it to the LCD module for displaying

CODE:

#include<avr/io.h>
#include<util/delay.h>
#include<stdlib.h>
#define ctrl PORTA
#define en PA5
#define rw PA6
#define rs PA7
void lcd_cmd(unsigned char cmd);
void init_lcd(void);
void usartinit();
void lcd_write(unsigned char data);
void lcd_write_string();
unsigned char a;
unsigned char value[15];
unsigned int b;
unsigned int k=0,i=0,j,l;
unsigned char value1[]={"140071D1A612"};            //Unique ID
unsigned char value2[]={"51005D6899FD"};      
unsigned char value3[]={"MASTER"};                  //Names assigned to ID
unsigned char value4[]={"STUDENT"};
unsigned char value5[]={"Unknown number"};

int main ()
{
 DDRB=0xFF;
 DDRA=0xE0;
 init_lcd();
 _delay_ms(50);
 lcd_write_string("Show your TAG");
 usartinit();

  while(1)
  {
   while((UCSRA)&(1<<RXC))
   {
    value[i]=UDR;
    _delay_ms(1);
    i++;
    if(i==12)
    {
      value[i]='';
      for(j=0;value1[j]!='';j++)
      {
       if(value[j]==value1[j])
       k++;
      }
      if(k==12)                      //Checking the ID with predefined ID
      {
       lcd_cmd(0x01);
       lcd_cmd(0x80);
       for(l=0;value3[l]!='';l++)
       {
        a=value3[l];                 //Assigning names
        lcd_write(a);
        _delay_ms(100);
       }
       i=0;
       k=0;
      }
     else
     {
      k=0;
      for(j=0;value2[j]!='';j++)
      {
       if(value[j]==value2[j])
       k++;
      }
      if(k==12)
       {
        lcd_cmd(0x01);
        lcd_cmd(0x80);
        for(l=0;value4[l]!='';l++)
         {
          a=value4[l];
          lcd_write(a);
          _delay_ms(100);
         }
       i=0;
       k=0;
       }
     else
      {
       lcd_cmd(0x01);
       lcd_cmd(0x80);
       for(l=0;value5[l]!='';l++)
        {
         a=value5[l];
         lcd_write(a);
         _delay_ms(100);
        }
      }
    }
  }
 }
}
}
void init_lcd (void)                     //LCD initialization
{
 lcd_cmd(0x38);
 _delay_ms(1);
 lcd_cmd(0x38);
 _delay_ms(1);
 lcd_cmd(0x38);
 _delay_ms(1);
 lcd_cmd(0x38);
 _delay_ms(1);
 lcd_cmd(0x06);
 _delay_ms(1);
 lcd_cmd(0x0c);
 _delay_ms(1);
 lcd_cmd(0x01);
 _delay_ms(1);
 lcd_cmd(0x02);
 _delay_ms(1);
 return;
}

void lcd_cmd(unsigned char cmd)            //LCD command subroutine
{
 PORTB=cmd;
 ctrl=(0<<rs)|(0<<rw)|(1<<en);
 _delay_ms(1);
 ctrl=(0<<rs)|(0<<rw)|(0<<en);
 _delay_ms(50);
 return;
}

void lcd_write(unsigned char data)
{
 PORTB=data;
 ctrl=(1<<rs)|(0<<rw)|(1<<en);
 _delay_ms(1);
 ctrl=(1<<rs)|(0<<rw)|(0<<en);
 _delay_ms(50);
 return;
}
void lcd_write_string(unsigned char *str)         //LCD string write sub routine
{
 int b=0;
 while(str[b]!='')
 {
  lcd_write(str[b]);
  b++;
 }
 return;
}
void usartinit()                       //USART initialization
{
 UBRRH=00;
 UBRRL=77;
 UCSRB|=(1<<RXEN);
 UCSRC|=(1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);
}

NOTE:

  • In the above code the unique ID’s are identified and some specific individual name was assigned to it for better understanding.
  • If your RFID reader works with TTL logic you can eliminate the MAX232 IC in the schematic design.

For more detail: How to interface RFID with AVR ATmega32 microcontroller

Quick Solutions to Questions related to RFID with AVR Interface Project:

  • What is the primary function of the RFID reader?
    The reader emits radio waves to sense tags within a specific range and receives signals containing a unique serial number.
  • How does the microcontroller communicate with the RFID module?
    The ATmega32 connects to the RFID module via a MAX232 IC because the module works at RS232 logic levels.
  • What baud rate is set for data transmission in this project?
    The baud rate is set to 9600bps for data transmission between the reader and the controller.
  • Can I eliminate the MAX232 IC from the design?
    Yes, if your RFID reader works with TTL logic, you can eliminate the MAX232 IC in the schematic design.
  • How many bytes of unique ID does an RFID tag store?
    An RFID tag consists of a simple microchip which stores a 12 byte unique ID.
  • What happens when a valid ID is detected by the microcontroller?
    The microcontroller reads the code and sends the assigned name associated with that ID to the LCD module for displaying.
  • What components make up the basic RFID system described?
    The two basic components are the Tag and the Reader.
  • How does the code verify a tag's identity?
    The code compares the received value array against predefined ID arrays like value1 or value2 to check if all 12 characters match.

About The Author

Ibrar Ayyub

I am an experienced technical writer holding a Master's degree in computer science from BZU Multan, Pakistan University. With a background spanning various industries, particularly in home automation and engineering, I have honed my skills in crafting clear and concise content. Proficient in leveraging infographics and diagrams, I strive to simplify complex concepts for readers. My strength lies in thorough research and presenting information in a structured and logical format.

Follow Us:
LinkedinTwitter
Scroll to Top