Elektroda.pl
Elektroda.pl
X
Arrow Multisolution Day
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

AVR - Sterowanie diodą RGB z wykorzystaniem RC5

marrrtyn 23 Lis 2015 21:01 987 7
  • #1 23 Lis 2015 21:01
    marrrtyn
    Poziom 10  

    Witam.

    Próbuję sterować diodą RGB za pomocą pilota TV. Diodę mam podłączoną do pinów PC3, PC4, PC5 portu C mikrokontrolera. Tak wygląda fragment kodu:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Wszystko jest ok, lecz po przyciśnięciu klawisza na pilocie odpowiadającego komendzie 45, zgodnie z założeniem, dioda świeci się na biało (brak podciągnięcia PC3, PC4, PC5, więc wszystkie kolory świecą - dioda jest ze wspólną anodą), lecz po wywołaniu koloru białego nie mogę później przełączyć na żaden inny kolor. Pozostaje reset mikrokontrolera. Po resecie wszystko działa, kolory się zmieniają, lecz po wywołaniu koloru białego mikrokontroler znów przestaje reagować. Gdzie tkwi błąd?

    0 7
  • Arrow Multisolution Day
  • #2 24 Lis 2015 08:46
    BlueDraco
    Specjalista - Mikrokontrolery

    Błąd tkwi w schemacie, którego nie pokazałeś albo w części kodu, której nie pokazałeś.

    0
  • Arrow Multisolution Day
  • #3 24 Lis 2015 20:28
    marrrtyn
    Poziom 10  

    Podaję całość kodu:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Komendę 45 wywołującą wcześniej kolor biały zastąpiłem kolorem żółtym. Teraz, wszystko działa, lecz przy przejściu z koloru żółtego (komenda 45) na kolor zielony (komenda 44), dioda zmienia kolor na niebieski. Dopiero po ponownym wykonaniu komendy 44 dioda zmienia kolor z niebieskiego na zielony.

    0
  • #4 24 Lis 2015 21:22
    BlueDraco
    Specjalista - Mikrokontrolery

    Schemat, wartości rezystorów przy LED.

    0
  • #5 24 Lis 2015 22:32
    marrrtyn
    Poziom 10  

    BlueDraco napisał:
    Schemat, wartości rezystorów przy LED.


    AVR - Sterowanie diodą RGB z wykorzystaniem RC5

    0
  • #6 25 Lis 2015 09:09
    BlueDraco
    Specjalista - Mikrokontrolery

    Sprawdź ustawienie trybu zgodności z ATmega103 lub coś podobnego - powinien być wyłączony. W procedurze odbioru IR jest parę błędów, ale raczej nie wpływają one na to, co obserwujesz. Zmienna ramka powinna być typu uint16_t, a suwanie jej na końcu o 2 w lewo, a zaraz potem w prawo w procedurze interpretacji jest zbędne.

    0
  • #7 25 Lis 2015 14:04
    Andrzej__S
    Poziom 28  

    Ja mam następujące uwagi:

    1. Jeśli skonfigurowałeś timer w tryb CTC, to po co wywołujesz w pętli funkcję zerowanie_timera(). To tylko powoduje pogorszenie dokładnośic odmierzania czasu. Oczywiście należy zsynchronizować timer z początkiem transmisji, ale wystarczy to zrobić raz, na początku obsługi przerwania INT0.

    2. Trzeba pamiętać, że w momencie pojawienia się stanu niskiego na pinie INT0 i wywołaniu przerwania nadajnik jest już w połowie nadawania pierwszego bitu startu. Nie zauważyłem, żebyś to uwzględnił w Twoim programie.

    3. Co chyba najważniejsze, odczytujesz stan wyjścia TSOP2236 bardzo blisko hipotetycznych zboczy sygnału, których moment pojawienia się jest wyznaczony przez czas odmierzany za pomocą mikrokontrolera. Pilot nie nadaje synchronicznie, więc jeśli pojawią się drobne różnice w czasie trwania impulsów, to odczyt nadawanego kodu może być niestabilny. Jeden bit sygnału RC5 składa się z dwóch stanów po 889us. IMHO, sygnał najlepiej byłoby próbkować mniej więcej w połowie czasu trwania jednego z tych stanów (lub każdego ze stanów, w zależności od inwencji programisty).

    0
  • #8 26 Lis 2015 09:01
    yokoon
    Poziom 28  

    marrrtyn napisał:
    BlueDraco napisał:
    Schemat, wartości rezystorów przy LED.


    AVR - Sterowanie diodą RGB z wykorzystaniem RC5


    Kondensator C3 źle wlutowany, czy tylko źle narysowany?

    0