sonium
14.01.2006, 10:56
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
int wait(time)
{
int i = 0;
TCNT0 = 0;
while(1)
{
if (TCNT0 % 16 == 0) i++;
if (i == time) return 0;
}
}
int main()
{
TCCR0 |= (1<<CS00)|(1<<CS02);
DDRC = 0xFF; // Alle Pins von Port C auf Write setzten
int time = 1000;
PORTC = 0xFF;
while(1)
{
PORTC |= (1<<2);
wait(time);
PORTC &= ~(1<<2);
wait(time);
}
return 0;
}
mit diesem Code sollte mein Atmega32 an nem 16Mhz Quarz Eigentlich einmal in der Sekunde blinken.
In wirklichkeit blinkt es aber um einiges schneller und die geschwindigkeit ist zudem noch Optimierungsabhängig.
Was ist los?
#include <avr/interrupt.h>
#include <avr/signal.h>
int wait(time)
{
int i = 0;
TCNT0 = 0;
while(1)
{
if (TCNT0 % 16 == 0) i++;
if (i == time) return 0;
}
}
int main()
{
TCCR0 |= (1<<CS00)|(1<<CS02);
DDRC = 0xFF; // Alle Pins von Port C auf Write setzten
int time = 1000;
PORTC = 0xFF;
while(1)
{
PORTC |= (1<<2);
wait(time);
PORTC &= ~(1<<2);
wait(time);
}
return 0;
}
mit diesem Code sollte mein Atmega32 an nem 16Mhz Quarz Eigentlich einmal in der Sekunde blinken.
In wirklichkeit blinkt es aber um einiges schneller und die geschwindigkeit ist zudem noch Optimierungsabhängig.
Was ist los?