Wiem, temat układów wałkowany ale takiego problemu jak mój nie znalazłem.
Od początku, układzik na Atmedze8 , linia 1 wire trój przewodowa, linia danych podciągnięta 4k7.
Mam na sztywno wpisane do tablicy nr seryjne układów - tak wiem niezbyt eleganckie. Ale w tym momencie to mało ważne.
char czujnik[5][9]={
{0x28,0x64,0xf6,0xb5,0x01,0x00,0x00,0x80,0x00}, // dlugi kabel tel
{0x28,0x79,0xd3,0xb5,0x01,0x00,0x00,0xbb,0x00}, // trzy paski
{0x28,0xb0,0xf6,0xb5,0x01,0x00,0x00,0x98,0x00}, // dlugi tel czarny
{0x28,0x70,0xba,0xb6,0x01,0x00,0x00,0x47,0x00}, // jeden paski
{0x10,0xb4,0x85,0x71,0x01,0x08,0x00,0xc3,0x00}, // dwa paski
};
Wartość po nr ser. na razie nie wykorzystywana. Dodana na przyszłość.
Podpinam JEDEN egzemplarz DS18B20 - odczyt temperatury działa.
Podpinam DRUGI egzemplarz DS18B20 - odczyt temperatury działa z obu układów.
Podpinam TRZECI gzemplarz DS18B20 - odczyt temperatury przestaje działać.
Kombinując z kilkoma innymi sztukami udało mi się dojść do kombinacji trzech termometrów na jednej linii działających i blokowaniu odczytu po podpięciu CZWARTEGO układziku.
Tak nakazuje wykonanie pomiaru dla wszystkich układów jednocześnie:
ow_reset();
write_byte(0xcc);
write_byte(0x44);
Tak odczytuje pojedyńczy wynik z termometru:
ow_reset();
write_byte(0x55);
write_byte(czujnik[lpp_czujnik][0]);
write_byte(czujnik[lpp_czujnik][1]);
write_byte(czujnik[lpp_czujnik][2]);
write_byte(czujnik[lpp_czujnik][3]);
write_byte(czujnik[lpp_czujnik][4]);
write_byte(czujnik[lpp_czujnik][5]);
write_byte(czujnik[lpp_czujnik][6]);
write_byte(czujnik[lpp_czujnik][7]);
write_byte(0xBE);
ds.nds[0]=read_byte();
ds.nds[1]=read_byte();
Wszystko jakby było zależne od kombinacji nr seryjnego dla DS18B20.
Radzio
Od początku, układzik na Atmedze8 , linia 1 wire trój przewodowa, linia danych podciągnięta 4k7.
Mam na sztywno wpisane do tablicy nr seryjne układów - tak wiem niezbyt eleganckie. Ale w tym momencie to mało ważne.
char czujnik[5][9]={
{0x28,0x64,0xf6,0xb5,0x01,0x00,0x00,0x80,0x00}, // dlugi kabel tel
{0x28,0x79,0xd3,0xb5,0x01,0x00,0x00,0xbb,0x00}, // trzy paski
{0x28,0xb0,0xf6,0xb5,0x01,0x00,0x00,0x98,0x00}, // dlugi tel czarny
{0x28,0x70,0xba,0xb6,0x01,0x00,0x00,0x47,0x00}, // jeden paski
{0x10,0xb4,0x85,0x71,0x01,0x08,0x00,0xc3,0x00}, // dwa paski
};
Wartość po nr ser. na razie nie wykorzystywana. Dodana na przyszłość.
Podpinam JEDEN egzemplarz DS18B20 - odczyt temperatury działa.
Podpinam DRUGI egzemplarz DS18B20 - odczyt temperatury działa z obu układów.
Podpinam TRZECI gzemplarz DS18B20 - odczyt temperatury przestaje działać.
Kombinując z kilkoma innymi sztukami udało mi się dojść do kombinacji trzech termometrów na jednej linii działających i blokowaniu odczytu po podpięciu CZWARTEGO układziku.
Tak nakazuje wykonanie pomiaru dla wszystkich układów jednocześnie:
ow_reset();
write_byte(0xcc);
write_byte(0x44);
Tak odczytuje pojedyńczy wynik z termometru:
ow_reset();
write_byte(0x55);
write_byte(czujnik[lpp_czujnik][0]);
write_byte(czujnik[lpp_czujnik][1]);
write_byte(czujnik[lpp_czujnik][2]);
write_byte(czujnik[lpp_czujnik][3]);
write_byte(czujnik[lpp_czujnik][4]);
write_byte(czujnik[lpp_czujnik][5]);
write_byte(czujnik[lpp_czujnik][6]);
write_byte(czujnik[lpp_czujnik][7]);
write_byte(0xBE);
ds.nds[0]=read_byte();
ds.nds[1]=read_byte();
Wszystko jakby było zależne od kombinacji nr seryjnego dla DS18B20.
Radzio
