surfer
22.07.2005, 19:29
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:
#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...
}
}
Meiner Meinung nach sollte nun alle 100us der Interrupt aufgerufen werden... Tja??? Weiss auch nicht was da los ist.
Ich hoffe ihr könnt helfen! Merci!
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:
#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...
}
}
Meiner Meinung nach sollte nun alle 100us der Interrupt aufgerufen werden... Tja??? Weiss auch nicht was da los ist.
Ich hoffe ihr könnt helfen! Merci!