Multipleksowanie Wyświetlacza LED


10
Ocena: None Średnia: 10 (1 głosujący)

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.




Portret użytkownika Cubaza

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

Portret użytkownika Cubaza

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ę :(

Portret użytkownika mirley

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.

  • wyłączasz wyświetlacz 3 (żaden wyświetlacz nie jest wysterowany)
  • ustawiasz stany logiczne na segmentach (nic się narazie nie świeci bo wspólna końcówka wyświetlacza jest rozwarta)
  • włączasz wyświetlacz 1
  • czekasz ok 4ms (dla 3 - 4 wyświetlaczy jest to ok czas)
  • wyłączasz wyświetlacz 1
  • ustawiasz stany logiczne na segmentach odpowiadające drugiej cyfrze
  • włączasz wyświetlacz 2
  • czekasz 4ms
  • wyłączasz wyświetlacz 2
  • ....

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

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Cubaza

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 :)

Portret użytkownika neo

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

Portret użytkownika mirley

Re: Multipleksowanie

Problem jest w linijkach:

Dim A As Single
Dim B As Single

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ę

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika sq2ajo

3 x 7-seg

Witam.
Przeczytałem już helpy od Bascom 8051 i Bascom AVR.
Do tego help do MikroBasic AVR, firmy Mikroelektronika ( mikroe.yu - chyba)
Do tego rożne kursy Basic i C.
No i ciągle jestem zielony i co raz bardziej zieleńszy po każdej kolejnej
lekturze.
Nie mam problemu z LCD, ale teraz mam potrzebę sterowania 3 lub 4 cyframi
wyświetlacza 7-segment LED.
Konkretnie :
procesor tiny2313 lub mega8
pomiar napięcia przyłożonego do wejścia ADC ( n.p. AIN0) .
Czyli taki prymitywny woltomierz.
Odczytanie ADC i wysłanie do LCD - to proste, ale jak to wysłać
na wyświetlacz 7-segmentowy ?
Obsługa LCD w Bascom jest dziecinnie prosta, ale LED ..... ?
Nie mogę tego zrozumieć i opanować.
Może ktoś się pochyli nad moim problemem i pomoże mi zrozumieć istotę
sterowania tym wyświetlaczem .

Portret użytkownika mirley

Re: LEd 7-seg

Idea jest prosta: zawsze świeci tylko jeden wyświetlacz więc musisz procedurę wykonywac z częstotliwością rzedu 70Hz żeby oko nie widziało że to impulsowo działa.

Krok 1: wyłączasz tranzystor poprzedni, wystawisz na piny segmentów stan diod, włączasz aktualny wysw za pomoca tranzystora
Krok 2: wyłączasz tranzystor poprzedni, wystawisz na piny segmentów stan diod, włączasz aktualny wysw za pomoca tranzystora
itd:

Wartość do wyswietlenia musisz podzielic na cyfry za pomocą wzorów matematycznych i potem je przeliczyć na kod wyświetlacza. popatrz na moje projekty na led'ach

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika sq2ajo

3 cyfry

Witam.
Czyli kod po przerobieniu do moich potrzeb
bedzie wygladal tak :

Mux = Not Mux
 
  If Mux = 1 Then
    Set P1.5
    Wysw100 = Wysw / 100
    Wysw100 = Lookup(wysw100 , Tabela)
    P3 = Wysw100
    Reset P1.6
    Reset P1.7
 
Else
 
    Set P1.6
    Wysw10 = Wysw / 10
    Wysw10 = Lookup(wysw10 , Tabela)
    P3 = Wysw10
    Reset P1.7
    Reset P1.5
 
  Else
 
 
 
    Set P1.7
    Wysw1 = Wysw Mod 10
    Wysw1 = Lookup(wysw1 , Tabela)
    P3 = Wysw1
    Reset P1.6
    Reset P1.5
 
End If
 
   End If
 
    Return

***********************************************************

Czy jeszcze gdzies zrobilem blad ?

Oczywiscie potry "P1.5 , P1.6 i P1.7" sa przypadkowe
i mozna je zmienc do konkretnych potrzeb.

Portret użytkownika mirley

Re: 3 cyfry

