Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[c] Multipleksowanie 6 wyświetlaczy LED

13 Wrz 2012 19:47 2997 12
  • Poziom 23  
    Witam! mam 6 wyświetlaczy LED (57mm) i od jakiegoś czasu zmagam się, z poświatami na wyświetlaczu LED.

    mój kod przy przerwaniu wygląda następująco:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Gdzie portem B są sterowane katody, a portem A anody (wyświetlacze ze wspólną katodą) z mojego punktu widzenia wygląda to tak: gdy następuje przerwanie wyłącza mi wszystkie katody (powinno wszystko zgasnąć) następnie wybiera odpowiednio od tego, czy zegar jest włączony czy nie co ma wyświetlić, czyli ustawia anody a następnie włącza odpowiednie katody i w tym momencie powinna wyświetlać się nowa cyfra na nastepnym wyświetlaczu.

    A w praktyce wygląda to tak, ze na poprzednim wyświetlaczu jest poświata cyfry z następnego wyświetlacza.

    Druga sprawa (może również związana z tym) to to, że wystarczy dać częstotliwość 24Hz na jeden wyświetlacz, ale bardziej pewne to 50Hz, czyli w moim wypadku to jest 300Hz lecz niestety w takim wypadku wyświetlacze strasznie migoczą, dopiero około 1kHz migotanie jest niewidoczne...
    Nie wiem w czym jest problem, ale byłbym wdzięczny za nakierowanie mnie na mój błąd :)
  • Moderator Mikrokontrolery Projektowanie
    1. Nie podałeś, co to za uC,
    2. pokaż deklaracje zmiennych i tablic, a najlepiej cały program,
    3. nie podałeś jaki zegar masz ustawiony,
    4. nie pokazałeś ustawienia timera,
    5. schemat także dałby nam pewność podpowiedzi.
  • Poziom 23  
    Myślałem, ze to nie ma znaczenia... no ale ok... co do kodu, to wolałbym nie, bo trochę za długi jest... zegar to 11059200

    Kod: c
    Zaloguj się, aby zobaczyć kod


    aaa no i oczywiście układ to atmega16
    [c] Multipleksowanie 6 wyświetlaczy LED
  • Moderator Mikrokontrolery Projektowanie
    OK rozumie, że nie chcesz całość, ale prosiłem też o konkretne fragmenty.

    A pin RESET programujesz go jakoś?
    Brak filtracji zasilania uC.
    Mikrokontroler nieprawidłowo podłączony: http://mikrokontrolery.blogspot.com/2011/04/minimalne-podlaczanie-pinow.html

    Puszczasz maksymalne prądy przez LED - brak rezystorów?
  • Poziom 23  
    ups.. pominąłem jeden punkt...

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Wszystkie zmienne i tablice globalne
  • Poziom 23  
    Zawsze myślałem, że jak nie używam części analogowych to nie trzeba ich podłączać.. no ale mój błąd... A co do rezystorów na UDN to są one potrzebne? skoro sam UDN robi jako bufor podwyższający napięcie..
    Jeszcze zmienna zegar, tez jest uint8_t, globalna, za chwile wszystko poprawie i zobaczymy czy będzie działać jak powinno :)
  • Pomocny post
    Moderator Mikrokontrolery Projektowanie
    Pi0trek121 napisał:
    Zawsze myślałem, że jak nie używam części analogowych to nie trzeba ich podłączać.. no ale mój błąd...

    No to właśnie wszedłeś w nową epokę :)

    Pi0trek121 napisał:
    A co do rezystorów na UDN to są one potrzebne? skoro sam UDN robi jako bufor podwyższający napięcie..

    Nie pokazałeś na schemacie jakim napięciem zasilasz UDN, czyli de facto diody. Liczyłeś prądy LED?


    Pi0trek121 napisał:
    Jeszcze zmienna zegar, tez jest uint8_t, globalna, za chwile wszystko poprawie i zobaczymy czy będzie działać jak powinno :)

    Volatile - istotna sprawa przy przerwaniach.
    Mniemam, że optymalizację kodu masz włączoną - jaką?
  • Poziom 23  
    UDN zasilany jest napięciem 9V, prąd jest liczony na tranzystor (przy maksymalnie zapalonych wszystkich diodach, dioda ok. 20mA*3*7). A co do optymalizacji to trudno mi powiedzieć :D zmieniłem wszystkie zmienne, których dotyczy przerwanie i jakby trochę lepiej/albo mi sie wydaje? Ale nadal widać, jak mam na jednym wyświetlone 1 a na następnym zmieniam to widzę tą zmienianą liczbę na tym gdzie jest wyświetlone 1
  • Moderator Mikrokontrolery Projektowanie
    Pokaż jak poprawiłeś schemat i program.
    Optymalizację sprawdź w opcjach kompilatora - jakiego środowiska używasz?

    Pojedyncza dioda tak podłączona nie będzie brała 20mA tylko znacznie więcej.
    Nie oznacza to, że nie można przez nią puszczać nawet 6-krotnie większego prądu, ale to trzeba kontrolować. W datasheet znajdziesz maksymalny prąd i wypełnienie przy jakim można diodę sterować multipleksowo - sprawdź to i policz jak jest u Ciebie.
  • Poziom 23  
    W schemacie wszystkie GND do masy, i AVCC do 5v, na reset przez rezystor 10k do 5v

    w programie dałem wszystkie tablice typu volatile uint8_t jak i zmienne zegar i sekwencja + inne zmienne do innego przerwania

    Dodano po 16 [sekundy]:

    uzywam kompilatora eclipse

    Dodano po 4 [minuty]:

    A układ UDN wg. noty bierze 450μA przy napięciu Vin = 3,85V
  • Moderator Mikrokontrolery Projektowanie
    Pi0trek121 napisał:
    A układ UDN wg. noty bierze 450μA przy napięciu Vin = 3,85V

    Nie chodzi o to ile pobiera logika UDN tylko o to, że z 9V podłączonego do pinu VS UDN'a zasilasz nim diody LED poprzez tranzystor w UDN - zobacz w datasheet schemat wewnętrznej struktury UDN.

    Podłączając wyjście UDN do diody podajesz na nią napięcie 9V minus spadek napięcia na tranzystorze UDN. Całość leci przez LED i tranzystor DB139 (z Twojego schematu) do GND. Innymi słowy nie ograniczając prądu diody narażasz swój układ na destrukcję, bo prąd płynący przez pojedynczy LED jest zapewne poza zakresem jego możliwości.

    Radzę to sprawdzić, policzyć i dodać rezystory do wyjść UDN'a: https://www.elektroda.pl/rtvforum/topic1960971.html
  • Poziom 23  
    Co do tego to masz racje... będę musiał je dodać... sadzisz, że to może być wina tych poświat?

    Dodano po 1 [godziny] 46 [minuty]:

    za pomocą PWM ściemniłem trochę wyświetlacz i pomogło, tak wiec wina leżała po stronie brakujących rezystorów, dziękuje bardzo za pomoc :)