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

[Atmega8] - Timer1 CTC, dioda miga co 10s zamiast 5s, 8MHz, preskaler 256

plol6 22 Lis 2013 23:40 1161 3
REKLAMA
  • #1 12982197
    plol6
    Poziom 9  
    Witam,
    napisałem program na moja atmege8l który ma za zadanie co 5s zapalać i gasić diodę z wykorzystaniem 16bitowego Timera1 w trybie CTC.
    Wyliczyłem, że jeśli mam uC taktowany 8MHz to przy zastosowaniu prescalera 256 flaga OCF1A powinna być ustawiana co 1hz, przy ustawieniu rejestru OCR1A na 31250. Jeśli za każdym ustawieniem flagi będę ją kasował i zwiększał zmienną flags o 1 to 5s osiągnę w momencie gdy flags będzie mieć wartość 5. W teorii chyba się nie pomyliłem(chyba, że moje wyliczenia są błędne)? Jednak po napisaniu programu i wgraniu program nie do końca działa tak jak chciałem. Zamiast co 5s zapalać i kolejne 5s gasić to dioda jest zapalana i gaszona co ok.10s.
    Atmege taktuję wewnętrznym zegarem ale chyba nie ma on aż takiej nie dokładności.
    Mój kod:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • Pomocny post
    #2 12982260
    excray
    Poziom 41  
    Bo WGM12 jest w TCCR1B a nie w TCCR1A. W tym momencie Twój licznik pracuje w trybie Normal i liczy do 65536 i raz na taki cykl ustawia flagę od porównania czyli co 2,09 sekundy.
  • REKLAMA
  • #4 12987363
    plol6
    Poziom 9  
    Faktycznie, popatrzyłem do noty i jest tak jak mówicie. WGM11 i WGM10 są w TCCRA1 a WGM12 jest w TCCRB1. To pewnie było też problemem, że dioda zapalała się a po pół sekundy zapalała się jaśniej.

    Tak jak sugerował Dondu wykorzystałem przerwanie.
    Dzięki za pomoc
REKLAMA