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

Jak obliczyć wartość TCNT1 dla timera 100ms przy 8MHz i preskalerze 64?

djlukas 18 Sty 2013 18:41 1575 6
REKLAMA
  • #1 11807168
    djlukas
    Poziom 27  
    Witam

    Mam napisany taki kod do obsługi timera. Przerwanie ma być co 100ms kwarc mam 8MHz.

    Czy dobrze to jest? skąd się to 12500 wzięło jak mi wychodzi 8000000/64=125000?
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 11807248
    Fredy
    Poziom 27  
    djlukas napisał:
    Witam

    Mam napisany taki kod do obsługi timera. Przerwanie ma być co 100ms kwarc mam 8MHz.

    Czy dobrze to jest? skąd się to 12500 wzięło jak mi wychodzi 8000000/64=125000?
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    To co obliczyłeś , czyli 125000 to ilość przerwań w czasie 1 sek.
    Ale jak chcesz w ciągu 100ms to masz 0.1 * 125000=12500
  • REKLAMA
  • #3 11808683
    Konto nie istnieje
    Poziom 1  
  • #4 11808817
    mirekk36
    Poziom 42  
    djlukas --> zastanów się przede wszystkim po co korzystasz z trybu NORMAL timera zamiast CTC, przecież w CTC byłoby 100x prościej, łatwiej, wygodniej, szybciej i optymalnie ;)

    a dodatkowo obliczenie częstotliwości występowania przerwań proste jak drut - wystarczy obliczyć wartość w rejestrze porównania OCR. Np chcesz uzyskać przerwanie co 100ms (czyli 10Hz) więc:

    F_CPU / preskaler / freq = OCRx

    8000000 / 1024 / 10 = 781

    czyli konfigurujesz timer w tryb CTC , przy inicjalizacji wpisujesz do rejestru OCR1A liczbę 781 i masz przerwania mniej więcej co 100 ms ;)
  • REKLAMA
  • #5 11808874
    Fredy
    Poziom 27  
    emarcus napisał:
    Nie , to nie jest ilośc przerwań. (!)


    oczywiscie że "przejęzyczyłem się".
  • REKLAMA
  • #6 11809436
    BlueDraco
    Specjalista - Mikrokontrolery
    Natomiast jeśli chcesz mieć przerwania dokładnie co 100 ms, to dajesz preskaler 64. Wtedy częstotiwość zegara timera masz 125000 Hz i aby uzyskać 10 Hz w trybie CTC masz odliczyć do 12500, czyli ustawić rejestr porównania na 12499.
  • #7 13879912
    djlukas
    Poziom 27  
    Projekt zakończony i działa prawidłowo. Zamykam
REKLAMA