StevB
31.08.2007, 08:53
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;
}
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;
}