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

AVR C sterowanie wykładnicze jasnością LED

kfiatek43 30 Gru 2010 01:15 7081 10
REKLAMA
  • AVR C sterowanie wykładnicze jasnością LED

    Wstęp/założenia
    Przedstawiam sterownik jasności diod LED przy pomocy PWM 14bit, max 6 niezależnych linii, 3 różne źródła sterowania jasnością. Układ został uruchomiony w dwóch wersjach: Attiny13 (2kanały) oraz Atmega48 (6kanałów), dodatkowo w kodzie obsłużyłem Attiny24 (4kanały) jednak nie przetestowałem praktycznie.
    Uruchomione przeze mnie wersje służą mi:
    a) Attiny13 zrobiony na pająku - oświetlenie diodowe łazienki
    b) Atmega48 zrobiony na płytce uniwersalnej - oświetlenie diodowe akwarium

    Opis konstrukcji
    Część elektryczna jest banalna, co widać na załączonym schemacie. Dlatego też nie chciało mi się bawić w dedykowane płytki.

    Jeśli chodzi o oprogramowanie to:

    1. Na wejściu mamy wartości jasności LedValue(1bajt), które po podniesieniu do kwadratu ostatecznie przerabiane są na PWM podobny do 14-bitowego. Timery pracują jako 8-bit PWM, programowo zwiększana jest rozdzielczość PWM do 14-bit. Częstotliwość wyjściowa jest zmienna i rosnąca wraz z jasnością. Dla 8MHz Atmega48 wynosi (LedValue:f):
    1:61Hz 2:122Hz 3-4:244Hz ... 15:3,9kHz
    Jak widać problematyczna jest tylko częstotliwość przy najsłabszym świeceniu, jednak diody wtedy ledwo widocznie świecą, więc nie stanowi to problemu.

    2. Zmiana jasności następuje płynnie, z prędkością ustaloną podczas kompilacji (plik LED.inc, stała DELAY_05HTHSEC). Interwał jest mnożnikiem 1/200sec, czyli minimum można ustawić 1,28sec na całkowite rozjaśnienie. Można też zrezygnować z płynnego zmieniania poprzez ustawienie wartości stałej na 0.

    2. Jasność możemy zmieniać na 3 sposoby:
    a) za pomocą przełącznika bistabilnego on/off
    b) za pomocą guziczków monostabilnych
    c) za pomocą linii szeregowej (nie UART!)

    ad 2.b) W programie mamy definiowane (w załączniku: 4) poziomy zapamiętanej jasności. Klikanie guziczka zmienia 0->1->2->3->0. Zrobienie przerwy dłuższej niż 4-5sec między kliknięciami spowoduje, że kolejne kliknięcie da przejście do poziomu 0, czyli: 0->1(6sec przerwy)->0.
    Przytrzymanie guziczka wciśniętego ponad 2sec spowoduje mrugnięcie diod oraz wejście do trybu zmiany wartości bieżącego poziomu jasności. Po ustawieniu odpowiedniej jasności guziczkami up/down kliknięcie guziczkiem dowolnej linii spowoduje wyjście z trybu zmiany, mrugnięcie diod oraz zapisanie zmiany do EEPROM.

    ad 2.c) Interfejs jest niestandardowy, gdyż Attiny nie ma UART. Zasada transmisji łatwa do rozpoznania w kodzie, tam dodatkowo umieściłem w komentarzu procedury dla nadajnika. Od strony logicznej programu odbiór wartości przez RS nie powoduje zmian zdefiniowanych jasności poziomów 0-3, natomiast kolejne kliknięcie guziczka powoduje przejście w poziom jasności 0.


    Opis załączników
    W załączniku program, dwa pliki z konfiguracją, dwa pliki Makefile, oraz opis co zmienić w fusebits.

    Podsumowanie
    Urządzenie sprawuje się w obu wersjach bezawaryjnie, jedyne co można zarzucić to fakt, że poprzez dotykanie palcami nóżek łatwo doprowadzić do resetu. Jednak nie dotykam, więc nie resetuję :)

    Przybliżony kosztorys (z pamięci):
    Attiny13: 3zł/szt
    Atmega48: 8zł/szt
    IRLZ34: 2zł/szt
    Mikroprzełącznik: 50gr/szt
    Rezystory, przewody, styki -> posiadałem

    Czyli:
    wersja Attiny+2xIRLZ34 około 9zł
    wersja Atmega+6xIRLZ34 około 24zł


    Schemat
    AVR C sterowanie wykładnicze jasnością LED

    Inne zdjęcia
    AVR C sterowanie wykładnicze jasnością LED AVR C sterowanie wykładnicze jasnością LED AVR C sterowanie wykładnicze jasnością LED
    Załączniki:
    • KodZrodlowy.zip (20.38 KB) Musisz być zalogowany, aby pobrać ten załącznik.

    Fajne? Ranking DIY
    O autorze
    kfiatek43
    Poziom 11  
    Offline 
    Specjalizuje się w: cyfrówka
    kfiatek43 napisał 10 postów o ocenie 23. Mieszka w mieście krakow. Jest z nami od 2006 roku.
  • REKLAMA
  • #2 8933288
    vonar
    Poziom 28  
    Posty: 690
    Pomógł: 151
    Ocena: 30
    kfiatek43 napisał:
    poprzez dotykanie palcami nóżek łatwo doprowadzić do resetu

    Bez zewnętrznego podciągania /RST to nie ma co się dziwić ;)
  • REKLAMA
  • #3 8933303
    yogi009
    Poziom 43  
    Posty: 14689
    Pomógł: 848
    Ocena: 2647
    Na ostatniej fotce odległości między wyprowadzeniami są nikłe, mogłeś to chociaż w koszulki termokurczliwe wrzucić. Tak, to się boję oglądać :-)
  • REKLAMA
  • #4 8933374
    SylwekK
    Poziom 32  
    Posty: 2764
    Pomógł: 82
    Ocena: 2762
    Może pokusisz się o jakąś małą prezentację video :)
  • #5 8934112
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    vonar napisał:
    kfiatek43 napisał:
    poprzez dotykanie palcami nóżek łatwo doprowadzić do resetu

    Bez zewnętrznego podciągania /RST to nie ma co się dziwić ;)


    yogi009 napisał:
    Na ostatniej fotce odległości między wyprowadzeniami są nikłe, mogłeś to chociaż w koszulki termokurczliwe wrzucić. Tak, to się boję oglądać :-)


    A do tego wszystkie nie używane piny są domyślnie wejściami w stanie Hi-Z (czyli też przydałoby się i program poprawić), do tego brak poprawnego filtrowania zasilania i okropnie wykonana płytka czy pająk. A przecież nawet na takich płytkach można ładnie poukładać elementy i wykonać tak, żeby było nie tylko przyjemne dla oka bo to mniej ważne, ale przede wszystkim, żeby to poprawnie działało.

    Moim zdaniem jest to "dobry" przykład DIY ale jak NIE NALEŻY czegoś takiego robić niestety ;)

    Za to myślę, że po wprowadzeniu poprawek zarówno w konstrukcji jak i w kodzie mogłoby to zacząć mieć ręce i nogi ;) więc powodzenia.
  • #6 8934177
    kfiatek43
    Poziom 11  
    Posty: 10
    Ocena: 23
    mirekk36 napisał:
    Moim zdaniem jest to "dobry" przykład DIY ale jak NIE NALEŻY czegoś takiego robić niestety ;)


    Spoko, ja pająki uwielbiam, dedykowane płytki robię tylko pod tory analogowe, tutaj jest mi to bez różnicy. Projektu nie umieściłem, żeby zbierać pochwały, bardziej chciałem się podzielić programem, gdyby ktoś potrzebował podobną rzecz upchnąć w 1kB programu.

    mirekk36 napisał:
    A do tego wszystkie nie używane piny są domyślnie wejściami w stanie Hi-Z (czyli też przydałoby się i program poprawić)

    Ale co z tego faktu wynika, że piny są w stanie Hi-Z?

    mirekk36 napisał:
    do tego brak poprawnego filtrowania zasilania

    Nie zawiesiło się nigdy, nie resetuje samoczynnie, odczyt przycisków po ADC działa bezproblemowo, więc nie rozumiem tego zarzutu

    Dodano po 2 [minuty]:

    yogi009 napisał:
    Na ostatniej fotce odległości między wyprowadzeniami są nikłe, mogłeś to chociaż w koszulki termokurczliwe wrzucić. Tak, to się boję oglądać :-)


    Te nikłe odległości są pomiędzy dwoma nóżkami masy, więc zwarcie ich niczym nie grozi ;)

    Dodano po 11 [minuty]:

    SylwekK napisał:
    Może pokusisz się o jakąś małą prezentację video :)

    Chmm... ciężko filmować diody zmieniające jasność z 1/16tys do maksymalnej jasności. No chyba że znasz jakiś dobry patent na to.
  • #7 8934736
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    kfiatek43 napisał:

    mirekk36 napisał:
    A do tego wszystkie nie używane piny są domyślnie wejściami w stanie Hi-Z (czyli też przydałoby się i program poprawić)

    Ale co z tego faktu wynika, że piny są w stanie Hi-Z?


    Dobrym zwyczajem jest zmienić stan Hi-Z na wysoki poprzez wystawienie jedynek na wszystkie nie używane piny portów. Wtedy piny nie są już "antenami". Do tego podciągasz RESET zewnętrznym rezystorem 10K do VCC i już ustępuje ci spora część efektów specjalnych w postaci "samo resetów" ;)
  • REKLAMA
  • #8 8937497
    kfiatek43
    Poziom 11  
    Posty: 10
    Ocena: 23
    Problem resetu wywoływanego dotykaniem ścieżek wyeliminował kondensator 56nF dołączony do reset. Poniżej zaktualizowany schemat.
    AVR C sterowanie wykładnicze jasnością LED
  • #9 8938185
    mklos1
    Poziom 25  
    Posty: 717
    Pomógł: 68
    Ocena: 121
    Dodatkowo stabilizator napięcia jest niezgodny ze sztuką. Układ z tranzystora i diody zenera płynie z temperaturą w oczach i w ogólności nie powinno się takiego układu stosować.
  • #10 8938496
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    kfiatek43 --> widzę, że kolega lubi dłuuugo uczyć się na własnych błędach, można i tak ;)

    mklos1 napisał:
    Dodatkowo stabilizator napięcia jest niezgodny ze sztuką. Układ z tranzystora i diody zenera płynie z temperaturą w oczach i w ogólności nie powinno się takiego układu stosować.


    1. RACJA ! .... czyli to nadal nie poprawione i masakra :( tym bardziej, że z tych 12V zasilane są bezpośrednio diody LED.

    2. kondensator 56nF do RESET, który niby eliminuje opisywane wyżej auto-resety ??? to nieporozumienie (nie taka jest droga eliminacji takich zjawisk)

    3. kondensator 1uF ???? podłączony do linii MISO ???? to już prawie jakiś absurd. On ma pełnić wg ciebie rolę eliminacji drgań styków tego słicza obok??? Oj kolega widzę wstawia kondensatorki wszędzie tam gdzie nie trzeba, za to tam gdzie trzeba (filtrowanie) to ich wszędzie BRAK
  • #11 8943403
    kfiatek43
    Poziom 11  
    Posty: 10
    Ocena: 23
    mirekk36 napisał:
    kfiatek43 --> widzę, że kolega lubi dłuuugo uczyć się na własnych błędach, można i tak ;)

    mklos1 napisał:
    Dodatkowo stabilizator napięcia jest niezgodny ze sztuką. Układ z tranzystora i diody zenera płynie z temperaturą w oczach i w ogólności nie powinno się takiego układu stosować.


    1. RACJA ! .... czyli to nadal nie poprawione i masakra :( tym bardziej, że z tych 12V zasilane są bezpośrednio diody LED.


    Widzę że Koledzy są, rzekłbym, fanatycznie przywiązali się do tzw. "sztuki". Chciałem zrobić jak najprościej przy pomocy części, które miałem i właśnie tak zrobiłem. Zapytam Was: i co z tego, że zasilanie pływa w zależności od temperatury? Jaka różnica dla mojego układu, czy będzie zasilany przy pomocy 3,5V czy 5V? Żadna. I dodatkowo: ile wg kolegów może "popłynąć" zasilanie między 20 i 30'C? Bo generalnie pobór mocy jest tak znikomy, że ciężko wyczuć palcem grzanie tranzystora.

    mirekk36 napisał:
    2. kondensator 56nF do RESET, który niby eliminuje opisywane wyżej auto-resety ??? to nieporozumienie (nie taka jest droga eliminacji takich zjawisk)

    Po pierwsze nie autoresety a resety spowodowane dotykaniem palcami po ścieżkach układu. Po drugie dlaczego nieporozumienie? Skoro przez dotknięcie palcem resetu wskakuje na chwilę potencjał 0 to naturalne jest, że kondensator pomoże, gdyż odpowiednio mały ładunek nie zdąży rozładować kondensatora. Prawdę mówiąc nie ruszałbym tego dotykowego resetowania w ogóle, gdyby mnie Koledzy nie przycisnęli ;)

    mirekk36 napisał:
    3. kondensator 1uF ???? podłączony do linii MISO ???? to już prawie jakiś absurd. On ma pełnić wg ciebie rolę eliminacji drgań styków tego słicza obok??? Oj kolega widzę wstawia kondensatorki wszędzie tam gdzie nie trzeba, za to tam gdzie trzeba (filtrowanie) to ich wszędzie BRAK

    Może niefortunnie narysowany ten kondensator. W rzeczywistości jest odłączany razem z przełącznikiem i w trakcie programowania nie jest podpięty do układu. Kondensator ten pojawił mi się jedynie w wersji łazienkowej. Przełącznik jest na oryginalnych kablach 220V wbetonowanych w ściany/sufity i z powodu bliskości jakichś innych podpiętych pod 220V indukowały się zakłócenia, które po włączeniu diod resetowały układ. Dorzucony kondensator pomógł.

    A jeśli jednak wg Ciebie wszystko od strony elektronicznej jest do d..y to zaproponuj proszę co i gdzie powinno być zmienione, tak w ramach edukacji mnie i innych.

    Pozdrawiam

    Dodano po 2 [minuty]:

    mirekk36 napisał:
    Dobrym zwyczajem jest zmienić stan Hi-Z na wysoki poprzez wystawienie jedynek na wszystkie nie używane piny portów. Wtedy piny nie są już "antenami".


    W załączniku zmieniony kod zgodnie z sugestią. Oczywiście zmiana ma znaczenie tylko dla wersji Atmega48, bo dla Attiny13 wszystkie piny są używane.
    Załączniki:
    • LED.c (25.36 KB) Musisz być zalogowany, aby pobrać ten załącznik.

Podsumowanie tematu

✨ Użytkownik przedstawił projekt sterownika jasności diod LED z wykorzystaniem PWM 14-bitowego, działającego na mikrokontrolerach Attiny13, Atmega48 oraz Attiny24. W projekcie zastosowano różne źródła sterowania jasnością oraz zrealizowano oświetlenie dla łazienki i akwarium. Dyskusja skupiła się na konstrukcji elektrycznej, jakości wykonania oraz problemach z resetowaniem układu. Użytkownicy zwrócili uwagę na konieczność poprawy filtracji zasilania, podciągania pinów oraz zastosowania odpowiednich kondensatorów. Wskazano również na błędy w projektowaniu płytki oraz na znaczenie estetyki i funkcjonalności w DIY.
Wygenerowane przez model językowy.
REKLAMA