Witam,
dziewczyna zaproponowała żeby na mikołajki podarować sobie prezenty z seri handmade, więc wymyśliłem, że zrobię jej lampkę biurkową(cierpi na jej brak:P) z pleksi na bazie diod RGB. Żeby było ciekawiej chcę dorzucić sterowanie lampki z pilota na podczerwień oraz napisać prosty program w C# na winddowsa, dzięki któremu będzie mogła sobie zaprogramować klawisze pilota pod odpowiednie programy świecenia, które sama będzie musiała sobie stworzyć.
Zabrałem się do pracy. Efektem jest udana próba uruchomienia odbierania sygnałów z pilota. Uruchomiłem programowy PWM na 3 pinach na timerze 0(tak jak w Bluebooku),a zmieniłem dla testów na Timer2.
Problem jaki napotkałem, jest związany z przerwaniami. Otóż odbiór RC5 odbywa się na Timerze1b (tak jak w BB- TIMSK|=(1<<TICIE1);, a programowy PWM na Timerze0 lub 2. Gdy odbiorę wciśnięcie odpowiedniego klawisza z pilota, jest wywoływana funkcja, która odpowiednio steruje PWM, przykładowo rozjaśnianie i ściemnianie jak w BB. Jeśli program wejdzie w tę pętlę, nie ma możliwości żeby uC odbrał następny kod klawisza, który wywołuje inną funkcję(jeśli jest to while(1), nie odbiorę żadnego syganłu. Dla testów przestawiłem żeby pętla wykonywała się 1 raz i po jej skończeniu odbiór RC5 działa znowu prawidłowo).
Próbowałem właśnie zmieniać timery od pwm(jest taka tabelka wektorów przerwań w atmedze, myślałem, że jest to jakiś rodzaj priorytetów(wiem, że w atmegach nie ma możliwości ustawiania priorytetów przerwań), ale nic to nie dało). Ustawiłem również przerwanie zwenętrzne INT0 od zbocza narastającego(wyjście od odbiornika podczerwieni podłączone pod PD2), w którym wywoływałem funkcję odbioru klawisza. Przerwanie zewnętrze działało, odbierałem prawidłowo sygnały z pilota, natomiast PWM przestał działać- dioda w ogóle się nie świeciła.
Czy ktoś mógłby mi podsunąć pomysł jak rozwiązać ten konflikt przerwań

edit: Myślałem jeszcze żeby na timrze1 i np 2 włączyć sprzętowy pwm, który by sobie cały czas śmigał, a odbiór RC5 prznieść na Timer0. Czy jest coś takiego możliwe?
Jest jeszcze opcja żeby połączyć 2 atmegi między sobą po rs, na jednym obsługiwać RC5, wysyłać rozkazy do 2atmegi, która będzie sterowała PWM. Problem w tym, że ma to być lampka biurkowa, i rozbudowa płytki o dodatkową atmegę jest komplikująca konstrukcję, bo ma być ona jak najmniejsza. I tak mam mało czasu, więc układ planuję zmontować na płytce uniwersalnej i zamknąc w jakieś puzdrełko

edit2 : kod
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.