Sprawdzałeś czy się to wogóle skompiluje.... bo raczej nie. Nie znam takiej konstrukcji z dwoma else. Poza tym zastanów sie nad zmienną mux. W pierwszej linii masz mux = not mux a pewni sama zmienna jest typu bit, czyli ma dwie wartości 0 lub 1. Nie dasz rady na tym obsłużyć 3 wyświetlaczy. Spróbuj tak:

 Incr Mux
  If Mux = 3 Then Mux = 0
 
  Select Case Mux
    Case 0:
     Set P3.0
      P1 = Wysw100
     Reset P3.2
 
    Case 1:
     Set P3.2
      P1 = Wysw10
     Reset P3.1
 
    Case 2:
     Set P3.1
     P1 = Wysw1
     Reset P3.0
  End Select

i jeszcze przeliczenia:

  Wysw1 = Wysw Mod 10
   Wysw = Wysw / 10
   Wysw10 = Wysw Mod 10
   Wysw = Wysw / 10
   Wysw100 = Wysw Mod 10
 
   Wysw1 = Lookup(wysw1 , Tabela)
   Wysw10 = Lookup(wysw10 , Tabela)
   Wysw100 = Lookup(wysw100 , Tabela)

Wysw jest zmienną do której wpisujesz wyswietloną wartość a te wysw1, 10 i 100 to zmienne pomocnicze i nigdzie indziej poza ta procedurą sie ich nie zmienia

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika sq2ajo

3 cyfry

Dzieki za pomoc. Zaczynam rozumiec o co chodzi.
Dalej bede dociekal na zasadze doswiadczen i w przypadku wiekszych
problemow bede pytal.

Portret użytkownika kamil92

multipleksowanie

Witam,
a ja zadam takie pytanie: od której strony lepiej jest zapalać wyświetlacze - od prawej czy lewej? Czy ma to jakieś znaczenie przy większej liczbie wyświetlaczy, od której strony jest "przemiatanie"?

Portret użytkownika matrix

Re: multipleksowanie

To zależy co wyświetlacze mają wyświetlać? Jeśli pomiar napięć etc. to według mnie od prawej do lewej, choć w sumie nie powinno mieć to znaczenia bo wyświetlanie odbywa się tak szybko, że ludzkie oko nie jest w stanie tego zauważyć.

Portret użytkownika shoter09

Mirley jak byś mógł to zrób

Mirley jak byś mógł to zrób schemat i program do 2 wyświetlaczy led (tzw dwie 88) i 1 przycisku i jak naciskam przycisk to liczba zwieksza sie o 1 i wyświetla 0,1,2,3,4,5,6,7,8,9 najlepiej na atmega8

Portret użytkownika mirley

Re: Multipleksowanie

A nie możesz zadać sobie odrobiny trudu i skorzystać z wielu programów które mam na stronie. Patrz do timera serwisowego, tam są 4 wyświetlacze i obsługa przycisków. Termometry na LED oba mają napisaną obsługę multipleksowania.

Tutaj wystarczy skonfigurowac timer i przerwanie co 4ms. I w do loop nawet dać ifa od przycisku, nie trzeba się dużo męczyć przy takim programie

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika shoter09

Wiem tylko jak zrobić że jak

Wiem tylko jak zrobić że jak nacisne przycisk to on liczy jaka powinna byc następna liczba a nie umiem zrobić tego wyświetlania na ledach

$regfile = "m8def.dat"
$crystal = 1000000
Config Portb = input 
 
dim a as byte
do
if pinb.1=1 then
a=a+1
'WYSWIETL A
end if
loop

Portret użytkownika mirley

Re: Multipleksowanie

Procedura wyżej załatwia to za ciebie. Zwiększasz wartość zmiennej a potem procedura dzieli to na cyfry i zamienia na kod wyświetlacza

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Macius700

2 wyświetlacze LED 4 pozycyjne brak wolnych portów co zrobić?

Jestem w trakcie tworzenia teoretycznego projektu sterowania zasilaczem impulsowym 0-40V i 0-1A. Wartość napięcia i prądu ma być wprowadzana na 2 wyświetlaczach LED 4 pozycyjnych. Wartość napięcia i prądu ma być zadawana z klawiatury matrycowej. Mam taki z podłączeniem dwóch wyświetlaczy jeden dla napięcia , a drugi dla prądu. Wychodzi mi w sumie dla obu wyświetlaczy po zastosowaniu dwóch dekoderów BCD na 7seg HEF4543B 16 wyjść. Jeszcze dodam że praktycznie wszystkie porty mam zajęte P1 do klawiatury , P2 P3 do pamięci ROM , P0 do przetwornika AC , P3 do portu szeregowego , przetwornika zostały mi tylko piny T0 i T1 z portu P3. Ja rozwiązałem to tak że zastosowałem dwa rejestry latch "zatrzaski" 74HC574. Jeden będzie określał, które segmenty maja być zapalone , a drugi który wyświetlacz ma być zapalony. Oczywiście wybrałem wyświetlanie dynamiczne. Wyjścia zatrzasków podłączyłem do magistrali danych. Wejścia do bazy odpowiednich tranzystorów lub do wejść dekodera. Jedynym problemem dla mnie jest jak ma odbywać się wybieranie, który zatrzask ma wysyłać dalej dane. Ja to zrealizowałem tak że zrobiłem iloczyn pinu WR i dowolnego pinu wejścia/ wyjścia który jest wolny poprzez bramkę AND. Z wyjścia tego do zatrzasku odpowiedzialnego za segmenty. Zrobiłem negacje tego i do zatrzasku odpowiedzialnego za segmenty. Czyli z tego wynika, że zatrzaski nie będą działały równocześnie. Zrobiłem to na procesorze 8051? Dobrze ?

Portret użytkownika mirley

RE: LED

Jeśli masz mało pinów to możesz zastosować dwa układy, jeden to dekoder 4543 a drugi to układ 4028 czyli dekoder z binarnego na 1 z 10. Czyli do zapalenia 8 cyfr wyświetlacza potrzebujesz 7 pinów procesora. 4 piny sterują cyfrą a 3 piny sterują który wyświetlacz ma się zapalić. Najstarszy bit wejściowy 4018 trzeba zewrzeć do masy na stałe. Jeśli dalej brakuje portów do innych rzeczy to porty wyjściowe można łatwo zrealizować na expenderze PCF8574

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Macius700

LED

Ja właśnie zastosowałem dekoder BCD na 7seg 4543. Wyszło mi z tego 4 wejścia dla wyświetlacza do wyświetlania wartości prądu i 4 wejścia dla wyświetlacza wartości napięcia oraz 8 wejść tranzystorów. Z tego względu, że praktycznie nie mam już wolnych portów mikroprocesora. Zastosowałem dwa układy 74HC574, które podłączyłem do magistrali danych ( port P0 ). Zatrzask 1 wybieram za pomocą bramki AND sygnały wejściowe WR i sygnał z portu we/wy i jej negacji dla drugiego zatrzasku.

Najstarszy bit wejściowy 4018 trzeba zewrzeć do masy na stałe? O co chodzi?

Mam pytanie czy odpowiednie segmenty wyświetlaczy 1 i 2 można połączyć wspólnie? Dzięki temu uzyskamy dwa razy mniej wyjść. Czy nie będzie się to kłóciło wyświetlacz 1 i 2. Żeby procesor mógł odróżnić który jest który.

Portret użytkownika mirley

Re; LED

Każdy wyświetlacz musi mieć swoją anodę sterowaną niezależnie aby można było zaświecić dowolne znaki na każdym z nich.

Quote:
Najstarszy bit wejściowy 4018 trzeba zewrzeć do masy na stałe? O co chodzi?

Parzyłeś w ogóle do karty katalogowej układu 4028.... tu mój błąd chodzi mi o układ 4028 a nie 4018. Ma on 4 bity sterujące, najstarszy zwierasz do masy a pozostałe 3 mają ci 8 możliwych kombinacji. Dla każdej z kombinacji aktywne jest jedno wyjście z układu 4028. 4028 ma 10 wyjść więc 2 zostaną niewykorzystane

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Macius700

LED

Dziękuje!!! Czyli wynika z tego, że odpowiednie segmenty 1 i 2 wyświetlacza nie można połączyć wspólnie tylko osobno. Dlatego właśnie wykorzystałem do tego dwa dekodery 4543 dla 1 i 2 wyświetlacza.

