Danke erstmal,
Pollen des Timeroverflowflags im letzten "while" würde auch gehen.
Ich hoffe ich habe deinen Tipp richtig verstanden und umgesetzt. Der Code funktioniert so weit, allerdings bin ich mit der geringen Auflösung nicht ganz zufrieden.
Code:
#include <stdlib.h>
#include <stdio.h>
#include <avr/io.h>
#include <inttypes.h>
#include <util/delay.h>
#include "asuro.h"
int main(void)
{
Init();
uint16_t ergebnis;
char buffer [20];
ergebnis = 0;
while (1)
{
DDRC |= (1<<PC3); // PC3 Ausgang
PORTC |= (1<<PC3); // PC3 High
_delay_us(20); // warte 20 µSekunden
PORTC &= ~(1<<PC3); // PC3 Low
DDRC &= ~(1<<PC3); // PC3 Eingang
while(!(PINC & (1<<PC3))); // tue solange PC3 nicht 1 ist nichts
TCCR1B = (1<<CS11); // starte timer Prescaler 8 (Quarz 8Mhz)
TCNT1 = 0; // setze Timer0 auf 0
while((PINC & (1<<PC3)))
{
if (TIFR & (1<<TOV1))
{
ergebnis = ergebnis + 1;
TIFR = (1<<TOV1);
}
}
TCCR1B &= ~(1<<CS11); // Stoppe timer
itoa(ergebnis, buffer, 10); //übersetze (int)ergebnis in ASCII
ergebnis = 0;
SerPrint("\n\r Wen Ergebnis: \n\r");
SerPrint(buffer); //übertragung des Ergebnisses über RS232
_delay_ms(500); //warte 500ms
}
}
Ich habe mich auch im Wiki über Overflow ISR schlau gemacht. Das bedeutet doch, dass eine Variable in einem Interrupt die Overflows zählt? Ich dachte mir, dass es so wie ich es jetzt gemacht habe einfacher ist.
Was ist "normal" in diesem Zusammenhang, bzw. warum sollte der Timerbetrieb hier un-normal sein ?
Der Timer könnte doch auch im CTC Modus laufen. Wenn der Timer im CTC modus läuft, bedeutet das dann, dass ich eine Zahl vorgeben kann bis der Overflow passiert. Zum Beispiel so, dass der Timer von 0 - 500 zählt bis ein Overflow geschieht? (Da bin ich noch ein wenig verwirrt)
MfG Maxtronik
Lesezeichen