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 den Mega 128 CAN und versuche das Testprogramm PW_Messung zum laufen zu bekommen. Der Timer 1 > zaehlt allerdings nicht richtig. Tausche ich in dem Programm Timer 1 und Timer3 funktionierts. Jetzt die Frage. > Habe ich eine Einstellung vergessen und der Pin vom Timer eins hat noch eine andere Funktion die er versucht auszufuehren, > oder ist das ein Interruptproblem? > > Hier der Code: > > // PMessung: Pulsbreite und Perioden Messung mit TIMER1(16 Bit) > // Pulsweitenmodulation mit Timer 0 bzw. Timer 3 > // Die minimale messbare Pulsbreite/Periode=70µs mit 14,756MHz Abtastrate. > // erforderliche Library: IntFunc_Lib.cc > > // Mega32: Frequenzgeneratorausgang Timer0 PB3 (PortB.3) > // Zählereingang (input capture) PD6 (PortD.6) > // Der Output Timer0 OC0 PB3 (PortB.3) muss mit ICP (input capture pin) PD6 > // (PortD.6) verbunden werden. > // Mega128: Frequenzgeneratorausgang Timer3 PE3 (PortE.3) > // Zählereingang Timer1 (input capture) PD4 (PortD.4) > // Der Output Timer3 OC3 PE3 (PortE.3) muss mit ICP (input capture pin) PD4 > // (PortD.4) verbunden werden. > > //------------------------------------------------------------------------------ > // Über den Timer Prescaler wird das Teilungsverhältnis (Oszillatorfrequenz/ps) > // festgelegt. (14,7456MHz/ps) > // > /* > Vorteiler (prescaler) Zeitbasis (Dauer eines Ticks) > PS_1 (1) 67,8 ns > PS_8 (2) 542,5 ns > PS_64 (3) 4,34 µs > PS_256 (4) 17,36 µs > PS_1024 (5) 69,4 µs > */ > > // Deklaration der Formatierungsvariablen > #define SPACE 0x20 > #define CR 13 > > word PM_Wert; // globale Variablendeklaration > > //------------------------------------------------------------------------------ > // Messung > // > void Timer1_ISR(void) > { > PM_Wert=Timer_T1GetPM(); // Messwert auslesen > 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 > > #ifdef MEGA32 > Timer_T0PWM(32,PS0_64); // Pulsgenerator > // Puls=4,34 µs*32= 139 µs > // Periode=4,34 µs*256= 1111 µs > #endif > > #ifdef MEGA128 > // wir benutzen Timer 3 anstatt Timer 1 beim Mega128 da es sonst eine > // Pin Kollision bei PB.4 mit OC0 und RX-BUSY gibt > Timer_T3PWM(256,32,PS_64); // Pulsgenerator > // Puls=4,34 µs*32= 139 µs > // Periode=4,34 µs*256= 1111 µs > #endif > > // 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_1); // 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(500); // Delay 500ms > n++; > } > }