ATMEGA8 MFRC522 RFID

Ola,

Como não podia deixar de ser apos ter apresentado um dispositivo RFID em arduino tinha de conseguir fazer algo em AVR, neste caso usei o ATMEGA8.

A ideia é ter vários utilizadores autenticados associados aos IDs das Tags, neste caso foi configurado para 2, embora seja possível ter vários utilizadores.

As ligações do trabalho:

EsquemaRFIDRC522

Neste video podem verificar que duas tags são autenticadas a terceira esta negada.

Codigo fonte:

/*
* AVR-RFIDRC522.c
* Created by Norlinux
* Created: 16-09-2017
*http://www.microelectronic.pt
*https://www.facebook.com/MundoDosMicrocontroladores/
*http://maquina.96.lt
*Released under GPLv3.
*Please refer to LICENSE file for licensing information.
*which can be found at http://www.gnu.org/licenses/gpl.txt
*/
#include <avr/io.h>
#ifndef F_CPU
#define F_CPU 8000000UL
#endif
#include <util/delay.h>
#include
#include
#include "lcd.h"
#include "spi.h"
#include "mfrc522.h"
#define NR_OF_CARDS 2
#define CARDS_SIZES 10
int main()
{
uint8_t byte;
uint8_t str[MAX_LEN];
char string[MAX_LEN]={};
char src[MAX_LEN];
char buf[MAX_LEN];
uint8_t user_nr=0;
char name[NR_OF_CARDS][CARDS_SIZES] = {"Norlinux","Shimon"};
char uID_CARDS[NR_OF_CARDS][CARDS_SIZES] = {"B0EAFD79DE","A16B703B81"};
char check=0,ok=0;
memset(string,0,sizeof(string));
_delay_ms(50);
LCDInit(LS_NONE);
LCDWriteStringXY(2,0,"Ler RFID");
spi_init();
_delay_ms(1000);
LCDClear();
//init reader
mfrc522_init();
//check version of the reader
byte = mfrc522_read(VersionReg);
if(byte == 0x92)
{
LCDWriteStringXY(1,0,"MIFARE RC522v2");
LCDWriteStringXY(3,1,"Detectado");
}else if(byte == 0x91 || byte==0x90)
{
LCDWriteStringXY(1,0,"MIFARE RC522v1");
LCDWriteStringXY(3,1,"Detectado");
}else
{
LCDWriteStringXY(0,0,"Leitor Desconhecido");
}
byte = mfrc522_read(ComIEnReg);
mfrc522_write(ComIEnReg,byte|0x20);
byte = mfrc522_read(DivIEnReg);
mfrc522_write(DivIEnReg,byte|0x80);
_delay_ms(1500);
LCDClear();
while(1){
byte = mfrc522_request(PICC_REQALL,str);
if(byte == CARD_FOUND)
{
byte = mfrc522_get_card_serial(str);
if(byte == CARD_FOUND)
{
for(byte=0;byte<8;byte++)
{
LCDHexDumpXY(byte*2,0,str[byte],string);
if (byte==0)
strcpy(src,string);
else
strcat(src, string);
memset(string,0,sizeof(string));
}
}
else
{
LCDWriteStringXY(0,1," Erro ");
}
_delay_ms(2500);
for (int i=0; i<NR_OF_CARDS; i++)
{
//sprintf(buf,"%d", i);
//LCDWriteStringXY(8,1,buf);
//_delay_ms(2500);
for (int j=0; j<10; j++)
{
if(src[j] == uID_CARDS[i][j])
{
//sprintf(buf,"%c", uID_CARDS[i][j]);
//LCDWriteStringXY(0,1,buf);
//_delay_ms(1000);
check++;
user_nr=i;
if(check==9)
{
check=0;
ok=1;
sprintf(buf,"user= %s ", name[user_nr]);
LCDWriteStringXY(0,1,buf);
memset(src,0,sizeof(src));
memset(string,0,sizeof(string));
}
}
}
}
if (ok)
{
LCDWriteStringXY(0,0," Insert New Card ");
memset(src,0,sizeof(src));
memset(string,0,sizeof(string));
ok=0;
}
else
{
LCDClear();
LCDWriteStringXY(0,0," Access Denied ");
memset(src,0,sizeof(src));
memset(string,0,sizeof(string));
ok=0;
}
} // Card Found
_delay_ms(1000);
}
}

5 comentários

  1. Hi,
    can i please have your libreries for spi.h and mfrc522.h? i have my own, but it do not work. i can’t read the serial nummer of my cards.

    thank you

    Merlin Verlin

    Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s