Autor Tema: Problemas De lectura de Ibutton en Mikro C  (Leído 1961 veces)

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

Desconectado pablusmed

  • PIC10
  • *
  • Mensajes: 2
Problemas De lectura de Ibutton en Mikro C
« en: 29 de Julio de 2010, 19:05:46 »
Primero que nadas un cordial saludos a aquellos que lean este mensaje.

Estiy iniciandome en el uso de lenguaje C para microcontroladores, estoy haciendo una pequeña rutina de prueba de lectura de Ibutton.

estoy utilizando un PIC16F877 a 20 Mhz.

y una pantalla LCD.

el programita que estoy realizando lee un Ibutton a traves del Puerto C.1, cuando presiono un pulsador Colocado en el puerto C.5, el Problema que se me presenta es que cuando muestro los datos no aparecen completo el serial del Ibutton, ejemplos para hacer las pruebas estoy utilizando un ibutton con el siguiente seria 000012F426B5 la familia es 01 y el codigo CRC es CF haciendo una simulacion en Proteus y haciendo el montaje en protoboard me arroja lo siguiente lo que aprare en la imagen adjunta; a este mensaje.

en la imagen aparece la lectura de todas los datos correctamente a exepcion del CRC de ibutton el cual es CF es vez aparece 08;

el codigo que realice en mikroC es el siguiente:
      //Declaracion de Variables de pantalla LCD//
sbit LCD_RS at RD3_bit;   // Señal RS PIN 22 //
sbit LCD_EN at RD2_bit;   // Señal E Habilitacion PIN 20 //
sbit LCD_D4 at RD4_bit;   // Señal D4 PIN 27 //
sbit LCD_D5 at RD5_bit;   // Señal D5 PIN 28 //
sbit LCD_D6 at RD6_bit;   // Señal D6 PIN 29 //
sbit LCD_D7 at RD7_bit;   // Señal D7 PIN 30 //
sbit LCD_RS_Direction at TRISD3_bit; // Definicion del PUERTD.3 como salida //
sbit LCD_EN_Direction at TRISD2_bit; // Definicion del PUERTD.1 como salida //
sbit LCD_D4_Direction at TRISD4_bit; // Definicion del PUERTD.4 como salida //
sbit LCD_D5_Direction at TRISD5_bit; // Definicion del PUERTD.5 como salida //
sbit LCD_D6_Direction at TRISD6_bit; // Definicion del PUERTD.6 como salida //
sbit LCD_D7_Direction at TRISD7_bit; // Definicion del PUERTD.7 como salida //

void Leer_IBUTTON();
unsigned  char Serial[8];
char i,j;
unsigned short int k;
unsigned short int x;
unsigned short int m;
unsigned short int CRCT;
unsigned short int CRC;
bit CRCB;
unsigned short int temp1;
unsigned short int temp2;
char valor[16];
char txt[2];
unsigned short int digit[17];
char tablascii[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};//tabla usada para convertir de HEX a caracter

void main() {
 //inicializacion ded variables
  Lcd_Init();
  TRISD=0;//no lo uso
  TRISB=0xFF;
  delay_ms(100);
      Lcd_Cmd(_LCD_CLEAR);
  Lcd_Cmd(_LCD_CURSOR_OFF);
  delay_ms(200);
       TRISC5_bit=1; // defino puerto C. 5 como entrada
  do{

    if(RC5_BIT=0){
     
     m=1;// Chequeo si el boton fue presionado
     i=1;// mando a la ejecucion del codigo de abajo
     delay_ms(10);
      }
     while(m==1){
          delay_ms(1000);
          Lcd_Out(1,1,"R");//
          Ow_Reset(&PORTC, 1);//Pulso de reset bus 1-wire
          Ow_Write(&PORTC,1, 0x33);////comando Read Rom

          for(i=1;i<=8;i++){   //lectura del Identificador + CRC+ Familia del dispositivo
             Serial=Ow_Read(&PORTC, 1);
          }

              // esta seccion del codigo convierto los datos de Hexadecimal a caracter para mostral en la Pantalla LCD 2x16
            for(k=1;k<=8;k++){
             temp1=2*k-1;    // punteros auxiliares
             temp2=2*k;      //
             digit[temp2]=Serial[k]/16;//Convierto a decimal
             digit[temp1]=Serial[k]%16;//convierto a decimal
             valor[temp2]=tablascii[digit[temp2]];// asigno un valor de
             valor[temp1]=tablascii[digit[temp1]];//  la tabla ascii
           }
            // muestro los valores completos del Ibutton
             for(j=1;j<=16;j++){
              LCD_chr(2,17-j,valor[j]); // muestro Valores en pantalla LCD
              }
              delay_ms(1000);
              m=0;
              Lcd_Cmd(_LCD_CLEAR);
              Lcd_Cmd(_LCD_CURSOR_OFF);

              }

  }while(1);
}



Agradeceria su ayuda
« Última modificación: 29 de Julio de 2010, 19:09:50 por pablusmed »