Gast
#1906420
Hallo zusammen!
Ich habe hier eine Delay-Funktion programmiert, die auf einem ATTiny
2313 mit 8Mhz laufen soll. Leider tut diese garnichts :-(
Ich würde mich sehr freuen wenn ihr mal kurz drüberschauen und
vielleicht einen (dummen Anfänger-)Fehler finden würdet ;-)
// Defines the different prescalers
typedef enum
{
PRESCALE_1,
PRESCALE_8,
PRESCALE_64,
PRESCALE_256,
PRESCALE_1024
} Prescaler;
// Wait micro (10^-6) seconds
void Timing_wait_us( uint us )
{
Timing_setupHardwareTimer( 8, PRESCALE_1, us );
Timing_startHardwareTimer();
}
// Sets up the registers to simplify timer usage
void Timing_setupHardwareTimer( uchar compareValue, Prescaler prescaler,
uint repititions )
{
// Store number of repetitions
timerRepititions = repititions;
// Clear counter on compare match
TCCR0A = (1 << COM0A1);
// Output compare register
OCR0A = compareValue;
// Prescaler
TCCR0B = (prescaler+1);
// Enable interrupts
TIMSK = 2;
}
// Starts the hardware timer and waits for it to finish
void Timing_startHardwareTimer( void )
{
// Reset timer
timerHasFinished = false;
TCNT0 = 0;
// Let's go
sei();
while( !timerHasFinished ) {;}
cli();
}
// Timer interrupt
ISR(TIMER0_OVF_vect)
{
if( timerRepititions > 0 )
{
timerRepititions--;
if( timerRepititions == 0 )
timerHasFinished = true;
}//end if
}