logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak podłączyć ok 20 wyśw. siedmiosegmentowych do jednego uP?

badyl00 23 Paź 2006 00:14 11005 83
Najlepsze odpowiedzi

Jak podłączyć około 20 wyświetlaczy siedmiosegmentowych do jednego AVR-a, zostawiając wolne linie na I2C i RS232?

Najprościej użyć rejestrów przesuwnych 74HC595 lub 74HC4094 i sterować wyświetlaniem z przerwania timera, trzymając wzory cyfr w RAM i wysyłając je szeregowo na wyjścia przez kilka linii procesora [#3143994][#3148558] Jeśli wyświetlacze mają pobierać większy prąd, dołóż ULN2803 albo inne bufory tranzystorowe, bo same wyjścia układu mogą nie wystarczyć [#3145626] Przy multipleksowaniu trzeba zadbać o odpowiednio dużą częstotliwość odświeżania; przy 20 sztukach rozwiązanie oparte o I2C i wiele expanderów może dać widoczne migotanie, więc SPI/serialowe rejestry są tu bezpieczniejszym wyborem [#3147354][#3147695] W praktyce wystarczy jeden AVR z kilkoma 595/4094, a na czas przełączania danych warto wygaszać wyjścia, żeby nie było „śmieci” na wyświetlaczu [#3148558][#3162855] Jeśli chcesz jeszcze prostszy wariant sprzętowy, można też użyć dedykowanego sterownika MC14489BP, który obsługuje kilka wyświetlaczy i można go łączyć w szereg [#3144042]
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
  • #1 3143986
    badyl00
    Poziom 30  
    Posty: 1533
    Pomógł: 221
    Ocena: 301
    Pytanie tak jak w temacie. Chodzi o procka z rodziny AVR. Chcę jeszcze aby kilka linii procesora zostało wolnych na I2C i RS232. W jaki sposób podłączyć taką ilość??
  • Pomocny post
    #2 3143994
    Balu
    Poziom 38  
    Posty: 4397
    Pomógł: 323
    Ocena: 48
    Użyj np. 74hc 595 (rejestr)...ale czy to wyrobi w trybie multipleksowanym taki avrek...:>
    P.S. A cóż to za projekt?
  • Pomocny post
    #3 3144042
    zbigigorszczak
    Poziom 12  
    Posty: 5
    Pomógł: 3
    Jakkolwiek byś nie sterował, to wyjdzie problem (ilość nóżek procka, zagmatwanie płytki, multipleksowanie .........). A może by tak użyć jakiegoś scalaka, który do tego został stworzony. W poprzednim (albo jeszcze wcześniejszym) numerze EP był opublikowany taki patent. Ja właśnie rozgryzam scalak MC14489BP. Każdy obsługuje 5 wyświetlaczy i można je łączyć w szereg. Wg data sheet 6. Czyli 5x6 daje 30 wyświetlaczy. Sterujesz to wszystko trzema liniami z procka (bez względu na ilość wyświetlaczy). Całość myka po interfejsie SPI, czyli wyrobi to każdy procek. Chętnie poklikam na ten temat. Klikaj na maila bo nie zawsze jestem na forum.
  • #5 3144111
    tatronic
    Poziom 24  
    Posty: 700
    Pomógł: 41
    Ocena: 37
    Witam!
    A jaki procek chcesz uzyc do tego.Bo to chyba od tego bym zaczal całą dyskusje.Pozdrawiam Arek
  • #6 3144228
    seba_x
    Poziom 31  
    Posty: 2071
    Pomógł: 29
    Ocena: 112
    a może HC4094 ?
  • Pomocny post
    #8 3144476
    gwolf
    Poziom 14  
    Posty: 63
    Pomógł: 6
    Ocena: 1
    Witam, problemy pewnie sie pojawią, ale do multipleksowanego sterowania wyświetlaczy możesz użyć ekspandera bodajże 7447(albo jakoś tak) dane wysyłasz w I2C a na wyściu masz port równoległy 8 bitów. Takich układów potrzeba kilka, ale to jest do wykonania. Skoro i tak bedziesz wykorzystywał tę magistrale, I2C nie powinno być problemem,
    Powodzenia pozdrawiam!
  • Pomocny post
    #9 3145626
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    Witam,

    tak jak powiedział powyżej kolega gwolf - użyj expanderów I2C a zamiast 8bitowego możesz użyć 16bitowych. Pod drugiej stronie tych expanderów możesz urządzić sobie już wszystko wg woli. A co do AVR-ków jak niektórzy mówią - wyrobią się nawet z większą ilością multipleksowanych wyświetlaczy. Pomimo to, że na maxa mogą pracować z trochę mniejszą częstotliwością niż PIC-ki to jednak wykonują 1 rozkaz w 1 cyklu!!! a PICki w 4 cyklach... ;) więc które tu są szybsze ???? ;) Ja właśnie powoli zabieram się za sterowanie AVRkiem wyświetlacza sterującego 10szt wyświetlaczy graficznych 8x8 LED... po wstępnych próbach wszystko wskazuje, że projekt zakończy się sukcesem (mam nadzieję). A będę używał do tego rejestrów 595 - tak jak ktoś wspomniał na początku - to też dobry pomysł i przy dobrze skonstruowanych procedurkach (najlepiej w asemblerze - wszystko będzie śmigać że ho... )

    pozdrawiam
  • #10 3145847
    badyl00
    Poziom 30  
    Posty: 1533
    Pomógł: 221
    Ocena: 301
    Chyba zrobię to na układach PCF8574 albo PCF8575 tylko niech mi ktoś pomoże w podłączeniu do tego wyświetlaczy i całości do procka. I w jaki sposób tym sterować. Proszę o wyrozumiałość bo dopiero zaczynam mikroprocesory w szkole i proszę kogoś o pomoc w realizacji projektu.
  • Pomocny post
    #11 3145890
    Samuraj
    Poziom 35  
    Posty: 2792
    Pomógł: 286
    Ocena: 619
    Pojedynczo to chyba raczej się nie da (jedne układ na jeden wyświetlacz), dlatego że te układy mają tylko trzy bitu ustawiania adresu tak, więc na jednej magistrali może pracować max 7 układów.
    Chyba ze poświecić jeden układ do ustawiania aktywnego wyświetlacza a drugi do wybranych segmentów. Wtedy bardzo by to uprościłoby cały układ, lecz skomplikowałoby trochę sterowanie (nie wiem czy czasowo by PCF'y wyrobiły).
  • #12 3145905
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    Witam,

    lepiej użyj PCF8575 - za pomocą jednej kostki będziesz mógł w prosty sposób wysterować 8szt wyświetlaczy a każda następna kostka następnych 8szt itd. Co do połączenia z prockiem to przecież I2C (magistrala 2 przewodowa) po drugiej zaś stronie: np młądszą częścią wyjściowych 16tu bitów sterujesz 8 segmentami (7segm + kropka) a starszą częścią 16tu bitów sterujesz anodami bądź katodami wyświetlaczy. Wyjścia tych expanderów przeznaczone są do sterowania LEDami ale przy takiej ilości wyświetlaczy jeśli będziesz to robił bez dodatkowych buforów czy tranzystorów to lepiej sterować tym multipleksowo. Jest to oczywiście jeden z wielu możliwych sposobów podłączenia wyświetlaczy ale dzięki takiemu rozwiązaniu jak tu opisuję na po drugiej stronie ekspanderów masz już tylko wyświetlacze i rezystorki ograniczające prąd segmentów.

    pozdrówka
  • #15 3147264
    badyl00
    Poziom 30  
    Posty: 1533
    Pomógł: 221
    Ocena: 301
    Cytat:
    To wtedy puszcza się odpowiednio większy prąd...

    A czy to nie zmniejszy żywotności diody??

    Poniżej zamieszczam schemat (odręczny myśle że nie będziecie sie czepiać do wykonania) Chodzi o to aby ktoś to ocenił czy dobrze to rozumuję. na schemacie pominołem rezystory. Jeżeli coś jest nie tak to proszę o poprawę.
    Załączniki:
    • Jak podłączyć ok 20 wyśw. siedmiosegmentowych do jednego uP? bez tytułu.GIF (12.34 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • Pomocny post
    #16 3147354
    kamyczek
    Poziom 38  
    Posty: 3994
    Pomógł: 394
    Ocena: 573
    Schemat dość ciekawy tyle że aby cały czas wyświetlać i nie zauważyć ze to multipleksowane wyświetlacze powinno sie je odświeżać minimum z 25 razy na sekundę 25*20 daje 500 razy na sekundę jesli zaczniemy zmieniać po I2C 20 wyświetlaczy na pcf-ach daje to przy 100kHz 100k/8/2/20 około 312 zmian na sekundę
    wobec czego odświeżanie bedzie miało dla każdej cyfry wartość 15Hz ,wynik : będzie widoczne migotanie wyświetlacza ... co do oporników musza być w bazach tr... i powinny znaleźć sie miedzy portem a ledami
  • #17 3147364
    badyl00
    Poziom 30  
    Posty: 1533
    Pomógł: 221
    Ocena: 301
    W takim razie prosze o jakąś propozycje w jaki sposób wyeliminować migotanie?? A może by tak podłączyć 3xPCF8575 każdy po 7 wyświetlaczy multipleksowo i te PCFy podłączyć osobno do procka. O ile sie da bo w uP dopiero zaczynam zabawe i nie wiem czy taki AVR moze miec kilka lini SDA i SCL. Chodzi mi o to aby sterować kazdego PCFa z osobnych linii procka a nie łączyć ich.
  • #18 3147387
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    Witam,

    co do schematu blokowego który naszkicowałeś to właśnie coś takiego starałem się opisać w poprzednim poscie czyli chyba dobrze opisałem ;) co do twojego pytania o żywotność diody przy zwiększonym prądzie to odpowiadam - wszystko zależy jak będzie duży ten prąd i ile czasu będzie trwał ;) Kolega Balu ubiegł moją podpowiedź a miał 100% rację. ... czyli zrób tak: na początku wstaw sobie rezystorki z zapasem żeby nie puszczać zbyt dużego prądu - a jak już napiszesz procedury i będziesz wiedział dokładnie co jaki czas i na ile się zapalają segmenty aha i co najważniejsze zoptymalizujesz już do końca kod - to wtedy jeśli nie da się już "programowo" (współczynnikiem wypełnienia) rozjaśnić - to wtedy zaczniesz dobierać mniejsze rezystorki (pamiętaj też o tym, że expanderki mogą na maxa zapodać łącznie ze 100mA więc jeśli kupisz wyświetlacze o małej jasności i będzie trzeba je sterować większymi prądami (to przy zapalonych 8 segmentach) przekroczysz 100ma. W takim przypadku możesz sobie użyć po drodze tranzystorków jak narysowałeś ale mogą też być potrzebne dodatkowe do sterowania segmentami. (czyli dodajesz jeszcze 8 tranzystorków) albo jakiś bufor po drodze np ULN2803 i po sprawie ;) .... co do sterowania to w przerwaniu jakiegoś timerka - wysyłasz do 3 expandeków kody - zapalające po kolei każdą cyfrę. Dzięki takiej organizacji unikniesz "śmieci" na wyświetlaczu bo dane do kolejnej cyfry będą leciały sobie do układów w czasie gdy pali się poprzednia i przełączenie robi już sam expanderek...

    żeby to dobrze zoptymalizować przydałoby się pisać sofcik do AVRka w asemblerze albo chociaż C. W Bascomie możesz osiągnąć czasem mierne rezultaty. W czym ty programujesz?

    pozdrówka

    Dodano po 25 [minuty]:

    Witam,

    kolego kamyczek z całym szacunkiem ale w tym przypadku jeden PCF steruje nie 20-toma a 8-ma wyświetlaczami więc jest duuży zapas aby zorganizować wyświetlanie tak żeby nie było żadnego migotania... taka była moja sugestia dla kolegi badyl00 ( a tak przy okazji to badyl00 napisał przed swoim rysunkiem, że specjalnie pominął rezystorki przy bazach i segmentach)...
    ... czyli do rzeczy - można sobie ustalić, że dla 8 wyświetlaczy odświeżanie będzie nawet więcej niż 25 razy na sek - niech będzie nawet 30razy na sek ;) ... ustaiwiamy sobie timer na taką częstotliwość i wychodzi nam, że w jednym przerwaniu mamy ok 4ms wolnego czasu aby porozsyłać dane do naszych 3 PCFków ... to bardzo dużo czasu - spokojnie starczy bez stresów aby wysłać do każdego z 3 PCFków polecenie zapalenia odpowiedniej cyfry (oczywiście dobrze jest użyć procka ze sprzętowym USI żeby nie gmatwać sobie kodu jeśli się jest na dodatek początkującym ;) a i tak w tym przerwaniu jeszcze starczy nam czasu, jak coś, na dodatkowe rzeczy ;) .... więc kolego badyl00 SPOKOJNIE ;) nie musisz tworzyć oddzielnych linii SDA i SCL - weź sobie dowolnego - "najniższego" atmelka ze sprzętowym USI i zrobisz to bez żadnego migotania w takim rozwiązaniu - wszystkie PCFki podłączone oczywiście do tej samej magistrali ;) ... czyli obsługujesz je niejako równolegle

    pozdrówka

    Dodano po 16 [minuty]:

    ... żeby już nie było niedomówień (oczywiście dodam tak jak wcześniej było powiedziane, że to tylko schemat blokowy i pominięte sąrezystory do baz i segmentów):

    Jak podłączyć ok 20 wyśw. siedmiosegmentowych do jednego uP?

    mam nadzieję, że to zobrazuje dobrze tę koncepcję ;)[/img]
  • Pomocny post
    #19 3147502
    ktrot
    Poziom 20  
    Posty: 166
    Pomógł: 47
    Ocena: 3
    Jeżeli chodzi o multipleksowanie to zamiast multipleksować poszczególne cyfry proponuję multipleksować segmenty - we wszystkich cyfrach na raz. Znamy treść napisu więc sprawdzamy, w których cyfrach ma być zapalany segment 'a' następnie 'b' itd.
    Zalety:
    1. Stała częstotliwość multipleksowania niezależna od ilości cyfr i wynosząca 7 (lub 8 z kropką dziesiętną)
    2. Jeden program dla praktycznie dowolnej ilości cyfr - piszemy np program obsługujący 32 wyświetlacze a czy w rzeczywistości bedzię ich 3, 8 czy 20 nie ma znaczenia. To, że program bedzie próbował wyswietlać na niestniejących wyświetlaczach nie ma znaczenia dla jego pracy (patrz punkt 1)
    3. Łatwiej panować nad jednakową jasnością segmentów w poszczególnych wyświetlaczach (chociaż to najbardziej zależy od układu)

    Jeżeli chodzi o ikład elektroniczny to niezależnie od sposobu multipleksowania proponuję odejście od rozwiązania typu: jeden procesor + elementy sterujące (ekspandery, rejestry itd). Zamiast tego proponuję użyć procesor pomocniczy (lub procesory).

    Przykładowe rozwiazania:
    1. Avr ATMega8535 - wykorzystane wszystkie porty, możliwość sterowania 21 lub 22 wyswietlaczami w zalezności czy sterowanie przez SPI czy I2C z procesorem głównym.
    2. 2xATMega8 - dwa moduły, kazdy z nich może obsłużyć do 12 (13) wyświetlaczy, transmisja I2C
    3. 3xATmega8 - to polecam - modyfikacja punktu 2, kazdy z procesorów obsługuje 8 wyświetlaczy, ze względu na to, że nie musimy uzywać 'kawałków' portów łatwiejszy program i łatwiejsza realizacja elektroniczna, niedużo większy koszt - 1 procesor to ok 6zł.
    4. Rozwiązanie najdroższe i najbardziej pracochłonne (pod względem elektronicznym nie programowym) - jeden procesor na jeden wyswietlacz. Procesor np ATTiny2313 lub ATTiny26 ew Mega8, koszt około od 60 do 120zł, wyświetlanie statyczne. Wspominam o tym rozwiązaniu ze względu na dwie zalety: ze względu na modułowy charakter poszczególnych wyswietlaczy można je dowolnie rozstawiać ( w przypadku użycia magistrali I2C te rozstawianie będzie ograniczone), podłączając moduły do zasilania i magistrali (nie musi być to I2C), driga zaleta to mozliwość fotografowania takiej tablicy co w przypadku wyświetlania multipleksowego jest raczej niemożliwe, w przypadku filmowania jest trochę lepiej ale i tu mogą wystąpić kłopoty.

    Wszystkie wymienione rozwiązania mają jedną cechę wspólną - odciążają procesor główny pozwalając skupić się w nim na obsłudze klawiatury, transmisji radiowej, ponadto nie zajmują portów procesora. Przykładowe rozwiązania 1 do 3 są prawdopodobnie tańsze niż rozwiązanie z ekspanderami PCF.

    Pozdrawiam
  • Pomocny post
    #20 3147620
    adamusx
    Poziom 27  
    Posty: 977
    Pomógł: 94
    Ocena: 28
    Zgadzam się z kolegą wyżej. Najkorzystniejsze jest rozwiązanie nr 3 (ew 2) Procesor Atmetga8 kosztuje kolo 5-6zł ( mniej niz ekspander PCF) nie musisz sie bawic sie w zadne ekspandery, zatrzaski, rejestry itp. Mniej skomplikowany uklad elektroniczny, latwiej oprogramowac i moze nawet taniej wyjdzie. Poza tym co najwazniejsze taki modul bedziesz mogl wykorzystac w inncyh projektach - sterowanie za pomoca np I2C.
  • #21 3147695
    kamyczek
    Poziom 38  
    Posty: 3994
    Pomógł: 394
    Ocena: 573
    I2C jest magistrtalą woną jeśli dochodzi do tego fakt obsługi kilku układów na tej szynie dzieje sie to bardzo wolno znacznie szybciej można to wykonać stosując magistralę spi i rejestry 4094 a najszybciej zamiast całej tej elektroniki mega8 musisz zdac sobie sprawę że chcąc używać tego samego procesora do innych celów będziesz musiał przewidzieć ciągłe przerwania do obsługi wyświetlacza albo napisać program tak aby co określony czas dokonywał odpowiednio odswieżania wartości wyświetlacza led
  • #22 3148258
    adamusx
    Poziom 27  
    Posty: 977
    Pomógł: 94
    Ocena: 28
    I2C moze szybka nie jest ale w zupelnosci wystarczy do wyslania 3 krotkich ramek dla trzech sterownikow LEDow. Przeciez za pomoca I2C nie musimy juz przszesylac danych multipleksowanych tylko gotowe wartosci liczbowe na poszczegolne bloki wyswietlaczy!!!
  • #23 3148264
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    Witam,

    oczywiście koledzy wyżej mają rację, problem wyświetlania można rozwiązać nawet na 1000sposobów. Ale ja z kolei pozostanę przy swoim zdaniu, że do tego aby wyświetlać cyfry na wyświetlaczach i aby odciążyć procesor - zastosujmy jak najprostsze rozwiązania. Wg mnie propozycje kolegi ktrot również będą działały i można jeszcze je mnożyć ale.... ludzie dochodzimy do absurdu - angażować na każdy wyświetlacz 1 procesor ???!!!!???? - to już "lekka" przesada ;) a nawet "ciężka"

    ... wogóle angażowanie do zwykłego wyświetlania już kilku procesorów to prawie absurd (sorry) - ale problemy z programowaniem każdego z nich oddzielnie, później wykrywanie ew usterek czy problemów, przeprogramowania procesorów itd itp .... to masakra (nie wspominając już o MEGA marnotrastwie portów i to nie jednego a wielu procków) - na uruchamianiu takiego układu mniej doświadczony adept elektroniki mógłby spędzić miesiące!!! (oczywiście braki umiejętności programowania można czasem rozwiązywać dobudowywaniem wszędzie procesorków aby uzyskać w efekcie końcowym statyczne (najprostsze) wyświetlanie a zarazem to marnotrastwo prądu i energii)

    ... kolega badyl00 na początku wspomniał o procesorku, I2C i RS232 - dlatego zasugerowałem mu rozwiązanie na PCFach ale już kolejny kolega balu mówił też o rejestrach 595 miał tylko obawy czy to wyrobi na atmelku ;)....

    ... przedstawiam więc jeszcze jeden projekt. Tutaj można sobie bez problemu rozbudowywać i pomniejszać układ dostosowując go dowolnie do potrzebnej ilości wyświetlaczy. Odświeżanie można zrobić z dosyć dużą częstotliwością tak że nie będzie żadnych problemów z fotografowaniem i filmowaniem. Obsługa programowa MEGA PROSTA w jednym przerwaniu (kolego kamyczek przerwania to jedno z podstawowych narzędzi w uC i nie mów tak jakby to był jakiś cięzki grzech że:
    "...będziesz musiał przewidzieć ciągłe przerwania do obsługi wyświetlacza ..."
    ... więc jak mówię w tym przerwaniu kolego badyl00 i tylko w jednym procku!!! zorganizujesz sobie wyświetlanie - obojętnie czy z multipleksowaniem cyfr czy wyświetlaczy! - "zmarnujesz" na to tylko 3-4 linie sterujące procesora - więc cała reszta pozostanie ci na obsługę innych urządzeń przez I2C, przez RS232, obsługę klawiatury i wielu innych pomysłów. Klawiaturkę - jesli będzie potrzebna można wykorzystywać w tym samym przerwaniu albo znowu użyć 8bitowego PCFka i zrobić sobie super klawiaturkę , która będzie generowała przerwanie po naciśnięciu dowolnego klawisza i np w INT1 sobie to obsłużysz! (mam nadzieję, że w kolejnych postach nie pojawią się kolejne kontr propozycje aby robić klawiaturę i do obsługi każdego klawisza zaprzęgać ODDZIELNY PROCESOREK ? ;) ;) ;)

    Jak podłączyć ok 20 wyśw. siedmiosegmentowych do jednego uP?

    n - oznacza, że można to rozbudować o kolejne moduły

    pozdrawiam[/b]

    (PS... oczywiście tak jak wspomniał powyżej kolega adamusx można również zastosować poprzedni projekt na PCFkach - to bardzo miłe scalaki i wcale nie są droższe niż procki!!! ;) )
  • Pomocny post
    #24 3148279
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    A co byście powiedzieli na: 2 x 74154 + 2 x 74164 + 32 x PNP + 8 x PNP/NPN = 32 wyświetlacze 7-seg. sterowane 4 pinami :?:
    Trzeba również pamiętać , że należy znacząco zwiększyć prąd segmentów , by przy multipleksowaniu nie świeciły za słabo , a przy 20-tu 7-seg. AVR-ek , czy też PCF8574 , mogą takiego prądu nie wytrzymać , więc tranzystorki na segmenty też się przydadzą :(
    Zaś sterowanie takim ustrojstwem , to mniej niż 1% czasu proca , przy 60Hz na segment i F_CPU=16MHz.
    Tak sobie teoretyzuję :)

    Piotrek
  • #25 3148286
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    ... no własnie kolego zumek powyżej przedstawiłem chyba również i twoją koncepcję ;) a co do zastosowania pośrednich bądź to tranzystorków czy buforków typu ULN2803 to masz rację - zawsze można to bez problemu dołożyć ;)

    pozdrówka
  • #26 3148297
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    mirekk36 napisał:
    ... no własnie kolego zumek powyżej przedstawiłem chyba również i twoją koncepcję ;) a co do zastosowania pośrednich bądź to tranzystorków czy buforków typu ULN2803 to masz rację - zawsze można to bez problemu dołożyć ;)

    pozdrówka

    Jakoś tak jednocześnie nam się myślało/pisało :D

    Piotrek
  • #27 3148426
    badyl00
    Poziom 30  
    Posty: 1533
    Pomógł: 221
    Ocena: 301
    Dzięki za dotychczasowe odpowiedzi. Raczej zdecyduję sie na układ z scalakami 74HC595. Oczywiście dojdą do tego ULN2803 bo wyświetlacze będą zbudowane z kilkudziesięciu LEDów. Tylko prosiłbym kogoś o napisanie przykładowego programu w BASCOMie AVR do sterowania tym ustrojstwem. Sorki że tak tylko prosze o coś ale tak jak wcześniej wspomniałem tyle co zaczołem sie bawić w programowanie i nie za bardzo znam jeszcze te wszystkie pojęcia (przerwania,wypełnienie,czasy itp) także proszę o to aby ktoś mi to wytłumaczył albo dał odnośnik do jakiegoś opisu.
  • #28 3148558
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    Witam,

    kolego badyl00 napisanie programu tak "wprost" w baskomie to nie takie proste. Przecież twój procek musi realizować jeszcze inne rzeczy zapewne jak klawiatura, wysyłanie czegoś po RS232 czy I2C lub inne i ciężko tak w oderwaniu od wszytskiego zaproponować kawałek kodu tylko do wyświetlacza - trzeba by było znać przynajmniej algorytm działania całości - ale chyba nie chodzi ci o napisanie programu dla procesorka, który będzie ci robił "wszystko" ? bo bo co to miałoby być to wszystko? ;) ... poza tym ja sam niedawno tzn ok miesiąc temu wziąłem się za programowanie w asemblerze - to nie takie trudne jak piszą, już mam za sobą wiele różnych procedur zrobionych i sprawdzonych na moje potrzeby... ;) przecież "grzebanie" się w tym i uczenie się tego to sama przyjemność ! ;) .... ale jeśli tobie chodzi tylko o to aby tutaj ktoś od początku do końca ze szczegółami i wsadem programowym coś zrobił to chyba troszeczkę nie tak ;) .... albo ja czegoś nie rozumiem w twoim ostatnim pytaniu ;)

    ja akurat w baskomie prawie wogóle nic nie robię tylko asm - ale mogę postarać się podać ci przynajmniej wstępny algorytm jak tym sterować: (jeśli popełnię jakiś bład to napewno inni koledzy mnie zaraz poprawią)
    1. przeznacz część pamięci RAM na dane ukazujące się na wyświetlaczu (w baskomie będą to zmienne albo tablica zmiennych)
    2. postaraj się jednak zapoznać w minimalnym stopniu z uruchomieniem przerwania od Timera (to podstawa i nie trudne) - przygotowujesz poprostu procedurę, która będzie wyłączne się wykonywać w czasie gdy ruszy przerwanie.
    3. Ustaw wartość Timera na np częstotliwość ok kilkaset Hz - później ustawieniem preskalera będziesz mógł łatwo to zmieniać aby dobrać odpowiednią do oswieżania i jasności
    4. W procedurze przerwania Timera (zakładając, że mutipleksujemy segmenty a nie cyfry) sprawdzaj cyklicznie na których cyfach w pamięci RAM występuje zapalony segment A potem B potem C itd
    5. "Wsuń" potem zapalony segment jako najbardziej znaczący bajt i potem kolejno bajty które zapalą odpowiednie cyfry gdzie znajduje się zapalony segment - wsuń to wszystko szeregowo do widocznych na schemacie rejestrów
    6. Po operacju "wsunięcia" zatrzaśnij dane na wyjściu (dzięki temu wsuwane dane nie będą psuły obrazu)
    7. powtarzaj te kroki od pkt.4 cały czas w przerwaniu.
    8. W programie głównym możesz natomiast bezpośrednio wpisywać odpowiednie dla ciebie wartości do poszczególnych zmiennych, które odpowiadają za dane wyświetlane na poszczególnych wyświetlaczach. Jeśli chcesz obsługiwać to tylko przez RS to w procedurze obsługi RSa poprostu odbieraj dane i odrazu wpisuj je do tej pamięci "obrazu" ;) analogicznie w procedurze odbioru radiowego - wczytuj i odrazu wpisuj do pamięci i to wszystko. Całą resztą bezboleśnie i bez narzekania na trudności zajmie się za ciebie przerwanie(procedura) Timera ;)

    .... a jeśli to jest projekt komercyjny i chcesz, żeby zrobił go ktoś tu na forum to poprostu zleć to komuś i już ;)

    pozdrawiam
  • #29 3148626
    ktrot
    Poziom 20  
    Posty: 166
    Pomógł: 47
    Ocena: 3
    Tak już OT:

    Cytat:
    wogóle angażowanie do zwykłego wyświetlania już kilku procesorów to prawie absurd


    Przyznaję się publicznie do wielu absurdów, które popełniłem:

    - nie używam NE555 , zamiast tego używam np ATTiny11/12/15 - dlaczego? Bo nie lubię dobierać rezystorków, lubię większą precyzję doboru częstotliwości i wypełnienia, między innym generator napięcia ujemnego dla LCD zrobiłem na uC.

    - w samochodzie wskaznik sondy lambda pracuje na avr zamiast na normalnej kości obsługującej linijkę świetlną

    - w zasilaczu zamiast 4 potencjometrów użyłem, o zgrozo!! 4 procesorków połączonych z impulsatorami ze starych myszy - dlaczego? bo lubię zmienne zakresy przestrajania napięcia, bo 10 obrotowe potencjometry są drogie a z resztą nie zawsze potrzebne, bo nie lubię jak mi dziecko pokręci gałkami zmieniając nastawy.

    - zamiast uzyć jak normalny elektronik ICL8038, MAX038 czy czegoś podobnego uzyłem uC do zbudowania generatora sygnałowego

    i wiele innych przestępstw...

    Moze do tego aby traktować uP jako normalne kości elektroniczne wystarczyłaby zmiana nazwy? np na 'uniwersalny układ programowalny' w skrócie UP zamiast uP

    Żeby nie było całkiem OT odniosę się do jednej wypowiedzi:


    Cytat:
    oczywiście braki umiejętności programowania można czasem rozwiązywać dobudowywaniem wszędzie procesorków aby uzyskać w efekcie końcowym statyczne (najprostsze) wyświetlanie a zarazem to marnotrastwo prądu i energii)


    przypomne koledze, ze jasność wyświetlaczy LED zależy od wartości skutecznej przepływającego przez nie prądu a co za tym idzie przy wyświetlaniu statycznym i dynamicznym pobór pradu jest taki sam (jezeli segmenty maja świecic jednakową jasnością) natomiast pobór pradu przez uC wynosi (przy małej czestotliwości zegara) 1 do 2mA co oznacza przy 20 wyświetlaczach pobór prądu jak przez 2-3 segmenty. Z resztą można przeczytać mój post - nie jestem zwolennikiem statycznego wyświetlania.
  • #30 3148728
    adamusx
    Poziom 27  
    Posty: 977
    Pomógł: 94
    Ocena: 28
    Popieram kolege wyżej.
    Co za problem wgrać jeden program do prcoka wiecej. W zasadzie jak uklad ma byc cyfrowy to odchodzi sie od analogowych rozwiazan typu generatory na 555, potencjometry analogowe itp. AVRka mozna juz kupic za 3 zł, co do marnowania pinow... i co z tego ze sie zmarnuja przecież to nie koniec swiata:) Czy odrazu trzeba wykorzystac wszystkie piny ??

Podsumowanie tematu

✨ Dyskusja dotyczy podłączenia około 20 wyświetlaczy siedmiosegmentowych do jednego mikrokontrolera z rodziny AVR, przy zachowaniu wolnych linii na interfejsy I2C i RS232. Proponowane rozwiązania obejmują użycie rejestrów przesuwających 74HC595 wraz z multipleksowaniem segmentów lub cyfr, co pozwala na ograniczenie liczby potrzebnych linii sterujących. Alternatywnie sugerowano zastosowanie układów dedykowanych do sterowania wyświetlaczy, takich jak MC14489BP, PCF8574, PCF8575 (ekspandery I2C) oraz 74HC4094. Wskazano na konieczność stosowania tranzystorów (np. ULN2803) do wzmacniania prądu segmentów, zwłaszcza przy dużej liczbie diod LED w segmentach. Poruszono kwestie multipleksowania, jasności świecenia, częstotliwości odświeżania (minimum 25 Hz na wyświetlacz), a także zabezpieczeń sprzętowych (np. układ czasowy 4538 i tranzystory MOSFET) chroniących diody przed wypaleniem w przypadku zawieszenia procesora. Dyskutowano o łączeniu diod w segmentach – przewaga połączenia szeregowego ze względu na stabilność napięcia i oszczędność prądu, choć pojawiły się opinie za połączeniem równoległym ze względu na łatwość serwisu. Wskazano, że mikrokontrolery AVR (np. ATmega8, ATmega8515, AT90S8515) są w stanie obsłużyć takie układy, a programowanie w asemblerze lub BASCOM może być efektywne. Zwrócono uwagę na kompromis między złożonością sprzętu a obciążeniem procesora oraz na możliwość stosowania watchdogów do zabezpieczenia systemu. Autor projektu planuje tablicę wyników z wyświetlaczami LED 7-segmentowymi zbudowanymi z diod 10 mm, sterowaną radiowo, z funkcjami wyświetlania punktów, czasu, setów i syreny, oraz około 22 przyciskami sterującymi. Ostatecznie rekomendowane jest użycie 74HC595 z ULN2803 do sterowania segmentami i multipleksowania wyświetlaczy, z uwzględnieniem odpowiedniego oprogramowania i zabezpieczeń sprzętowych.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA