Obsługa DS1820 + timer

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
Tom27
-
Posty: 62
Rejestracja: 28 sie 2005, 12:07

Obsługa DS1820 + timer

Post autor: Tom27 » 15 lis 2008, 19:50

Witam
Mam pytanie jak w poniższym fragmencie kodu (Bascom AVR) zastąpić zwłokę czasową „waitms 750” opóźnieniem z timer-a.
Walczę z programem zegara i chciałem wykorzystać obsługę DS1820, ale konieczne jest zapewnienie DS.-owi zwłoki czasowej żeby sobie wszystko prawidłowo pomierzył. Zegar tradycyjnie zlicza impulsy od timer-a i nie wiem jak pozostawić DS.-a w spokoju na te 750 ms.
Tak przy okazji czy polecenie wait pomiesza mi zliczanie przez timer? Inaczej mówiąc czy polecenie wait zatrzymujące pętlę programu opóźni przerwanie generowane przez przepełnienie timer-a?
Fragment kodu wklejony, poniżej który chcę wykorzystać pochodzi z książki „Programowanie mikrokontrolerów AVR w języku Bascom” Marcina Wiązani.

Kod: Zaznacz cały

Sub Odcz_temp 
1wreset 
1wwrite &HCC 
1wwrite &H44 

Waitms 750 

1wreset 
1wwrite &HCC 
1wwrite &HBE 
Temperatura(1) = 1wread(2) 
1wreset


[ Dodano: 2008-11-18, 23:42 ]
Koledzy pomóżcie mi proszę jak obejść to nieszczęsne polecenie waitms 750. Obecność tej komendy wstrzymuje mi pętlę główną na niecałą sekundę i źle działa mi program. Nie wiem ja zrobić żeby procesor wysłał komendy przed poleceniem waitms do DS.-a a później dał mu spokój na te 750 ms.

Kamil 1
-
Posty: 70
Rejestracja: 01 cze 2007, 15:20

Post autor: Kamil 1 » 19 lis 2008, 19:53

Witam.

Myślę, że mógłbym Ci pomóc :wink:
Napisz jakiego mikrokontrolera używasz? Z pewnością jest to jakiś z rodziny AVR, ale który? I czym taktujesz uC, rezonatorem kwarcowym? Jeśli tak to z jaką częstotliwością?

KiciuR
-
Posty: 4
Rejestracja: 13 maja 2008, 16:38
Lokalizacja: okolice Krk
Kontakt:

Post autor: KiciuR » 19 lis 2008, 23:02

Możesz tak skonfigurować timer żeby wykonywał przerwanie np. co ok sekundę i w przerwaniu na przemian najpierw wykonywać jedną część obsługi DS'a i drugą. Program główny będzie przerywany tylko na te chwile wykonania instrukcji.

Kamil 1
-
Posty: 70
Rejestracja: 01 cze 2007, 15:20

Post autor: Kamil 1 » 21 lis 2008, 6:25

Jeśli chcesz żeby Ci pomóc to musisz napisać jakiego mikrokontrolera używasz i z jaką częstotliwością go taktujesz (wartość rezonatora kwarcowego).

Tom27
-
Posty: 62
Rejestracja: 28 sie 2005, 12:07

Post autor: Tom27 » 25 lis 2008, 18:35

Witam
Mikrokontroler to Atmega8. Taktuje go zewnętrznym kwarcem 8 MHz.
Wymyśliłem sobie coś takiego, że podzieliłem obsługę DS.-a na dwie części i jedną obsługuję za pierwszym razem, gdy przychodzi przerwanie (po pierwszej sekundzie) a drugą część przy kolejnym przerwaniu. De-facto temperatura odświeżana jest, co dwie sekundy. Czyli jest to coś takiego, co proponował KiciuR .
Proszę jeszcze o odpowiedź na drugie pytanie
Tak przy okazji czy polecenie wait pomiesza mi zliczanie przez timer? Inaczej mówiąc czy polecenie wait zatrzymujące pętlę programu opóźni przerwanie generowane przez przepełnienie timer-a?
Dziękuję za zainteresowanie
Pozdrawiam
Tomek

KiciuR
-
Posty: 4
Rejestracja: 13 maja 2008, 16:38
Lokalizacja: okolice Krk
Kontakt:

Post autor: KiciuR » 02 gru 2008, 20:26

Timer działa niezależnie, to coś jak praca w tle, wiec 'wait' na pewno nie zmieni pracy timera.

Romanes
-
Posty: 8
Rejestracja: 17 lis 2005, 9:35
Lokalizacja: Opole
Kontakt:

Post autor: Romanes » 03 gru 2008, 19:49

lepsza metoda dająca odświeżanie odczytu co sekunde, to podzielenie podprogramu z 1 posta na dwa : część z rozkazem wykonania pomiaru (przed waitms) i część z rozkazami odczytu (po waitms). Na samym początku programu głównego, przed wejściem w główną pętle Do...Loop (nawet jeżeli jest pusta - reszta programu to obsługa przerwań) dajemy : polecenie skoku do podprogramu wykonania pomiaru i waitms750. W programie obsługi przerwania najpierw dajemy polecenie skoku do podprogramu odczytu, odczyt temperatury a następnie bezpośrednio polecenie skoku do podprogramu wykonania pomiaru. DS wykonuje pomiar, procek czeka na następne przerwanie, w momencie przerwania DS najpierw jest odpytywany z temperatury sprzed sekundy, a nastepnie dostaje polecenie wykonania pomiaru. Bez polecenia wykonania pomiaru na początku pierwszy odczyt z DSa po resecie dałby wynik 85 stopni (czy coś około)-właściwość DSa.

Tom27
-
Posty: 62
Rejestracja: 28 sie 2005, 12:07

Post autor: Tom27 » 10 gru 2008, 19:45

Dziękują za podpowiedzi.
Pozdrawiam
Tomek K.

ODPOWIEDZ