C Control unterschiedliches Timerverhalten (Timer1 und 3)

Gast #3327022
Lesenswert?
• ▲
▼
Hallo zusammen,

ich arbeite mit dem C Control Mega 128 CAN. Momentan generiere ich eine 
PWM mit dem Timer 1 und lese diese wieder mit dem Timer 3 ein. Das 
funktioniert richtig. Generiere ich nun jedoch mit dem Timer 3 die PWM 
und lese diese mit dem Timer 1 ein bekommt er nicht die richtigen Werte.

Ich denke dass mir irgendeine Einstellung fehlt zum Beispiel dass dieser 
Pin nun auf input Timer 1 gestellt wird.

Der Code ist wie folgt:



// Deklaration der Formatierungsvariablen
#define SPACE 0x20
#define CR 13

word PM_Wert;                                   // globale 
Variablendeklaration
//---------------------------------------------------------------------- 
--------
// Messung
//
void Timer1_ISR(void)
{
    PM_Wert=Timer_T1GetPM();                    // Messwert auslesen
    Irq_GetCount(INT_TIM1CAPT);                 // Interrupt 
zurücksetzen
}

//---------------------------------------------------------------------- 
--------
// Hauptprogramm
//
void main(void)
{
    byte n;
    word i;
    n=0;
    Irq_SetVect(INT_TIM1CAPT,Timer1_ISR);       // Interrupt Service 
Routine definieren
    // wir benutzen Timer 3 anstatt Timer 1 beim Mega128 da es sonst 
eine
    // Pin Kollision bei PB.4 mit OC0 und RX-BUSY gibt
    Timer_T3PWM(256,32,PS_64);                  // Pulsgenerator
                                                // Puls=4 µs*32= 128 µs
                                                // Periode=4 µs*256= 
1024 µs
    // die Messung beginnt hier
    // Timer Output verbinden mit ICP (input capture pin) Timer1
    while (1)
    {

        //Timer_T1PM(0,PS_64);                     // Pulsmessung 
initialisieren und starten
        Timer_T1PM(1,PS_64);                     // Periodenmessung 
initialisieren und starten
        while (PM_Wert==0);                     // Pulsbreite und 
Periode messen
        Timer_Disable(1);
        Msg_WriteHex(n);                        // Anzahl Durchläufe 
ausgeben
        Msg_WriteChar(SPACE);
        Msg_WriteWord(PM_Wert);                 // Wert ausgeben
            PM_Wert=0;
        Msg_WriteChar(CR);
        //AbsDelay(1000);                          // Delay 500ms
        n++;
    }
}

Warum sind beide Timer unterschiedlich im Verhalten und wie kann ich dem 
Timer 1 das richtige Verhalten eintrichtern???

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.