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: |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum