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

ATmega32, [C], CTC - brak reakcji na program [ROZWIAZANE]

Schengens 13 Lip 2016 10:26 1044 2
  • #1 15804518
    Schengens
    Poziom 12  
    Witam przeglądałem wiele postów o CTC na forum i poza... moje zakładki jak i biurko uginają sie od materiałów.. lecz nie widzę błędu...
    Czy może mi ktoś powiedzieć gdzie jest błąd? sprawdzałem juz chyba z 10 różnych kodów dla Timer'a 0 dla Timer'a 1

    +Wybrałem tryb CTC
    +Zezwoliłem na przerwania przez timer
    +OCR1B jest mniejsze od OCR1A

    +obsługę przerwań napisałem (w trybie licznika działa poprawnie)
    +Wektor przerwań dla CTC (TIMn_COMP_vect lub TIMn_CAPT_vect) wybrany
    +zezwoliłem na przerwania sei();


    w funkcji głównej wszystko działało w trybie licznika...

    a w CTC program nie działa proszę o pomoc :(

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    //głupie pytanie ukryłem bo nie wnosi nic do tematu
    Spoiler:
    Dodatkowo mam pytanie dlaczego kompilator(AtmelStudio7) nie widzi dla ATMega32
    OCR0A i OCR0B?
    dla kodu:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #2 15804580
    Andrzej__S
    Poziom 28  
    Schengens napisał:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Tutaj druga instrukcja anuluje pierwszą. Zrób to w jednej instrukcji lub w drugiej użyj operatora |=
    Poza tym nie ma bitow CS02 i CS00 w rejestrze TCCR1B. Wprawdzie są w rejestrze TCCR0 i mają takie same pozycje, więc kod ma szansę działać, ale jakoś źle się na to patrzy :)

    Schengens napisał:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    To jest zezwolenie na przerwanie od timer overflow. Zezwolenie na przerwanie od porównania (kanał B) powinno wyglądać tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Schengens napisał:
    Dodatkowo mam pytanie dlaczego kompilator(AtmelStudio7) nie widzi dla ATMega32
    OCR0A i OCR0B?

    ponieważ w ATmega32 nie ma takich rejestrów. Jest tylko OCR0.
  • #3 15804590
    Schengens
    Poziom 12  
    KOD DZIAŁA :)
    Błędy znalezione przez kolege wyżej oraz brak ; po while(1)
    Wstawiam poprawny kod dla potomnych borykających sie z tym problemem
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
REKLAMA