Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > 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