Hallo,

ich möchte euch mal um Hilfe bitten.
Ich habe einen Atmega8-16pu, welcher mit 9,6 MHz getaktet ist.
Nun wollte ich als Test 8 Leds nach einander im Zeitinterval von 1s schalten.
Naja dies funktioniert nicht so richtig.
Wenn ich einen Vorteiler von 1024 benutze , würd die schaltung sehr langsam.
Wenn ich aber nur einen Teiler von 64 benutze, funktioniert es so etwa genau.

(edit: mit 64 funtkioniert auch nur so langsam... )

#include <avr/io.h>
#include <io.h>
#include <util/delay.h>

int ATRoutine(void);


/*int ATTimer16(unsigned char ucStart);
int ATTimer8();
int ATInput(unsigned char ucPortnumber, unsigned char ucIO);
int ATOutPut
*/

int ATRoutine(void)
{
unsigned char i = 0;
unsigned int t = 0;
unsigned char ucLumiMAX = 0;



TCCR0 = (1<<CS02)+(1<<CS00);
//TIFR |= (1<<TOV0);
//TIMSK |= (1<<TOIE0);

while(1)
{

if(TIFR & (1<<TOV0)) //* TimerOverflow
{
TIFR |= (1<<TOV0);
t++;
}

if(t == 37)
{
t=0;
PORTD = (1<<i);

if(i == 7)
{
ucLumiMAX = 1;
}

if(i == 0)
{
ucLumiMAX = 0;
}

if(ucLumiMAX)
{
i--;
}
else
{
i++;
}
}
}

return 1;
}

int ATInitIO(void)
{
//* Ausgaenge
DDRD = 0xff;
PORTD = 0x00;

//* Eingaenge
DDRB = 0x00;
PORTB = 0x00;

return 1;
}

int main(void)
{
/* if(ATInitIO())
if(!ATRoutine())
{
//* Fehlermeldung wenns Zyklus fehlerhaft war
}
else
{
//* Fehlermeldung wenns Init fehlerhaft war
}*/
TCCR0 = 0x05;
ATInitIO();
ATRoutine();

return 0;
}