Autor Tema: Video y prg de aplicacion RFID  (Leído 1205 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado halowin

  • PIC16
  • ***
  • Mensajes: 151
Video y prg de aplicacion RFID
« en: 15 de Septiembre de 2012, 05:08:42 »
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.aspx

que 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.mp4

El programa es este:

Código: [Seleccionar]
// 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.

« Última modificación: 17 de Septiembre de 2012, 13:05:31 por halowin »