Edi
29.10.2006, 15:41
Hallo,
ich habe versucht, auf meinem STK500 ein Lauflicht zu implementieren, bei dem die Verzögerungen mittels Timer0 erzeugt werden, mein Programmcode sieht wie folgt aus:
#include <avr/io.h>
#include <avr/interrupt.h>
#define SIG_CNT_LIMIT 10
unsigned short i=0; /* count interrupt events */
volatile int zaehler=1;
int up=1;
void init_timer0(void);
ISR(TIMER0_COMP_vect)
{
i++;
/* Did the counter exceed the limit? */
if (i>=SIG_CNT_LIMIT )
{
i=0;
//PORTB = ~zaehler;
if(up == 1)
zaehler = zaehler * 2; //Zaehlerwert auf naechste LED erhoehen
else
zaehler = zaehler / 2; //Zaehlerwert auf naechste LED erniedrigen
if(zaehler == 128) //um von der letzten LED rückwaerts zu laufen, up = 0
up = 0;
else if (zaehler == 1) //um von der ersten LED wieder nach oben zu laufen
up = 1;
}
}
void init_timer0()
{
/* clear timer if timer value matches compare value. */
/* CTC Mode in Register TCCR0*/
TCCR0=(1<<WGM01)|(0<<WGM00);
/* set clock divider to "1024" at position CS00..02 */
TCCR0=(1<<CS02)|(1<<CS01)|(1<<CS00);
/* set timer compare value to 0xFF (=255, 3.68MHz/1024/255)*/
OCR0=0xFF; /* highbyte of compare register */
/* enable compare1a interrupt in the interrupt mask register */
TIMSK=(1<<OCIE0);
/* reset current timer value */
TCNT0=0; /*Timer counter 0*/
}
/* This is the main function. */
int main(void)
{
init_timer0();
DDRB = 0xFF; // all pins are output
DDRA = 0x00;
PORTB=0xFF;
sei();
for(;;)
{
PORTB = ~zaehler; //Ausgabe des aktuellen Zaehlerwertes
}
}
Bekomme beim erstellen zwar keinen Error, aber ich sehe auch kein Lauflicht, kann mir jemand sagen, woran es liegen kann?[/code]
ich habe versucht, auf meinem STK500 ein Lauflicht zu implementieren, bei dem die Verzögerungen mittels Timer0 erzeugt werden, mein Programmcode sieht wie folgt aus:
#include <avr/io.h>
#include <avr/interrupt.h>
#define SIG_CNT_LIMIT 10
unsigned short i=0; /* count interrupt events */
volatile int zaehler=1;
int up=1;
void init_timer0(void);
ISR(TIMER0_COMP_vect)
{
i++;
/* Did the counter exceed the limit? */
if (i>=SIG_CNT_LIMIT )
{
i=0;
//PORTB = ~zaehler;
if(up == 1)
zaehler = zaehler * 2; //Zaehlerwert auf naechste LED erhoehen
else
zaehler = zaehler / 2; //Zaehlerwert auf naechste LED erniedrigen
if(zaehler == 128) //um von der letzten LED rückwaerts zu laufen, up = 0
up = 0;
else if (zaehler == 1) //um von der ersten LED wieder nach oben zu laufen
up = 1;
}
}
void init_timer0()
{
/* clear timer if timer value matches compare value. */
/* CTC Mode in Register TCCR0*/
TCCR0=(1<<WGM01)|(0<<WGM00);
/* set clock divider to "1024" at position CS00..02 */
TCCR0=(1<<CS02)|(1<<CS01)|(1<<CS00);
/* set timer compare value to 0xFF (=255, 3.68MHz/1024/255)*/
OCR0=0xFF; /* highbyte of compare register */
/* enable compare1a interrupt in the interrupt mask register */
TIMSK=(1<<OCIE0);
/* reset current timer value */
TCNT0=0; /*Timer counter 0*/
}
/* This is the main function. */
int main(void)
{
init_timer0();
DDRB = 0xFF; // all pins are output
DDRA = 0x00;
PORTB=0xFF;
sei();
for(;;)
{
PORTB = ~zaehler; //Ausgabe des aktuellen Zaehlerwertes
}
}
Bekomme beim erstellen zwar keinen Error, aber ich sehe auch kein Lauflicht, kann mir jemand sagen, woran es liegen kann?[/code]