Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 19 kwi 2024, o 02:53


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 13 mar 2017, o 19:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

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:

Obrazek

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 :mrgreen:
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ć 8-)

Składnia: [ Pobierz ] [ Ukryj ]
język c
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 8-)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 mar 2017, o 20:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
SylwekK napisał(a):
...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 8-) - lutowane na pająka i całość upaplana silikonem.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 mar 2017, o 20:41 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

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 ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 mar 2017, o 21:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

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:
Składnia: [ Pobierz ] [ Ukryj ]
język c
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 :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 mar 2017, o 21:31 
Offline
Użytkownik

Dołączył(a): 27 lut 2013
Posty: 230
Pomógł: 4

Super! Fajna metoda ;) muszę kiedyś się nią pobawić ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 mar 2017, o 06:58 
Offline
Użytkownik

Dołączył(a): 05 kwi 2014
Posty: 339
Pomógł: 10

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:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


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

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO