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

Harmanuel
-
-
Posty:3
Rejestracja:13 sie 2007, o 07:04
Lokalizacja:...
wyświetlanie LED i 1wire

Postautor: Harmanuel » 13 sie 2007, o 15:44

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".

radzio
Moderator
Moderator
Posty:967
Rejestracja:13 maja 2003, o 10:33
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: radzio » 13 sie 2007, o 16:44

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.

Harmanuel
-
-
Posty:3
Rejestracja:13 sie 2007, o 07:04
Lokalizacja:...

Postautor: Harmanuel » 13 sie 2007, o 21:34

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ł.

radzio
Moderator
Moderator
Posty:967
Rejestracja:13 maja 2003, o 10:33
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: radzio » 13 sie 2007, o 21:50

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.

Harmanuel
-
-
Posty:3
Rejestracja:13 sie 2007, o 07:04
Lokalizacja:...

Postautor: Harmanuel » 7 wrz 2007, o 11:23

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".

manolo
-
-
Posty:6
Rejestracja:28 lut 2007, o 21:35
Lokalizacja:Poznań

Postautor: manolo » 12 gru 2007, o 00:39

Co do komunikatu o którym pisał "Harmanuel" mogę poradzić, aby dodać chociażby coś takiego:

Kod: Zaznacz cały

If T1 > 10 Then End If
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 :D. Może komuś się przydadzą.

szymel
-
-
Posty:212
Rejestracja:16 sty 2005, o 16:42
Lokalizacja:Włocławek

Postautor: szymel » 13 gru 2007, o 18:43

Co do komunikatu o którym pisał "Harmanuel" mogę poradzić, aby dodać chociażby coś takiego:

Kod: Zaznacz cały

If T1 > 10 Then End If
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 :D. Może komuś się przydadzą.
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.

Kod: Zaznacz cały

Shift T1 , Right , 1 'powinno być T1 = T1 / 2
Piotrek

rafuls2
-
-
Posty:3
Rejestracja:3 lis 2007, o 19:37
Lokalizacja:rzemień

Postautor: rafuls2 » 17 sty 2008, o 20:23

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

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 21 gości