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

Atmega8 i wyświetlacz 7-segmentowy LED – dlaczego segmenty świecą słabo?

mgsk8er 09 Wrz 2007 16:32 6295 18
REKLAMA
  • #1 4266085
    mgsk8er
    Poziom 13  
    Posty: 129
    Pomógł: 3
    Ocena: 5
    Witajcie! Jakoś niedawno zacząłem się bawić z mikrokontrolerami i nadszedł czas, żebym popróbował z wyświetlaczem 7-segmentowym LED. Więc kupiłem sobie wyswietlacz ze wspólną katodą (Kingbright), podłączyłem pod AtMega 8 i działa, tylko jakoś tak niezbyt jasno świeci. Jaka moze być tego przyczyna?

    trochę danych:
    procesor zasilam 5v wyprowadzonym bezpośrednio z peceta,
    uP taktuję kwarcem 4MHz,
    segmenty wyświetlacza są podpięte bezpośrednio pod piny portD (bez rezystorów, bo chcialem sprawdzic tylko czy działa)

    Ktoś ma jakiś pomysł? Zasilanie? Brak rezystorów pomiędzy segmentami a prockiem?

    I przy okazji... O co biega z rezystorami podciągającymi? Do czego to służy?

    Będę wdzięczny za pomoc
  • REKLAMA
  • #2 4266379
    JanuszM
    Poziom 17  
    Posty: 332
    Pomógł: 11
    Ocena: 14
    Ja bym nie podłączał wyświetlacza bezpośrednio do portu.

    Do mojego procka Atmega128 podpiąłem zieloną diodę LED (różne kolory mają różne napięcia złącza) przez rezystor 120Ω do masy i uzyskałem prąd 17mA gdzie prąd max. portu wynosi 20mA.
    Procka zasilam napięciem 4,9V a na wyjściu gdzie jest podpięta dioda mam 4,4V.

    Dioda świeci dosyć jasno.

    Podłącz katodę wyświetlacza do masy a anody podłącz przez rezystory 150-180Ω, będziesz widział czy jest jakaś różnica. Może w Twoim wypadku zadziałało jakieś wewnętrzne zabezpieczenie przeciążeniowe na porcie, może ktoś ma większe doświadczenie z tego typu sprawami.
    Sam zaraz spróbuję podpiąć cały wyświetlacz ale ja mam ze wspólną anodą i czerwone. Chciałem zrobić zegarek na 4 takich i nie wiem jaka będzie jasność po multipleksowaniu a wartości rezystora z portu nie można obniżyć za bardzo żeby nie przekroczyć katalogowych 20mA z procka.

    Trochę chaotycznie ale szczerze :)
    Pozdrawiam, Janusz
  • #3 4266435
    antrykot
    Poziom 20  
    Posty: 470
    Pomógł: 27
    Ocena: 27
    Port daje dużo większy prąd, gdy jest w stanie 0, czyli musiałbyś mieć wyświetlacze ze wspólną anodą. A jeśli chcesz te, to daj jakiś bufor ttl, na każdy segment, ew BCD driver (74ls47). Uzyskasz przez to zmniejszenie ilości wyprowadzeń potrzebnych do obsługi wyśw. (z 7 do 4) dla jednego, + ew jakieś wyjścia do sterowania anodami, dla multipleksowania tego.
  • REKLAMA
  • #4 4266666
    mgsk8er
    Poziom 13  
    Posty: 129
    Pomógł: 3
    Ocena: 5
    Hm... Zaopatrzyłem się w wyświetlacz ze wspólną katodą, bo myślałem, że tak bedzie prościej nim sterować. No i rzeczywiście jest łatwo. Tylko martwi mnie ta mała jasność segmentów. Spróbowałem z rezystorami 220 i nie widze różnicy. A driver typu 74ls47 raczej odpada, bo będę potrzebował jeszcze obsługę kropki dziesiętnej, czyli nieszczęsnego ósmego segmentu...
  • #5 4266745
    antrykot
    Poziom 20  
    Posty: 470
    Pomógł: 27
    Ocena: 27
    Do przecinka możesz zastosować tranzystor i jedno wyprowadzenie uC.
    Co do "łatwości" - jeżeli podłączasz je bezpośr. do portu to jest tak samo (pomijając ciemne świecenie), tyle że trzeba odwrócić stany logiczne.
    A jeżeli nie chcesz drivera (choć to dobre rozwiązanie, tyle że ten który podałem współpracuje ze wspólną anodą) możesz zastosować jakieś bramki NAND, buforki czy co tam masz pod ręką. Wtedy będzie napewno świecić jaśniej.
  • REKLAMA
  • #6 4266812
    mgsk8er
    Poziom 13  
    Posty: 129
    Pomógł: 3
    Ocena: 5
    Spróbuję w takim razie z wyświetlaczem wspólnej anody, bo mam jakiś stary w szufladzie. Dobrze rozumiem, że mam podłączyć ogólne VCC do anody, katody podłączyć do nóżek uP, i to bedzie świecić jak na pinach dam 0?
  • #7 4266914
    antrykot
    Poziom 20  
    Posty: 470
    Pomógł: 27
    Ocena: 27
    Tak, tylko dobrze by było dodać rezystor na każdy pin uC (nie jeden od strony anody, bo to nie to samo).
    Pozatym, dalej namawiam na zastosowanie jakiegoś sterowania tym przez inne scalaki, bo przy większej ilości wyświetlacza, albo braknie wydajności prądowej uC, albo skończą ci sie nóżki.
    Ja ostatnio zrobilem moduł 8 wyśw Led + 2 scalaki ttl, i wszystko ładnie łączy sie poprzez 6 pinów. Oczywiście wyświetlacze są multipleksowane.
  • REKLAMA
  • #8 4267094
    mgsk8er
    Poziom 13  
    Posty: 129
    Pomógł: 3
    Ocena: 5
    Ja w załozeniu mam multipleksowany podwójny wyświetlacz i spokojnie moge przeznaczyć 10 nóżek na to (8 segmentów + 2 na multipleksowanie). A dlatego omijam szerokim łukiem rozwiazania z dodatkowymi driverami czy innymi bajerami, bo w tym załozeniu jest też jak najmniejsza ilość elementów i jak najmniejsza powierzchnia płytki :)
  • #9 4267116
    grzebuj
    Poziom 13  
    Posty: 48
    Pomógł: 4
    Ocena: 1
    Wszystkie piny portu D tego mikroprocesora, zgodnie z notą katalogową Atmel'a, są podciągnięte do napięcia zasilającego poprzez wewnętrzne rezystory. Ich rezystancja jest dosyć duża, więc wydajność prądowa wejścia w stanie logicznej jedynki jest niewielka. Pomoże tu podłączenie do każdego pinu portu D zewnętrznego rezystora podciągającego (łączącego pin z zasilaniem mikroprocesora) o wartości tak dobranej, aby po pierwsze wysterować diodę wyświetlacza, po drugie przy logicznym 0 'na pinie' mikroprocesora ograniczyć natężenie prądu wpływającego do portu do wartości bezpiecznej. Proponuję zastosować R z zakresu od 300 do 500 ohm. Przy 1 logicznej prąd diody będzie wynosił odpowiednio 9.3 mA do 5.6 mA, a przy 0 logicznym prąd wpływający do każdego z wyprowadzeń wyniesie odpowiednio od 16.7 mA do 10 mA.
  • #10 4267163
    mgsk8er
    Poziom 13  
    Posty: 129
    Pomógł: 3
    Ocena: 5
    Niezbyt dobrze stoję z elektroniką i jak napisałem w pierwszym poście, raczej nic nie wiem o rezystorach podciągających. Z powyższego postu zaczyna mi sie rozjaśniać ich z ich przeznaczeniem, ale jeszcze mam pytanie, jak ten badziew się podłącza? Mógłbym poprosić o jakąś małą przykładową grafikę ze schematem?
  • #11 4267285
    antrykot
    Poziom 20  
    Posty: 470
    Pomógł: 27
    Ocena: 27
    Każdy rezystor podciągający (pull-up) podłączasz do pinu uC odpowiedzialnego za jeden segment wyśw i plusa zasilania.
  • Pomocny post
    #12 4267383
    grzebuj
    Poziom 13  
    Posty: 48
    Pomógł: 4
    Ocena: 1
    Poniżej podaję zrobiony na szybko szkic proponowanego przeze mnie podłączenia rezystorów podciągających do portów mikroprocesora, w sytuacji sterowania wyświetlaczem LED ze wspólną katodą (problem opisany przez autora tematu). Oczywiście pominięte są na rysunku wszystkie inne elementy niezbędne do poprawnej pracy mikroprocesora. Zastosowanie takich rezystorów powinno pomóc i wyświetlacz się 'rozjaśni', ale to nie jest optymalne rozwiązanie sterowania wyświetlaczem LED z CC przez µC.
    Atmega8 i wyświetlacz 7-segmentowy LED – dlaczego segmenty świecą słabo?
  • #13 4267465
    mgsk8er
    Poziom 13  
    Posty: 129
    Pomógł: 3
    Ocena: 5
    Dziękuję za czytelny rysunek, jeszcze dzisiaj to wypróbuję. I przepraszam, że tak marudzę, ale mam jeszcze dwa pytania:

    1) czy jest jakaś zasada przy określaniu wartości rezystorów podciagających, czy wystarczy dowolnie z przedziału 300-500, jak przeczytałem wyzej?

    2) czy dobrze rozumiem teorię rezystorów podciągających: wyświetlacz jest na stałe podpięty pod zasilanie, ale przez rezystor postawiony pod progiem wysterowania, natomiast ustawienie stanu niskiego/wysokiego (odpowiednio jaki potrzebujemy) jest "dopalaczem" pomagającym wysterować światełka?
  • #14 4267476
    Dr_DEAD
    Poziom 28  
    Posty: 829
    Pomógł: 126
    Ocena: 3
    Po co wogóle rezystory podciągające przy wyświetlaczu led?
    Aha, po to aby zwiększyć prąd wyświetlacza.
  • Pomocny post
    #15 4267502
    antrykot
    Poziom 20  
    Posty: 470
    Pomógł: 27
    Ocena: 27
    mgsk8er napisał:

    2) czy dobrze rozumiem teorię rezystorów podciągających: wyświetlacz jest na stałe podpięty pod zasilanie, ale przez rezystor postawiony pod progiem wysterowania, natomiast ustawienie stanu niskiego/wysokiego (odpowiednio jaki potrzebujemy) jest "dopalaczem" pomagającym wysterować światełka?


    W stanie 1 przez rezystor płynie prąd do wyśw (przez wew rezystor atmegi też).
    W stanie 0 atmega zwiera rezystor do masu i cały prąd wpływa do portu omijając wyświetlacz.

    Cytat:
    1) czy jest jakaś zasada przy określaniu wartości rezystorów podciagających, czy wystarczy dowolnie z przedziału 300-500, jak przeczytałem wyzej?

    Jest. R = U/I :)
    W datasheecie są podane maksymalne prądy dla portów i nie można ich przekroczyć, więc musisz tak dobrać rezystor aby prąd był w stanie zaświecić wyświetlacz, ale na tyle mały, by w stanie 0 nie upalił portu.
  • #16 4267542
    mgsk8er
    Poziom 13  
    Posty: 129
    Pomógł: 3
    Ocena: 5
    ah, stare dobre prawo Ohma :)

    zaraz popróbuję z tymi rezystorami
  • #17 4267566
    JanuszM
    Poziom 17  
    Posty: 332
    Pomógł: 11
    Ocena: 14
    Jeżeli wyświetlacz nadal słabo świeci, to zmierz jaki prąd płynie przez każdy segment wyświetlacza. Na początek bez multipleksowania. Może to pomoże wyciągnąć odpowiednie wnioski i pokierować Cię dalej.
  • #18 4267656
    mgsk8er
    Poziom 13  
    Posty: 129
    Pomógł: 3
    Ocena: 5
    Podłączyłem z tymi rezystorami podciagającymi i działa jak natura chciała!
    Dzięki ogromne!

    Problem rozwiazany, efekt osiągnięty, i myślę, ze temat już zamknięty.
    Jeszcze raz ogromne dzięki :)
  • #19 4267728
    grzebuj
    Poziom 13  
    Posty: 48
    Pomógł: 4
    Ocena: 1
    mgsk8er napisał:

    1) czy jest jakaś zasada przy określaniu wartości rezystorów podciagających, czy wystarczy dowolnie z przedziału 300-500, jak przeczytałem wyzej?


    Wartości rezystorów dobieramy odpowiednio do aplikacji. Podane wcześniej przeze mnie wartości są jedynie przykładowe i spełniają założenia układu.

    mgsk8er napisał:

    2) czy dobrze rozumiem teorię rezystorów podciągających: wyświetlacz jest na stałe podpięty pod zasilanie, ale przez rezystor postawiony pod progiem wysterowania, natomiast ustawienie stanu niskiego/wysokiego (odpowiednio jaki potrzebujemy) jest "dopalaczem" pomagającym wysterować światełka?


    Wyjście mikroprocesora jest typu otwarty dren. Znaczy to, że gdy zapisujemy do portu '0' logiczne to pin jest zwarty do masy, Natomiast gdy '1' logiczną to pin jest wewnętrznie od masy 'odcięty'. Inaczej mówiąc dla '0' do pinu portu może wpływać prąd, a dla '1' nie może. W opisanej konfiguracji każdy pin portu D powinien mieć możliwość stać się też źródłem prądu. I to jest rola rezystorów podciągających. Gdy zapisujemy '1' to prąd płynie od zasilania poprzez rezystor podciągający przez diodę LED do masy powodując, że dioda świeci. Gdy mamy '0' to pin jest zwarty do masy, a więc różnica potencjałów na zaciskach diody jest równa 0V i dioda nie świeci. Pamiętajmy jednak, że prąd poprzez rezystor podciągający popłynie teraz do macy poprzez pin mikroprocesora.

