Sterownik RGBW do latarki (Flagiusz)
: poniedziałek 28 gru 2009, 21:36
Witam,
zainspirowany Quarkiem RGB postanowiłem zbudować larateczkę na diodzie MCE-RGBW i na wykonanym od podstaw sterowniku.
Oczywiście pierwszą myślą było moje ulubione ATTiny13v, ale z uwagi na tylko jeden timer zastanawiam się nad czymś większym (24/28/48).
Po kilku przemyśleniach i paru obliczeniach doszedłem do wniosku, że da się go zrobić na 13-tce i choć może nie w rozdzielczości True-Color, ale nieco niższej powinno dać się się uzyskać w miarę dobre mieszanie barw w różnych proporcjach.
Pomysł 1 jest taki (założenie, że bazujemy jednak na ATtiny13-tce):
- kolor biały - sprzętowy PWM, kanał A
- kolor niebieski (lub zielony z uwagi na czułość oka) - sprzętowy PWM, kanał B
- kolor zielony (lub niebieski) - programowy PWM
- kolor czerwony - programowy PWM
Pomysł 2 jest taki:
- wykorzystujemy 2 definiowane przerwania na liczniku ustawione na progach OCR0A i B
- w procedurze obsługi przerwania od TA i TB wstawiamy programową logikę "zapalania" i "gaszenia" danego kanału RGBW
- dzięki temu możemy z wysoką częstotliwością mieszać dowolne 2 barwy z rozdzielczością bliską 8 bitów - co da nam przy użyciu 2 składowych przestrzeń ok. 16 bitów, czyli całkiem sporo
- z uwagi na sporą rozdzielczość można by w ten sposób delikatnie "poprawiać" tint struktury białej, poprzez korekcję "bieli" jedną ze składowych RGB w odpowiedniej proporcji.
Pomysł 3 - najprostszy, jako odmiana 1-go:
- kolor biały - sprzętowy PWM, kanał A
- kolor R, G i B - programowy PWM
Natomiast sterowanie prądem struktur zrealizowałbym w oparciu o 4x AMC, gdzie każdy z nich byłby osobno sterowany i obsługiwał osobny kanał (RGBW).
Rozwiązanie to wydaje się być bardzo dobre, gdyż z jednej strony dość dobrze ogranicza prąd przypadający na każdą strukturę, a po drugie AMC-kami można bardzo ładnie cyfrowo sterować, tak jakby to były zwykłe MOSFET-y, co pozwala zaoszczędzić cenne miejsce.
Ok, to na razie tyle technicznie...
Spójrzmy zatem na to od drugiej strony.
1. do jakich zastosowań i w jakich kombinacjach RGBW miało by to służyć?
- światło białe - wiadomo
- światło czerwone i zielone - można znaleźć zastosowania
- mieszanie RGB - chyba tylko do nastrojowego podświetlania i "bajerowania"
2. jaka miała by być minimalna satysfakcjonująca rozdzielczość?
- IMHO 4 poziomy jasności na kanał RGB i 256 na W w zupełności powinny wystarczyć
(daje to 2 bity na kanały RGB - w sumie 6 bitów + 8 bitów na W = 14 bitów)
A zatem z samych tylko RGB dałoby się w ten sposób uzyskać różne 64 kolory.
- więcej jak 2-3 bity na kanał RGB będą komplikować sterowanie (nie będzie widać
różnic) oraz niekorzystnie rzutować na ich sterowanie (częstotliwość modulacji).
Tryby:
- pewnie z kilka białych o regulowanej jasności (opcjonalnie z korektą tintu)
- pojedyncze R,G lub B (ciągłe o reg.jasności i jakiś migaczyk)
- RGB mieszane (w proporcjach)
- i można by wymyślić pewnie z milion różnych dyskotek
. . . - policyjne B + R
. . . - płynne przejścia RGB (animacje)
. . . - sygnalizator świetlny (czerwone-żółte-zielone)
. . . - itd.
Sterowanie - a zawłaszcza ustawianie jasności, dla RGB musi być proste - a to oznacza, że nie może być zbyt wielu możliwości (poziomów) ustawień składowych RGB, bo nikt nad tym nie zapanuje - zatem 2 bity na kolor (4 poziomy) wydaje się być dobrym założeniem.
Do ustawiania mieszanego RGB podszedłbym tak, że w jednej sekwencji konfiguracyjnej ustawiałoby się po kolei R (w 4-ech poziomach od 0 do 100%), G (tak samo) i B (również).
Inny wariant to podejście typu HUE - czyli najpierw wybieramy barwę (z kręcącej się "karuzeli"), a następnie jasność już wybranego koloru.
Wersja najprostsza, to sama "karuzela" i założenie, że przestrzeń generująca RGB będzie zawierała co najmniej jedną barwę o jasności 100%.
A może ma ktoś jeszcze inny pomysł jak do tego najlepiej podejść i co jeszcze warto byłoby tu wziąć pod uwagę?
zainspirowany Quarkiem RGB postanowiłem zbudować larateczkę na diodzie MCE-RGBW i na wykonanym od podstaw sterowniku.
Oczywiście pierwszą myślą było moje ulubione ATTiny13v, ale z uwagi na tylko jeden timer zastanawiam się nad czymś większym (24/28/48).
Po kilku przemyśleniach i paru obliczeniach doszedłem do wniosku, że da się go zrobić na 13-tce i choć może nie w rozdzielczości True-Color, ale nieco niższej powinno dać się się uzyskać w miarę dobre mieszanie barw w różnych proporcjach.
Pomysł 1 jest taki (założenie, że bazujemy jednak na ATtiny13-tce):
- kolor biały - sprzętowy PWM, kanał A
- kolor niebieski (lub zielony z uwagi na czułość oka) - sprzętowy PWM, kanał B
- kolor zielony (lub niebieski) - programowy PWM
- kolor czerwony - programowy PWM
Pomysł 2 jest taki:
- wykorzystujemy 2 definiowane przerwania na liczniku ustawione na progach OCR0A i B
- w procedurze obsługi przerwania od TA i TB wstawiamy programową logikę "zapalania" i "gaszenia" danego kanału RGBW
- dzięki temu możemy z wysoką częstotliwością mieszać dowolne 2 barwy z rozdzielczością bliską 8 bitów - co da nam przy użyciu 2 składowych przestrzeń ok. 16 bitów, czyli całkiem sporo
- z uwagi na sporą rozdzielczość można by w ten sposób delikatnie "poprawiać" tint struktury białej, poprzez korekcję "bieli" jedną ze składowych RGB w odpowiedniej proporcji.
Pomysł 3 - najprostszy, jako odmiana 1-go:
- kolor biały - sprzętowy PWM, kanał A
- kolor R, G i B - programowy PWM
Natomiast sterowanie prądem struktur zrealizowałbym w oparciu o 4x AMC, gdzie każdy z nich byłby osobno sterowany i obsługiwał osobny kanał (RGBW).
Rozwiązanie to wydaje się być bardzo dobre, gdyż z jednej strony dość dobrze ogranicza prąd przypadający na każdą strukturę, a po drugie AMC-kami można bardzo ładnie cyfrowo sterować, tak jakby to były zwykłe MOSFET-y, co pozwala zaoszczędzić cenne miejsce.
Ok, to na razie tyle technicznie...
Spójrzmy zatem na to od drugiej strony.
1. do jakich zastosowań i w jakich kombinacjach RGBW miało by to służyć?
- światło białe - wiadomo
- światło czerwone i zielone - można znaleźć zastosowania
- mieszanie RGB - chyba tylko do nastrojowego podświetlania i "bajerowania"
2. jaka miała by być minimalna satysfakcjonująca rozdzielczość?
- IMHO 4 poziomy jasności na kanał RGB i 256 na W w zupełności powinny wystarczyć
(daje to 2 bity na kanały RGB - w sumie 6 bitów + 8 bitów na W = 14 bitów)
A zatem z samych tylko RGB dałoby się w ten sposób uzyskać różne 64 kolory.
- więcej jak 2-3 bity na kanał RGB będą komplikować sterowanie (nie będzie widać
różnic) oraz niekorzystnie rzutować na ich sterowanie (częstotliwość modulacji).
Tryby:
- pewnie z kilka białych o regulowanej jasności (opcjonalnie z korektą tintu)
- pojedyncze R,G lub B (ciągłe o reg.jasności i jakiś migaczyk)
- RGB mieszane (w proporcjach)
- i można by wymyślić pewnie z milion różnych dyskotek
. . . - policyjne B + R
. . . - płynne przejścia RGB (animacje)
. . . - sygnalizator świetlny (czerwone-żółte-zielone)
. . . - itd.
Sterowanie - a zawłaszcza ustawianie jasności, dla RGB musi być proste - a to oznacza, że nie może być zbyt wielu możliwości (poziomów) ustawień składowych RGB, bo nikt nad tym nie zapanuje - zatem 2 bity na kolor (4 poziomy) wydaje się być dobrym założeniem.
Do ustawiania mieszanego RGB podszedłbym tak, że w jednej sekwencji konfiguracyjnej ustawiałoby się po kolei R (w 4-ech poziomach od 0 do 100%), G (tak samo) i B (również).
Inny wariant to podejście typu HUE - czyli najpierw wybieramy barwę (z kręcącej się "karuzeli"), a następnie jasność już wybranego koloru.
Wersja najprostsza, to sama "karuzela" i założenie, że przestrzeń generująca RGB będzie zawierała co najmniej jedną barwę o jasności 100%.
A może ma ktoś jeszcze inny pomysł jak do tego najlepiej podejść i co jeszcze warto byłoby tu wziąć pod uwagę?