logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmega8 - Kod w C do sterowania diodą RGB za pomocą potencjometrów

Ezio123 12 Lut 2014 21:00 5157 9
REKLAMA
  • #1 13294630
    Ezio123
    Poziom 10  
    Witam,
    szukałem w internecie jednak nie znalazłem interesującego mnie wątku. Szukam gotowego kodu, najlepiej w C (lub Bascom), który pozwoliłby mi sterować diodą RGB. Chciałbym, aby sterowanie odbywało się w następujący sposób: Dwa potencjometry, gdzie jeden sterował by jasnością, a drugi zmieniał by kolor. Czy jest to do zrobienia w miarę łatwo? Najlepiej gdyby dalo się to zrealizować na atmedze 8, attiny 2313 lub innym małym AVR. Proszę o pomoc ponieważ miałem przerwę z programowaniem i ogólnie z AVR a taki projekt który chcę sobie wykonać byłby świetną okazją, żeby wrócić do hobby. Z góry dziękuję za jakieś propozycje kodu.
  • REKLAMA
  • #3 13294918
    Ezio123
    Poziom 10  
    Dziękuję za odpowiedź. Mniej więcej wiem już jak zrealizować płynne wygaszanie. Jak jednak zrealizować płynną zmianę kolorów? Nie mam na to pomysłów. Może zna ktoś podobne gotowe projekty na których mógłbym się wzorować? Szukam, szukam i nic nie mogę znaleźć :)
  • REKLAMA
  • #4 13294940
    dondu
    Moderator na urlopie...
    Dioda RGB, to trzy diody w jednej obudowie. Kolor światła zależy od intensywności świecenia każdej z trzech diod. Skoro masz już przykład jak zmieniać intensywność świecenia jednej diody to możesz to samo zrobić dla trzech i podłączyć swoją diodę RGB.

    ... słabo szukasz, wysil się - wpisując Twój temat w Google otrzymałem masę przykładów.
    Także wyszukiwarka na tym forum wskazuje ich sporo.
  • REKLAMA
  • #5 13297777
    ASMnauka
    Poziom 12  
    Wtaj Ezio123
    Cytat:
    Dioda RGB, to trzy diody w jednej obudowie.

    Owszem, z tym, że ta dioda składa się z trzech kolorów (ogólnie pisząc).
    Więc każdy kolor należy DOBRAĆ.
    Są trzy kolory podstawowe, R, G, oraz B.
    Pisząc na język Polski Czerwony, Zielony, oraz Niebieski.
    Cytat:
    Jak jednak zrealizować płynną zmianę kolorów?

    Niestety, Musisz wykorzystać trzy kanały PWM, zatem jeden Timer.
    Zwiększając, lub zmniejszając wartość każdego z trzech kanałów Zmieniasz jeden z trzech podstawowych kolorów.
    Cytat:
    Dwa potencjometry, gdzie jeden sterował by jasnością, a drugi zmieniał by kolor.

    Czy możliwe jest wykonanie takiego założenia ?
    Jeżeli tak, to w jaki sposób ?
    Z moich doświadczeń z diodami RGB nie spotkałem się ze sterowaniem jasnością diody.
    Owszem zmiana składowych RGB tak.
    Cytat:
    Szukam gotowego kodu, najlepiej w C (lub Bascom)

    Chwileczkę, czy Autor tematu sądzi, że My przedstawimy (Napiszemy, wkleimy) gotowy kod, lub nawet fragmenty ?
    Otóż nie !!!
    Bardzo proszę pomyśleć, poszukać.
    Jeśli Przeczytamy (przeanalizujemy) zamieszczony choćby fragnemt programu Jesteśmy w stanie pomóc.
    Przepraszam bardzo, nikt z Nas nie siedzi przy komputerze i nie myśli za inną Osobę.
  • #6 13298691
    dondu
    Moderator na urlopie...
    ASMnauka napisał:
    Z moich doświadczeń z diodami RGB nie spotkałem się ze sterowaniem jasnością diody.
    Owszem zmiana składowych RGB tak.

    Zmniejszanie lub zwiększanie PWM wszystkich składowych jednocześnie, to właśnie regulacja jasności przy ustawionym kolorze. Nie jest to oczywiście zwykła proporcja, ponieważ należy skalibrować programowo każdą diodę, gdyż mają one różne charakterystyki emisji światła dla każdego koloru składowego, a oko ludzkie także ma swoje.

    Autor może więc odczytywać potencjometry za pomocą ADC i odpowiednio regulować parametry świecenia diod według własnych oczekiwań.
  • REKLAMA
  • #7 13300658
    yokoon
    Poziom 29  
    ASMnauka napisał:
    Wtaj Ezio123
    Cytat:
    Dioda RGB, to trzy diody w jednej obudowie.

    Owszem, z tym, że ta dioda składa się z trzech kolorów (ogólnie pisząc).
    Więc każdy kolor należy DOBRAĆ.
    Są trzy kolory podstawowe, R, G, oraz B.
    Pisząc na język Polski Czerwony, Zielony, oraz Niebieski.
    Cytat:
    Jak jednak zrealizować płynną zmianę kolorów?

    Kod: text
    Zaloguj się, aby zobaczyć kod

    Zwiększając, lub zmniejszając wartość każdego z trzech kanałów Zmieniasz jeden z trzech podstawowych kolorów.
    Cytat:
    Dwa potencjometry, gdzie jeden sterował by jasnością, a drugi zmieniał by kolor.

    Czy możliwe jest wykonanie takiego założenia ?
    Jeżeli tak, to w jaki sposób ?
    Z moich doświadczeń z diodami RGB nie spotkałem się ze sterowaniem jasnością diody.
    Owszem zmiana składowych RGB tak.
    Cytat:
    Szukam gotowego kodu, najlepiej w C (lub Bascom)

    Chwileczkę, czy Autor tematu sądzi, że My przedstawimy (Napiszemy, wkleimy) gotowy kod, lub nawet fragmenty ?
    Otóż nie !!!
    Bardzo proszę pomyśleć, poszukać.
    Jeśli Przeczytamy (przeanalizujemy) zamieszczony choćby fragnemt programu Jesteśmy w stanie pomóc.
    Przepraszam bardzo, nikt z Nas nie siedzi przy komputerze i nie myśli za inną Osobę.


    Witam.
    Z tego co mi wiadomo to nawet najbardziej rozbudowany Timer1 w Atmega 8 ma dwa kanały PWM chyba, że się mylę.
  • #8 13300972
    GanzConrad
    Poziom 25  
    ASMnauka napisał:
    Chwileczkę, czy Autor tematu sądzi, że My przedstawimy (Napiszemy, wkleimy) gotowy kod, lub nawet fragmenty ?

    nie wydaje mi się, żeby było to problemem. Temat jest na tyle popularny, że prawie każdy przez niego przechodził i nie jest to kwestia trudności w "kopiuj-wklej", tylko "czy dać rybę, czy wędkę?"
    yokoon napisał:
    Timer1 w Atmega 8 ma dwa kanały PWM

    Korzystanie ze sprzętowych PWM ma swoje ograniczenia, dlatego ja wolę generować je programowo (zwłaszcza gdy potrzebuję 3, a program jest na tyle prosty, że nie ma w nim dużych opóźnień)
    Ja akurat korzystam tylko z Timera2 (ponieważ ma tryb CTC) aby jednocześnie generować dowolną ilość programowych PWM (łącznie ze zmianą wypełnienia co 10ms - 8bit) i odczytywaniem stanu przycisku (zmiana trybu świecenia RGB).
  • #9 13305757
    olelek
    Poziom 24  
    Atmega8 ma 3 kanały pwm, z czego 2 z Timer1 a 1 z timer2. Jest to trochę niewygodne. Czasami lepiej wziąć attiny2313 który ma 4 pwm, też rozdzielone na 2 timery.
    Tutaj masz moją prymitywną konstrukcję na attiny13 z pwm programowym na 4 kanały, bo użyłem diody RGB i dodatkowo W.
  • #10 13307645
    Akane
    Poziom 27  
    Do płynnej zmiany koloru proponuję przestrzeń barw HSV.
    Wartość Hue pobierz z przetwornika ADC podłączonego do potencjometru "kolor", przeskaluj ją tylko z 0...(adcMax+1) na kąt 0...360° lub 0...2PI.
    Saturation (nasycenie koloru) ustaw np. na maksimum.
    Value pobierz z ADC potencjometru jasności.
    Teraz tylko skonwertuj HSV na przestrzeń RGB (funkcja hsv2rgb, al_color_hsv), opcjonalnie poddaj RGB korekcji gamma przed ustawieniem PWMów.

    Maksymalne wartości H,S,V muszą być zgodne z użytą funkcją konwertującą do RGB - w tych lepszych spotyka się zakresy S i V od zera do jedynki (co znaczy tyle co 0%-100%), a wartość kąta może być w radianach, dla polepszenia prędkości konwersji.
REKLAMA