Właśnie zobaczyłem do karty katalogowej układu CD4028. Już wiem o co chodzi. Ja akurat tego układu nie wykorzystałem w projekcie. Tylko układ CD4543.

Mam pytanko jakie byś dobrał wartości rezystorów ograniczających prąd bazy tranzystorów? Ja dobrałem 3.3k Wystarczy taka wartość czy za mała?

Portret użytkownika mirley

Re: wyświetlanie

rezystor 3,3k na bazie jest ok w takim zastosowaniu.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Macius700

Dzięki. To fajnie, że

Dzięki. To fajnie, że wartości rezystorów ograniczających mam dobrze dobrane. W literaturze spotykałem różne wartości tych rezystorów 3,3k 4,7k a nawet 10k. Możesz mi powiedzieć od czego zależy wartość rezystorów ograniczających.Napewno zalezy od wartości prądu bazy tranzystora. Jak obliczyć jakie wartości powinny mieć te rezystory bo ja wartość 3.3k wziąłem z literatury.

Mam jeszcze pytanko bezpośrednio do mojego rozwiązania. Odpowiednie kombinacje wyjść dekodera określa, które segmenty mają się świecić, a tranzystory który wyświetlacz a tak naprawdę pozycja wyświetlacza 4 pozycyjnego. Zastosowałem dwa rejestry zatrzaskowe pierwszy określa, który wyświetlacz ma się świecić a drugi który segment ma się śmiecić. Tylko jak to się dzieje. Mam bramkę logiczna suma sygnału zapisu i dowolnego portu oraz negację tej bramki. Czyli z tego wynika że raz jeśli jeden zatrzask przepuszcza dane, drugi zatrzaskuje i na odwrót. Tylko jak to działa jeśli na oba zatrzaski podawane są identyczne dane. Jak to się dzieje, że podajemy dane z magistali danych na wyjście zatrzasków i dane te pojawiają się na wejsciu. Znałem zastosowanie tego zatzrasku np przy pamięci ROM że podajemy dane na wejście i otrzymujemy je na wyjściu nie odwrotnie.

Portret użytkownika mirley

Re: Zatrzask

Według mnie nazwa zatrzask jest tu trochę nietrafna.... układ jest ośmiobitowym rejestrem. Dane z wejść przepisywane są na wyjście na narastającym zboczu sygnału zegarowego CP. Musisz podac dane na magistralę i ustawić CP w stan wysoki. potem zmienić dane i ustawić CP w stan niski co powoduje przez inwerter stan wysoki na drugim rejestrze i wpisuje do niego dane.

Nie wiem skąd masz ten schemat ale jak dla mnie jest strasznie skomplikowany. W moim rozwiązaniu nie trzeba kompinować, wystawiasz co 4ms 7 bitów na port i wyświetlacz jest w określonym stanie.

Rezystory w bazach tranzystorów dobierasz tak aby prąd bazy był większy niż wynika z podzielenia prądu kolektora przez wsp beta tranzystora (tranzystor ma pracować jako klucz). W praktyce dla typowych zastosowań (sterowanie led, buzzerem itp) daje się właśnie 3,3k i po sprawie

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Macius700

LED

A no tak masz rację. Jest to po prostu rejestr 8-bitowy, który po prostu przepuszcza dalej dane lub nie w zależności od stanu wejścia sterującego CP. Tylko u mnie jest na odwrót dane z wyjść przepisywane są na wejście może tak być?

Tylko,że w twoim rozwiązaniu używasz porty mikroprocesora, a ja już mam wszystkie porty zajęte. Nie mniejsza moje rozwiązanie tez jest dobre.

Portret użytkownika Macius700

LED

Mam jeszcze pytanie czy napewno są potrzebne te dekodery w moim układzie?

Portret użytkownika mirley

Re: Zatrzask

Quote:
który po prostu przepuszcza dalej dane lub nie w zależności od stanu wejścia sterującego CP.

nieprawda, bo jak będziesz miał stan wysoki na CP (lub niski) i zmieniał wejście to na wyjściu nic się nie stanie (tam są przerzutniki a nie zatrzaski). Przepisanie następuje dokładnie na zboczu narastającym, jak sygnał zmienia się z 0 na 1.

