WarChild
02.05.2008, 02:38
Hi,
ich wollte einen Timer erstellen, der schneller als die standard timer arbeitet.
Der Timer 1 ist schließlich noch frei, also habe ich mal einfach drauf losprogrammiert, um einen 5us-Timer zu erzeugen
Der Prescaler ist 1 und der Preloader ist 175 (255-80).
(1/16MHz)*80 = 5us
soweit zur Theorie, aber in der Praxis funzt es nicht.
Meine Erfahrung mit Timern ist gleich 0.
volatile uint16_t fast_timer;
ISR (TIMER1_COMP_vect)
{
fast_timer++;
TCNT2 = 175; // Nachladen
}
void setFastTimer(uint16_t time)
{
fast_timer = time;
}
uint16_t getFastTimer(void)
{
return fast_timer;
}
//...weiter unten in initRP6Control() habe ich außerdem noch folgendes ergänzt:
// Timer 1 - creates an interupt every 5us (is free for your application!)
TCCR1 |= (0 << CS12) | (0 << CS11) | (1 << CS10); //Count frenquenzy set to 16MHz
TCNT1 = (175); //preloader
TIMSK |= (1<<TOIE2);
Vielleicht könnt ihr mir sagen was ich da falsch gemacht habe?
Ich habe die Funktionen ähnlich der Stopwatches gehalten, aber beim übersetzen kommt folgende Fahlermeldung:
Compiling: ../../RP6Lib/RP6control/RP6ControlLib.c
avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=../../RP6Lib/RP6control/RP6ControlLib.lst -I../../RP6Lib -I../../RP6Lib/RP6control -I../../RP6Lib/RP6common -std=gnu99 -MD -MP -MF .dep/RP6ControlLib.o.d ../../RP6Lib/RP6control/RP6ControlLib.c -o ../../RP6Lib/RP6control/RP6ControlLib.o
../../RP6Lib/RP6control/RP6ControlLib.c:749: warning: 'TIMER1_COMP_vect' appears to be a misspelled signal handler
../../RP6Lib/RP6control/RP6ControlLib.c: In function 'initRP6Control':
../../RP6Lib/RP6control/RP6ControlLib.c:924: error: 'TCCR1' undeclared (first use in this function)
../../RP6Lib/RP6control/RP6ControlLib.c:924: error: (Each undeclared identifier is reported only once
../../RP6Lib/RP6control/RP6ControlLib.c:924: error: for each function it appears in.)
make: *** [../../RP6Lib/RP6control/RP6ControlLib.o] Error 1
> Process Exit Code: 2
> Time Taken: 00:00
vielen Dank für eure Hilfe
mfg WarChild
ich wollte einen Timer erstellen, der schneller als die standard timer arbeitet.
Der Timer 1 ist schließlich noch frei, also habe ich mal einfach drauf losprogrammiert, um einen 5us-Timer zu erzeugen
Der Prescaler ist 1 und der Preloader ist 175 (255-80).
(1/16MHz)*80 = 5us
soweit zur Theorie, aber in der Praxis funzt es nicht.
Meine Erfahrung mit Timern ist gleich 0.
volatile uint16_t fast_timer;
ISR (TIMER1_COMP_vect)
{
fast_timer++;
TCNT2 = 175; // Nachladen
}
void setFastTimer(uint16_t time)
{
fast_timer = time;
}
uint16_t getFastTimer(void)
{
return fast_timer;
}
//...weiter unten in initRP6Control() habe ich außerdem noch folgendes ergänzt:
// Timer 1 - creates an interupt every 5us (is free for your application!)
TCCR1 |= (0 << CS12) | (0 << CS11) | (1 << CS10); //Count frenquenzy set to 16MHz
TCNT1 = (175); //preloader
TIMSK |= (1<<TOIE2);
Vielleicht könnt ihr mir sagen was ich da falsch gemacht habe?
Ich habe die Funktionen ähnlich der Stopwatches gehalten, aber beim übersetzen kommt folgende Fahlermeldung:
Compiling: ../../RP6Lib/RP6control/RP6ControlLib.c
avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=../../RP6Lib/RP6control/RP6ControlLib.lst -I../../RP6Lib -I../../RP6Lib/RP6control -I../../RP6Lib/RP6common -std=gnu99 -MD -MP -MF .dep/RP6ControlLib.o.d ../../RP6Lib/RP6control/RP6ControlLib.c -o ../../RP6Lib/RP6control/RP6ControlLib.o
../../RP6Lib/RP6control/RP6ControlLib.c:749: warning: 'TIMER1_COMP_vect' appears to be a misspelled signal handler
../../RP6Lib/RP6control/RP6ControlLib.c: In function 'initRP6Control':
../../RP6Lib/RP6control/RP6ControlLib.c:924: error: 'TCCR1' undeclared (first use in this function)
../../RP6Lib/RP6control/RP6ControlLib.c:924: error: (Each undeclared identifier is reported only once
../../RP6Lib/RP6control/RP6ControlLib.c:924: error: for each function it appears in.)
make: *** [../../RP6Lib/RP6control/RP6ControlLib.o] Error 1
> Process Exit Code: 2
> Time Taken: 00:00
vielen Dank für eure Hilfe
mfg WarChild