TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: rasengan04 en 20 de Mayo de 2019, 13:43:50

Título: Problema I2C - sensor
Publicado por: rasengan04 en 20 de Mayo de 2019, 13:43:50
Hola buen dia
Tengo una situación curiosa ya que estoy leyendo un sensor por I2C el cual en su datasheet me indica que cuenta con  offset pero cuando lo leo me manda un 0, el sensor cuenta con un checksum  y si da por lo que creí estar leyendo bien   

Código: C
  1. #include <18F4580.h>      
  2. #FUSES NOWDT,NOPROTECT,NOLVP,NOPUT,HS
  3. #USE DELAY(CLOCK=20000000)
  4. #use i2c(Master,sda=PIN_D3,scl=PIN_D2)
  5. void main(){
  6. while(1){
  7. byte x1,x2,x3,x4,x5;
  8. i2c_start();
  9. i2c_stop();
  10. i2c_start();
  11. i2c_write(0b10100001); // 7bits de direccion y uno de lectura el datasheet no me indica un reinicio inmediatamente después de escribir
  12. x1=i2c_read();                       //ya manda el dato
  13. x2=i2c_read();
  14. x3=i2c_read();
  15. x4=i2c_read();
  16. x5=i2c_read(0);
  17. i2c_stop();
  18. }
  19. }

lo curioso vino cuando tuve que leer 2 sensores, como no se le podía modificar la dirección al sensor, tuve que programar dos lineas de I2C,

Código: C
  1. #include <18F4580.h>      
  2. #FUSES NOWDT,NOPROTECT,NOLVP,NOPUT,HS
  3. #USE DELAY(CLOCK=20000000)
  4. #use i2c(Master,sda=PIN_D3,scl=PIN_D2,stream=lucho)
  5. #use i2c(Master,sda=PIN_B4,scl=PIN_B5,stream=lucho2)
  6. byte x1,x2,x3,x4,x5;
  7.  
  8. i2c_start();
  9. i2c_write(lucho,0b10100001);
  10. x1=i2c_read(lucho);
  11. x2=i2c_read(lucho);
  12. x3=i2c_read(lucho);
  13. x4=i2c_read(lucho);
  14. x5=i2c_read(lucho,0);
  15. i2c_stop();
  16.  
  17. i2c_start();
  18. i2c_write(lucho2,0b10100001);
  19. x1=i2c_read(lucho2);
  20. x2=i2c_read(lucho2);
  21. x3=i2c_read(lucho2);
  22. x4=i2c_read(lucho2);
  23. x5=i2c_read(lucho2,0);
  24. i2c_stop();
y al recibir los datos los sensores ya me mandaban el offset que indica el datasheet  y el checksum igual sigue mandando lo mismo.
que estoy haciendo mal????
las resistencias son del mismo valor, las variable son las mismas;
Gracias.
Título: Re:Problema I2C - sensor
Publicado por: rasengan04 en 27 de Mayo de 2019, 17:57:43
ya encontre la solucion (por casualidad)

Código: [Seleccionar]
i2c_start();
i2c_write(0b10100001);
x1=i2c_read();
x2=i2c_read();
x3=i2c_read();
x4=i2c_read();
x5=i2c_read();
i2c_stop(0);

poner 0 en el stop y no en el ultimo dato