Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięwyświetlanie LED i 1wire
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
Mam takie zadanie:
Poniższy program wyświetla temperaturę na wyświetlaczu LCD, a ja mam potrzebę prezentacji temperatury na wyświetlaczu LED. Proszę o jakieś zaawansowane podpowiedzi, ponieważ ja jestem niezaawansowanym bascom'owcem.
Config 1wire = Portd.5
Dim Odczyt(2) As Byte
Dim T As Integer
Dim T1 As Single
Cls
Do
1wreset
1wwrite &HCC
1wwrite &HBE
Odczyt(1) = 1wread(2)
T1 = T + Odczyt(1)
Shift T1 , Right , 1
Cls
Lcd "Temp. " ; T1 ; Chr(223) ; "C"
1wreset
1wwrite &HCC
1wwrite &H44
Wait 1
Loop
Pozdrawiam wszystkich "mózgów".
Poniższy program wyświetla temperaturę na wyświetlaczu LCD, a ja mam potrzebę prezentacji temperatury na wyświetlaczu LED. Proszę o jakieś zaawansowane podpowiedzi, ponieważ ja jestem niezaawansowanym bascom'owcem.
Config 1wire = Portd.5
Dim Odczyt(2) As Byte
Dim T As Integer
Dim T1 As Single
Cls
Do
1wreset
1wwrite &HCC
1wwrite &HBE
Odczyt(1) = 1wread(2)
T1 = T + Odczyt(1)
Shift T1 , Right , 1
Cls
Lcd "Temp. " ; T1 ; Chr(223) ; "C"
1wreset
1wwrite &HCC
1wwrite &H44
Wait 1
Loop
Pozdrawiam wszystkich "mózgów".
Istnieje tyle możliwości napisania róznych wersji programu którego szukasz, ile jest wersji podłączenia wyświetlaczy LED do mikrokontrolera : statycznie, multipleksowo, z rejestrem przesuwnym, z ekspanderem na I2C. Samo stwierdzenie, że chcesz wyświetlić "na wyswietlaczu LED" mówi tyle samo co "chcę samochód". Jeśli wiesz jak zamierzasz podłączyć te wyświetlacze (albo masz już je podłączone) do podaj więcej szczegółów na ten temat.
Swój problem chciałbym rozszerzyć o następujące dane: Mikrokonrtoler AT90S2313, czujnik DS1820. Układ zbudowany na płytce testowej AVT3500 - więc multiplexacja. Docelowo chciałbym podłączyć kilka czujek i do każdej z nich podłączyć osobny zestaw trzech wyświetlaczy. Na Wasz sygnał mogę dopowiedzieć jeszcze więcej, choć istotę określiłem. Mogę np. wkleić schemat. Proszę o taki sygnał.
Tyle danych wystarczy
W pierwszej kolejności musisz opanować obsługę wyświetlacza multipleksowanego. Przykłady pod płytkę AVT-3500 były publikowane w Elektronice dla Wszystkich, ale zakłądam że tych gazet nie masz bo inaczej temat by nie powstał. Zakładam że również nie masz tej książki : http://www.btc.pl/?id_prod=10652 Ale pobierz listingi programów od tej książki i przejrzyj listingi C008 i parę kolejnych. Zobacz jak zostało zrealizowane multipleskowanie wyświetlaczy i spróbuj to zastosować u siebie. Do zmiennych dziesiatki i jednoski będziesz musiał załadować swoją temperaturę odczytaną z termometru. Spróbuj się tym pobawić, poeksperymentuj. Jeśli Ci się nie uda, nie rozpaczaj tylko pisz na forum, ale ważne abyś sam spróbował to zrobić bazując na tych listingach z książki.
W pierwszej kolejności musisz opanować obsługę wyświetlacza multipleksowanego. Przykłady pod płytkę AVT-3500 były publikowane w Elektronice dla Wszystkich, ale zakłądam że tych gazet nie masz bo inaczej temat by nie powstał. Zakładam że również nie masz tej książki : http://www.btc.pl/?id_prod=10652 Ale pobierz listingi programów od tej książki i przejrzyj listingi C008 i parę kolejnych. Zobacz jak zostało zrealizowane multipleskowanie wyświetlaczy i spróbuj to zastosować u siebie. Do zmiennych dziesiatki i jednoski będziesz musiał załadować swoją temperaturę odczytaną z termometru. Spróbuj się tym pobawić, poeksperymentuj. Jeśli Ci się nie uda, nie rozpaczaj tylko pisz na forum, ale ważne abyś sam spróbował to zrobić bazując na tych listingach z książki.
Samodzielnie napisałem coś takiego:
Config 1wire = Portd.5
Dim Odczyt(2) As Byte , T As Integer , T1 As Single
Dim Jednostki As Byte , Dziesiatki As Byte , Ktorywysw As Bit
Config Portb = 255
Portb = &B11111111
Config Portd = &B1011111
Portd = &B1111111
Do
1wreset
1wwrite &HCC
1wwrite &HBE
Odczyt(1) = 1wread(2)
T1 = T + Odczyt(1)
Shift T1 , Right , 1
1wreset
1wwrite &HCC
1wwrite &H44
Wait 2
Toggle Ktorywysw
If Ktorywysw = 0 Then
Portd.3 = 0
Portb = Lookup(jednostki , Tabela)
Else
Portd.4 = 0
Portb = Lookup(dziesiatki , Tabela)
End If
Loop
End
Tabela:
Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
Nie wiem nawet czy to jest dobrze, ponieważ wciąż pojawia się komunikat:
"Error 61: Line 33: Label not found [_FSRAMA1 ], in File: C:\TEMP_LED2.BAS".
Config 1wire = Portd.5
Dim Odczyt(2) As Byte , T As Integer , T1 As Single
Dim Jednostki As Byte , Dziesiatki As Byte , Ktorywysw As Bit
Config Portb = 255
Portb = &B11111111
Config Portd = &B1011111
Portd = &B1111111
Do
1wreset
1wwrite &HCC
1wwrite &HBE
Odczyt(1) = 1wread(2)
T1 = T + Odczyt(1)
Shift T1 , Right , 1
1wreset
1wwrite &HCC
1wwrite &H44
Wait 2
Toggle Ktorywysw
If Ktorywysw = 0 Then
Portd.3 = 0
Portb = Lookup(jednostki , Tabela)
Else
Portd.4 = 0
Portb = Lookup(dziesiatki , Tabela)
End If
Loop
End
Tabela:
Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
Nie wiem nawet czy to jest dobrze, ponieważ wciąż pojawia się komunikat:
"Error 61: Line 33: Label not found [_FSRAMA1 ], in File: C:\TEMP_LED2.BAS".
Co do komunikatu o którym pisał "Harmanuel" mogę poradzić, aby dodać chociażby coś takiego:
niby nic nie robi, a błąd powinien zniknąć . Z doświadczenia wiem, że wyświetlenie czegoś na lcd też pomaga śmieszne, ale u mnie działają takie czarodziejskie sztuczki . Może komuś się przydadzą.
Kod: Zaznacz cały
If T1 > 10 Then
End If
Szanowny kolego .W w/w przypadku , nie potrzeba żadnych sztuczek czy czarów;) Wystarczy tylko wiedzieć z doświadczenia że: nie wykonuje się operacji przesunięcia , na zmiennej typu SINGLE.Co do komunikatu o którym pisał "Harmanuel" mogę poradzić, aby dodać chociażby coś takiego:niby nic nie robi, a błąd powinien zniknąć . Z doświadczenia wiem, że wyświetlenie czegoś na lcd też pomaga śmieszne, ale u mnie działają takie czarodziejskie sztuczki . Może komuś się przydadzą.Kod: Zaznacz cały
If T1 > 10 Then End If
Kod: Zaznacz cały
Shift T1 , Right , 1 'powinno być T1 = T1 / 2
To może ja dołączę się do dyskusji. Mam napisany program na ds1822 do płytki avt3500 oczywiście na led'ach. układ mierzy i wyświetla temperaturę prawidłowo ale mam problem z wyświetlaniem. A mianowicie wyświetlacz "pomryguje" wyświetlając różne cyfry z reguły jest to 95. NIe mam pojęcia jak spowodować aby wyeliminować to pomrygiwanie.
oto kod programu:
kod:
' termometr led
Config Portb = 255 : Portb = 255
Config Portd = &B1111110 : Portd = &B1111110
Config Timer0 = Timer , Prescale = 64 : Enable Interrupts : Enable Timer0
Config 1wire = Portd.6
Dim Odczyt(2) As Byte , , T As Integer , Dzies As Byte , Jednostki As Byte
Dim Ktorywysw As Byte
On Timer0 Co4ms
Do
1wreset 'reset kostki
1wwrite &HCC 'skip rom-pomiń indywidualne adresowanie
1wwrite &H44 'rozkaz wykonania pomiaru i przeprowadzenia konwersji
Waitms 300
1wreset ' druga sesja łączności
1wwrite &HCC ' wysyła rozkaz odczytania danych z kostki
Wait 1
Portd = &B1111111
1wwrite &HBE
'rozkaz odczytu danych z ds'a
Odczyt(1) = 1wread(2)
'odczytaj dwa pierwsze bajty - temperaturę
T = Odczyt(2) 'starszy bajt temperatury
Shift T , Left , 8
'przesuń w lewo o 8 miejsc
T = T + Odczyt(1) 'w zmiennej Integer jest dziwna "ułamkowa" wartość
Shift T , Right , 4 'zamiast dzielić przez 16 przesuń w prawo
Loop : End
Co4ms:
Timer0 = 6
Dzies = Makebcd(t)
Jednostki = Dzies And 15
Shift Dzies , Right , 4
Incr Ktorywysw : If Ktorywysw = 4 Then Ktorywysw = 0
Portd = &B1111111
Select Case Ktorywysw
Case 0:
Portb = 156
Portd.3 = 0
Case 1:
Portb = Lookup(jednostki , Tabela)
Portd.4 = 0
Case 2:
Portb = Lookup(dzies , Tabela)
Portd.5 = 0
'Case 3:
'Portb = Lookup(t , Tabela)
' Portd.6 = 0
End Select
Return
Tabela:
Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
Tabela2:
Data 192 , 249 , 164 , 153 , 146 , 130 , 248 , 144
oto kod programu:
kod:
' termometr led
Config Portb = 255 : Portb = 255
Config Portd = &B1111110 : Portd = &B1111110
Config Timer0 = Timer , Prescale = 64 : Enable Interrupts : Enable Timer0
Config 1wire = Portd.6
Dim Odczyt(2) As Byte , , T As Integer , Dzies As Byte , Jednostki As Byte
Dim Ktorywysw As Byte
On Timer0 Co4ms
Do
1wreset 'reset kostki
1wwrite &HCC 'skip rom-pomiń indywidualne adresowanie
1wwrite &H44 'rozkaz wykonania pomiaru i przeprowadzenia konwersji
Waitms 300
1wreset ' druga sesja łączności
1wwrite &HCC ' wysyła rozkaz odczytania danych z kostki
Wait 1
Portd = &B1111111
1wwrite &HBE
'rozkaz odczytu danych z ds'a
Odczyt(1) = 1wread(2)
'odczytaj dwa pierwsze bajty - temperaturę
T = Odczyt(2) 'starszy bajt temperatury
Shift T , Left , 8
'przesuń w lewo o 8 miejsc
T = T + Odczyt(1) 'w zmiennej Integer jest dziwna "ułamkowa" wartość
Shift T , Right , 4 'zamiast dzielić przez 16 przesuń w prawo
Loop : End
Co4ms:
Timer0 = 6
Dzies = Makebcd(t)
Jednostki = Dzies And 15
Shift Dzies , Right , 4
Incr Ktorywysw : If Ktorywysw = 4 Then Ktorywysw = 0
Portd = &B1111111
Select Case Ktorywysw
Case 0:
Portb = 156
Portd.3 = 0
Case 1:
Portb = Lookup(jednostki , Tabela)
Portd.4 = 0
Case 2:
Portb = Lookup(dzies , Tabela)
Portd.5 = 0
'Case 3:
'Portb = Lookup(t , Tabela)
' Portd.6 = 0
End Select
Return
Tabela:
Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
Tabela2:
Data 192 , 249 , 164 , 153 , 146 , 130 , 248 , 144
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 19 gości