Gast
#1577131
Hallo,
ich versuche mit folgender Routine einen Impuls zu messen und wieder
auszugeben
//Timer0
TIMSK = (1 << TOIE0 ) | (1 <<OCIE1A ); // enable overflow
interrupt
//TCCR0B = ( 1 << CS02 ); //prescale => cpu clock/256 bei 1Mhz =
256us
//TCNT0 = 217; //255 - 217 = 39 x 256us = 9.984ms
GIMSK = (1 << PCIE);
PCMSK = (1 << PCINT0);
sei(); // enable interrupts
/***********************************************************************
***********************/
/* SIGNAL Pin Change Interrupt
*/
/***********************************************************************
***********************/
SIGNAL(SIG_PIN_CHANGE)
{
if ( PINB & (1<<PINB0) ) {
TCNT1 = 0; // Timer1 Reset
TCCR1 = ( 1 << CS10 | 1 << CS12 ); // Timer1 cpu clock/16 MCU start
}
if ( !(PINB & (1<<PINB0)) ) {
Pulsdauer = TCNT1; // Timer1 Wert = Pulsdauer
TCNT1 = 0; // Timer1 Reset
OCR1A = Pulsdauer;
PORTB |= (1<<PB2); //High
}
}
/***********************************************************************
***********************/
/* Timer/Counter1 Compare Match A
*/
/***********************************************************************
***********************/
SIGNAL(SIG_OUTPUT_COMPARE1A)
{
TCCR1 = 0x00; // Timer1 Stoppen
PORTB &= ~(1<<PB2);
}
Das Problem ist das mein Timer Wert TCNT1 nicht immer das richtig
Ergebnis enthält. Um zu sehen ober der Puls richtig erkannt wird haben
ich einfach mal OCR1A = 100; eingebaut, daran sieht man das der
Ausgangspuls dann stabil bleibt, d.h irgendwie läuft der Timer1 nicht
sauber?? was mache ich Falsch?
Gruss Patrick