Sterownik Taśmy LED RGB


9.73333
Ocena: None Średnia: 9.7 (15 głosujących)

Sam pomysł sterowania trójkolorowymi diodami LED nie jest nowością i był wykorzystywany wielokrotnie: w dwóch opracowaniach Lampki RGB oraz w projekcie Mirlight'a. Tym razem układ współpracuje z taśmą LED RGB, obecnie bardzo popularnym, a zarazem łatwo dostępnym rozwiązaniem do podświetlania sufitów, schodów, luster oraz półek w łazienkach, kuchniach itp. Układ podzielony jest na dwie części: Sterownik pracujący w oparciu o ATtinny2313 (który całości mieści się w wyłączniku podtynkowym), oraz z układu wykonawczego wraz z zasilaczem znajdującego się w większej (ukrytej) puszcze. Obsługa układu jest zrealizowana na jednym impulsatorze z przyciskiem i umożliwia regulację każdego z kolorów niezależnie. Dostępna jest także funkcja płynnej zmiany barw według jednego ustalonego programu z możliwością regulacji szybkości przejść kolorów.

Działanie:


Schemat ideowy sterownika znajduje się na rysunku poniżej:

Schemat sterownika pokazany jest na rysunku wyżej. Sercem układu jest mikrokontroler U1 (ATtiny2313), który pracuje na wewnętrznym oscylatorze 8MHz (bez dzielnika przez 8). Kondensatory C2 (100uF) i C1 (100nF) stanowią filtr napięcia zasilania. Złącze Prog/out stanowi interfejs programujący a jednocześnie w czasie normalnej pracy jest złączem zasilania i złączem wyjściowym. Wszystkie ustawienia dokonywane są za pomocą impulsatora I1 z wbuwowanym przyciskiem. Kondensatory C3 (100nF) i C4 (100nF) filtrują sygnały na wyjściach impulsatora, poprawiając tym samym jego pracę. Jest to szczególnie ważne gdy impulsator nie jest najwyższej klasy. Dioda D1 (LED RGB) stanowi kontrolkę pracy sterownika, a rezystory R1-R3 (3,3k) ograniczają prąd diod do niewielkiej wartości.

Schemat układu wykonawczego/zasilacza znajduje się poniżej:

W skład układu wykonawczego wchodzi zasilacz niestabilizowany zbudowany na mostku Br1(6A-10A) i kondensatorze C1 (10000uF) oraz mały zasilacz stabilizowany z układem U1 (7805) i kondensatorami C2 (47uF) i C3 (100nF) do zasilania sterownika. Złącze TRAFO umożliwia podłączenie transformatora o napięciu rzędu 11V AC. Przy doborze transformatora należy zadbać aby napięcie zasilające taśmy LED nie przekraczało 12V. Diody D1*-D3* (1N5408) umożliwiają obniżenie napięcia o około 2V gdyby zaszła taka potrzeba. Rezystor R7 (470R/2W) pomaga rozładować kondensator C1 do zera. Złącze 12V umożliwia podłączenie wspólnych anod kawałków taśmy diodowej. Elementami wykonawczymi są tranzystory T1 - T3 (BUZ11) o dużej wydajności prądowej. Rezystory R1-R3 (10k) ustalają potencjał masy na bramkach tranzystorów w chwili braku podłączenia sterowania do złącza S. Rezystory R4-R6 (330R) stanowią zabezpieczenie, ograniczają prąd w chwili przypadkowych zwarć na płytce. Złącza R, G i B umożliwiają podłączenie poszczególnych sekcji wielokolorowej taśmy LED. Podłączenie układu wykonawczego ze sterownikiem dokonane jest za pośrednictwem złącz S oraz PWR.

Budowa:


Sterownik z powodzeniem można zbudować w oparciu o płytkę drukowaną dostępną tutaj. Rysunek w odbiciu lustrzanym dostępny jest tutaj. Montaż sterownika najlepiej rozpocząć od wlutowania wszystkich elementów SMD (razem z procesorem), gdyż łatwo jest to uczynić gdy na drugiej stronie płytki nie ma jeszcze wlutowanych pozostałych elementów. W drugiej kolejności trzeba wlutować diodę D1, impulsator i kondensator C2 (na leżąco). Złącze przeznaczone do komunikacji z układem wykonawczym oraz do programowania dobrze jest zastąpić bezpośrednim wlutowaniem przewodów w płytkę. Taki zabieg jest konieczny jeśli sterownik ma być umieszczony pod klepką wyłącznika dwusekcyjnego, tak jak w projekcie modelowym. Pomocą w konstrukcji może okazać się schemat montażowy dostępny tutaj. Dla montażu elementów od strony druku pomocny będzie także rysunek montażowy dostępny tutaj

Układ wykonawczy można zbudować w oparciu o płytkę drukowaną dostępną tutaj. Rysunek w odbiciu lustrzanym dostępny jest tutaj. Układ wykonawczy jest banalny w montażu, a kolejność elementów jest dowolna. Mostek prostowniczy należy dać z dużym zapasem prądu aby zminimalizować nagrzewanie. Jednocześnie wymaga on zastosowania radiatora w postaci blaszki aluminiowej. Mimo tego, że zasilacz niestabilizowany jest rozwiązaniem najprostszym to zdecydowanie polecam zamiast mostka i dużego kondensatora zastosować zasilacz impulsowy stabilizowany o dużej wydajności prądowej. Tranzystory T1-T3 nie wymagają radiatorów. Pomocą w konstrukcji może okazać się schemat montażowy dostępny tutaj.

Wykaz Elementów:

Sterownik:


1x Enkoder obrotowy, Impulsator z przyciskiem
3x 3,3k
3x 100nF
1x 100uF Elektrolit
1x Dioda LED
1x Mikrokontroler ATTINY2313

Układ wykonawczy/zasilacz:


2x Złącze Śrubowe ARK2(podwójne)
5x Złącze Śrubowe ARK3(potrójne)
3x 10k
3x 330R
1x 470R/2W
1x 100nF
1x 47uF Elektrolit
1x 10000uF/16V Elektrolit
3x 1N5408
1x Mostek Prostowniczy 6A
3x BUZ11
1x Stabilizator 7805

Programowanie:


Kod Źródłowy został napisany w BASCOM AVR firmy MCS Electronics (http://www.mcselec.com/). Program przedstawiony jest poniżej:

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 8000000                                          'internal RC oscilator
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B00001110 : Portd = &B11111111
 
Config Timer0 = Timer , Prescale = 8
Enable Timer0 : On Timer0 Prztimer0
 
Enable Interrupts
'********** Konfiguracja uC Koniec  ************
'******************  Nazwy *******************
'***********************************************
Rd Alias Portb.7
Gd Alias Portb.6
Bd Alias Portb.5
 
Rdt Alias Portd.3
Gdt Alias Portd.1
Bdt Alias Portd.2
 
I1 Alias Pind.4
I2 Alias Pind.5
Isw Alias Pind.0
 
'*************  Nazwy Koniec  ***************
'******************  Zmienne *******************
'***********************************************
Dim Licznik As Byte
Dim Rgb(3) As Byte
Dim Rgb2(3) As Byte
Dim Pomoc As Byte
Dim Flaga As Bit
Dim Dzielnik As Word
Dim Dzielnik2 As Byte
Dim Szybkosc As Byte
 
Dim N As Byte
 
Dim Arg As Word
Dim Wartosc As Word
Dim Pozycja As Word
 
Dim Rgb_mode As Bit
Dim Cur_color As Byte
 
Dim Sw_l As Byte , Sw_f As Byte
Dim Tryb As Byte , Rezultat As Integer
 
Dim Autosave As Byte , X As Byte
'*************  Zmienne Koniec  ****************
 
'************ Warunki Poczatkowe ***************
'***********************************************
Cur_color = 1
Autosave = 250
 
Readeeprom X , 1
If X <= 10 Then Rgb2(1) = X Else Rgb2(1) = 1
Readeeprom X , 2
If X <= 10 Then Rgb2(2) = X Else Rgb2(2) = 1
Readeeprom X , 3
If X <= 10 Then Rgb2(3) = X Else Rgb2(3) = 1
Readeeprom X , 4
If X <= 100 And X >= 1 Then Szybkosc = X Else Szybkosc = 1
'*******  Warunki Poczatkowe Koniec  ***********
'**************  Petla glowna ******************
'***********************************************
Do
 
 Rezultat = 0
 Select Case Tryb
  Case 0:
   If I1 = 1 And I2 = 1 Then Incr Tryb                      'jezeli dwa rozwarte
  Case 1:
   If I1 = 1 And I2 = 0 Then
    Rezultat = 1
    Incr Tryb
   End If
   If I1 = 0 And I2 = 1 Then
    Rezultat = -1
    Incr Tryb
   End If
  Case 2:
   If I1 = 0 And I2 = 0 Then Incr Tryb
  Case 3:
   If I1 = 1 And I2 = 0 Then
    Rezultat = -1
    Tryb = 0
   End If
   If I1 = 0 And I2 = 1 Then
    Rezultat = 1
    Tryb = 0
   End If
 End Select
 
If Rezultat <> 0 Then
  Autosave = 0
 
  If Rezultat = 1 Then
    If Rgb_mode = 1 Then
      Decr Szybkosc
      If Szybkosc <= 1 Then Szybkosc = 1
    Else
      Incr Rgb2(cur_color)
      If Rgb2(cur_color) >= 10 Then Rgb2(cur_color) = 10
    End If
  Else
    If Rgb_mode = 1 Then
      Incr Szybkosc
      If Szybkosc >= 100 Then Szybkosc = 100
    Else
      Decr Rgb2(cur_color)
      If Rgb2(cur_color) >= 250 Then Rgb2(cur_color) = 0
    End If
  End If
 
End If
 
 If Flaga = 1 Then                                          'co 32ms
   Flaga = 0
 
    'autosave
    If Autosave < 250 Then
      Incr Autosave
      If Autosave = 250 Then
        X = Rgb2(1)
        Writeeeprom X , 1
        X = Rgb2(2)
        Writeeeprom X , 2
        X = Rgb2(3)
        Writeeeprom X , 3
        X = Szybkosc
        Writeeeprom X , 4
 
      End If
    End If
 
   'animacja
   If Rgb_mode = 1 Then
     Incr Dzielnik2
     If Dzielnik2 >= Szybkosc Then
       Dzielnik2 = 0
 
       Rdt = 0
       Gdt = 0
       Toggle Bdt
 
       Incr Pozycja
       If Pozycja = 900 Then Pozycja = 0
       Gosub Pozycja_do_rgb
     End If
   Else
     For N = 1 To 3
       Rgb(n) = Rgb2(n) * Rgb2(n)
     Next N
     Select Case Cur_color
       Case 1 :
         Rdt = 1
         Gdt = 0
         Bdt = 0
       Case 2 :
         Rdt = 0
         Gdt = 1
         Bdt = 0
       Case 3 :
         Rdt = 0
         Gdt = 0
         Bdt = 1
     End Select
   End If
 
   'switch w impulsatorze
   If Isw = 0 Then
     If Sw_l < 100 Then
       Incr Sw_l
       If Sw_l = 4 Then Sw_f = 1
       If Sw_l = 50 Then Sw_f = 2
     End If
   Else
     Sw_l = 0
     If Sw_f = 1 Then
       Sw_f = 0
       Incr Cur_color
       If Cur_color = 4 Then Cur_color = 1
     End If
     If Sw_f = 2 Then
       Sw_f = 0
       Toggle Rgb_mode
     End If
   End If
 
 End If
 
Loop
End
'************ Petla glowna Koniec **************
 
'************ Przerwanie timer 0 ***************
'***********************************************
Prztimer0:
 Timer0 = 128
 Incr Licznik
 If Licznik = 100 Then Licznik = 0
 
 If Licznik >= Rgb(1) Then Reset Rd Else Set Rd
 If Licznik >= Rgb(2) Then Reset Gd Else Set Gd
 If Licznik >= Rgb(3) Then Reset Bd Else Set Bd
 
 Incr Dzielnik
 If Dzielnik = 250 Then
   Dzielnik = 0
   Set Flaga
 End If
 
Return
'******** Przerwanie timer 0 Koniec ************
 
'************   Inne Etykiety    ***************
'***********************************************
Przelicz:                                                   'funkcja \_ _ _ _/^^^
  If Arg > 899 Then Arg = Arg - 900
 
  If Arg > 100 And Arg < 500 Then Wartosc = 0
  If Arg <= 100 Then Wartosc = 100 - Arg
  If Arg >= 500 And Arg <= 600 Then Wartosc = Arg - 500
  If Arg > 600 Then Wartosc = 100
Return
 
Pozycja_do_rgb:
  Arg = Pozycja
  Gosub Przelicz
  Rgb(1) = Wartosc
  Arg = Pozycja + 300
  Gosub Przelicz
  Rgb(2) = Wartosc
  Arg = Pozycja + 600
  Gosub Przelicz
  Rgb(3) = Wartosc
Return

Na samym początku, przed wejściem do pętli głównej, odczytywane są z pamięci EEPROM wartości nasycenia poszczególnych kolorów (tablica Rgb(1...3)) oraz zmienna Szybkość odpowiedzialna za pracę w trybie animacji (dzielnik do zmiany kolorów). W przypadku gdy wartości te nie należą do założonego przedziału przyjmowane są wartości domyślne.

Sterowanie diodami odbywa się na programowym PWM'ie który w całości zrealizowany jest w obsłudze timera0 (procedura Prztimer0). Zmienna Licznik zwiększana jest co przerwanie, cyklicznie od 0 do 99, a następnie porównywana jest z komórkami tablicy Rgb(1..3) odpowiedzialnymi za nasycenie kolorów. W przerwaniu zawarty jest też dzielnik przez 250 ustawiający po przepełnieniu zmienną bitową Flaga.

W pętli głównej bezpośrednio włożona jest obsługa impulsatora oraz akcja która jest wykonywana po przekręceniu pokrętła. Gdy układ pracuje w trybie jednego koloru to pokrętłem zmienia się nasycenie barwy, a w trybie animacji zmieniana jest szybkość zmian kolorów.

Przycisk w impulsatorze obsługiwany jest w pętli głównej ale z częstotliwością zależną od ustawienia zmiennej Flaga (co 250 przerwań). Krótkie naciśnięcie przycisku zmienia aktualnie ustawiany impulsatorem kolor (w rybie jednego koloru) a dłuższe przytrzymanie zmienia tryb działania (animacja czy pojedynczy kolor).

Zmienna Flaga pozwala taktować jednocześnie automatyczny zapis ustawień. Jest on realizowany gdy ustawienia zostaną zmienione i przez kilka sekund nic nie jest zmieniane.

Ustawienia fuseitów mikrokontrolera ATtiny2313:

Zdjęcia Projektu:

ZałącznikWielkość
Sterownik Schemat28.61 KB
Sterownik Płytka6.76 KB
Sterownik Płytka (odbicie lustrzane)6.77 KB
Sterownik Płytka (44 na stronie)150.29 KB
Sterownik Montowanie (strona elementów)5.86 KB
Sterownik Montowanie (strona ścieżek)7.96 KB
Sterownik Opis (strona elementów)55.12 KB
Sterownik Opis (strona ścieżek)41.21 KB
Sterownik Soldermaska (strona ścieżek)82.16 KB
Układ Wykonawczy Schemat21.54 KB
Układ Wykonawczy Płytka25.29 KB
Układ Wykonawczy Płytka (odbicie lustrzane)25.23 KB
Układ Wykonawczy Płytka (9 na stronie)196.48 KB
Układ Wykonawczy Opis (strona elementów)40.79 KB
Układ Wykonawczy Soldermaska (strona ścieżek)28.3 KB
Kod Źródłowy5.39 KB
Program po kompilacji (BIN)1.95 KB
Program po kompilacji (HEX)5.5 KB



Portret użytkownika syljamu

SUPER

Super projekcik, jak będę remontował łazienkę to zaadoptuje sobie takie oświetlenie.

Portret użytkownika pro100whape

No Pogratulować ;] twoje

No Pogratulować ;] twoje projekty są spoko :D Za Wzmacniacz 2x100 na tda + zasilacz symetryczny + przedwzmacniacz i 2 linijki świetlne oraz kilka moich bajerów dostałem Na elektrotechnice 6 ;D oczywiście Reklama twojej strony POLECIAŁA!!! :D Za to ci dziękuje ;p
a co do tego projektu to naprawdę super O czymś takim myślałem i od razu zabieram się za robienie :D

Portret użytkownika gość

Co to za impulsator

Witam
Czy ten impulsator, to coś takiego:
Enkoder

Portret użytkownika esc

zasilanie awaryjne

A nie myślałeś żeby dodać do tego układ zaniku zasilania, jakiś żelowy akumulatorek i jakiś zasilacz buforowy jako ładowarka, wtedy mogło by pracować jeszcze jako zasilanie awaryjne, myślę że w obecnych czasach mogło by się sprawdzić.
Pozdrawiam, projekt jak zwykle świetny.

Portret użytkownika mirley

Re: Taśma RGB

Enkoder to właśnie impulsator....

Nad zasilaniem awaryjnym to nie myślałem.. u mnie nie pamiętam kiedy ostatni raz zanikło napięcie zasilania :)

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika worner

Co to za impulsator

Witam ponownie, tym razem zalogowany

Zdążyłem już załapać, że Enkoder, to impulsator. Ale chodzi mi o co innego. Ponieważ nigdy nie trzymałem czegoś takiego w ręku, a na zdjęciach jakoś nie widać tego elementu "w całej krasie" postanowiłem poszukać tego w sieci. No i znalazłem, pod słowem Enkoder w moim poście jest link do sklepu TME z takim enkoderem. I teraz chodzi mi o potwierdzenie, że to co znalazłem, zostało zastosowane w Twoim projekcie.

-

Cały czas się uczę :)

Portret użytkownika esc

Niestety u mnie zdarza się to

Niestety u mnie zdarza się to dosyć często, jak byś miał chwilkę to pomyśl nad tym.

Portret użytkownika mirley

Re: Taśma RGB

Zasilanie awaryjne można wykonać za pomocą diod prostowniczych. Zasilanie po wyjściu z mostka i kondensatora filtrującego powinno przechodzic przez diodę prostowniczą, do katody tej diody nalezy dołączyć drugą z tym że jej anode podłączyć do akumulatora.... Jesli będzie zachowany warunek że napięcie z akumulatora będzie niższe niż z zasilacza podczas normalnej pracy to będzie to działało jako zasilacz bezprzerwowy i przy braku zasilania będzie całość zasilana z AKU

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika xtreme69

Witam Czy dało by się to

Witam
Czy dało by się to przerobić aby zamiast enkodera dać switche, gdyż chciał bym do tego układu dołączyć odbiornik RC5

Portret użytkownika mirley

Re: taśma LED

Dało by się zrobić, jednak taki program ze switchami masz w lampce rgb2..... tam znowu wszyscy chcieli impulsator. Najprościej jest dodać obsługę przycisków w miejscu gdzie obsługiwana jest flaga.... i ustawiać za pomocą przycisków zmienną rezultat tak samo jak robi to obsługa impulsatora... pozostały program będzie wtedy niezmieniony

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika wiesiek

Ustawienie fusebyte


Witam;
Mam taką prośbę czy można by rzucić skrina z fusebyt w programatorze BascomAVR. Bo tych jakoś nie mogę rozpracować. Jeśli to nie sprawi kłopotu. Z góry dzięki.
Lampka RGB działa i jest super.

Portret użytkownika mirley

Re: fusebity

ustawienia są dokładnie takie jak fabryczne, trzeba tylko wyłączyć bit CKDIV. Czyli "Divide clock by 8" ma być na "disabled"

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika drowning_man

odp

Czy 5m takiej taśmy led rgb wystarczy do oświetlenia pokoju o powierzchni około 16m^2? Tak, żeby można było normalnie funkcjonować.

Portret użytkownika mirley

Re: Taśma led

Do oświetlanie jako jedyne źródło światła to bym tego nie stosował.... trzeba sprawdzić. Ja to mam w łazience i wcale super jasno nie jest. Do pracy na komputerze sie nadaje ale jak chcesz coś innego zrobić to klasyczna lampa na pewno też będzie potrzebna

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika worner

Dzisiaj doszła do mnie taśma

Dzisiaj doszła do mnie taśma RGB LED. Całe 5 metrów. Obawiam się, że pomieszczenia o takiej powierzchni nie da się oświetlić w taki sposób, aby móc bez uszczerbku na zdrowiu funkcjonować na co dzień. Incydentalnie, na jakąś imprezkę, może i tak, ale światłą za mało. poza tym, lepiej do oświetlania użyć białych taśm LED, a nie RGB. Są tańsze.

-

Cały czas się uczę :)

Portret użytkownika gość

sterownik

witam co muszę zrobić aby działało to na atmega8 ponieważ taką mam pod ręką

Portret użytkownika mirley

Re: Program

W najprostszym przypadku zmieniasz typ procka na początku programu, kompilujesz i wgrywasz do m8. Ustawienia fusebitów mają byc na wewnętrzny oscylator 8MHZ. Piny wyjściowe i wejściowe nie ulegną zmianie, te same nazwy używasz

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika gość

atmega8

przy kompilacji wyskakuje za brak jakiejś biblioteki error 206 czy mógłby mi ktoś podesłać skompilowany program do atmega8 na meila

Portret użytkownika gość

impulsator

witam mam cos takiego i nie działa http://allegro.pl/impulsator-enkoder-obrotowy-os-scieta-i1511015236.html czy jest to rzeczywiście impulsator czy taki przełącznik obrotowy bo tak jest na zdjęciu namalowane

Portret użytkownika mirley

Re: Impulsator

Jet to impulsator... powinien działać w tym układzie. Upewnij się że fusebity masz dobrze ustawione

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika gość

impulsator

w jaki sposób zmieniać nasycenie ponieważ przy kręceniu albo nic się nie dzieje a gdy przytrzymam przycisk to zaczyna mrugać to dopiero wtedy można zmienić szybkość proszę o jakąkolwiek pomoc

Portret użytkownika mirley

Re: Nasycenie

Nasycenie można zmieniać tylko przy pracy bez animacji. Dioda sterująca świeci ciągle na kolor którego nasycenie w danej chwili ustawiasz. Krótkie naciśnięcie przycisku w impulsatorze przechodzi do następnego koloru i wtedy jego tez możesz ustawić. W trybie animacji nie da sie kolorami kręcić, same się zmieniają a jedynie szybkość się reguluje

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika gość

rgb

witam co trzeba dopisać do programu, aby można było zmieniać jasność nastawianego koloru, ponieważ wykonałem układ i chciałbym mieć możlowość sterowania jasnością. Proszę o pomoc:)

Portret użytkownika mirley

Re: LED

