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

XMEGA32-E5 - Jak poprawnie skonfigurować timer w XMEGA serii E5

m72 29 Sty 2016 20:36 1299 9
REKLAMA
  • #1 15383560
    m72
    Poziom 12  
    Posty: 398
    Ocena: 28
    Proszę, niech mnie ktoś oświeci jak skonfigurować dowolny timer w XMEGA ale serii E5 ! - one mają timery typu 4/5 czyli inne niż pozostałych XMEGA-ch.
    Mam podłączony buzzer do pinu D0 i co bym nie robił dostaję na nim przebieg o częstotliwości 34kHz. F_CPU=2000000. Atmel Studio 7.
    XMEGA32-E5 - Jak poprawnie skonfigurować timer w XMEGA serii E5
    W ogóle chciałbym żeby mi się buzzer odezwał na dowolnym pinie i dowolną słyszalną częstotliwością, dalej sobie poradzę.
    Poniżej jest kod, oczywiście zły, po wielu desperackich modyfikacjach tak że proszę go nie komentować bo wiem że zły.
    Buzzer jest dobry bo używając delay-a (zakomentowane) działa.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 15384636
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2205
    Nie skonfigurowałeś np. rejestru PER, w efekcie timer nie liczy (domyślna wartość tego rejestru to 0). Poza tym trzeba także skonfigurować np. tryb pracy - weź notę, masz tam opisane rejestry.
  • #3 15386114
    m72
    Poziom 12  
    Posty: 398
    Ocena: 28
    Dodałem PER żeby zliczał np do 30000 i wgmode-normal - dalej nie działa.
    Cały czas mam na wyjściu 34kHz jaka cholera ?

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #4 15386646
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #5 15386962
    m72
    Poziom 12  
    Posty: 398
    Ocena: 28
    Szerze mówiąc kompletnie nie jarzę tego ASF, nie potrafię z tym ruszyć, ja jestem niedzielnym "programistą" jak z resztą widać po tym temacie ;)
  • Pomocny post
    #6 15387024
    Konto nie istnieje
    Konto nie istnieje  
  • #7 15387602
    m72
    Poziom 12  
    Posty: 398
    Ocena: 28
    Zmierzyłem przebiegi również podczas programowania kontrolera i się okazało że jednak timer działa poprawnie ale tylko przez jeden cykl, później dostaje kociokwiku.
    Zakładając że CPU=2MHz, dzielnik zegara = 8 i PER=30000 to wychodzi na to że przerwanie powinno wystąpić po 0,12s co jest przedstawione na kalkulatorze na obrazku. Okazuje się że jest na przebiegu jeden cykl o tej długości, zaraz po zakończeniu programowania. Co więcej, po zmianie preskalera na dowolny inny i przeliczeniu czasów również się wszystko zgadza......ale co się dzieje dalej to nie mam pojęcia. Czemu dalej pojawia się ten prostokąt 32kHz ?

    XMEGA32-E5 - Jak poprawnie skonfigurować timer w XMEGA serii E5
  • REKLAMA
  • Pomocny post
    #8 15387805
    JarekC
    Poziom 32  
    Posty: 1513
    Pomógł: 231
    Ocena: 399
    Witam,

    W przypadku XMEGA32E5 i timerówTC45 znacznik przerwania od Overflow/Underflow nie jest automatycznie kasowany po wejściu do obsługi przerwania.
    Należy go skasować programowo poprzez wpisanie "1" do bitu OVFIF w rejestrze INTFLAGS w obsłudze przerwania.

    U Ciebie występuje dokładnie efekt braku kasowania znacznika.
    Pierwszy okres jest poprawny, jednak gdy pojawia się znacznik przerwania i nie jest kasowany to przerwanie jest wywoływane non stop,
    a częstotliwość generowanego przebiegu zależy tylko od czasu wykonania obsługi przerwania.

    Pozdrawiam
    JarekC
  • #9 15388601
    m72
    Poziom 12  
    Posty: 398
    Ocena: 28
    JarekC, już miałem dać tą płytkę testową do zabawy kotu, tak mnie to wkurzyło !
    Działa ! Wielkie dzięki :) Nie wiem jedynie jak zastąpić to ustawianie jedynki
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    na typowo xmegowe zaklęcie w stylu
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    ale to juz nic pilnego, wazne że działa.
    Na priv zapodaj adres to wyślę Ci zgrzewkę browara ! :)
  • #10 15389068
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2205
    Po prostu piszesz TCC4.INTFLAGS= - zmianie ulegają tylko te flagi na których pozycji jest 1, tam gdzie jest 0 nic się nie zmienia.

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik poszukiwał pomocy w konfiguracji timerów w mikrokontrolerze XMEGA32-E5, który różni się od innych modeli XMEGA. Problemy dotyczyły uzyskania odpowiedniej częstotliwości sygnału na buzzerze podłączonym do pinu D0. Po kilku próbach i modyfikacjach kodu, użytkownik odkrył, że timer działa poprawnie tylko przez jeden cykl, a następnie generuje nieprawidłowy sygnał. Kluczowym rozwiązaniem okazało się ręczne kasowanie flagi przerwania w obsłudze przerwania, co pozwoliło na prawidłowe działanie timera. Użytkownik uzyskał również wskazówki dotyczące korzystania z Atmel Studio i ASF, co mogło pomóc w dalszym rozwoju projektu.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA