Čidlo teploty DS18B20

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)