Aquí tengo un problema relacionado con el termómetro digital DS1621 que se interconecta con el controlador PIC18F26J50.
A continuación, puede ver mi código y este código que compilo en MPLAB X v.1.4 IDE con compilador C18:
unsigned char i2c_read(void)
{
char buf[20];
unsigned char i,j;
j=0;
i=DATA;
for(i=0;i<8;i++)
{
j<<=1;
CLOCK = HIGH;
j|=DATA;
delay_ms(100);
CLOCK = LOW;
}
//////////////////////
**sprintf(buf,"%d",j); // 255
transmit_str1(buf); //UART transmit string**
/////////////////////
return buf;//return j;
}
main()
{
while(1)
{
i2c_start();
i2c_write(0x90);
i2c_write(0xAC);
i2c_write(0x02);
i2c_stop();
i2c_start();
i2c_write(0x90);
i2c_write(0xEE);
i2c_stop();
i2c_start();
i2c_write(0x90);
i2c_write(0xAA);
i2c_start();
i2c_write(0x91);
ch = i2c_read();
i2c_stop();
///////////////////
temperature = 0;
convert(ch); //convert binary to Decimal
if(flag==FALSE_)
{
flag = TRUE_;
tmp=temperature;
//itoa(tmp,buffer);
sprintf(tmp,"%s",temperature);
}
else
{
if(tmp!=temperature)
{
tmp=temperature;
sprintf(str,"%d%s",temperature,"Centigrade");
}
}
}
}
Aquí estoy conectando el termómetro DS1621 con PIC18F26J50.
y estoy haciendo la comunicación I2C entre ellos. y veo este resultado en UART, pero obtengo datos "255".
Esta cadena de datos "255" que obtuve de la función "i2c_read (void)".
Aquí adjunto una captura de pantalla del osciloscopio del software Proteus. (AMARILLO: SDA | AZUL: SCL).
¿Puede decirme cómo obtener la lectura de DS1621?