Witam, mam problem z uruchomieniem termometru w układzie jak w temacie. Konkretnie z procedurą odczytu (zapis mi działa). Mianowicie w temperaturze pokojowej otrzymuje wynik 74 (po podzieleniu przez 2). Gdy ogrzeje układ chwytając w palce wynik szybko rośnie o kilka stopni na sekundę. Gdy nie uruchamiam konwersji to po resecie otrzymuje wartość początkową 40 zamiast 85. Pewnie jakoś bity mi się przesuwają ale nie mogę tego odnaleźć.
w przerwaniu timera mam:
Zegar 11.059MHz. Za pomoc z góry dzieki!
Dodano po 58 [minuty]:
Chyba już wiem. Dostałem w sklepie układ 18B20 zamiast 18S20 a on trochę inaczej ma zorganizowane przechowywanie danych. Myślę, że w tym tkwi ten problem.
bit OneWireReadBit(void)
{
int x;
unsigned char presence=0;
OneWireBus = 0;
OneWireBus = 1;
for (x=0;x<=1;x++);
if (OneWireBus == 0) presence = 0;
if (OneWireBus == 1) presence = 1;
return presence ;
}
unsigned char OneWireReadByte(void)
{
int x;
unsigned char i;
unsigned char value = 0;
for (i=0;i<8;i++)
{
if (OneWireReadBit()) value|=0x01<<i;
for (x=0;x<=17;x++);
}
return value;
} w przerwaniu timera mam:
ET0 = 0;
countth = 0;
if (OneWireReset() == 1)
{
PVH = 0x58;
PVL = 0x08;
}
else
{
OneWireWriteByte(0xCC);
OneWireWriteByte(0xBE);
PVH = OneWireReadByte() / 2;
OneWireReset();
OneWireWriteByte(0xCC);
OneWireWriteByte(0x44);
}
ET0 = 1;
Zegar 11.059MHz. Za pomoc z góry dzieki!
Dodano po 58 [minuty]:
Chyba już wiem. Dostałem w sklepie układ 18B20 zamiast 18S20 a on trochę inaczej ma zorganizowane przechowywanie danych. Myślę, że w tym tkwi ten problem.