Witam
Ostatnio zbudowalem sobie termometr na ds18b20 - do Atmega8 podpialem ten wlasnie czujnik, wyswietlacz lcd, oprogramowalem to i wszystko dziala. Postanowilem wiec podlaczyc drugi czujnik (wykorzystujac search rom). I tu wlasnie zaczal sie moj problem - prawidlowo odczytywany jest tylko pierwszy bit. Przekopalem sporo postow na forum jednak nie znalazlem podobnego problemu. Uzylem rowniez schematu Maxima, skopiowalem kod z dokumentacji do wyszukiwania urzadzen po 1-wire, niestety z podobnym skutkiem. Moja procedura wyglada nastepujaco :
Siedze juz nad tym sporo czasu i naprawde nie wiem w czym moze tkwic problem...
Ostatnio zbudowalem sobie termometr na ds18b20 - do Atmega8 podpialem ten wlasnie czujnik, wyswietlacz lcd, oprogramowalem to i wszystko dziala. Postanowilem wiec podlaczyc drugi czujnik (wykorzystujac search rom). I tu wlasnie zaczal sie moj problem - prawidlowo odczytywany jest tylko pierwszy bit. Przekopalem sporo postow na forum jednak nie znalazlem podobnego problemu. Uzylem rowniez schematu Maxima, skopiowalem kod z dokumentacji do wyszukiwania urzadzen po 1-wire, niestety z podobnym skutkiem. Moja procedura wyglada nastepujaco :
unsigned char ds18b_cnt = 0,ucReset,i;
unsigned char discrp = 0, last_bit = 0, last_zero;
unsigned char a,b;
do
{
last_zero = 0;
owire_write_byte(0xF0);
for(i=0; i<64; i++)
{
a = owire_read_bit();
b = owire_read_bit();
if(a==1 && b==1){
lcd_puts("error?!?");
}
else
{
if(!(a || b))
{
a = (i == discrp)? 1 : (i>discrp ? 0 : last_bit);
if(!a) last_zero = i;
}
owire_write_bit(last_bit = a);
rom[ds18b_cnt][i/8] |= a<<(i%8);
}
}
ds18b_cnt++;
discrp = last_zero;
}
while((ds18b_cnt < 2)&& discrp);
Siedze juz nad tym sporo czasu i naprawde nie wiem w czym moze tkwic problem...