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

[ATMEGA644P] Timer T1 działa w trybie Normal zamiast CTC - przerwanie co kilkadziesiąt sekund

excray 29 Mar 2017 22:16 1536 12
REKLAMA
  • #1 16380236
    excray
    Poziom 41  
    Mam dziwny problem z timerem T1 w procesorze Atmega644P. Procesor taktowany kwarcem 18432000Hz. Timer zainicjowałem jak widać w kodzie poniżej:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Teoretycznie powinienem otrzymać przerwanie co 0.25s, a otrzymuję co kilkadziesiąt sekund. Wygląda tak jakby timer, nie pracował w trycie CTC, tylko Normal. Problem występuje jedynie przy T1. Inne timery działają bez zarzutu. Ktoś ma pomysł co może być nie tak? Środowisko AS6.2. Procesor ustawiony prawidłowo. Częstotliwość też.
  • REKLAMA
  • Pomocny post
    #2 16380512
    dondu
    Moderator na urlopie...
    Jeśli dobrze policzyłem przerwanie powinieneś mieć co 0,5 sekundy. 18432000 / (2 * 1024 * 4500) = 2Hz
    Ponieważ w przerwaniu zmieniasz stan pinu na przeciwny, to na nim powinien być 1Hz.

    Jeśli fusebit CKDIV8 masz zaprogramowany (fabrycznie ustawiony), to na pinie powinno być 0,125Hz, czyli stan wysoki co 8 sekund.

    Zakładam oczywiście, że pracując z takim kwarcem zasilasz go z co najmniej 4,5V.
  • REKLAMA
  • Pomocny post
    #3 16380688
    Konto nie istnieje
    Konto nie istnieje  
  • #4 16381770
    excray
    Poziom 41  
    dondu napisał:
    Jeśli dobrze policzyłem przerwanie powinieneś mieć co 0,5 sekundy. 18432000 / (2 * 1024 * 4500) = 2Hz
    Ponieważ w przerwaniu zmieniasz stan pinu na przeciwny, to na nim powinien być 1Hz.

    Wzór który podał kolega jest wzorem na częstotliwość. Przebieg taki składa się z dwóch przerwań czyli przerwanie jest co 0,25s jak podałem, a dioda powinna migać z częstotliwością 2Hz.
    dondu napisał:
    Jeśli fusebit CKDIV8 masz zaprogramowany (fabrycznie ustawiony), to na pinie powinno być 0,125Hz, czyli stan wysoki co 8 sekund.

    Owszem, ale bit nie jest ustawiony. Inne timery i komunikacja RS działa bez zastrzeżeń. Kod w celu wyeliminowania innych przyczyn program ostatecznie okroiłem do wersji którą Wam przedstawiłem, ale dalej nie przyniosło to żadnego skutku. Na dodatek próby modyfikowania bitów WGM10-WGM12 w celu uruchomienia innego trybu nie przynoszą skutku. Wygląda to na jakąś wadę fabryczną, ale nie znalazłem żadnej erraty na ten temat.
    niveasoft napisał:
    A tam czasem nie brakuje operatora przed znakiem przypisania?
    TCCR1B |= (1<<WGM12)|(1<<CS12)|(1<<CS10);

    Owszem, gdybym chciał zostawić nie ruszany bałagan, który potencjalnie może znajdować się w rejestrze to użyłbym OR. Niemniej ja chcę, aby rejestr miał dokładnie taki stan jaki ja mu podaję, stąd brak ORa.
  • Pomocny post
    #5 16381999
    simw
    Poziom 27  
    Kod, który pokazałeś wrzuciłem na zestaw testowy z Atmega644P i działa tak jak powinien.
    Co prawda na kwarcu 16MHz, ale miganie diodą występuje kilka razy na sekundę.
    Pobawiłem się też wartością OCR1A i zachowuje się zgodnie z oczekiwaniem.
    Zwiększenie OCR1A zwalnia miganie, zmniejszanie przyśpiesza.

    Powinieneś zatem szukać błędu gdzieś indziej, w sprzęcie, połączeniach, reszcie kodu itp.
  • #6 16382286
    excray
    Poziom 41  
    Ok, dziękuję za pomoc. W takim razie chyba mam uszkodzony procek.
  • REKLAMA
  • Pomocny post
    #7 16382337
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • Pomocny post
    #8 16382355
    dondu
    Moderator na urlopie...
    excray napisał:
    Wzór który podał kolega jest wzorem na częstotliwość. Przebieg taki składa się z dwóch przerwań czyli przerwanie jest co 0,25s jak podałem, a dioda powinna migać z częstotliwością 2Hz.

    Masz rację.

    excray napisał:
    W takim razie chyba mam uszkodzony procek.

    Ciekawe uszkodzenie ... jak masz ustawione fusebity?
  • Pomocny post
    #9 16382431
    simw
    Poziom 27  
    dondu napisał:

    excray napisał:
    W takim razie chyba mam uszkodzony procek.

    Ciekawe uszkodzenie ... jak masz ustawione fusebity?


    Można wypróbować takie, które mam w swoim procku:
    LOW: FF, HIGH: D9, EXT: FF
  • #11 16382878
    excray
    Poziom 41  
    Dziękuje wszystkim za pomoc. Temat zamykam, bo jak wskazują koledzy, nie jest to jakaś sprawa związana z tym modelem tylko kwestia tego konkretnie egzemplarza. Trochę dziwna sprawa, bo był to praktycznie nowy procesor zakupiony w TME, niemniej jak widać i takie rzeczy czasami się zdarzają.
  • #12 16429610
    excray
    Poziom 41  
    Okazuje się, że winny był nie pojedynczy procesor a raczej cała partia. Zamówiłem kolejne naście sztuk i wszystkie miały ten sam problem. Inny procesor z partii sprzed pół roku działa bezbłędnie. Postanowiłem otworzyć temat aby ostrzec potencjalnych użytkowników przed taka niespodzianką.
  • #13 16453703
    excray
    Poziom 41  
    Inna seria działa bez zarzutu.
REKLAMA