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++; > } > }