ATmega8 Timer1 Normal Mode
Dieses Code Example betreibt den Timer1 des ATmega8 im Normal Mode und lässt einen Ausgang toggeln.
Beschreibung Der 8MHz Clock des ATmega8 wird durch 1024 geteilt, so dass für den Timer1 Frequenz von 7812.5kHz zur Verfügung steht. In der Endlosschleife wird jeweils das MSB des Timer1 abgefragt. Dieses Toggelt, nachdem der ähler auf 2^15 gezählt hat. Dies findet mit einer Freuquenz von 7812.5kHz / 2^15 statt. Der Ausgang PC0 wird mit dieser Frequenz getoggelt. So entsteht am Ausgang ein Signal mit der Frequenz 7812.5kHz / 2^16 = 0.1192Hz. Dies entspricht einer Periode von 8.38s |
Please visit: the four |
C Sourcecode
#include <avr/io.h>
// Calculations in the comments
// are valid vor a CPU Clock of 8MHz
int main(void)
{
DDRC = 0x01; // Set PC0 as output
TCCR1B = (1<<CS12)|(1<<CS10); // Start timer1 with prescaler 1024
// Fclk_timer = 8MHz/1024 = 7812.5Hz
for(;;) // Endless loop;
{
if (TCNT1 & 0x8000) // Check the MSB of the timer
PORTC |= 0x01; // Set PC0
else
PORTC &= ~0x01; // Reset PC0
// F_PA0 = 7812.5Hz/(2^16)=0.1192Hz
// t_period_PC0 = 8.38s
} // main() will never be left
return 0; // This line will never be executed
}
Download C-Sourcefile mit ASCII-Schema: C-Sourcefile mit ACII-Schema
Signalplots
Gelb: Digitaler Ausgang PC0
|