Pewna sytuacja, której nie będę tu opisywał zmusiła mnie do zainteresowania się wreszcie już oda dawna znaną metodą tzw. charlieplexing. Nie będę jej tu opisywał szczegółowo, bo w sieci aż kipi od materiałów. Jakież było jednak moje zdziwienie, że na tym forum prawie nic o tym nie ma... postanowiłem to troszkę zmienić Oczywiście liznąłem teorii połączeń i sterowania, ale w programy się nie zagłębiałem - mam taką zasadę, że najpierw sam próbuję, a jak nie idzie to się dopiero wspomagam W skrócie tylko napiszę, że metoda opiera się na wykorzystaniu zmiany biegunów zasilania pary LED, oraz odpowiednim ustawianiem portów procesora aby uzyskać stan wysokiej impedancji na innych pinach (czyli jako "wejście niepodciągnięte") w chwilach kiedy w pozostałych parach diody nie powinny się świecić. Na youtube widziałem wiele filmów z użyciem zarówno samego zwykłego pojedynczego mulipleksowania jak i z PWM co początkowo wydawało mi się to zaawansowaną kosmiczną technologią, ale już po chwili miałem w głowie teorię wg, której powinno wszystko prosto dać się zrealizować. Praktyka okazała się... zgodna z teorią jak nigdy To co wymyśliłem chciałem wam pokazać, a przy okazji zachęcić do stosowania tej niezwykle ciekawej metody sterowania dzięki, której stworzenie czegoś co fajnie miga (lubię jak coś miga ) staje się banalne proste i TANIE jak barszcz! Postanowiłem wykorzystać 4 linie procka co daje możliwość sterowania do 12 diod (bo można, np. z dwóch zrezygnować) i jeden pin zostawić w rezerwie. Poza tym ułatwiło mi to ułożenie tablicy multipleksowania. Zresztą nie oszukujmy się, każda dodatkowa dioda to osłabienie mocy świecenia - czas wyświetlania dzieli się na wszystkie LED czyli w moim przypadku każda dioda świeci przez 1/12 pełnej jednostki czasu, ale to i tak wystarczy aby zrobić fajne efekty. Zaletą będzie za to energooszczędność. W końcu pobór prądu przez 12 LED będzie taki jak jednej... no dobra wiem, że ogólnie ciemniej, ale i tak jest fajnie Schemat, który będzie współpracował z moim programem wygląda tak:
To może teraz filmik z moich zmagań. W pierwszej części to zwykłe zapal/zgaś, a wybór odpowiedniej diody (jednej z 12) zrobiłem na potencjometrze, który często mi pomaga w zadawaniu parametrów testowanych programów, w których docelowo wcale nie musi być zamontowany (swoją drogą polecam tą metodę - szybka i wygodna przy takich układach jak Attiny). W tym przypadku nie bierze udziału "przemiatanie" czyli w danej chwili może świecić tylko jedna LED przez co będzie na nią iść pełna moc. Przykłady zastosowania? - np. wskaźniki napięcia, poziomu sygnału (w końcu jedno wejście ADC jest wolne), zliczanie impulsów (do 12 w tym wypadku siłą rzeczy...) i wiele innych. Jeśli teraz byśmy zaczęli baaardzo szybko kręcić potencjometrem aby kolejno się zapalały diody to dzięki bezwładności oka zobaczymy, że świecą wszystkie (tylko ciemniej). Teraz wystarczy wstawić do programu jakiś warunek i zmienną wg, której np. jedynka to dioda ma się zapalić, a zero ma nic nie robić to już podczas tego przemiatania będzie widać, że mamy władzę nad LED'ową kreską Pójdziemy jednak o krok dalej i zamiast jednej zmiennej użyję tylu zmiennych ile jest diod (właściwie wykorzystam tylko po kilka początkowych bitów z każdej zmiennej) aby zarządzać jasnością każdej diody osobno! Teraz każda dioda ma swój bajt odpowiadający za luminację coś jak pamięć monochromatycznego ekranu 12-pikselowego. Efekt jaki uzyskałem widać w drugiej część filmu. To prosty efekt rotacji tablicy jasności co tworzy przyjemną falę. Potencjometrem można regulować jej prędkość. Tu w zasadzie ogranicza nas już tylko wyobraźnia i pamięć attiny13. Można tworzyć własne tablice startowe i przepisywać je efektownie do tabeli luminacji, lub załatwić sprawę matematycznie wzorami i zależnościami operując bezpośrednio na tablicy luminacji. Każdy sposób jest dobry i wszystko zależy od zastosowania.
Pora na program. Nie ukrywam, że zastanawiałem się czy nie odwlec jego publikacji aby zobaczyć co wy wymyślicie Nie jest on do końca zoptymalizowany (można było choćby timer programowy podrasować, albo wywalić obsługę ADC), ale nie o to mi chodziło. Po prostu jest tak napisany aby można w miarę szybko się połapać o co tu chodzi i jak to działa, albo nawet wykorzystać żywcem jeśli ktoś akurat potrzebuje taki efekt. Mimo wszystko chętnie zobaczę wasze pomysły jeśli skorzystacie z tego mini-poradnika jeśli go tak w ogóle można nazwać
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
PWM obejmuje 12 poziomów od 0-min do 11-max (tak sobie wymyśliłem aby każda dioda mogła inną jasnością zabłysnąć). Zwiększanie zakresu niewiele wnosi oprócz tego, że zaczyna się nieprzyjemne migotanie. W razie pytań odpowiem w miarę możliwości
...ale to i tak wystarczy aby zrobić fajne efekty.
Co prawda, jeszcze kawał czasu, ale może warto już szykować takie pływające sopelki na choinkę. Ja już takie mam - lutowane na pająka i całość upaplana silikonem.
Mi się podoba zawsze to co SylwekK potrafi wyciskać z tych maluszków ATtiny pomimo małej ilości FLASH a tu także mało pinów a TYLE diod LED
no ale charlieplexing - cóż daje takie możliwości - tylko jeszcze trzeba wpaść na fajny pomysł jak to napisać zgrabnie i żeby się zmieściło w maluchu a tu TAK to jest zrobione
Uważam że BARDZO FAJNA INSPIRACJA dla INNYCH taki projekcik - żeby zainteresowali się maluszkami
Jedyne czego się "przyczepię" (nie lubię tego słowa) ale napisałem je w cudzysłowach i z uśmiechem przyjacielskim - to DLACZEGO ŻEŚ PAN tego nie umieścił w dziale DIY projekty sprzętowe - przecież IDEALNIE SIĘ TAM NADAJE pamiętaj na przyszłość - a ja tymczasem przenoszę tam wąteczek
Hehe, dzięki Mirku W sumie nawet nie sądziłem, że się to nadaje na DIY, a właśnie miała to być taka forma inspiracji. Sam przyznasz, że na polskich forach jakoś dziwnie mało projektów z tą metodą "multiplexu". Oczywiście zdarzają się wyjątki, no ale na tym forum to już w ogóle ze świeczką szukać
A odnośnie jeszcze parametrów działającego programu, bo zapomniałem o tym wspomnieć. O ile podstawowa częstotliwość przemiatania nie wymaga większego komentarza i jest to około 833Hz (bo 10kHz/12=833.333) to częstotliwość PWM jest kolejną cykliczną modulacją i teraz wynik 833/11 (0 do 10, a dlaczego to zaraz wyjaśnię) = 75.7Hz. Teraz widać jak ilość diod i zakres PWM są od siebie zależne. Zwiększenie poziomów luminacji do 16 już by spowodowała spadek odświeżania do 52Hz i to już zaczyna być powoli widoczne. Wracając do zakresu 0-10 mimo 12 poziomów (czyli faktycznie 0-11)... Otóż gdybym licznik zawracał przy wartości większej od 11 (tak jak teoretycznie powinno być dla 12-u poziomów), a nie od 10 to wtedy po wpisaniu wartości 11 do tablicy tak naprawdę uciekałby mi jeden poziom jasności co wynika z linii:
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Po prostu 11 nigdy nie będzie większe od... 11-u i led nie zostanie zapalony Oczywiście można by wstawić tam warunek ">=", tylko wtedy z kolei miałbym tlącą się diodkę przy wartości luminacji 0. To tyle tytułem uzupełnienia
Kiedys zrobilem cos podobnego, ale nie jako matryca.. Wpadły mi w rece "smieszne" ledy, w jednej obudowie 2 diody o odwróconej polaryzacji..i sterowalem nimi za pomoca dodatkowego pinu, zamiast masy. Efekt byl ciekawy:)
Użytkownicy przeglądający ten dział: Google [Bot] i 1 gość
Nie możesz rozpoczynać nowych wątków Nie możesz odpowiadać w wątkach Nie możesz edytować swoich postów Nie możesz usuwać swoich postów Nie możesz dodawać załączników