Na pewno będzie trzeba zmieniać natężenia wszystkich barw w zależności od poziomu jasności. najprościej jest modyfikowac każdą za składowych mnożąc przez jakąś wartość 0-1, która będzie ustawiana

Sprawdź czy to wogóle ma szansę działać modyfikując fragment:

     For N = 1 To 3
       Rgb(n) = Rgb2(n) * Rgb2(n)
     Next N

do postaci

     For N = 1 To 3
       Rgb(n) = Rgb2(n) * Rgb2(n)
       Rgb(n) = Rgb(n) * 0.8
     Next N

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika gość

rgb

ok w piątek to sprawdzę i dam znać czy działa

Portret użytkownika gość

wyłącznik

Witam ciężko będzie dodać funkcję, która po przytrzymaniu impulsatora powiedzmy przez 5 sekund wyłączy cały układ?? wyeliminowałoby to dodawanie dodatkowego włącznika jeżeli da rade zrobić coś takiego to prosiłbym o wskazówki jak to zrobić.

Portret użytkownika mirley

Re: taśma LED

Ale to jest trochę bez sensu bo nie wyłączysz trafa w taki sposób, przynajmniej nie w prosty sposób, tylko diody zgasną. Poza tym przytrzymanie impulsatora już działa jako zmiana trybu pracy

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika rgb

rgb

Witam mam pytanie czy da rade przerobić program tak aby sterownik automatycznie mieszał kolory?? tzn teraz można zmieniać nasycenie każdego z 3 kolorów a ja chiałbym zrobić tak że kręcąc impulsatorem kolory będą mieszać się samemu. Proszę o pomoc ponieważ zbudowałem ten sterownik ale chciałbym żeby właśnie tak działał jak opisałem

Portret użytkownika mirley

Re: Taśma led

Chodzi o to żeby po kręceniu kolory zmieniały się tak jakby zmieniały się automatycznie. Chodzi mi o to czy w taki sam sposób?

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika rgb

Re: RGB

Tak dokładnie o to mi chodzi.

Portret użytkownika rgb

re:re: rgb

Aha i chciałbym w ogóle zrezygnować z ustawiana jasności tych 3 barw chciałbym, aby zostało tylko mieszanie tych barw impulsatorem czy jest to ciężkie do zrealizowania?? i czy mógłbym liczyć na pomoc??

Portret użytkownika mirley

Re: Diody rgb

obsługa zdarzeń impulsatora niech wygląda tak:

If Rezultat <> 0 Then
  Autosave = 0
 
  If Rezultat = 1 Then
    If Rgb_mode = 1 Then
      Decr Szybkosc
      If Szybkosc <= 1 Then Szybkosc = 1
    Else
      incr pozycja
      if pozycja >= 900 then pozycja = 0 
    End If
  Else
    If Rgb_mode = 1 Then
      Incr Szybkosc
      If Szybkosc >= 100 Then Szybkosc = 100
    Else
      decr pozycja 
      if pozycja > 1000 then pozycja = 899
    End If
  End If

natomiast sterowanie animacjami

  'animacja
   If Rgb_mode = 1 Then
     Incr Dzielnik2
     If Dzielnik2 >= Szybkosc Then
       Dzielnik2 = 0
 
       Rdt = 0
       Gdt = 0
       Toggle Bdt
 
       Incr Pozycja
       If Pozycja = 900 Then Pozycja = 0
       Gosub Pozycja_do_rgb
     End If
   Else
       Rdt = 0
       Gdt = 0
       Bdt = 1
 
       Gosub Pozycja_do_rgb
   End If

Spróbuj co z tego będzie

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika rgb

rgb

czyli program powinien wyglądać tak?? ponieważ nie chce mi sie skompilować

                             '************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 8000000                                          'internal RC oscilator
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B00001110 : Portd = &B11111111
 
Config Timer0 = Timer , Prescale = 8
Enable Timer0 : On Timer0 Prztimer0
 
Enable Interrupts
'********** Konfiguracja uC Koniec  ************
'******************  Nazwy *******************
'***********************************************
Rd Alias Portb.7
Gd Alias Portb.6
Bd Alias Portb.5
 
Rdt Alias Portd.3
Gdt Alias Portd.1
Bdt Alias Portd.2
 
I1 Alias Pind.4
I2 Alias Pind.5
Isw Alias Pind.0
 
'*************  Nazwy Koniec  ***************
'******************  Zmienne *******************
'***********************************************
Dim Licznik As Byte
Dim Rgb(3) As Byte
Dim Rgb2(3) As Byte
Dim Pomoc As Byte
Dim Flaga As Bit
Dim Dzielnik As Word
Dim Dzielnik2 As Byte
Dim Szybkosc As Byte
 
Dim N As Byte
 
Dim Arg As Word
Dim Wartosc As Word
Dim Pozycja As Word
 
Dim Rgb_mode As Bit
Dim Cur_color As Byte
 
Dim Sw_l As Byte , Sw_f As Byte
Dim Tryb As Byte , Rezultat As Integer
 
Dim Autosave As Byte , X As Byte
'*************  Zmienne Koniec  ****************
 
'************ Warunki Poczatkowe ***************
'***********************************************
Cur_color = 1
Autosave = 250
 
Readeeprom X , 1
If X <= 10 Then Rgb2(1) = X Else Rgb2(1) = 1
Readeeprom X , 2
If X <= 10 Then Rgb2(2) = X Else Rgb2(2) = 1
Readeeprom X , 3
If X <= 10 Then Rgb2(3) = X Else Rgb2(3) = 1
Readeeprom X , 4
If X <= 100 And X >= 1 Then Szybkosc = X Else Szybkosc = 1
'*******  Warunki Poczatkowe Koniec  ***********
'**************  Petla glowna ******************
'***********************************************
Do
 
 Rezultat = 0
 Select Case Tryb
  Case 0:
   If I1 = 1 And I2 = 1 Then Incr Tryb                      'jezeli dwa rozwarte
  Case 1:
   If I1 = 1 And I2 = 0 Then
    Rezultat = 1
    Incr Tryb
   End If
   If I1 = 0 And I2 = 1 Then
    Rezultat = -1
    Incr Tryb
   End If
  Case 2:
   If I1 = 0 And I2 = 0 Then Incr Tryb
  Case 3:
   If I1 = 1 And I2 = 0 Then
    Rezultat = -1
    Tryb = 0
   End If
   If I1 = 0 And I2 = 1 Then
    Rezultat = 1
    Tryb = 0
   End If
 End Select
 
If Rezultat <> 0 Then
  Autosave = 0
 
   If Rezultat = 1 Then
    If Rgb_mode = 1 Then
      Decr Szybkosc
      If Szybkosc <= 1 Then Szybkosc = 1
    Else
      incr pozycja
      if pozycja >= 900 then pozycja = 0
    End If
  Else
    If Rgb_mode = 1 Then
      Incr Szybkosc
      If Szybkosc >= 100 Then Szybkosc = 100
    Else
      decr pozycja
      if pozycja > 1000 then pozycja = 899
    End If
  End If
 
End If
 
 If Flaga = 1 Then                                          'co 32ms
   Flaga = 0
 
    'autosave
    If Autosave < 250 Then
      Incr Autosave
      If Autosave = 250 Then
        X = Rgb2(1)
        Writeeeprom X , 1
        X = Rgb2(2)
        Writeeeprom X , 2
        X = Rgb2(3)
        Writeeeprom X , 3
        X = Szybkosc
        Writeeeprom X , 4
 
      End If
 
 
   'switch w impulsatorze
   If Isw = 0 Then
     If Sw_l < 100 Then
       Incr Sw_l
       If Sw_l = 4 Then Sw_f = 1
       If Sw_l = 50 Then Sw_f = 2
     End If
   Else
     Sw_l = 0
     If Sw_f = 1 Then
       Sw_f = 0
       Incr Cur_color
       If Cur_color = 4 Then Cur_color = 1
     End If
     If Sw_f = 2 Then
       Sw_f = 0
       Toggle Rgb_mode
 
 
     'animacja
   If Rgb_mode = 1 Then
     Incr Dzielnik2
     If Dzielnik2 >= Szybkosc Then
       Dzielnik2 = 0
 
       Rdt = 0
       Gdt = 0
       Toggle Bdt
 
       Incr Pozycja
       If Pozycja = 900 Then Pozycja = 0
       Gosub Pozycja_do_rgb
     End If
   Else
       Rdt = 0
       Gdt = 0
       Bdt = 1
 
       Gosub Pozycja_do_rgb
     End Select
   End If
   End If
 
 End If
 
