Autor Tema: problemas para leer un sfr10  (Leído 1571 veces)

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

Desconectado hrivera

  • PIC10
  • *
  • Mensajes: 1
problemas para leer un sfr10
« en: 02 de Octubre de 2011, 01:26:14 »
tengo problemas para poder leer la distancia con un sensor sfr10 con un pic16f877, ya programe el microcontrolador con un ejemplo del sfr08 que se supone trabaja perfectamente, pero a mi me muestra solo hasta aproximadamente 20cm, que estara pasando¿
este es mi programa:

#include <16F877A.h>
#fuses PUT,HS,NOWDT,NOLVP,NOPROTECT
#use delay( clock = 12000000 )
#use fast_io(C)
#use i2c( master , scl = PIN_C3 , sda = PIN_C4 )
#include <lcd.c>

void main()
{
      int16 distancia;
      char distancia_L, distancia_H, Luz;
      int16 range[17];
      int i;
     
      lcd_init();
      set_tris_c( 0x00 );
      output_float( PIN_C3 );
      output_float( PIN_C4 );
     
      while (1)
      {
            i2c_start();               
            i2c_write( 0xE0 );
            i2c_write( 0x00 );
            i2c_write( 0x51 );
            i2c_stop();
            delay_ms( 100 );
            i2c_start();
            i2c_write( 0xE0 );     
            i2c_write( 0x02 );  //alcance
            i2c_stop();
            i2c_start();
            i2c_write( 0xE1 );
            distancia_H = i2c_read( 1 );
            distancia_L = i2c_read(0);
            i2c_stop();
            distancia = make16( distancia_L , distancia_H );
            printf( lcd_putc , " %lu cm" , distancia );
           }
 }
           
           
       

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: problemas para leer un sfr10
« Respuesta #1 en: 02 de Octubre de 2011, 08:43:54 »

            i2c_start();
            i2c_write( 0xE1 );
            distancia_H = i2c_read( 1 );
            distancia_L = i2c_read(0);
            i2c_stop();
            distancia = make16( distancia_L , distancia_H );
            printf( lcd_putc , " %lu cm" , distancia );
           }
 }
                   

  No sé como maneje CCS el protocolo I2C, pero en dicho protocolo cuando se responde con 1, indica que justamente no llegaron los datos. Creo que deberías probar respondiendo primero con 0 y luego con 1 en las funciones i2c_read.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas


 

anything