Forum: Mikrocontroller und Digitale Elektronik C Control unterschiedliches Timerverhalten (Timer1 und 3)


von Max (Gast)


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???

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.