Loop
End
'************ Petla glowna Koniec **************
 
'************ Przerwanie timer 0 ***************
'***********************************************
Prztimer0:
 Timer0 = 128
 Incr Licznik
 If Licznik = 100 Then Licznik = 0
 
 If Licznik >= Rgb(1) Then Reset Rd Else Set Rd
 If Licznik >= Rgb(2) Then Reset Gd Else Set Gd
 If Licznik >= Rgb(3) Then Reset Bd Else Set Bd
 
 Incr Dzielnik
 If Dzielnik = 250 Then
   Dzielnik = 0
   Set Flaga
 End If
 
Return
'******** Przerwanie timer 0 Koniec ************
 
'************   Inne Etykiety    ***************
'***********************************************
Przelicz:                                                   'funkcja \_ _ _ _/^^^
  If Arg > 899 Then Arg = Arg - 900
 
  If Arg > 100 And Arg < 500 Then Wartosc = 0
  If Arg <= 100 Then Wartosc = 100 - Arg
  If Arg >= 500 And Arg <= 600 Then Wartosc = Arg - 500
  If Arg > 600 Then Wartosc = 100
Return
 
Pozycja_do_rgb:
  Arg = Pozycja
  Gosub Przelicz
  Rgb(1) = Wartosc
  Arg = Pozycja + 300
  Gosub Przelicz
  Rgb(2) = Wartosc
  Arg = Pozycja + 600
  Gosub Przelicz
  Rgb(3) = Wartosc
Return

Portret użytkownika mirley

Re: LED

Wklej jeszcze raz te fragmenty... zmodyfikowałem post wyżej. tym razem uważaj żebyś dobrze wkleił. W oryginalnym programie musisz podmienić procedurę od animacji na ta nową co napisałem i obsługę impulsatora. Obie w programie oryginalnym są wydzielone i nie trudno je znaleźć w kodzie

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika rgb

rgb

skompilowało się, dzisiaj będę testował :)

----------

program działa tak jak chciałem wielkie dzięki za pomoc:) brakuje mi tylko koloru białego

Portret użytkownika mirley

Re: Mirlight

Zależy to od diod jakie masz.....grizz miał dopisać w programie możliwość kalibracji kolorów, np osłabić zielony, wzmocnić czerwony itd. Wyswietl na ekranie białe tło, np paint na pełnym ekranie. Ustaw pola odczytowe na środku,m tak aby napewno wszystkie były 100% na białym tle. I sprawdź jak zachowuje się kolor widoczny na ścianie. Umie w pierwszej wersji był trochę rózowy zamiast białego. Możesz pokombinowac z rezystorami przy diodach, jak jest za dużo czerwonego to trochę dać większy rezystor i zobaczyć jak działa.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika jod

rgb

Witam
Czy można by poszerzyć ten projekt o niezależne sterowanie pociętą na kawałki taśmą LED?
Każdy kawałek świecił by innym kolorem.

Portret użytkownika mirley

Re: diody

A ile tych niezależnych wyjść potrzebujesz? można by wywalić animację tak jak pisaliśmy kilka wątków wyżej i na przyciski zrobić zmiana kanałów do sterowania, rezygnując z ustawiania osobno rgb dla każdego kanału

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika marekszy

przyciski

Witam,czy możesz napisać gdzie i jak dołożyć przyciski zamiast impulsatora,wiem ,że lampka ma ,ale nie ma zapisu i startuje z animacji,ja potrzebuję natomiast aby po załączeniu zasilania startowało z tego na czym zostało wyłączone.
Pozdrawiam

Portret użytkownika mirley

Re: taśma LED

Trzeba wywalić z pętli głównej obsługę impulsatora czyli zostanie tam tylko if od flagi. Wewnątrz tego ifa trzeba dopisać skok do procedury obsługi klawiatury, podobny do tego w lampce RGB. Tutaj wystarczą 3 przyciski

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika marekszy

przyciski

rozumiem,że wywalamy to i deklarujemy przyciski

'******************  Nazwy *******************
'***********************************************
Rd Alias Portb.7
Gd Alias Portb.6
Bd Alias Portb.5
 
Rdt Alias Portd.3
Gdt Alias Portd.1
Bdt Alias Portd.2
 
I1 Alias Pind.4
I2 Alias Pind.5
Isw Alias Pind.0

'******************  Nazwy *******************
'***********************************************
Rd Alias Portb.7
Gd Alias Portb.6
Bd Alias Portb.5
 
Rdt Alias Portd.3
Gdt Alias Portd.1
Bdt Alias Portd.2
 
Sw2 Alias Pind.4                                            'przypisanie nazw przycisków
Sw3 Alias Pind.5
Sw1 Alias Pind.0
 
Set Portd.4                                                 'rezystory podciągające dla przyciskó
Set Portd.5
Set Portd.0

oraz wywalamy to

 Rezultat = 0
 Select Case Tryb
  Case 0:
   If I1 = 1 And I2 = 1 Then Incr Tryb                      'jezeli dwa rozwarte
  Case 1:
   If I1 = 1 And I2 = 0 Then
    Rezultat = 1
    Incr Tryb
   End If
   If I1 = 0 And I2 = 1 Then
    Rezultat = -1
    Incr Tryb
   End If
  Case 2:
   If I1 = 0 And I2 = 0 Then Incr Tryb
  Case 3:
   If I1 = 1 And I2 = 0 Then
    Rezultat = -1
    Tryb = 0
   End If
   If I1 = 0 And I2 = 1 Then
    Rezultat = 1
    Tryb = 0
   End If
 End Select

możesz podpowiedzieć co dalej? oraz co z tym
Dim Sw_l As Byte , Sw_f As Byte
Dim Tryb As Byte , Rezultat As Integer

Portret użytkownika mirley

Re: Taśma LED

wywalamy:

Rezultat = 0
 Select Case Tryb
......
 End Select
 
If Rezultat <> 0 Then
  .......
 
End If

dopisujemy w obsłudze flagi zaraz na początku:

If Flaga = 1 Then                                          'co 32ms
   Flaga = 0
 
   gosub przyciski
 
    'autosave
   ....

a na końcu programu obsługę przycisków, tylko dwóch bo trzeci jest już napisany i nie trzeba go zmieniać:

przyciski:
 
if Sw1 = 0 then 
 incr sw_1
 if sw_1 = 4 then
    If Rgb_mode = 1 Then
      Decr Szybkosc
      If Szybkosc <= 1 Then Szybkosc = 1
    Else
      Incr Rgb2(cur_color)
      If Rgb2(cur_color) >= 10 Then Rgb2(cur_color) = 10
    End If
 end if
else
 sw_1 = 0
end if
 
 
if Sw2 = 0 then 
 incr sw_2
 if sw_2 = 4 then
   If Rgb_mode = 1 Then
      Incr Szybkosc
      If Szybkosc >= 100 Then Szybkosc = 100
    Else
      Decr Rgb2(cur_color)
      If Rgb2(cur_color) >= 250 Then Rgb2(cur_color) = 0
    End If
 end if
