Hola a todos,
Compré hace un mes 3 sensores SFR02. Estoy un poco desesperado, porque aun siguiendo las indicaciones del datasheet no consigo realizar una lectura de este sensor.
He probado ya casi todo. El código que he utilizado y que según la hoja de datos debería funcionar es el siguiente:
void main()
{
unsigned short i;
char cadena[20];
unsigned short dato;
INTCON.GIE=0; //DesHabilitar interrupciones general
usart_init(9600);
Glcd_Init(&PORTB,0,1,2,3,5,4,&PORTD);
Glcd_Fill(0x00);
i=0;
while(1)
{
usart_write(0); //Direccionamos el dispositivo SFR02
usart_write(0x51); //Indicamos que queremos realizar una medida en cm.
delay_ms(120); //Damos tiempo para que el dispositivo realice dicha medida
usart_write(0); //Direccionamos el dispositivo
usart_write(0x5E); //Comando para indicar que queremos leer
while(!usart_data_ready()){} //Esperamos a tener datos que recibir
while(usart_data_ready()) //Mientras tenemos datos que recibir
{
dato=usart_read();
sprintf(cadena,"%d",dato);
glcd_write_text(cadena,1,i,1);
i++;
if(i>6) i=0;
delay_ms(100);
}
delay_ms(1000);
}
}
El sensor parece que recibe la señal, ya que el led se enciende cuando recibe su dirección (no se enciende cuando le enviamos otra dirección). Pero al recibir datos por el puerto serie y mostrarlos por la pantalla, siempre se recibe lo mismo. He probado a desconectar el sensor y cortocircuitar TX con RX y recibo exactamente lo mismo que cuando tengo el sensor.
Alguien tiene alguna idea? Que estoy haciendo mal? Se me puede haber roto algo?? (He probado con dos sensores sacados del paquete)
He probado a mandar los comandos 81 (Real ranging mode) y luego 94 (Get range). También he probado el codigo 84 (Real ranging mode con respuesta automatica) y siempre obtengo valores fijos.
Muchas gracias