PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 16Bit Timer/Counter 1 bei ATmega8 | Hilfe zu den Registern



Sauginius
31.05.2005, 16:14
Hallo,
bin gerade dabei ein Programm für den 16Bit Timer/Counter zu schreiben.
Dabei sollen externe Pulse gezählt und bei erreichen eines vorgegebenen Wertes, eine Routine abgearbeitet werden.

Ich brauch nur Hilfe bei den Registern, ich verliere die Übersicht. [-o<

TCCR1A: Da brauch ich nichts einstellen??
TCCR1B: (1<<CS12) | (1<<CS11) --> Externe "Clock Source" an Pin T1 (fallende Flanke)
Wo liegt der Unterschied zwischen ICP1 (Input Capture Pin 1) und Pin T1?

OCR1AH, OCR1AL: Muss ich in das Register den Vergleichswert schreiben?
TIMSK: (1<<OCIE1A) --> Output Compare A Match Interrupt Enable

Stimmt das so oder hab ich mich bei den Registern vertan? :-k

SprinterSB
09.06.2005, 15:14
Hi auch,

Wenn ichs recht überblicke, dann:
TCCR1A = 0, und in
TCCR1B: ClockSelect auf b110 und CTC1 (aka WGM12) = 1 (Clear Timer on CompareMatch), so daß sich Timer1 beim Erreichen von MAX auf 0 zurücksetzt.
TIMSK |= (1<<OCIE1A) ist ok, den Compare-Wert schreibst du wie angedacht nach OCR1AL:OCR1AH
Und nicht vergesses, global Interrupts zu aktivieren.
TCNT1L = 0
TCNT1H = 0
damit du bei 0 anfängst zu zählen.
Input Capture dient dazu, Zeiten zu messen. Bei einem Ereignis am ICP -- das kann auch der AnalogComparator sein -- wird der momentane Stand von Timer1 gemerkt. Damit lässt sich zB sehr einfach ein Kapazitätsmessgerät aufbauen.

Gruß, Johann