else
 sw_2 = 0
end if
 
return

aha na samym początku trzeba jeszcze zmienić:

Sw1 Alias Pind.4
Sw2 Alias Pind.5
Isw Alias Pind.0

i do zmiennych dodać

Dim Sw_1 As Byte , Sw_2 As Byte

powinno działać

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika marekszy

Re: Taśma LED

dzięki,jak sprawdzę to się odezwę

Portret użytkownika marekszy

Re: Taśma LED

przerobiłem,czy tak ma to wyglądać

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 8000000                                          'internal RC oscilator
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B00001110 : Portd = &B11111111
 
Config Timer0 = Timer , Prescale = 8
Enable Timer0 : On Timer0 Prztimer0
 
Enable Interrupts
'********** Konfiguracja uC Koniec  ************
 
'******************  Nazwy *******************
'***********************************************
Rd Alias Portb.7
Gd Alias Portb.6
Bd Alias Portb.5
 
Rdt Alias Portd.3
Gdt Alias Portd.1
Bdt Alias Portd.2
 
Sw1 Alias Pind.4
Sw2 Alias Pind.5
Isw Alias Pind.0
 
 
'*************  Nazwy Koniec  ****************
 
'******************  Zmienne *******************
'***********************************************
Dim Licznik As Byte
Dim Rgb(3) As Byte
Dim Rgb2(3) As Byte
Dim Pomoc As Byte
Dim Flaga As Bit
Dim Dzielnik As Word
Dim Dzielnik2 As Byte
Dim Szybkosc As Byte
 
Dim N As Byte
 
Dim Arg As Word
Dim Wartosc As Word
Dim Pozycja As Word
 
Dim Rgb_mode As Bit
Dim Cur_color As Byte
 
Dim Sw_l As Byte , Sw_f As Byte
Dim Tryb As Byte , Rezultat As Integer
Dim Sw_1 As Byte , Sw_2 As Byte
 
Dim Autosave As Byte , X As Byte
'*************  Zmienne Koniec  ****************
 
'************ Warunki Poczatkowe ***************
'***********************************************
Cur_color = 1
Autosave = 250
 
Readeeprom X , 1
If X <= 10 Then Rgb2(1) = X Else Rgb2(1) = 1
Readeeprom X , 2
If X <= 10 Then Rgb2(2) = X Else Rgb2(2) = 1
Readeeprom X , 3
If X <= 10 Then Rgb2(3) = X Else Rgb2(3) = 1
Readeeprom X , 4
If X <= 100 And X >= 1 Then Szybkosc = X Else Szybkosc = 1
 
 
 
'*******  Warunki Poczatkowe Koniec  ***********
 
'**************  Petla glowna ******************
'***********************************************
Do
 
 
 
 If Flaga = 1 Then                                          'co 32ms
   Flaga = 0
   Gosub Przyciski
 
    'autosave
    If Autosave < 250 Then
      Incr Autosave
      If Autosave = 250 Then
        X = Rgb2(1)
        Writeeeprom X , 1
        X = Rgb2(2)
        Writeeeprom X , 2
        X = Rgb2(3)
        Writeeeprom X , 3
        X = Szybkosc
        Writeeeprom X , 4
 
      End If
    End If
 
 
   'animacja
   If Rgb_mode = 1 Then
     Incr Dzielnik2
     If Dzielnik2 >= Szybkosc Then
       Dzielnik2 = 0
 
       Rdt = 0
       Gdt = 0
       Toggle Bdt
 
       Incr Pozycja
       If Pozycja = 900 Then Pozycja = 0
       Gosub Pozycja_do_rgb
     End If
   Else
     For N = 1 To 3
       Rgb(n) = Rgb2(n) * Rgb2(n)
     Next N
     Select Case Cur_color
       Case 1 :
         Rdt = 1
         Gdt = 0
         Bdt = 0
       Case 2 :
         Rdt = 0
         Gdt = 1
         Bdt = 0
       Case 3 :
         Rdt = 0
         Gdt = 0
         Bdt = 1
     End Select
   End If
 
   'switch w impulsatorze
   If Isw = 0 Then
     If Sw_l < 100 Then
       Incr Sw_l
       If Sw_l = 4 Then Sw_f = 1
       If Sw_l = 50 Then Sw_f = 2
     End If
   Else
     Sw_l = 0
     If Sw_f = 1 Then
       Sw_f = 0
       Incr Cur_color
       If Cur_color = 4 Then Cur_color = 1
     End If
     If Sw_f = 2 Then
       Sw_f = 0
       Toggle Rgb_mode
     End If
   End If
 
 
 
 End If
 
Loop
End
'************ Petla glowna Koniec **************
 
'************ Przerwanie timer 0 ***************
'***********************************************
Prztimer0:
 Timer0 = 128
 Incr Licznik
 If Licznik = 100 Then Licznik = 0
 
 If Licznik >= Rgb(1) Then Reset Rd Else Set Rd
 If Licznik >= Rgb(2) Then Reset Gd Else Set Gd
 If Licznik >= Rgb(3) Then Reset Bd Else Set Bd
 
 Incr Dzielnik
 If Dzielnik = 250 Then
   Dzielnik = 0
   Set Flaga
 End If
 
Return
'******** Przerwanie timer 0 Koniec ************
 
'************   Inne Etykiety    ***************
'***********************************************
Przelicz:                                                   'funkcja \_ _ _ _/^^^
  If Arg > 899 Then Arg = Arg - 900
 
  If Arg > 100 And Arg < 500 Then Wartosc = 0
  If Arg <= 100 Then Wartosc = 100 - Arg
  If Arg >= 500 And Arg <= 600 Then Wartosc = Arg - 500
  If Arg > 600 Then Wartosc = 100
Return
 
 
Pozycja_do_rgb:
  Arg = Pozycja
  Gosub Przelicz
  Rgb(1) = Wartosc
  Arg = Pozycja + 300
  Gosub Przelicz
  Rgb(2) = Wartosc
  Arg = Pozycja + 600
  Gosub Przelicz
  Rgb(3) = Wartosc
  '*********przyciski**********
  If Sw1 = 0 Then
  Incr Sw_1
  If Sw_1 = 4 Then
  If Rgb_mode = 1 Then
  Decr Szybkosc
  If Szybkosc <= 1 Then Szybkosc = 1
  Else
  Incr Rgb2(cur_color)
  If Rgb2(cur_color) >= 10 Then Rgb2(cur_color) = 10
  End If
  End If
  Else
  Sw_1 = 0
  End If
 
  If Sw2 = 0 Then
  Incr Sw_2
  If Sw_2 = 4 Then
  If Rgb_mode = 1 Then
  Incr Szybkosc
  If Szybkosc >= 100 Then Szybkosc = 100
  Else
  Decr Rgb2(cur_color)
  If Rgb2(cur_color) >= 250 Then Rgb2(cur_color) = 0
  End If
  End If
  Else
  Sw_2 = 0
  End If
  Return

jednak przy kompilacji wyskakuje błąd
ERROR 61 Label not found dla ostatniej lini (podświetla Return), również w Twojej orginalnej wersji.
Możesz wyjaśnić czemu powtarza się także wcześniej SW_1

Dim Sw_l As Byte , Sw_f As Byte

 'switch w impulsatorze
   If Isw = 0 Then
     If Sw_l < 100 Then
       Incr Sw_l
       If Sw_l = 4 Then Sw_f = 1
       If Sw_l = 50 Then Sw_f = 2
     End If
   Else
     Sw_l = 0

Portret użytkownika mirley

Re: program

Brakuje etykiety do przycisków.... miałeś wkleić na koniec programu to co Ci napisałem, to dlaczego wkleiłeś to do procedury pozycja_do_rgb?

Co do zmiennych nic się nie powtarza... jedna zmienna jest Sw_l a druga Sw_1 (jedna ma literkę a druga cyfrę na końcu, zbieg okoliczności)

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika marekszy

Re: Taśma LED

witam,pozmieniałem i przyciski działają,jednak nie mam zapisu ustawień,o co chodzi z tą etykietą do przycisków?

 '************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 8000000                                          'internal RC oscilator
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B00001110 : Portd = &B11111111
 
Config Timer0 = Timer , Prescale = 8
Enable Timer0 : On Timer0 Prztimer0
 
Enable Interrupts
'********** Konfiguracja uC Koniec  ************
 
'******************  Nazwy *******************
'***********************************************
Rd Alias Portb.7
Gd Alias Portb.6
Bd Alias Portb.5
 
Rdt Alias Portd.3
Gdt Alias Portd.1
Bdt Alias Portd.2
 
Sw1 Alias Pind.4
Sw2 Alias Pind.5
Isw Alias Pind.0
 
 
'*************  Nazwy Koniec  ****************
 
'******************  Zmienne *******************
'***********************************************
Dim Licznik As Byte
Dim Rgb(3) As Byte
Dim Rgb2(3) As Byte
Dim Pomoc As Byte
Dim Flaga As Bit
Dim Dzielnik As Word
Dim Dzielnik2 As Byte
Dim Szybkosc As Byte
 
Dim N As Byte
 
Dim Arg As Word
Dim Wartosc As Word
Dim Pozycja As Word
 
Dim Rgb_mode As Bit
Dim Cur_color As Byte
 
Dim Sw_l As Byte , Sw_f As Byte
Dim Tryb As Byte , Rezultat As Integer
Dim Sw_1 As Byte , Sw_2 As Byte
 
Dim Autosave As Byte , X As Byte
'*************  Zmienne Koniec  ****************
 
'************ Warunki Poczatkowe ***************
'***********************************************
Cur_color = 1
Autosave = 250
 
Readeeprom X , 1
If X <= 10 Then Rgb2(1) = X Else Rgb2(1) = 1
Readeeprom X , 2
If X <= 10 Then Rgb2(2) = X Else Rgb2(2) = 1
Readeeprom X , 3
If X <= 10 Then Rgb2(3) = X Else Rgb2(3) = 1
Readeeprom X , 4
If X <= 100 And X >= 1 Then Szybkosc = X Else Szybkosc = 1
 
 
 
'*******  Warunki Poczatkowe Koniec  ***********
 
'**************  Petla glowna ******************
'***********************************************
Do
 
 
 
 If Flaga = 1 Then                                          'co 32ms
   Flaga = 0
   Gosub Przyciski
 
    'autosave
    If Autosave < 250 Then
      Incr Autosave
      If Autosave = 250 Then
        X = Rgb2(1)
        Writeeeprom X , 1
        X = Rgb2(2)
        Writeeeprom X , 2
        X = Rgb2(3)
        Writeeeprom X , 3
        X = Szybkosc
        Writeeeprom X , 4
 
      End If
    End If
 
 
   'animacja
   If Rgb_mode = 1 Then
     Incr Dzielnik2
     If Dzielnik2 >= Szybkosc Then
       Dzielnik2 = 0
 
       Rdt = 0
       Gdt = 0
       Toggle Bdt
 
       Incr Pozycja
       If Pozycja = 900 Then Pozycja = 0
       Gosub Pozycja_do_rgb
     End If
   Else
     For N = 1 To 3
       Rgb(n) = Rgb2(n) * Rgb2(n)
     Next N
     Select Case Cur_color
       Case 1 :
         Rdt = 1
         Gdt = 0
         Bdt = 0
       Case 2 :
         Rdt = 0
         Gdt = 1
         Bdt = 0
       Case 3 :
         Rdt = 0
         Gdt = 0
         Bdt = 1
     End Select
   End If
 
   'switch w impulsatorze
   If Isw = 0 Then
     If Sw_l < 100 Then
       Incr Sw_l
       If Sw_l = 4 Then Sw_f = 1
       If Sw_l = 50 Then Sw_f = 2
     End If
   Else
     Sw_l = 0
     If Sw_f = 1 Then
       Sw_f = 0
       Incr Cur_color
       If Cur_color = 4 Then Cur_color = 1
     End If
     If Sw_f = 2 Then
       Sw_f = 0
       Toggle Rgb_mode
     End If
   End If
 
 
 
 End If
 
Loop
End
 '*********przyciski**********
 Przyciski:
  If Sw1 = 0 Then
  Incr Sw_1
  If Sw_1 = 4 Then
  If Rgb_mode = 1 Then
  Decr Szybkosc
  If Szybkosc <= 1 Then Szybkosc = 1
  Else
  Incr Rgb2(cur_color)
  If Rgb2(cur_color) >= 10 Then Rgb2(cur_color) = 10
  End If
  End If
  Else
  Sw_1 = 0
  End If
 
  If Sw2 = 0 Then
  Incr Sw_2
  If Sw_2 = 4 Then
  If Rgb_mode = 1 Then
  Incr Szybkosc
  If Szybkosc >= 100 Then Szybkosc = 100
  Else
  Decr Rgb2(cur_color)
  If Rgb2(cur_color) >= 250 Then Rgb2(cur_color) = 0
  End If
  End If
  Else
  Sw_2 = 0
  End If
  Return
'************ Petla glowna Koniec **************
 
'************ Przerwanie timer 0 ***************
'***********************************************
Prztimer0:
 Timer0 = 128
 Incr Licznik
 If Licznik = 100 Then Licznik = 0
 
 If Licznik >= Rgb(1) Then Reset Rd Else Set Rd
 If Licznik >= Rgb(2) Then Reset Gd Else Set Gd
 If Licznik >= Rgb(3) Then Reset Bd Else Set Bd
 
 Incr Dzielnik
 If Dzielnik = 250 Then
   Dzielnik = 0
   Set Flaga
 End If
 
Return
'******** Przerwanie timer 0 Koniec ************
 
'************   Inne Etykiety    ***************
'***********************************************
Przelicz:                                                   'funkcja \_ _ _ _/^^^
  If Arg > 899 Then Arg = Arg - 900
 
  If Arg > 100 And Arg < 500 Then Wartosc = 0
  If Arg <= 100 Then Wartosc = 100 - Arg
  If Arg >= 500 And Arg <= 600 Then Wartosc = Arg - 500
  If Arg > 600 Then Wartosc = 100
Return
 
 
Pozycja_do_rgb:
  Arg = Pozycja
  Gosub Przelicz
  Rgb(1) = Wartosc
  Arg = Pozycja + 300
  Gosub Przelicz
  Rgb(2) = Wartosc
  Arg = Pozycja + 600
  Gosub Przelicz
  Rgb(3) = Wartosc
 
  Return

czy jest możliwy wybór,aby po załączeniu zasilania startowało z ustawionego koloru(tak jak teraz) lub z animacji?

Portret użytkownika mirley

Re: RGB

Żeby startowało od animacji to przed pętlą główna na początku trzeba dodać Rgb_mode = 1

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika marekszy

Re: Taśma LED

dzięki za to,ale co jest jeszcze nie tak z zapisem do pamięci, nie pamięta ustawień.

Portret użytkownika mirley

Taśma LED

Brakuje Ci resetowania zmiennej autosave jak nastąpi kliknięcie... poza tym naucz się robić wcięcia w kodzie żeby wiadomo było gdzie wstawic polecenie:

tak jest źle:

If Sw1 = 0 Then
  Incr Sw_1
  If Sw_1 = 4 Then
  If Rgb_mode = 1 Then
  Decr Szybkosc
  If Szybkosc <= 1 Then Szybkosc = 1
  Else
  Incr Rgb2(cur_color)
  If Rgb2(cur_color) >= 10 Then Rgb2(cur_color) = 10
  End If
  End If
  Else
  Sw_1 = 0
  End If