Masz zajęte do wyświetlacza 10 pinów u siebie z tego co widzę na schemacie. Do czego masz podłączoną jeszcze tą magistralę oprócz wyświetlacza? przecież jak zastosujesz mój wyświetlacz to wywalisz całą tą magistralę i uwolnisz 10 pinów, z czego 7 zastosujesz do wyświetlacza (max 8 jak chcesz kropki zaświecać) i 3 piny pozostaną ci wolne. Musisz zastosować tylko dwa dekodery 7-segmentowy i ten 4028 który podałem + tranzystory do anod wyświetlacza ale to oczywiste

Jak chcesz żebym zanalizował dokładnie twój schemat to musisz podać link do jakiejś lepszej jakości bo nie widać nazw pinów na układach

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Macius700

LED

Tak zgadza się to co mówisz. Układ działa na zbocze narastające wtedy przepuszcza dane z wejścia na wyjście lub odwrotnie tak jak jest w moim przypadku. A nie przepuszcza danych gdy jest zbocze opadające. No tak 10 pinów. 8 wejść do magistrali danych i 2 sterujące rejestrami z bramki. Tą magistralę mam podłączoną do przetwornika AC , pamięci ROM, układy 74HC574 ale przy pamięci.

Wyśle Ci na email cały schemat.

Portret użytkownika Macius700

Mam pytanie czy nie błędem

Mam pytanie czy nie błędem jest że wyjścia rejestru 74HC574 traktuje jako wejścia i podłączam do magistralii? a wjeście D0 do D7 traktuje jako wyjścia. Czy po prostu rejestr ten jest dwukierunkowy.

Jestem w trakcie tworzenia algorytmu działania programu wyświetlania dynamicznego dla mojego układu ale w asembelrze. Jak to najlepiej rozwiązać?

Portret użytkownika mirley

Re; Rejestr

Popatrz do karty, ewidentnie układ 74HC574 jest jednokierunkowy. Posiada w swojej strukturze 8 przerzutników i 8 buforów 3-stanowych. Wejścia D możesz łączyć ale wyjśc absolutnie nie. Jeśli masz magistralę dwukierunkową to trzeba wykorzystać wejście Eable tych buforów żeby np połączyć ich wyjścia razem. Ale nie mają prawa oba układy dostać enable jednocześnie bo będzie zwarcie.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Macius700

Rejestr

Czyli wynika z tego,że muszę obrócić układy 74HC574 tzn wejścia D0 do D7 podłączyć do magistrali danych?

Portret użytkownika mirley

Re: rejestr

Logika tak nakazuje aby wejścia były na magistralę podłączone, chyba że układ 74HC574 ma ustawiać coś na magistrali

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Macius700

Rejestr

Dziękuje za pomoc:) Już wszystko wiem rejestry 74HC574 muszą mieć wejścia D0 do D7 podłączone na magistralę danych. Układ 74HC574 nic nie ustawia na magistrali danych, bo wykorzystuję go do wyświetlacza LED. Mikroprocesor ustawia na wyjściu jednego układu, który wyświetlacz ma się załączać, a drugi które segmenty maja się świecić. Rejestry nigdy nie przepuszczają równocześnie danych z wejść, bo wtedy może nastąpić konflikt. Do tego zastosowane są bramki logiczne.

Portret użytkownika Macius700

Algorytm wyświetlania w asemblerze

Czy algorytm jest poprawnie? Wejścia LE1 i lE2 to odpowiednio wejścia sterujące pierwszego i drugiego układy 74HC574.

Portret użytkownika Macius700

wyświetalcz

Czy mikroprocesor może załaczyć zatrzask do pamięci ROM i zatrzask do wyświetlacza? Bo moim zdaniem będzie wtedy konflikt trzeba będzie wykorzytsac do wyświtlacza port P1 co o tym myslisz?

Portret użytkownika mirley

Re; Pamięć

W ogóle to trochę dziwnie jest podłaczone... co na wyjściu daje pamięć jak nie pracuje, jest wysoka impedancja? Jak na wyjściu pamięci jest cały czas wymuszony jakiś stan to będzie zawsze problem na całej magistrali

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Macius700

ledd

Mógłbys zaprponowac jak to dobrze połaczyć?

Portret użytkownika jackpa

wyświetlacz led i 74164

witam!

