TODOPIC
Mecatrónica => Robótica => Mensaje iniciado por: yiyeyo en 16 de Febrero de 2011, 14:56:53
-
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
-
Edito... lo que habia puesto no es correcto. Voy a ver y vuelvo a contestar.
Has provado por I2C?
Un saludo
-
Hola, yo lo he usado en modo I2C y no he tenido problemas, a ver si te podemos echar una mano para que lo hagas andar en modo Serie.
+ ¿Tienes el pin modo a 0V?
+ La lectura que haces del puerto serie parece un poco extraña...