termometr na ds1820 i 2313

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
kinius
-
Posty: 1
Rejestracja: 20 maja 2004, 22:02

termometr na ds1820 i 2313

Post autor: kinius » 21 maja 2004, 9:02

hej,

zrobilam sobie termometr min/max z EP z nr 11/2001. Schemat mozna znalezc na stronach EP. Ukladzik mam poskladany i polutowany. W gazecie byly listningi, ktore przpeisalam...
Napisano tez, ze nalezy uzupelnic zczytywanie temperatury - skorzystalam wiec z gotowej procedurki znajdujacej sie na stronce http://www.mcselec.com/an06.htm

oprocz tego trzeba bylo uzupelnic wyswietlanie liczb na poszczegolnych wyswietlaczach, a takze wybrac na ktorym z 9 wyswietlaczy LED ma zostac ona wyswietlona.

Na basocmie sie nie znam, a poza tym jest to w ogole pierwsze dzielo z jakim mialam w ogole do czynienia lutujac, co prawde powiedziawszy wydalo sie fajna zabawa :>

Chcialam wiec zapytac, czy jest ktos w stanie spojrzec na to "posklejane" zrodlo i powiedziec czy to w ogole ma szanse kiedys zadzialac? a moze po prostu te zebrane "szczatki" do niczego sie nie nadaja..

pzdr
kinius

Wojtek
Moderator
Posty: 2606
Rejestracja: 04 sie 2002, 19:00
Lokalizacja: --
Kontakt:

Post autor: Wojtek » 21 maja 2004, 15:36

Przyślij do mnie ten programik to go tu umieszczę

Wojtek
Moderator
Posty: 2606
Rejestracja: 04 sie 2002, 19:00
Lokalizacja: --
Kontakt:

Post autor: Wojtek » 22 maja 2004, 9:31

Program nadesłany przez kinius może sie ktoś przyglądnie, schemat taki jak w EP11/2001

' zmienne wystepujace w programie
Dim T_max As Integer 'zmienna przechowywujaca najwyzsza temeprature
Dim T_min As Integer 'zmienna przechowywujaca najnizsza temeprature
Dim T_cur As Integer 'zmienna przechowywujaca aktualna temeprature
Dim Digit_number As Integer 'numer wyswietlacza
Dim Temp As Integer 'zmienne pomocnicza
Dim Temp2 As Integer 'zmienna pomocnicza
Dim Bd(9) As Byte

Dim Tmp As Byte
Dim T As Integer , T1 As Integer


Declare Sub _petla
Declare Sub _bcd
Declare Sub Read1820
Declare Sub Crcit


Config 1wire = Portb.0

Sub _petla

Do
Disable Timer1 'zawies chwilowo obsluge przerwania timera1
1wwrite &HCC 'polecenie ignorowania numeru seryjnego ukladu DS1820
1wwrite &H44 'start pomiaru temperatury
Enable Timer1 'przywroc obsluge przerwania timera1
Set Portd.4 'sprobuj ustawic stan wysoki na koncowce przycisku S1
If Pind.4 = 0 Then 'jezeli proba nieudana (przycisk nacisniety), to:
T_max = T_cur 'zmienna okreslajaca maksymalna temperature staje sie rowna
'temperaturze biezacej
T_min = T_cur 'zmienna okreslajaca minimalna temp staje sie rowna temp biezacej
End If

Wait 1 'zaczekaj 1 sekunde na koniec konwersji danych
If Err = 0 Then 'jezeli na magistrali 1WIRE jest termometr DS1820, to:
'odczytaj wynik pomiaru

Read1820

If T_max < T_cur Then T_max = T_cur 'jezeli zmienna okreslajaca maksymalna temperature jest mniejsza
'od temperatury aktualnie zmierzonej, to zmienna okreslajaca maksymalna
'temperature staje sie rowna temp biezacej

