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

Atmega16, odbieranie RC5 blokuje Timer2 ?

Villen 06 Maj 2010 20:54 1219 7
REKLAMA
  • #1 8044444
    Villen
    Poziom 21  
    Witam!

    Pracuję nad pewnym urządzeniem, które będzie sterowane pilotem RC5. Odbieranie komend działa super, wszystko jest w porządku najlepszym, tylko mam jeden poważny problem: po dodaniu do programu który napisałem do tej pory (i który działa bez problemu) linijki, która umożliwia odbiór komend RC5, czyli:

    Getrc5(adres , Komenda)


    timer2 tak jakby się blokuje. Program w odpowiednich momentach uruchamia i zatrzymuje timer2, a dodanie tej procedury (tylko i wyłącznie, bez jakichkolwiek innych modyfikacji) w pętli głównej najwyraźniej "coś psuje". Usunięcie tej procedury z powrotem przywraca wszystko do normy. Z dokumentacji Bascoma wynika, że Getrc5 używa timer'a0, który pozostawiłem specjalnie w tym celu wolny.

    W czym może tkwić problem? Bo ja nie mam pojęcia... :(
  • REKLAMA
  • #2 8044536
    janbernat
    Poziom 38  
    Spróbuj dać config Rc5=....,[Timer0]
  • REKLAMA
  • #3 8044537
    alien_audio
    Poziom 21  
    Witam.
    Prawdopodobnie jest jeszcze jakaś instrukcja która też używa tego timera
    np. wait
  • #4 8044571
    Villen
    Poziom 21  
    Nie, w programie nie ma żadnej innej instrukcji która używałaby timera0 (nie ma nawet żadnego waita), a przerwanie od timer2 skacze tylko do jednego podprogramu.

    Gdzies wyczytałem że getrc5 blokuje przerwania, ale znowu zewnetrzne przerwanie podłączone do INT1 działa... ;/ I bądź tu człowieku mądry...
  • #5 8044661
    janbernat
    Poziom 38  
    A kto Ci powiedział że człowiek jest mądry?
    Daj cały kod.
  • REKLAMA
  • #6 8044711
    Villen
    Poziom 21  
    Już po problemie - informacja o tym, że getrc5 blokuje przerwania nakierowała mnie na rozwiązanie.
    Komenda ta rzeczywiście blokuje przerwania, przynajmniej te wewnętrzne mikrokontrolera (dlatego chyba zewnętrzne INT1 w dalszym ciągu działa). Przeorganizowałem program tak, że odczyt RC5 umieściłem w stosownym podprogramie, który tuż przed powrotem do pętli głównej odblokowywuje przerwania.

    Problem rozwiązany w kilka chwil po całym dniu myślenia... :D
  • REKLAMA
  • #7 8045240
    kots
    Poziom 12  
    Jesteś pewien?

    Bo ja wątpię, dla pewności wpisz w przerwanie które obsługujesz trochę dłuży niż masz normalnie, zobacz czy w wyniku tego nie psuje Ci odbioru RC5.

    KotS
  • #8 8045766
    Villen
    Poziom 21  
    Tak, jestem pewien bo już poszedłem do przodu z programem. Wyjście odbiornika podczerwieni mam podłączone pod INT0 i tylko pierwsze naciśnięcie przycisku na pilocie trzeba trochę dłużej przytrzymać, bo pierszy odbiór że tak powiem idzie na przerwanie i skok do podprogramu. Dalej już wszystko działa całkowicie płynnie i bez jakichkolwiek zauważalnych opóźnień, a reszta programu (m.in. 2 PWM'y) cały czas działa.
REKLAMA