Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Timerunterschied Mega128 & Mega128CAN Kategorie: CC-Pro Unit & Appl.Board (von Max - 30.01.2014 16:43)
Als Antwort auf Re: Timerunterschied Mega128 & Mega128CAN von Torsten - 27.01.2014 19:25

> > Hallo zusammen,
> >
> > ich benutze das Mega 128 Application Board und den Mega128CAN. Mein Problem ist, dass
> > der Timer 3 einwandfrei funktioniert, Timer 1 mit dem identischen Code (natürlich T1 und T3
> > getauscht) aber nicht.
> > Die PWM wird auf PD4 beim T1 eingespeist.
> > Habe auch mal den Mega 128 mit dem selben Code getestet und dort funktionieren beide Timer
> > wie sie sollten.
> > Wird der Timer1 Interrupt irgendwie blockiert, da ich bei manchen Frequenzen einen viel zu
> > hohen Zählerwert bekomme? Wiederum andere Frequenzen werden einwandfrei gezählt.
> >
> > Hoffe jemand kann mir helfen oder das selbe mal nachstellen und mir das Ergebniss sagen, da ich schon ewig an diesem
> > Problem sitze.
> >
> > hier der Code:
> >
> > // Deklaration der Formatierungsvariablen
> > #define SPACE 0x20
> > #define CR 13
> >
> > word PM_Wert;                                   // globale Variablendeklaration
> > word Int;
> > //------------------------------------------------------------------------------
> > // Messung
> > //
> > void Timer1_ISR(void)
> > {
> >     PM_Wert=Timer_T1GetPM();                    // Messwert auslesen
> >     Int=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
> >
> >
> >
> >     // die Messung beginnt hier
> >     // Timer Output verbinden mit ICP (input capture pin) Timer1
> >     while (1)
> >     {
> >         PM_Wert=0;
> >         //Timer_T1PM(0,PS_1);                     // Pulsmessung initialisieren und starten
> >         Timer_T1PM(1,PS_256);                     // Periodenmessung initialisieren und starten
> >
> >         while (PM_Wert==0);                     // Pulsbreite und Periode messen
> >
> >         Msg_WriteHex(n);                        // Anzahl Durchläufe ausgeben
> >         Msg_WriteChar(SPACE);
> >         Msg_WriteWord(PM_Wert);                 // Wert ausgeben
> >         Msg_WriteChar(CR);
> >         AbsDelay(50);                          // Delay 500ms
> >         n++;
> >     }
> > }
>
> Hallo Max,
>
> also bei mir funktioniert das Demoprogramm "PMeasurement"
> mit Timer1 und Mega128Can auch nicht. Auch verschiedene
> andere Versuche haben kein Erfolg gehabt. Mit drei kleinen
> �nderungen lässt sich aber das Modul "IRControl" auch für
> die Messung von einzelnen Impulsen verwenden. Der Messfehler
> der bei den Messungen auftrit kommt dadurch zu Stande,
> weil wir keine ASM-Interrupte haben und das Inputcaptureflag
> nur pollen können. Für die Auswertung von Infrarotsignalen
> schien mir daÃ? nicht so schlimm. Siehe: "Timer1GetPuls-0.01.zip"
>
>  GruÃ? Torsten


Hallo Torsten,

super das tuts vollkommen!

Danke dir


    Antwort schreiben


Antworten: