Jag försöker att läsa ut data från en digital LM75 temperatursensor 73-268-28 som är ansluten med en I2C-buss till en PIC16F887, och sedan lägga ut datan på två portar där det finns lysdioder anslutna. Jag programmerar i mikroC 8.2 och använder EasyPic5
Jag har aldrig lyckats få sensorn att skicka data över huvud taget. Vad gör jag för fel?
Så här ser koden ut:
Kod: Markera allt
unsigned short LM75_H = 0;
unsigned short LM75_L = 0;
void main() // main
{
OSCCON = 113; // intern oscillator på 8 MHz
CM1CON0 = 0; // inga komparatorer
CM2CON0 = 0;
CM2CON1 = 0;
ANSEL = 0; // inga analoga ingångar
ANSELH = 0; // inga analoga ingångar
PORTA = 0; // clear PORTA
TRISA = 0; // hela PORTA som output
PORTB = 0; // clear PORTB
TRISB = 0; // hela PORTB som output
PORTC = 0; // clear PORTC
TRISC = 0; // hela PORTC som output
I2C_Init(100000); // data: PORTC,4 clock: PORTC,3
while (1) // oändlig huvudloop
{
Delay_ms(100);
I2C_Start(); // Issue I2C start signal
I2C_Wr(0x48); // (adressen: 1001000)
I2C_Wr(0x00); // Send Pointer Reg. 0x00 = Temp
// 0x01 = Config.
// 0x02 = HYST Set Point
// 0x03 = OS Set Point
I2C_Start(); // Issue I2C start signal
I2C_Wr(0x48); // Issue a Read Command
LM75_H = I2C_Rd(1); // Read the data (acknowledge)
LM75_L = I2C_Rd(0); // Read the data (NO acknowledge)
I2C_Stop(); // I2C stop
PORTA = LM75_H;
PORTB = LM75_L;
Delay_ms(10000); // mät var tionde sekund
}
}