Bei 4 Megaschweinen kriegst du mit
Vorteiler = 8 und
Zähler = 206
100 uS raus.
Wie kommst du auf 50 ?
Edit: Ich weiß schon, du mußt die 50 von 256 abziehen
Also 1. Mal möchte ich sagen, dass ich an einem wichtigen und dringendem Projekt arbeite und darum so am "threaden" bin... (Für die, die meinen ich versuche es nie selbst)
Für eine Frequenzmessung (Rechteck - 5V) benötige ich einen Timer-Interrupt alle 100us. Ich benutze dafür die CTC Funktion um nicht immer wieder den Timer Wert setzen zu müssen. Ich habe meiner Meinung nach alles so gemacht, damit es laufen sollte, jedoch stimmt irgendetwas noch nicht so ganz. Ich möchte mit dem 8er Vorteiler bei einem 4MHz Quarz den Wert auf 50 setzen, was mir theoretisch 100us geben sollte. Jedoch sind es nicht 100us sondern ca. 47us....!!
Ich habe hier mal den Code:
Meiner Meinung nach sollte nun alle 100us der Interrupt aufgerufen werden... Tja??? Weiss auch nicht was da los ist.Code:#include <avr/io.h> #include <avr/signal.h> #include <avr/interrupt.h> SIGNAL (SIG_OVERFLOW1) { PORT an dem die Frequenz gemessen wird, wird auf LOW/HIGH geprüft... } int main(void) { Ports initialisieren... TCCR1A=0x00; // Normale Port-Funktionen TCCR1B=0x0A; // CTC-Mode (No PWM), Prescaler:8; OCR1AH=0x00; OCR1AL=0x32; // Wert 50 ins Compare-Register laden TIMSK=0x04; // Timer1 Overflow Interrupt aktivieren sei(); // Interrupts aktivieren while(1) { irgendwas machen... } }
Ich hoffe ihr könnt helfen! Merci!
Bei 4 Megaschweinen kriegst du mit
Vorteiler = 8 und
Zähler = 206
100 uS raus.
Wie kommst du auf 50 ?
Edit: Ich weiß schon, du mußt die 50 von 256 abziehen
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hoppla... 50 von 256 abziehen... tja. Das wäre vielleicht mal ein Ansatz...
Aber ist im Timer1 der CTC überhaupt 8-bit? Nicht 16-bit... Tendiere zwar auf 8-Bit...
Kommt drauf an wie du Timer1 benutzt, der kann rauf und runterzählen.
Ausserdem ist's das falsche SIGNAL:
ist das, was du wahrscheinlich willst.Code:SIGNAL (SIG_OUTPUT_COMPARE1A)
Ich hatte hier mal'n Code gepostet, der Timer1 ganau so initialisiert. Zwar mit Prescale=1, aber das anzupassen schaffst du. Such halt mal in meinen Posts...
Lesezeichen