Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Light show - Lampki choinkowe 2008

KJ 25 Dec 2008 23:59 16378 15
  • Light show - Lampki choinkowe 2008
    Kontynuacja zeszłorocznego projektu oswietlenia domu.

    Postanowiłem ostatecznie wprowadzić możliwość nie tylko włączenia i wyłączenia każdego kanału ale także regulacji jego jasności metodą fazowej regulacji mocy. Próby na starym układzie sterującym - jeden procesor + zatrzaski wypadły niepomyślnie z powodu za długiego czasu wpisu danych do rejestrów (bascom :|) pociągnęło to za sobą całkowitą zmianę budowy sterownika - moduły wykonawcze pozostały bez zmian. Zeszłoroczne lampki przetrwały ale wiele z nich wymagało naprawy, na szczęście okazały się w 100% naprawialne nie licząc tych kilku które zerwały się przy zdejmowaniu. Pomimo pokorodowania wielu styków działają i mają się dobrze. Styki zostały oczyszczone. W sumie naprawiłem ponad 100 kompletów lampek.

    Co Nowego:
    Nowy sterownik oparty jest o procesory atmega16 włożone może trochę na wyrost ale okazały się najtańszymi oferującymi dostateczną ilość wyprowadzeń. Każdy obsługuje 16 kanałów i posiada własny unikalny adres ustawiany dipswithem. Sterownik ma na chwile obecną 128 niezależnych kanałów po 128 stopni jasności każdy co oznacza 8 procesorów. Teoretycznie można zaadresować 2048 kanałów. Praktyczne pewnie około 512 wydaje mi się że powyżej tej ilości opóźnienia między procesorami zaczną być zauważalne. Procesory zostały połączone UART-ami i podłączone do wspólnego konwertera napięć opartego tradycyjne o ukłąd MAX232. Nowym elementem jest także detektor przejścia sieci przez 0 wspólny dla wszystkich kanałów ale przewidziany pod zasilanie 3 fazowe - 3 niezależne detektory. Na płytkach sterownika jest dipswitch dołączający odpowiedni detektor do wejścia zewnętrznego przerwania danego procesora (w zależności od tego do której fazy zostały przyłączone kanały obsługiwane przez dany procesor). Program na procesorach napisany w asemblerze. Był to mój pierwszy poważniejszy kontakt z tym językiem miałem ułatwione zadanie gdyż najpierw cały program napisałem w bascomie ale okazał się za wolny. Przepisałem więc na asembler zajęło mi to około 4 dni po kilka godzin dziennie jak na pierwszy kontakt to chyba nie najgorzej. Stwierdzam po tym zajściu że asembler AVR nie jest ani skomplikowany ani trudny. Wręcz przeciwnie po opanowaniu podstawowych zasad pisze się w nim bardzo przyjemnie a do tego kod jest szybki i zajmuje mało miejsca - zasadnicza część zaledwie 500bajtów. Polecam każdemu i stwierdzam że po tym doświadczeniu będę stopniowo odchodził od bascoma na rzecz ASM. Po raz pierwszy na większą skalę zastosowałem diody led 9zielony kolor na choince i okna). Nie było to przedsięwzięcie tanie w sumie zakupiłem 36 kompletów po 100 led ale mam nadzieję że długofalowo będę miał spokój z naprawą żarówek. Są to ledy niestety made in china zakupione na aukcji internetowej w hurtowej cenie 10zł/szt ale wydaje mi się że te same co sprzedawane po około 30zł za komplet w sklepach - tak samo okablowane i w identycznych opakowaniach. Prąd na łańcuch około 10mA zasilane z prostownika posiadają oporniki więc wydaje mi się że w normie ledy nie powinny padać - zobaczymy po świętach zdaję sobie sprawę z tego że mogą być podłej jakości acz świecą bardzo równo nawet jak się je przygasi do 10% nominalnej jasności. Przy takiej cenie ryzyko wydało się być opłacalne. Aplikacja na PC to ten sam kod co rok temu z dołożonymi funkcjami regulacji fazowej. Próbowałem z kolegą napisać plugin do programu Vixen który ktoś w zeszłym roku podsunął ale niestety nie udało się na czas. Możliwe że plugin taki powstanie niebawem i zostanie przetestowany jeszcze w tym roku a na pełną skalę wykorzystany w przyszłym - możliwa była by wtedy synchronizacja oświetlenia z muzyką.

    Podsumowując:
    -Zainstalowałem ponad 12 000 punktów świetlnych z czego 9600 na choince:D
    -Zbudowałem 128 kanałowy sterownik z regulacją fazową na każdym kanale
    -Uaktualniłem aplikacje na PC aby można było ją wykorzystać z nowym driverem.

    ktoś w zeszłym roku żartował że można by dołożyć trzeci kolor i zrobić choinkę RGB ;) Właśnie to zrealizowałem ;) Dołączam kilka fotek z budowy i działania projektu ;) Nie przewiduję udostępniania źródła w asemblerze ale dla zainteresowanych udostępniam projekt + opis protokołu komunikacji ze sterownikiem. Mogę udostępnić aplikację na PC ale uprzedzam ze jest ona kiepsko zoptymalizowana i brakuje w niej paru podstawowych funkcji - nie jestem dobrym programistą na PC :|

    Płytki płytki płytki ... w sumie 2 arkusze A4 laminatu ;)
    Light show - Lampki choinkowe 2008Light show - Lampki choinkowe 2008
    Rzadko widuje tyle atmeg w jednym miejscu ;)
    Light show - Lampki choinkowe 2008
    Wykonawcze dla nowych kanałów
    Light show - Lampki choinkowe 2008Light show - Lampki choinkowe 2008
    Gotowy sterownik
    Light show - Lampki choinkowe 2008Light show - Lampki choinkowe 2008Light show - Lampki choinkowe 2008Light show - Lampki choinkowe 2008Light show - Lampki choinkowe 2008
    Efekt końcowy ;)
    Light show - Lampki choinkowe 2008Light show - Lampki choinkowe 2008Light show - Lampki choinkowe 2008
    RGB ;)
    Light show - Lampki choinkowe 2008Light show - Lampki choinkowe 2008Light show - Lampki choinkowe 2008
    Filmik niestety kiepska jakość :(




    Pozdrawiam i Wesołych Świąt ;)

    Cool? Ranking DIY
    About Author
    KJ
    Level 31  
    Offline 
    Has specialization in: mikrokontrolery, cewki tesli
    KJ wrote 2358 posts with rating 924, helped 68 times. Live in city Mikołów. Been with us since 2001 year.
  • #2
    Chilihead
    Level 14  
    Niesamowity efekt.
    Mam pytanie czym kolega cynował ten laminat?
  • #3
    Pele44
    Level 12  
    Super sprawa, sam muszę coś takiego na następny rok zrobić.
    Mam parę sugestii:
    Programowanie w asemblerze jest lekko uciążliwe na większe projekty, proponuje pisać całość w C, a w krytycznych miejscach wstawiać wstawki asemblerowe. Polecam środowisko CodeVisionAVR, zamiast standardowego gcc. Ma genialne biblioteki, no i wizard'a, dzięki któremu można zapomnieć o zaglądaniu do dokumentacji układu po to żeby konfigurować każdy bit w rejestrach sterujących z osobna. Wadą jest ograniczenie długości kodu w wersji bezpłatnej, ale programy w tych atmegach nie raczej nie są bardzo długie.
    Fajnie by było jakby to wszystko wrzucić w jakąś zgrabną obudowę.
    No i ostatnia: wykonać to aby było bardziej autonomiczne, tzn. mniej uzależnione od kompa, a tryby czy konfigurację można byłoby przeprowadzać przy pomocy LCD i mikroswitchy.

    Pozdrawiam
  • #4
    Vampir8
    Level 16  
    Jaka predkosc wyciagaja u ciebie uarty?? i jaki format danych wysylasz do procesorów?
  • #5
    KJ
    Level 31  
    Uarty lecą na 115200baud ;) Ramka jest banalna:
    adres (128-255)
    16 bajtów danych(0-127)
    adres
    16 bajtów danych ...

    pele44 - po co przepisywać na C coś co już zostało napisane w asm ? Konfiguracja przy pomocy mikroswitchy - powodzenia animacja z filmiku zajmuje 14 000 kolumn w aplikacji sterującej ;)
  • #6
    Vampir8
    Level 16  
    A jakie taktowanie masz?? Bo ja na 8mhz nie moge wyciagnac nawet 38400, a gdzies ktos mi odpowiedzial ze spokojnie wyciagnie, no chyba ze sekret tkwi w czyms innym

    Efekt twojej konstrukcji jest piorunujacy

    Pozdrawiam
    Vampir8
  • #7
    Pele44
    Level 12  
    KJ wrote:
    po co przepisywać na C coś co już zostało napisane w asm ? Konfiguracja przy pomocy mikroswitchy - powodzenia animacja z filmiku zajmuje 14 000 kolumn w aplikacji sterującej ;)

    Nie chodziło mi o przepisywanie istniejącego programu, ale radę na przyszłe projekty. A przy pomocy microswitchy można by np. tylko przełączać tryb pracy, rodzaj animacji i jej parametry. Konfigurowanie całej animacji od początku faktycznie byłoby bardzo uciążliwe.
  • #8
    KJ
    Level 31  
    Vampir8: taktowanie 16MHz a 115 200 to jest "nieco więcej" niż 38 400 a wyciągałem i 800 000 baud - FTDI. Niestety UART w kompie nie pociągnie więcej niż 115 200.

    Pele44: Nie 140 000 linii kodu w asm tylko kroków animacji na PC. Kod w ASM je tylko odbiera i przetwarza na jasności jest go całe 500 bajtów.

    --------

    Quote:
    Mam pytanie czym kolega cynował ten laminat?

    Powiedzmy że to moja mała tajemnica ;) Studiuję chemię więc dlaczego miałem tego nie wykorzystać ;) Powiem tylko że preparat zawiera chlorek cyny tiomocznik i kwas solny oraz że jest BARDZO zbliżony do fabrycznego seno pod względem składu - kto dociekliwy ten znajdzie. Daje nawet lepsze efekty - powłoka dużo lepiej lutowalna.
  • #9
    Dr.Vee
    VIP Meritorious for electroda.pl
    Co do uniezależnienia od PC - ja bym albo napisał aplikację generującą kod dla sterowników + bootloader dla atmega, albo interpreter/wirtualną maszynę, która by działała na atmegach i interpretowała kod zapisany np. w eepromie.

    Pewnie trzeba by było jakoś synchronizować pracę poszczególnych sterowników, ale tutaj ruch na magistrali danych byłby dużo niższy.

    Pozdrawiam,
    Dr.Vee
  • #10
    BoskiDialer
    Level 34  
    Zacząłem się zastanawiać czy dało by się takie coś zrobić mniejszym kosztem - wyliczyłem, że 128 kanałów o 128 stopniach dało by się zrobić na - jednej m8 oraz 16 rejestrach przesuwanych(z zatrzaskami na wyjściu)!
    Przy 16MHz mamy 16000000 cykli na sekundę.
    50Hz, czyli 100 połówek sinusoidy, 160000 cykli na każdą połówkę.
    128 stopni, czyli 1250 cykli pomiędzy dwoma momentami zmiany.
    Dobrze rozplanowany kod w asemblerze i jest to osiągalne: tablica 128 bajtów, które określają jasność, rejestry przesuwane podłączyć pod spi na największej prędkości, kod wyglądał by tak:
    ... // r24 <- aktualny stopień/faza
    
    ... // przeniesienie wartości na wyjścia - wysterowanie pinu - 2ck
    ldi r22, 16 // 1ck - liczba rejestrów przesuwanych
    ... // przygotowanie wskaźnika X
    ... // zwolnienie przeniesienia wartości na wyjścia - wysterowanie pinu - 2ck
    _petla_seg:
    	// jedna iteracja wylicza 8 wartości i wysyła
    	ld r25, X+  // 2ck
    	cp r25, r24 // 1ck
    	ror r23     // 1ck
    	... // powyższe 3 instrukcje wklejone jeszcze 7 razy (7*4 = 28ck)
    	... // wpisanie r23 do SPDR - 1 lub 2 cykle
    dec r22
    brne _petla_seg
    Pomimo pracy na rejestrach przesuwanych taki kod powinien wykonywać się w około 580 cyklach (46% mocy obliczeniowej, zakładając że spi zdąży wysłać bajt nim zostanie wyliczony następny), nadal był by spory zapas do kontroli fazy, komunikacji etc.. Nawet przy różnych fazach dla poszczególnych grup da się to rozwiązać: dla każdej iteracji pobierać wartość z tablicy (2 cykle).
  • #11
    KJ
    Level 31  
    Właśnie w tym problem - nie zdążysz przesłać tylu bajtów w odpowiednio krótkim czasie. próby na rejestrach robiłem i problem polega na tym że często się zdarzały przekłamania w postaci zgaszenia albo błyśnięcia wszystkiego na max w trakcie przesyłania ramki.
  • #12
    BoskiDialer
    Level 34  
    Sprawdziłem mój kod (co prawda na symulatorze z avrstudio, któremu raczej nie ufam, ale widać, że czasowo kod się mieści), spi jest wtedy na pełnych obrotach i wyrabia. Zdążyć w uC nie problem, widocznie rejestry nie wyrabiały lub pojawiały się zakłócenia. Tutaj rejestry musiały by pracować przy 4MHz.
  • #13
    lucas_mcs
    Level 22  
    Witam
    Ile takie cudo pobiera energii z gniazdka?
  • #14
    KJ
    Level 31  
    Przy zaświeceniu całości na max będzie ze 4kW :) średnio około 500W.
  • #15
    KJ
    Level 31  
    Update 2009

    W tym roku z racji rozlicznych problemów instalacja ruszyła pełną parą dopiero w samą wigilię. Zmian w sterowniku brak. Na choince wymieniłem niebieskie żarówki na diody led. Dodatkowo na oknach pojawiły się 4 kolory zamiast dwóch. Zielone diody z zeszłego roku mają się w miarę dobrze aczkolwiek zauważyłem bardzo poważny problem który może doprowadzić w krótkim czasie do awarii sporej liczby lampek mianowicie wyprowadzenia ledów są wykonane ze zwykłej stali co w połączeniu z nie do końca szczelnymi połączeniami i dostaniem sie nieznacznej nawet ilości wilgoci powoduje korozje wyprowadzeń. Prawdopodobnie nowe diody zakupione w tym roku także są stalowe. Co ciekawe wszystkie inne ledy jakie znalazłem w domu także mają stalowe wyprowadzenia - poza nielicznymi bardzo starymi sztukami. Nie widzę żadnego sensownego sposobu pewnego uszczelnienia tych lampek jest więc wysoce prawdopodobne że projekt nie będzie się dalej rozwijał. Załączam filmik z tego roku.



  • #16
    skaktus
    Level 37  
    Dopiero zobaczyłem update. Ja sobie z tymi diodami też nie radziłem na początku ale teraz już je odpowiednio zabezpieczyłem, jednak wymagało to sporo pracy. Z każdej diody ścinałem rurkę termokurczliwą, potem diody po kolei oklejałem sylikonem i podobnymi np klejami, na szybko nakładałem rurkę termokurczliwą i podgrzewałem, ta ściskając się wypychała sylikon dołem i całość była zabezpieczona przed wilgocią.

    roboty jest bardzo duzo, ale przy 40 diodzie dojdziesz do wprawy.

    Ewentualnie jak znajdziesz w miarę płynny sylikon, bierzesz go do strzykawki + igła, całość wkładasz do rurki termo i wciskasz powoli na nóżki diod. Na ten pomysł wpadłem za późno. Stosowałem zwykłe strzykawki, ale spore i dość grube igły bo przez cienkie wypchanie sylikonu to tragedia.