-         

Ergebnis 1 bis 4 von 4

Thema: CTC

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.07.2004
    Beiträge
    122

    CTC

    Anzeige

    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:
    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!

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    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.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.07.2004
    Beiträge
    122
    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...

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Kommt drauf an wie du Timer1 benutzt, der kann rauf und runterzählen.
    Ausserdem ist's das falsche SIGNAL:
    Code:
    SIGNAL (SIG_OUTPUT_COMPARE1A)
    ist das, was du wahrscheinlich willst.
    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...

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •