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.

[Atmega16][C] - matryca RGB 8x5 diod

01 Lut 2012 18:48 2118 8
  • Poziom 14  
    Niedawno założyłem temat w dziale Optoelektronika, chciałem się dowiedzieć kilka rzeczy odnośnie jasności LEDów w takiej matrycy, jeśli wiersze byłyby multipleksowane. Niedawno jednak borykam się z większym problemem. [Poniżej post przeniesiony z wyżej wymienionego działu]

    Ostatnio kupiłem diody i zbudowałem matrycę. Kolorki ładnie się zmieniają, ale jest pewien problem. Co jakiś czas gasną na chwilę wszystkie diody. Z tego co zauważyłem, to przerwy te są raz dłuższe, raz krótsze. Powoduje to miganie całej matrycy, co przy częstotliwości około jednego mignięcia na 3 sekundy całkowicie psuje efekt. Co więcej, miganie to nie jest stałe - raz działa pięknie i diody płynnie zmieniają kolory, a raz miga po dwa razy na sekundę. Dodatkowo po jakimś czasie od włączenia zasilania, stale mrugają te diody, na których aktualnie znajduje się niewymieszany kolor (czyli albo sam czerwony, albo zielony, albo niebieski), a zmiana kolorów nieznacznie przyspiesza.
    Oto schemat, według którego złożony jest układ na chwilę obecną:
    [Atmega16][C] - matryca RGB 8x5 diod

    Długo analizowałem zarówno schemat, jak i kod źródłowy. Nawet wyłączyłem demultiplekser CD4067 i podłączyłem wszystkie bramki NOT do portu C (na schemacie został scalak, żeby wszystko było tak jak w rzeczywistości), niestety bezskutecznie. Skoro już wiem, że nie jest to wina tego scalaka, to pozostają trzy możliwości:
    - zły kod
    - jakieś śmieci bezpośrednio z Atmegi16
    - bramki NOT, tranzystory PNP lub NPN nie wyrabiają
    A to kod źródłowy, wraz z obszernymi komentarzami. Poniżej obrazki ilustrujące zasadę generowania PWMów.
    [Atmega16][C] - matryca RGB 8x5 diod
    [Atmega16][C] - matryca RGB 8x5 diod [Atmega16][C] - matryca RGB 8x5 diod
    Niestety kod bardzo rozciąga stronę w poziomie, więc pozwoliłem go sobie wrzucić na osobny serwer. [tu był link]

    Czy ktokolwiek wie co może być przyczyną? Starałem się rozwiązać problem samemu, ale niestety już nie mam pojęcia co jest winne.

    P.S.
    Zauważyłem tylko, że dla dx = 20, matryca miga przy t = 177..180. Przy kolejnych cyklach zakres ten się zmienia, tylko nie odkryłem już na co.
  • Poziom 9  
    Witam,

    A jak jest zasilane, może poprostu wydajność prądowa zasilania jest zbyt niska?, procesor się resetuje a statyczny obraz daje efekt jakby migotało, i nie widać resetu po działaniu układu?

    Pozdrawiam
  • Poziom 14  
    Zasilam z portu USB (programator USBasp), więc jest to teoretycznie możliwe, jednak procesor na pewno się nie resetuje, ponieważ po mignięciu kolory dalej są na swoim miejscu, a nie zaczynają od zera.
    Podłączyłem układ bezpośrednio do +5V z zasilacza komputerowego. Nie miga już tak często, ale niestety problem dalej pozostaje. Dodatkowo mruganie kolorów składowych dalej występuje. No nie mam pojęcia co może być przyczyną... :|
  • Poziom 9  
    jeżeli jest lepiej to zostają rezystory, obecnie jest jeden rezystor ograniczający prąd w obwodzie kolektora... zmieniając liczbę zapalanych diod zmienia się prąd płynący przez pojedyncza diodę. Nie jest to najlepsze rozwiązanie do wyświetlaczy matrycowych, powoduje to z pewnością przyciemnianie i rozjaśnianie wyświetlacza w zależności od pwm'a i ilości zapalonych diod

    pozdrawiam
  • Poziom 14  
    Owszem, jest jeden rezystor w obwodzie kolektora, ale przecież w tymże świeci co najwyżej jedna dioda. Wiersze są multipleksowane. Znaczy były, chwilowo są podpięte pod port C i tam przesuwam po kolei jedynkę na każdy bit. Dajmy na to, że aktywny jest wiersz zerowy (podpięty pod PC.0), i wszystkie piętnaście składowych w tym wierszu aktualnie mają jakąś wartość większą od zera. Wtedy do każdej diody jest osobny rezystor (jest 15 rezystorów i 15 aktywnych diod składowych). Sprawa wyglądałaby inaczej, gdyby naraz świecił więcej niż jeden wiersz - to prawda. Ale tak nie jest :D.
  • Poziom 9  
    Faktycznie na raz działa tylko jedna dioda w kolumnie -> moje przeoczenie. Pozostaje tylko debugować program, tranzystory nie mają szansy się nie wyrabiać, chyba, że bramka nie podciąga zasilania do +Vcc dla tranzystorów pnp i pozostają w stanie przewodzenia, chociaż to mało prawdopodobne i by wtedy nie przygasało. Tym bardziej wykluczałbym błędne działanie bramek. Jeżeli nie zasilanie, to przyczyna pozostaje w błędnie działającym programie.

    Dodano po 3 [minuty]:

    Dodatkowo, może warto dodać kondensatory przy tranzystorach pnp. Tym bardziej, że na schemacie nie widać żadnych ;)
  • Poziom 14  
    Właśnie tego się obawiałem - błędny program. Za nic nie wiem gdzie jest błąd :(. Dodatkowo zauważyłem, że jeśli wyłączę zwiększanie t (odpowiedzialne za zmiany kolorów) i ustawię go przed główną pętlą na t=0, to matryca szaleje. Pierwsza kolumna jest lekko czerwona, a reszta jakaś lekko różowawa. Co najdziwniejsze, dla każdego innego t wszystko jest już tak jak być powinno. Nie wiem czym to się może różnić...
    Czy jest na tym forum ktoś, kto jako tako widzi przyczynę tego błędu? Bo ja jestem człowiek młody i niedoświadczony, i niestety jeszcze dużo muszę się nauczyć... Jakakolwiek pomoc w tym temacie jest naprawdę mile widziana.

    Dzięki i pozdrawiam
    mopsiok

    P.S.
    A mógłbyś mi tak pokrótce wyjaśnić w jakim celu podłączyć te kondensatory, i do których nóżek dokładnie? Bo nie rozumiem po co, tak prawdę mówiąc. Oj, naprawdę wiele się muszę nauczyć.
  • Pomocny post
    Poziom 9  
    Prawdę mówiąc nie bardzo mam czasu analizować programu i wątpię żeby ktoś powiedział dokładnie w którym momencie jest błąd (może się mylę i ktoś powie ;>), zwłaszcza że komentarze to nie wszystko (trzeba zrozumieć co autor miał na myśli robiąc tak, a nie inaczej) Co do kondensatorów to jako takie musisz dodać równolegle do zasilania. Przede wszystkim włączenie tranzystora jest impulsowym zwiększeniem pobieranego prądu przez obwód i tutaj jeżeli nie ma skąd tej energii pobrać lokalnie(brak kondensatów) to jest przekazywana "aż" z zasilacza, obciąża to dodatkowo ścieżki i przewody, przez co na napięciu zasilania pojawią się impulsy (taki "śmietnik" ;) ). Tutaj są względnie małe prądy więc nie spodziewałbym się siadania napięcia, jednak zawsze przy nogach zasilania procesora należy dodawać kondensatory. Dodatkowo filtruje to ten "śmietnik" na zasilaniu. Podobnie przy elementach wykonawczych -> w tym przypadku tranzystorach pnp. Poza tym "pogoogluj" to znajdziesz pełno informacji,

    pozdrawiam
  • Poziom 14  
    Nie mam kondensatora bezpośrednio przy nóżkach Atmegi, ale jest jeden między zasilaniem. Ale trochę mały (tylko 33n). Właśnie podpiąłem dodatkowo 220u, działa już kilkanaście minut i wygląda na to, że... to pomogło! Kolory się zmieniają, czerwony, zielony i niebieski nie miga, w ogóle cała matryca przestała mrugać. Naprawdę wielkie dzięki :). Nie wiem jak mogłem zapomnieć o tym kondensatorze... taki głupi błąd. :|