Mam taki problem z DS1820 otóż nie moge odczytać temperatury. Czujnik jest chyba dobry bo po resecie i otrzymaniu komendy wyślij ROM
-33h wysyła swój numer seryjny.
Natomiast po komendach
1.Reset
2.Pomiń ROM -CCh
3.Zmierz temperaturę -44h
4.Ustawiam 1 na linię 1-wire i czekam 500ms (próbowalem też czekać
200m 700m a nawet ponad sekundę i nic)
5.Reset
6.Pomiń ROM -CCh
7.Odczyt temperatury -BEh układ wysylka same 1 czyli tak jakby nic nie wysylał. Może miał ktoś podobny problem i pomoże. Program piszę w c jednak zakładam że funkcje wysyłania bajtów jak i odczytująca są poprawne skoro otrzymałem numer seryjny.
Acha i jeszcze jedno otóż rozkazy wysyłam do ds1820 od najbardziej znaczącgo bitu czyli np. komendę wyślij numer seryjny(33h) wysyłam po koleji 0,0,1,1,0,0,1,1 choć w instrukcji pisze że powinienem od LSB ale jak wysyłam od LSB to mi ds nie odpowiada, i to także budzi mój niepokój. Z góry dziękuje za pomoc. Pozdrawiam
na jakim procku to masz zrobione? przesymał Ci moja biblioteke dla ds18b20 dla avr z kwarcem 14.7456MHz, bardzo ważne są tutaj czasy. Podłączony pod PORTB.0
while(1) { onewire_reset(); _delay_ms(50); onewire_write(0xCC); //SKIP ROM onewire_write(0x44); //READ SCRATCHPAD
_delay_ms(50); _delay_ms(50); _delay_ms(50); onewire_reset(); _delay_ms(50); onewire_write(0xCC); //SKIP ROM onewire_write(0xBE); //READ SCRATCHPAD a = onewire_read(); b = onewire_read(); c = a & (0x0F); // wartości dziesiętne (po przecinku) a >>= 4; b <<= 4; a = a | b; e = 625 * c;
unsigned char i; unsigned char temp; for (i=0; i<8; i++) // writes byte, one bit at a time { temp = val>>i; // shifts val right 'i' spaces temp &= 0x01; // copy that bit to temp onewire_write_bit(temp); // write bit in temp into } _delay_us(50); _delay_us(50); }
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.