Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

24/04/2011 #1


Leer valor sensor SRF02 Hi tech ??
Hola amigos, tengo un problema, estoy tratando de leer el valor de un sensor SRF02 que se supone trabaja igual que el SRF08, para esto utilizo un pic16f877 conectado a un lcd, la programación la estoy haciendo con HI TECH, la verdad he intentado de mil maneras, hasta el momento lo único que he conseguido es que el sensor parpadee cada vez que le mando que tome una lectura, pero observando las variables solo me encuentro con 255, lo que me indica que no estoy visualizando que fué lo que el sensor detectó.

El trozo de código donde trato mando a tomar la medición y recibirla es el siguiente:

Código:
i2c_Start();
i2c_WriteTo(0xE0);
i2c_PutByte(0x00); 
i2c_PutByte(0x51);
i2c_Stop();
DelayMs(100);  // Hasta aquí supongo que todo está bien porque el led parpadea

i2c_Start();
i2c_PutByte(0xE0); //También le puse i2c_WriteTo(0xE0);
i2c_PutByte(0x02);

i2c_Start(); 
i2c_ReadFrom(0xE1);  // También le he puesto E0

A = i2c_ReadByte();  // También intenté con i2c_GetByte(I2C_MORE);
B = i2c_ReadByte(); //   i2c_GetByte(I2C_LAST);
i2c_Stop();
Se supone que primero le indico al sensor que voy a mandarle un comando apuntado a la dirección 0x00, y despues para leerlo le digo que se mueva al registro 0x02 donde comienzan el resultado pero nada, he intentado de mil maneras pero no lo logro.


Por ahí encontré un pedazo de código de alguien que tenia un problema con éstos sensores en otro foro, esta persona decía que obtenía las lecturas sin problemas, su problema era distinto, pero su código es el siguiente:

Código:
 Delay_Ms(200);
     i2c_start();
     i2c_write(sensor_number);
     i2c_write(0x00);
     i2c_write(0x51);   //Nueva lectura, resultado en CM
     i2c_stop();
      

      Delay_Ms(70);
     //***** FASE DE LECTURA DEL SENSOR *****
     
     //Notificar la direccion a leer 
     i2c_start();                
     i2c_write(sensor_number);
     i2c_write(0x02);
     
      
     sensor_number++;//pasar a modo read
     //Leer
     i2c_start();                   //Restart
     i2c_write(sensor_number);      //Enviar direccion
     sensor_value_H = i2c_read(1);  //Leer,con ACK para recibir siguiente    
     sensor_value = i2c_read(0);    //Leer,con NACK pues no queremos mas datos
     i2c_stop();
Si pudiera usar esa parte de su programa siendo que dice que funciona pues perfecto, el problema es que no tengo esa librería que usa, estuve buscando librerías i2c que se suponían son para hi tech pero ninguna me compilaba, solo la que trae el hi tech en la carpeta Samples que es la que utilizo.

Si alguien me puede ayudar, se lo agradeceré muchísimo, la verdad ya estoy cansado y no hay modo que pueda hacer algo tan simple como tomar la lectura del sensor. Saludos.

Nota: Si el sensor lo utilizo con PBP funciona bien y me da las medidas correctas, el problema es que necesito usarlo con HI TECH.

Código:
main:
    
    I2CWRITE PORTC.4,PORTC.3,$E0,0,[81]             ' Request start of ranging
    pause 100                                       ' Wait for ranging to finish
    I2CREAD PORTC.4,PORTC.3,$E0,2,[b1,b0]           ' Get the ranging results
    lcdout $fe1,2,"Range: ",#w0,"   "          ' Display range data to the screen
    PAUSE 2000
    LCDOUT $FE, 1
goto main
24/04/2011 #2


Eso que se supone que trabaja igual que el srf08 no vale.
Trabaja igual si o no.
Su hoja de datos esta en la web tiene que revisarlo.
24/04/2011 #3


El codigo que se supone que funciona está hecho para el SRF02, y si trabaja igual, en la página del fabricante dice que cualquier codigo que esté hecho para el 08 funcionará en el 02, la diferencia es que el 08 tiene un sensor de luz que se lee en el registro 1 y que tiene mas comandos, pero lo que yo quiero hacer es identico.

Ya leí y releí acerca de éste sensor y la verdad no entiendo porque rayos no puedo hacerlo trabajar en C, en los ejemplos que da el fabricante viene el programa en C listo para compilar y hasta para el mismo PIC, pero no puedo compilarlos, hay un bit de un registro que no lo reconoce, estuve googleando y lo unico que encontre es que es una definición vieja que ahora se llama diferente, estuve trasteando y nada más se me queda el pic colgado, por eso me imagino que lo que me ha de hacer falta es una libreria i2c que aplique para éste sensor, o si alguien tiene experiencia manejandolo y sabe que es lo que hago mal bienvenido sea, saludos y gracias por contestar.
24/04/2011 #4


No veo la configuracion del I2C.
No esta en tu codigo la velocidad que pines usa, modo.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.