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

Świąteczny świecznik na LED WS2812

ex-or 17 Gru 2017 15:55 4116 8
  • Świąteczny świecznik na LED WS2812
    Cześć!
    Nie miałem zamiaru występować w tym konkursie, bo było jak zwykle: co roku w Święta obiecuję sobie, że w przyszłym roku przygotuję jakąś ozdobę z superhipermega efektami świetlnymi - migocącą gwiazdę, tęczowego Mikołaja albo falującego renifera czy co tam jeszcze. Potem rok sobie biegnie i jak trzeba zabierać się za przygotowanie ozdoby: "Ojej, to już połowa grudnia!". A więc znów miało skończyć się na niczym, ale nagle przypomniałem sobie, że z czasów eksperymentów z diodami WS2812 pozostał mi niewykorzystany mały, 10-LEDowy pasek i jakiś soft z efektami. Postanowiłem na tej bazie coś skonstruować.
    Świąteczny świecznik na LED WS2812Świąteczny świecznik na LED WS2812
    Z posiadanych softów najciekawszy wydał mi się symulator palącej się świeczki. Zastosowany algorytm niemal całkowicie oparty jest na symulatorze świecznika adwentowego opisanego tutaj: http://bienonline.magix.net/public/avr-advent.html,, ja dostosowałem go do LEDów WS2812. W roli sterownika wykorzystałem Arduino UNO. Całość zasilana jest ze starego zasilacza transformatorowego ZMK-2. LEDy nie świecą na full power, więc LDO 5V na płytce Arduino jest wystarczający do zasilania LEDów (nawet nie jest ciepły). W roli obudowy: torebki strunowe. Program napisany w języku C, kompilator avr-gcc v. 4.9.2. Kody źródłowe w załączeniu.
    Trochę się zastanawiałem, co zastosować w roli dyfuzora i wykorzystałem coś mega prostego: kartkę sztywnego, białego papieru złożoną na pół. Uzyskany efekt na filmie poniżej.

    Link

    candle.zip Download (8.58 kB)


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz pendrive 32GB.
  • Mitronik
  • #2 17 Gru 2017 23:29
    22053
    Użytkownik usunął konto  
  • Mitronik
  • #3 18 Gru 2017 11:53
    ex-or
    Poziom 16  

    R-MIK napisał:
    Musiałeś robić wstawki asm

    Z timingów wychodziło, że tak.
    R-MIK napisał:
    Dla AVRmega zrobiłem wszystko w C i to na przerwaniach.

    To się pochwal kodem. Się popatrzy i pocmoka...albo skrzywi ;-)

  • #4 18 Gru 2017 12:33
    22053
    Użytkownik usunął konto  
  • #6 18 Gru 2017 15:28
    22053
    Użytkownik usunął konto  
  • #7 19 Gru 2017 12:12
    ex-or
    Poziom 16  

    Nie neguję samego użycia UARTa tylko porównywanie rozwiązania w którym większość roboty odwala sprzęt do czysto programowego machania pinem. Ale nieważne.

    R-MIK napisał:
    co innego jak się steruje 500led i w tym czasie odbiera dane DMX. Wysłanie danych dla 500 led to 15ms

    Ta moja procedurka obługi LEDów jest nieblokująca (w ograniczonym zakresie o czym dalej), więc i w takiej konfiguracji z powodzeniem dała by radę. Oczywiście banglowanie pinem zabiera czas procesora więc maksymalna możliwa częstotliwość odświeżania LEDów jest niższa niż przy obsłudze UARTem. No i każde przerwanie wydłuża czas transmisji do LEDów (czyli jeszcze obniża częstotliwość odświeżania). Oprócz tych, niewątpliwie ogromnych, wad, jest też duża zaleta: nie trzeba zagnieżdżać procedur obsługi przerwań.
    Ograniczenie o którym wspomniałem jest takie, że czas obsługi przerwania nie może przekraczać czasu Reset LEDów (w Twoim rozwiązaniu też ono występuje). Jest on, niestety, bardzo krótki: Ty podajesz 15..20us, ja się spotkałem z 5µs.
    R-MIK napisał:
    Wyglada to tak:

    Ja bym raczej całą procedurę napisał w ASM, a choćby wstawiając to co wyprodukował kompilator i wycinając zbędne fragmenty. Przecież nie ma pewności, czy kolejna wersja kompilatora nie użyje innych rejestrów, nieprawdaż?

  • #8 19 Gru 2017 12:30
    22053
    Użytkownik usunął konto