Wyświetlacz siedmiosegmentowy LED jest często stosowany w układach mikroprocesorowych jednak ze względu na znaczną ilość sygnałów sterujących już przy dwóch wyświetlaczach problemem staje się brak wyprowadzeń procesora. Zawarte tutaj procedury dotyczą multipleksowania wyświetlaczy LED (w jednej chwili zaświecany jest tylko jeden na czas rzędu 4ms) dzięki której do pracy n wyświetlaczy potrzeba tylko 7 + n wyprowadzeń mikrokontrolera (8 + n gdy używamy kropki) Język BASCOM 8051:Poniższa procedura służy do obsługi dwóch wyświetlaczy LED. Musi być wywoływana co około 4ms: Wyswietlanie: Mux = Not Mux If Mux = 1 Then Set P1.6 Wysw10 = Wysw / 10 Wysw10 = Lookup(wysw10 , Tabela) P3 = Wysw10 Reset P1.7 Else Set P1.7 Wysw1 = Wysw Mod 10 Wysw1 = Lookup(wysw1 , Tabela) P3 = Wysw1 Reset P1.6 End If Return Zmienna bitowa Mux po każdym wywołaniu tej procedury zmienia stan na przeciwny, przez co ustala który wyświetlacz ma aktualnie świecić. Do pinów P1.6 i P1.7 dołączone są (przez tranzystory) anody wyświetlaczy. Uruchomienie odpowiedniego wyświetlacza dokonuje się przez podanie stanu niskiego na tranzystor sterujący jego anodą. Do portu P3, przez rezystory ograniczające prąd włączone są katody dwóch wyświetlaczy połączone równolegle (segment a do segmentu a w drugim wyświetlaczu i tak dalej). Do poprawnej pracy konieczne jest jeszcze zdefiniowanie na końcu programu tabeli przeliczającej cyfry na kody wyświetlacza siedmiosegmentowego: Tabela:
Data 65 , 207 , 82 , 70 , 204 , 100 , 96 , 79 , 64 , 68
'znak: 0 1 2 3 4 5 6 7 8 9 Wartości w tabeli zależą od tego do których pinów portu podłączymy segmenty i w jakiej kolejności. Do odczytywania kodu odpowiedniej cyfry z tabeli służy funkcja Lookup. Wartość od 0 do 99 którą chcemy pokazać na wyświetlaczach wpisujemy do zmiennej Wysw. Zmienne Wysw10 i Wysw1 są pomocnicze i oznaczają cyfre dziesiątek i jednostek.
|
|||








Wyświetlanie
Witam.
Mam pytanie odnośnie multipleksacji. Zrobiłem sobie licznik modulo 100 w Assemblerze. Zastosowałem multipleksację ale problem polega na tym, że jedności świecą mi bardzo mocnym światłem a dziesiątki strasznie blado. Czym może to być spowodowane?
Z góry dzięki za odpowiedź.
Ten problem już rozwiązałem
Ten problem już rozwiązałem :) Teraz mam inny. Otóż teraz jest tak, że podczas wyświetlania cyfry pojawia się jej poświata na drugim wyświetlaczu. Takie blade wyświetlenie cyfry z drugiego wyświetlacza. Czym to może być spowodowane bo tego już rozwikłać nie mogę :(
Re: Multipleksowanie
Problem jest w kolejności wykonywania rozkazów a przynajmniej jestem tego prawie pewien. Aby uniknąć poświaty na drugim wyświetlaczu należy zadbać aby wykonywać rozkazy w następującej kolejności.
i tak dalej
W taki sposób ja zawsze piszę obsługę wyświetlacza LED w Bascomie i zawsze działa, ale w dowolnym języku ten prosty algorytm też musi działać.
:: Zapoznaj się z regulaminem :: Załóż konto! :: Wesprzyj stronę
Dzięki wielkie. można
Dzięki wielkie. można powiedzieć, że moim błędem nie było wyłączenie wyświetlaczy. Dzisiaj się tym pobawię:)
Dzięki za szybką odpowiedź :)
Jeszcze raz dzięki :)
mod
Witam mam problem z kompilacja i nie wiem czy to wina programu bascom mam wersje 1,11,9,5 a dokladnie z funkcja MOD
przykład:
$regfile = "m8def.dat"
$crystal = 8000000
Dim A As Single
Dim B As Single
Do
B = 253
A = B Mod 10
Loop
End
wyskakuje mi bład:
error 31 invalid datatype [[0011] 112[10]]
jak recznie podstawie (a=253 mod 10) wszystko gra ...
Re: Multipleksowanie
Problem jest w linijkach:
Czy napewno zmienne A i B muszą być zmiennoprzecinkowe, użyj zamiast Single typu: Byte (0-255) lub Word (0 - 65536). nawet jeśli przypiszesz do singla wartość 253 to dla niego to i tak będzie 253.0000000 i będzie problem z resztą z dzielenia
Ps. Nie wiem co to pytanie ma wspólnego z multipleksowaniem wyświetlacza więc następnym razem na forum takie rzeczy pisz. Wystarczy się zalogować to nic nie kosztuje a ja chętnie odpowiadam na pytania jeśli inni utrzymują porządek na stronie tak jak o to proszę
:: Zapoznaj się z regulaminem :: Załóż konto! :: Wesprzyj stronę
Post new comment