Hola amigos.
He acabado una pequeña aplicación para leer los códigos de los tags RFID.
Está basado en un PIC16F877 utilizando la USART a 2400 baudios, una pantallita LCD 16x2 y el propio lector.
El lector es el de la casa Parallax:
Link por si a alguien le interesa:
http://www.parallax.com/tabid/768/txtSearch/rfid/List/0/SortField/4/Default.aspxque viene con dos tarjetillas con codigos ya grabados.
Esta aplicación lee esos códigos y los muestra en el LCD.
Link al video en un cacho de mi web:
http://picubo2.16mb.com/rfid/leeRFID.mp4El programa es este:
// Conexiones del módulo LCD
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB6_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB6_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// Final de las conexiones del módulo LCD
// Declarar variables
unsigned char ch;
unsigned char rxarray[13]={0}; // almacena los bytes leidos en formato ASCII
char i = 0;
char flag = 0;
//gestion de las interrupciones
void interrupt () {
PIE1.RCIE = 0; //deshabilito interrup de recepcion
if (PIR1.RCIF) { // testea si la interrupcion es de la USART
ch = UART1_Read();
rxarray[i] = ch;
i++;
if (i == 11){ //se recibieron los 12 bytes
flag = 1;
i=0;
}
}
PIE1.RCIE = 1; //habilito interrup de recepcion
}
void main() {
TRISB = 0; //B salidas para LCD y habilitar RFID
TRISC = 1; //entradas de datos USART
//inicializo LCD
Lcd_Init(); // Inicialización del visualizador LCD
Lcd_Cmd(_LCD_CURSOR_OFF); // Comando LCD (apagar el cursor)
Lcd_Cmd(_LCD_CLEAR); // Comando LCD (borrar el LCD)
Lcd_Out(1,1,"RFID");
Delay_ms(3000);
Lcd_Out(1,1," ");
Lcd_Out(1,7,"ID");
//inicio RFID enviandole un RB=0
PORTB.RB7 = 0;
//pruebas
//PORTB.RB6 = 1;
//Delay_ms(3000);
//PORTB.RB6 = 0;
//Configuracion interrupciones de la USART
INTCON.GIE = 1; //habilitar interrupciones generales
INTCON.PEIE = 1; //habilita interrupciones de perifericos
PIE1.RCIE = 1; //habilita inetrrupcion USART
UART1_Init(2400);
Delay_ms(100);
//Configuracion de la USART a mano
//SPBRG = 129; //Por la tablas de baudrate del datasheet
//TXSTA.BRGH = 0; //1=alta velocidad 0=baja velocidad
//TXSTA.SYNC = 0; //Transmisión asíncrona
//RCSTA.SPEN = 1; //Habilitamos el puerto serial
//TXSTA.CREN = 1; //La recepción será continua
//TXSTA.TXEN = 1; //Habilitamos la transmisión
while(1){
if (flag==1) {
//muestro ID en el LCD
Lcd_Out(2,4,rxarray+1);
flag = 0;
i = 0;
}
} //while
} //main
Espero que os guste y a alguien le sea útil.
Un saludo.