If T_min > T_cur Then T_min = T_cur 'jezeli zmienna okreslajaca minimalna temperature jest wieksza
'od temperatury aktualnie zmierzonej, to zmienna okreslajaca minimalna
'temperature staje sie rowna temp biezacej
End If


Loop
End Sub


Sub Read1820

Config 1wire = Portb.0
1wwrite &HCC : 1wwrite &H44
Wait 1

Config 1wire = Portb.0
1wreset
1wwrite &HCC
1wwrite &HBE
Bd(1) = 1wread(9)
1wreset
Tmp = Bd(1) And 1

If Tmp = 1 Then Decr Bd(1)
T_cur = Makeint(bd(1) , Bd(2))
T_cur = T_cur * 50 : T_cur = T_cur - 25 : T1 = Bd(8) - Bd(7) : T1 = T1 * 100
T1 = T1 / Bd(8) : T_cur = T_cur + T1 : T_cur = T_cur / 10
End Sub


'............................................................
'
'Konfigurowanie timera1 i obslugi jego przerwania
'
'............................................................

Config Timer1 = Timer , Prescale = 1
On Timer1 Multiplexing
Start Timer1
Enable Timer1
Enable Interrupts

'..................................

Multiplexing:
Incr Digit_number 'zwieksz o 1 zmienna okreslajaca aktualnie wyswietlana cyfre

If Digit_number = 9 Then Digit_number = 0 'jezeli zmienna okreslajaca aktualnie wyswietlana cyfre
'osiagnela wartosc 9, to staje sie ona rowna 0

Portd = Digit_number 'podaj wartosc zmiennej Digit_number na wejsciu dekodera 74LS42

Select Case Digit_number 'w zaleznosci od numeru aktualnie wyswietlanej cyfry oblicz jej wartosc
Case 0: 'jezeli jest to pierwsza cyfra to:'
Temp = T_cur / 100
Case 1: 'jezeli jest to druga cyfra
Temp = T_cur / 10 'oblicz wartosc jednostek aktualnej temperatury
Temp2 = Temp / 10
Temp2 = Temp2 * 10
Temp = Temp - Temp2
Case 2: ' jezeli jest to trzecia cyfra
Temp = T_cur / 10 'oblicz wartosc dziesiatych czesci stopnia aktulanej temperatury
Temp = Temp * 10
Temp = T_cur - Temp
Case 3: ' jezeli jest to czwarta cyfra
Temp = T_max / 100 ' oblicz wartosc dziesiatek najwyzszej zmierzonej temperatury
Case 4: 'jezeli jest to piata cyfra
Temp = T_max / 10 'oblicz wartosc jednostek najwyzszej zmierzonej temperatury
Temp2 = Temp / 10
Temp2 = Temp2 * 10
Temp = Temp - Temp2
Case 5: ' jezeli jest to szosta cyfra
Temp = T_max / 10 'oblicz wartosc dziesiatych czesci stopnia najwyzszej zmierzonej temperatury
Temp = Temp * 10
Temp = T_max - Temp
Case 6: ' jezeli jest to siodma cyfra
Temp = T_min / 100 ' oblicz wartosc dziesiatek najnizszej zmierzonej temperatury
Case 7: 'jezeli jest to osma cyfra
Temp = T_min / 10 'oblicz wartosc jednostek najnizszej zmierzonej temperatury
Temp2 = Temp / 10
Temp2 = Temp2 * 10
Temp = Temp - Temp2
Case 8: ' jezeli jest to dziewiata cyfra
Temp = T_min / 10 'oblicz wartosc dziesiatych czesci stopnia najnizszej zmierzonej temperatury
Temp = Temp * 10
Temp = T_min - Temp


End Select

_bcd ' wywolaj podprogram wysylajacy obliczona wartosc na wejscia dekodera 74LS247

Timer1 = 50000 'zaladuj do rejestru timera1 wartosc 50000, co daje czestotliwosc multipleksowania ok 40Hz

Return

' podprogram sterowania dekoderem BCD
' wyswietlacz seidmiosegmentowy


Sub _bcd
Set Portb.4 : Set Portb.5 : Set Portb.6
Set Portb.7

Select Case Temp
Case 0:
Reset Portb.4 : Reset Portb.5
Reset Portb.6 : Reset Portb.7
Case 1:
Reset Portb.5 : Reset Portb.6
Reset Portb.7
Case 2:
Reset Portb.4 : Reset Portb.6
Reset Portb.7
Case 3:
Reset Portb.6 : Reset Portb.7
Case 4:
Reset Portb.4 : Reset Portb.5
Reset Portb.7
Case 5:
Reset Portb.5 : Reset Portb.7
Case 6:
Reset Portb.4 : Reset Portb.7
Case 7:
Reset Portb.7
Case 8:
Reset Portb.4 : Reset Portb.5
Reset Portb.6
Case 9:
Reset Portb.5 : Reset Portb.6

End Select
End Sub


Disable Interrupts ' zawies oblsuge przerwan
1wreset 'inicjalizacja magistrali 1wire
1wwrite &HCC 'polecenie ignorowania odczytania nr seryjnego DS
1wwrite &HBE 'polecenie odczytania zawartosci rejestrow
Bd(1) = 1wread(9) 'odczytanie rejestrow
Enable Interrupts 'ponowne zezwolenie na oblsuge przerwan

Awatar użytkownika
gaweł
Użytkownik
Posty: 651
Rejestracja: 05 kwie 2004, 8:38
Lokalizacja: Białystok
Kontakt:

Post autor: gaweł » 27 maja 2004, 12:58

Pierwsza sugestia jak nasuwa się po lekturze tekstu programu, to brak odpowiedniej konfiguracji portów we/wy mikrokontrolera. Po sygnale reset wszystkie porty są określone jako wejścia, więc "świat zewnętrzny" nie jest w stanie zobaczyć efektów działania programu. Z lektury schematu wynika, że praktycznie wszystkie linie są wyjściowymi.
Zabrakło:
Config Portb = ..................
Config Portd = .................

Wojtek
Moderator
Posty: 2606
Rejestracja: 04 sie 2002, 19:00
Lokalizacja: --
Kontakt:

Post autor: Wojtek » 27 maja 2004, 15:39

:arrow: kinius
gaweł zajął się twoim problemem więc jest szansa że coś z tego będzie :D
Spróbuj może poczytać to co napisałem tutaj: http://www.elektronika.priv.pl/bascom_avr.html
Ostatnio zmieniony 09 cze 2005, 5:49 przez Wojtek, łącznie zmieniany 1 raz.

zumek

Bascom AVR

Post autor: zumek » 31 sie 2004, 18:08

Witam wszystkich.

Jestem nowy na tym forum i mam pytanie.
Czy "Program nadesłany przez kinius" to jakiś poglądowy przykład czy działający program ?
Bo jeśli to jest program to bardzo kiepski i jego działanie napewno nie ma nic wspólnego z założeniami jego autora.
A jakie to założenia ? To wynika z analizy źródła.
Drogi kinius musisz jeszcze popracować nad tym "dziełem" i to mocno :)

Nie to żebym się czepiał ale sam, kiedyś na początku swojej "kariery",
trafiłem na taki bubel i mocno się zniechęciłem do mikroelektroniki bo skoro doświadczony "programista" zapewniał że program działa a mi nie działał więc myślałem że to nie dla mnie.

Ale to było dawno :)

Pozdrawiam serdecznie
Co złego to nie ja.

Piotrek Sz.

zumek

Bascom AVR

Post autor: zumek » 31 sie 2004, 18:29

Sorry nie doczytałem 1-szego posta.
Faktycznie "składak" i to słaby.

Pozdrawiam

Piotr Sz.

ODPOWIEDZ