ma być tak:

If Sw1 = 0 Then
  Incr Sw_1
  If Sw_1 = 4 Then
    If Rgb_mode = 1 Then
      Decr Szybkosc
      If Szybkosc <= 1 Then Szybkosc = 1
    Else
      Incr Rgb2(cur_color)
      If Rgb2(cur_color) >= 10 Then Rgb2(cur_color) = 10
    End If
    autosave = 0          ''dopisać
  End If
Else
  Sw_1 = 0
End If

dopisz tak samo autosave=0 w drugim przycisku

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika marekszy

Taśma LED RGB

Sprawdziłem ,wszystko działa super,wrzucam całość programu na przyciskach,może ktoś będzie chciał.Krótkie naciśnięcie Isw powoduje zmianę koloru R/G/B do regulacji,dłuższe - przejście do animacji/ustawionego koloru.Mirley dzięki za cierpliwość.

'***********************************************
$regfile = "attiny2313.dat"
$crystal = 8000000                                          'internal RC oscilator
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B00001110 : Portd = &B11111111
 
Config Timer0 = Timer , Prescale = 8
Enable Timer0 : On Timer0 Prztimer0
 
Enable Interrupts
'********** Konfiguracja uC Koniec  ************
 
'******************  Nazwy *******************
'***********************************************
Rd Alias Portb.7
Gd Alias Portb.6
Bd Alias Portb.5
 
Rdt Alias Portd.3
Gdt Alias Portd.1
Bdt Alias Portd.2
 
Sw1 Alias Pind.4                                            'regulacja "+"
Sw2 Alias Pind.5                                            'regulacja "-"
Isw Alias Pind.0                                            'zmiana kolorow,przejscie do animacji
 
 
'*************  Nazwy Koniec  ****************
 
'******************  Zmienne *******************
'***********************************************
Dim Licznik As Byte
Dim Rgb(3) As Byte
Dim Rgb2(3) As Byte
Dim Pomoc As Byte
Dim Flaga As Bit
Dim Dzielnik As Word
Dim Dzielnik2 As Byte
Dim Szybkosc As Byte
 
Dim N As Byte
 
Dim Arg As Word
Dim Wartosc As Word
Dim Pozycja As Word
 
Dim Rgb_mode As Bit
Dim Cur_color As Byte
 
Dim Sw_l As Byte , Sw_f As Byte
Dim Tryb As Byte , Rezultat As Integer
Dim Sw_1 As Byte , Sw_2 As Byte
 
Dim Autosave As Byte , X As Byte
'*************  Zmienne Koniec  ****************
 
'************ Warunki Poczatkowe ***************
'***********************************************
Cur_color = 1                                               'Rgb_mode = 1   start z animacji
Autosave = 250                                              'Cur_color = 1 start z koloru
 
Readeeprom X , 1
If X <= 10 Then Rgb2(1) = X Else Rgb2(1) = 1
Readeeprom X , 2
If X <= 10 Then Rgb2(2) = X Else Rgb2(2) = 1
Readeeprom X , 3
If X <= 10 Then Rgb2(3) = X Else Rgb2(3) = 1
Readeeprom X , 4
If X <= 100 And X >= 1 Then Szybkosc = X Else Szybkosc = 1
 
 
 
'*******  Warunki Poczatkowe Koniec  ***********
 
'**************  Petla glowna ******************
'***********************************************
Do
 
 
 
 If Flaga = 1 Then                                          'co 32ms
   Flaga = 0
   Gosub Przyciski
 
    'autosave
    If Autosave < 250 Then
      Incr Autosave
      If Autosave = 250 Then
        X = Rgb2(1)
        Writeeeprom X , 1
        X = Rgb2(2)
        Writeeeprom X , 2
        X = Rgb2(3)
        Writeeeprom X , 3
        X = Szybkosc
        Writeeeprom X , 4
 
      End If
    End If
 
 
   'animacja
   If Rgb_mode = 1 Then
     Incr Dzielnik2
     If Dzielnik2 >= Szybkosc Then
       Dzielnik2 = 0
 
       Rdt = 0
       Gdt = 0
       Toggle Bdt
 
       Incr Pozycja
       If Pozycja = 900 Then Pozycja = 0
       Gosub Pozycja_do_rgb
     End If
   Else
     For N = 1 To 3
       Rgb(n) = Rgb2(n) * Rgb2(n)
     Next N
     Select Case Cur_color
       Case 1 :
         Rdt = 1
         Gdt = 0
         Bdt = 0
       Case 2 :
         Rdt = 0
         Gdt = 1
         Bdt = 0
       Case 3 :
         Rdt = 0
         Gdt = 0
         Bdt = 1
     End Select
   End If
 
   'switch w impulsatorze
   If Isw = 0 Then
     If Sw_l < 100 Then
       Incr Sw_l
       If Sw_l = 4 Then Sw_f = 1
       If Sw_l = 50 Then Sw_f = 2
     End If
   Else
     Sw_l = 0
     If Sw_f = 1 Then
       Sw_f = 0
       Incr Cur_color
       If Cur_color = 4 Then Cur_color = 1
     End If
     If Sw_f = 2 Then
       Sw_f = 0
       Toggle Rgb_mode
     End If
   End If
 
 
 
 End If
 
Loop
End
 '*********przyciski**********
 Przyciski:
  If Sw1 = 0 Then
  Incr Sw_1
  If Sw_1 = 4 Then
  If Rgb_mode = 1 Then
  Decr Szybkosc
  If Szybkosc <= 1 Then Szybkosc = 1
  Else
  Incr Rgb2(cur_color)
  If Rgb2(cur_color) >= 10 Then Rgb2(cur_color) = 10
  End If
  Autosave = 0
  End If
  Else
  Sw_1 = 0
  End If
 
  If Sw2 = 0 Then
  Incr Sw_2
  If Sw_2 = 4 Then
  If Rgb_mode = 1 Then
  Incr Szybkosc
  If Szybkosc >= 100 Then Szybkosc = 100
  Else
  Decr Rgb2(cur_color)
  If Rgb2(cur_color) >= 250 Then Rgb2(cur_color) = 0
  End If
  Autosave = 0
  End If
  Else
  Sw_2 = 0
  End If
  Return
'************ Petla glowna Koniec **************
 
'************ Przerwanie timer 0 ***************
'***********************************************
Prztimer0:
 Timer0 = 128
 Incr Licznik
 If Licznik = 100 Then Licznik = 0
 
 If Licznik >= Rgb(1) Then Reset Rd Else Set Rd
 If Licznik >= Rgb(2) Then Reset Gd Else Set Gd
 If Licznik >= Rgb(3) Then Reset Bd Else Set Bd
 
 Incr Dzielnik
 If Dzielnik = 250 Then
   Dzielnik = 0
   Set Flaga
 End If
 
Return
'******** Przerwanie timer 0 Koniec ************
 
'************   Inne Etykiety    ***************
'***********************************************
Przelicz:                                                   'funkcja \_ _ _ _/^^^
  If Arg > 899 Then Arg = Arg - 900
 
  If Arg > 100 And Arg < 500 Then Wartosc = 0
  If Arg <= 100 Then Wartosc = 100 - Arg
  If Arg >= 500 And Arg <= 600 Then Wartosc = Arg - 500
  If Arg > 600 Then Wartosc = 100
Return
 
 
Pozycja_do_rgb:
  Arg = Pozycja
  Gosub Przelicz
  Rgb(1) = Wartosc
  Arg = Pozycja + 300
  Gosub Przelicz
  Rgb(2) = Wartosc
  Arg = Pozycja + 600
  Gosub Przelicz
  Rgb(3) = Wartosc
 
  Return