chcę podłączyć 8 wyświetlaczy 7-segmentowych led ( 2 po 4 wyświetlacze ) do atmegi8 wykorzystując rejestry przesuwne 74164 po jednym na każdy wyświetlacz wykorzystując dwa wyjścia atmegi ( ew. jeszcze jedno do wygaszania wyświetlaczy ) układ rejestrów i wyświetlaczy mam wykonany mam problem z kodem do atmegi

Portret użytkownika mirley

Re: Multipleksowanie

Najpierw podłącz sobie jeden rejestr do procesora. Jedno z wejść podłacz do pinu a drugie do +5V bo rejestr ma dwa wejścia danych. Na przebieg zegarowy potrzebne jest drugie wyjście z procka. Program jest prosty. W timerze albo bezpośrednio w do loop zmieniasz stan linii CLK rejestru. jak jest zbocze opadające clk do ustawiasz na pinie wyjściowym kolejny bit danych, jak jest zbocze narastające clk to rejestr odczytuje daną z pinu procka, znowu jest zbocze opadające -> wrzucasz na pin kolejny bit itd. aż wyślesz 8 bitów

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika jackpa

led i 74164

układ wyświetlaczy i rejestrów już mam zmontowany w taki sposób że ostatni bit 1 rejestru jest wejściem drugiego oba wejścia rejestru połączone są równolegle, czy jest możliwość stworzenia jakiejś prostej tabeli do wyświetlania znaków na tych wyświetlaczach?

Portret użytkownika mirley

LED

Wrzuć schemat tego co zrobiłeś.... jak do tego wszystkiego podłączone są wyświetlacze?

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika mateusz.md

Źle wyświetla

Witam,

Napisałem sobie taki program żeby co sekundę zwiększała mi się wartość zmiennej "wysw" i zmienna ta zwiększa swoją wartość.
Tylko jest taki problem, że wyświetlacze zachowują się dziwnie.
Wyświetlacz jedności działa normalnie a wyświetlacz dziesiątek strasznie słabo świeci (praktycznie wcale go nie widać). Cyferki zmieniają się na nim ale do tego, że słabo bardzo świeci to jeszcze ryga jak na wyświetlaczu jedności zmienia się cyfra.
Co może być źle napisane?

Oto kod:

$regfile = "m8def.dat"
$crystal = 8000000
 
Config Portd = Output : Portd = &B11111111
Config Portb = Output : Portb = &B00000000
Config Portc = Input : Portc = &B00000000
 
Config Timer0 = Timer , Prescale = 256
Enable Timer0
 
On Timer0 Przerwanie0
Enable Interrupts
 
Dim Wysw As Byte
Dim Wysw1 As Byte
Dim Wysw10 As Byte
Dim Mux As Bit
Dim F4ms As Bit
 
S1 Alias Pinc.0
 
Set Portc.0
 
Do
 
If F4ms = 1 Then
  Reset F4ms
  Gosub Wyswietlanie
End If
 
   Incr Wysw
   Wait 1
   Gosub Wyswietlanie
 
Loop
End
 
Wyswietlanie:
  Mux = Not Mux
  If Mux = 1 Then
    Set Portb.1
    Wysw10 = Wysw / 10
    Wysw10 = Lookup(wysw10 , Tabela)
    Portd = Wysw10
    Reset Portb.0
  Else
    Set Portb.0
    Wysw1 = Wysw Mod 10
    Wysw1 = Lookup(wysw1 , Tabela)
    Portd = Wysw1
    Reset Portb.1
  End If
Return
 
Przerwanie0:
 
Timer0 = 131
   Set F4ms
 
Return
 
 
Tabela:
 
Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144

Portret użytkownika mirley

Re: Wyświetlanie

jest źle napisane bo jest wait 1 w do loop. Nie ma prawa być wait'a. po to masz timer zeby odliczać czas. W przerwaniu od timera wstaw dzielnik i jak doliczy do 250 to skasuj licznik i ustaw flagę F1s. W do loop sprawdzaj czy F1s jest 1 - jesli tak to zerujesz flagę tak samo jak w przypadku F4ms i zwiększasz wartość wysw. procudera gosub wyświetlanie ma byc wywoływana tylko w jednym miejscu, co 4ms

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.