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 > > > Hallo Torsten, > > super das tuts vollkommen! > > Danke dir