Ja som to riešil a ide to v poho. Tu je kus kodu pre citanie cidla a prepocet. Je to trochu divocina, zobrazujem to cez multiplex na 7-segmentovke takze su tam aj prevody na zobrazenie a casove slucky na cakanie na multiplex. Snad sa z toho vysomaris, ak bude treba pomoct, napis.
[code]//Čtení čidla 1
RESET(&PORTB,0);
t = 1;
while (t)
{
}
Ow_Write(&PORTB,0,0xCC);
t = 1;
while (t)
{
}
Ow_Write(&PORTB,0,0xBE);
//Načtení obsahu scratchpadu do a1[0] - a1[9]
t = 1;
while (t)
{
}
for(a1=0;a1<9;a1++)
{
scratchpad[a1]=Ow_Read(&PORTB,0);
}
Temp = scratchpad[1]<<8|scratchpad[0];
Znam = Temp & 0x8000;
Teplota = Temp >> 1;
//Zobrazení teploty čidla 1
// Lcd_Out(1,1,"t1 = ");
if (Znam)
{
Temp = (Temp ^ 0xFFFF) + 1;
Teplota = Temp >> 1;
text[0] = '-';
a = znak[10];
}
else
{
if (Teplota/100)
{
text[0] = (Teplota/100) + 48;
a = znak[1];
}
else
{
text[0] = ' ';
a = znak[11];
}
}
text[1] = (Teplota/10)%10 + 48 ;
b = (Teplota/10)%10;
b = znak**;
if ((b == znak[0]) & (a != znak[1]) ) b = znak[11];
text[2] = (Teplota%10) + 48 ;
c = (Teplota%10);
c = znak[c] + 0x80;
Teplota = Temp <<3;
//Výpočet setin
setiny = (Teplota & 0x000F);
setiny = setiny * 625;
//výpočet pro zobrazení setin
text[4] = setiny/1000 + 48;
d = setiny/1000;
d = znak[d];
[/code]
Ako rutine pre pracu s DS1820 pouzivam v prilohe**
OneWire.h (1.62 KB)