Problem z 1wire :(

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Andrzej_:-)
-
Posty: 16
Rejestracja: 21 wrz 2005, 10:39

Problem z 1wire :(

Post autor: Andrzej_:-) » 25 lip 2007, 16:35

cześc
Mam problem z transmisją 1wire..
Buduje termostat którego elementem składowym jest DS18B20
probuje wyciągnąć z niego temperaturę i nic :(
bit ERR pokazuje że układ jest....ale w obu bajtach odczytanch z DS'a jest 0

mikroprocesor attiny2313 na wewnętrznym oscylatorze 8 MHz
nie mam zielonego pojęcia co robie źle :(

podaje fragment kodu bo całośc to prawie 2k/....

Kod: Zaznacz cały

1wreset               '1wire
   1wwrite &HCC
   1wwrite &H44
   Wait 1
   1wreset
   1wwrite &HCC
   1wwrite &HBE
   Odczyt(1) = 1wread(2)
                          'obróbka
   Tcnt1h = Odczyt(2)    'starszy bajt
   Eedz = Odczyt(2)'''''''''''''''''''''''''''''zapis w eeprom!!! TU jest 0!!!
   Tcnt1l = Odczyt(1)    'nłodszy bajt
   Eeje = Odczyt(1)      '''''''''''''''''''''''''''''zapis w eeprom   TU jest 0!!!
   Ocr1ah.0 = Tcnt1l.4
   Ocr1ah.1 = Tcnt1l.5
   Ocr1ah.2 = Tcnt1l.6
   Ocr1ah.3 = Tcnt1l.7
   Ocr1ah.4 = Tcnt1h.0
   Ocr1ah.5 = Tcnt1h.1
   Ocr1ah.6 = Tcnt1h.2
   Ocr1ah.7 = 0
    If Err = 1 Then
   Eetemp = &HB0         'brak ukladu    '''''''''''''''''''''''''''''''''''''''''''''
   Else
   Eetemp = &HD0         'jst uklad
   End If

   Dziestempzm = Ocr1ah \ 10
   Pom4 = Dziestempzm * 10
   Jedtempzm = Ocr1ah - Pom4  
prosze o pomoc
i zycze miłego dnia


------------
Fragmenty również należy umieszczać w tagu CODE. ZbeeGin
Ostatnio zmieniony 01 sty 1970, 1:00 przez Andrzej_:-), łącznie zmieniany 1 raz.

ZbeeGin

Post autor: ZbeeGin » 25 lip 2007, 17:21

A jak strona sprzętowa? Zasilanie linii, rezystancja podciągająca? 1wire to nie tylko samo oprogramowanie...

Andrzej_:-)
-
Posty: 16
Rejestracja: 21 wrz 2005, 10:39

Post autor: Andrzej_:-) » 26 lip 2007, 10:32

Już działa....miałem zimny lut na tym oporniku :oops:

zmieniłem też fragment kodu odpowiedzialny za wyciągnięcie temperatury z odczytanych bajtów

był:

Kod: Zaznacz cały

   Tcnt1h = Odczyt(2)    'starszy bajt
   Tcnt1l = Odczyt(1)    'nłodszy bajt     'JUŻ TU POJAWIAŁY SIĘ ROZBIEŻNOŚCI
   Ocr1ah.0 = Tcnt1l.4
   Ocr1ah.1 = Tcnt1l.5
   Ocr1ah.2 = Tcnt1l.6
   Ocr1ah.3 = Tcnt1l.7
   Ocr1ah.4 = Udr.0
   Ocr1ah.5 = Udr.1
   Ocr1ah.6 = Udr.2
   Ocr1ah.7 = 0
   Dziestempzm = T \ 10 ' dziesiąttki temp zmierzonj
   Pom4 = Dziestempzm * 10
   Jedtempzm = T - Pom4 ' jedności temp zmierzonj
chciałem wykorzystać nieuwżywane rejestry timera1 i poukładać sobie je po koleji bit po bicie w jednym bajcie.......nie wiem czemu to nie działało...dziwne.... :neutral:

Teraz jest tak:

Kod: Zaznacz cały

   T = Odczyt(2)  ' Tjest zmienną tupu word 
   Shift , T , Left , 8
   T = T + Odczyt(1)
   Shift , T , Right , 4
   Dziestempzm = T \ 10 ' dziesiąttki temp zmierzonj
   Pom4 = Dziestempzm * 10
   Jedtempzm = T - Pom4 ' jedności temp zmierzonj
I działa! Nie potrzebuje mieć znaku ani wartości po przecinku...bo mam dwa wyświetlacze led....i zakres zmian temperatury od 0 do 99 stop [C]

tylko niepokoi mnie to że od czasu do czasu w warunkach pokojowych wyświetla mi sie 75 stop [c]...... :shock: :shock: :shock: :cry: ??

ZbeeGin

Post autor: ZbeeGin » 26 lip 2007, 10:51

Andrzej_:-) pisze:hciałem wykorzystać nieuwżywane rejestry timera1 i poukładać sobie je po koleji bit po bicie w jednym bajcie.......nie wiem czemu to nie działało...dziwne....
Rejestry są buforowane, dlatego nie działało.

Andrzej_:-)
-
Posty: 16
Rejestracja: 21 wrz 2005, 10:39

Post autor: Andrzej_:-) » 30 lip 2007, 15:37

ZbeeGin pisze: Rejestry są buforowane, dlatego nie działało.
....niebardzo wiem jak to rozumieć :oops:
buforowane..po co?.....jak? :shock: Ale sprawdze to :grin:

Teraz już jest wszystko ok! :mrgreen:
problemy z błędami w transmisji i niezkordynoowanym dziwnym"przemigiwaniem" wyświetlaczy led udało się wyeliminować przez zablokowanie przerwań od timera0 na czas transmisji i na zapis do pamięci eeprom.

dziękuje za pomoc:)
Życzę miłego dnia :wink:

ODPOWIEDZ