Witam wiem że temat pewnie był już wiele razy wałkowany ale proszę o pomoc.
Próbuję odczytać temperaturę z DS18B20 i zawsze mam wartość 16,1 nawet jak jest czujnik odłączony proszę o pomoc gdzie jest błąd w kodzie
Proszę o pomoc
inventco.eu - tytuł postu zmieniłem regulamin p.11.1
Próbuję odczytać temperaturę z DS18B20 i zawsze mam wartość 16,1 nawet jak jest czujnik odłączony proszę o pomoc gdzie jest błąd w kodzie
#define WE 0
#define PORT_1wire PIND
#define SET_1wire DDRD &=~ _BV(WE)
#define CLEAR_1wire DDRD |= _BV(WE)
//Resetowanie magistrali czekanie na impuls PRESENCE
unsigned char RESET_PULSE(void)
{
unsigned char PRESENCE;
CLEAR_1wire;
_delay_us(500);
SET_1wire;
_delay_us(30);
if(bit_is_clear(PORT_1wire, WE)) {PRESENCE=1;} else {PRESENCE=0;}
_delay_us(470);
if(bit_is_set(PORT_1wire, WE)) {PRESENCE=1;} else {PRESENCE=0;}
return PRESENCE;
}
//Wysłanie pojedyńczego bitu
void send(char bit)
{
CLEAR_1wire;
_delay_us(5);
if(bit==1)
SET_1wire;
_delay_us(80);
SET_1wire;
}
//Odebranie pojedyńczego bitu
unsigned char read(void)
{
unsigned char PRESENCE=0;
CLEAR_1wire;
_delay_us(2);
SET_1wire;
_delay_us(15);
if(bit_is_set(PORT_1wire, WE)) {PRESENCE=1;} else {PRESENCE=0;}
return PRESENCE;
}
//Wysłanie całego bajtu
void send_byte(char wartosc)
{
unsigned char i,pom;
for(i=0;i<8;i++)
{
pom = wartosc>>1;
pom &= 0x01;
send(pom);
}
_delay_us(100);
}
//Czytanie całego bajtu
unsigned char read_byte(void)
{
unsigned char i,wartosc=0;
for(i=0;i<8;i++)
{
if(read()) wartosc |= 0x01;
_delay_us(15);
}
return wartosc;
} int main(void)
{
char buf[8];
unsigned char sprawdz;
char temp1=0, temp2=0;
LCD_Initalize();
_delay_ms(100);
while(1)
{
sprawdz=RESET_PULSE();
if(sprawdz==1)
{
send_byte(0xCC);
send_byte(0x44);
_delay_ms(750);
sprawdz=RESET_PULSE();
send_byte(0xCC);
send_byte(0xBE);
temp1=read_byte();
temp2=read_byte();
sprawdz=RESET_PULSE();
float temp=0;
temp=(float)(temp1+(temp2*256))/16;
dtostrf(temp,1,1,buf);
LCD_Clear();
LCD_GoTo(0,0);
LCD_WriteText(buf);
LCD_GoTo(4,0);
LCD_WriteText("'C");
_delay_ms(200);
}
else
{
LCD_Clear();
LCD_WriteText("BLAD 1-wire");
}
}
}Proszę o pomoc
inventco.eu - tytuł postu zmieniłem regulamin p.11.1