Podsumowanie tematu

✨ Problem słabego świecenia segmentów wyświetlacza 7-segmentowego LED ze wspólną katodą podłączonego bezpośrednio do mikrokontrolera Atmega8 wynika z braku odpowiedniego ograniczenia prądu i niewłaściwego sterowania. Bez rezystorów ograniczających prąd segmenty świecą słabo lub mogą uszkodzić porty mikrokontrolera. Zaleca się stosowanie rezystorów szeregowych o wartości około 150-220 Ω na każdym segmencie, aby ograniczyć prąd do bezpiecznego poziomu (maksymalnie około 20 mA na pin). W przypadku wyświetlaczy ze wspólną katodą, anody segmentów należy podłączyć przez rezystory do portów mikrokontrolera, a katodę do masy. Rezystory podciągające (pull-up) o wartości 300-500 Ω mogą być stosowane, aby zapewnić odpowiedni prąd i stabilność sygnału, szczególnie gdy porty mikrokontrolera mają wewnętrzne rezystory o dużej rezystancji. Sterowanie wyświetlaczem ze wspólną anodą wymaga podawania stanu niskiego na segmenty, co pozwala na większy prąd z portu. Dla bardziej zaawansowanych zastosowań zaleca się użycie buforów TTL lub dedykowanych driverów (np. 74LS47), które ułatwiają sterowanie i zmniejszają liczbę potrzebnych wyprowadzeń, jednak w prostych układach można sterować segmentami bezpośrednio, pamiętając o ograniczeniu prądu i odpowiednim doborze rezystorów. Pomiar prądu płynącego przez segmenty oraz zastosowanie rezystorów szeregowych i podciągających rozwiązuje problem słabego świecenia i zabezpiecza mikrokontroler przed przeciążeniem.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA