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
termometr na ds1820 i 2313
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
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 = .................
Zabrakło:
Config Portb = ..................
Config Portd = .................
gaweł zajął się twoim problemem więc jest szansa że coś z tego będzie
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
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.
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
Sorry nie doczytałem 1-szego posta.
Faktycznie "składak" i to słaby.
Pozdrawiam
Piotr Sz.
Faktycznie "składak" i to słaby.
Pozdrawiam
Piotr Sz.