Niine schrieb:
> Auffallend ist noch, das die eig 300ms zwischen Test1/Test2 viel mehr
> ist. Die Frequenz von 8Mhz hab ich bei Symbols im Projektmenü im
> AtmelStudio eingestellt.
Etwa 8-mal so viel? Dann solltest du dir mal anschauen, ob der MC vllt.
noch im Auslieferzustand ist. In diesem Fall ist nämlich die CLKDIV Fuse
gesetzt und der MC läuft mit 1 MHz statt mit 8.
> int counter=0;
Variablen, die auch in einer ISR geändert werden, solltest du immer als
'volatile' angeben, damit der Compiler weiss, das sie benutzt werden. Im
allgmeinen sind ISRs für den Compiler erstmal Unterroutinen, die nicht
angesprungen werden.
Und dir ist klar, das 'int' eine 16-bit Variable ist? Wenn es das
wirklich sein soll, musst du 'atomic' Zugriffe gestalten, da es sonst
passieren kann, das die eine Hälfte der Variable bearbeitet wurde und
dann ein Interrupt zuschlägt, wodurch die andere Hälfte (AVRs sind ja
8-bitter) evtl. vermurkst wird.
Besser ist es, eindeutige Typen zu nehmen:
uint8_t ist immer ein Byte ohne Vorzeichen
uint16_t ein Word ohne Vorzeichen usw.
> Nun wollte ich bei einer Messung einen schnellen Timer starten und
> sobald das High Signal anliegt die Dauer messen und wenn es vorbei ist,
> den Counter auswerten, damit ich die Zeitdauer habe.
Schau dir dafür den Input Capture Modus an. Das scheint mir genau das zu
sein, was du suchst.
> TCCR1A = 0x00;
> TCCR1B = (1<<CS11); //Prescaler 8, CTC-Mode
Nö, ist kein CTC Modus. Du startest einfach nur den Timer.
> ISR(TIMER0_COMPA_vect) //Timer alle 5 Mikrosekunden!
Du hast eine ISR für Timer 0 geschrieben, programmierst aber Timer 1.
Das wird abstürzen.