Pulsmessung Kategorie: Programmierung C (von Josef - 8.08.2009 23:05) | ||
| ||
Hallo, bin ein neuling bei der ccontrol pro, habe nach dem Puls und Periodenmessdemoprogramm einen UTI Baustein am den IC von Timer3 gehängt. es hat nicht funktioniert. Habe zum Testen wieder Timer1 Frequenzgenerator und Timer3 Pulsmssung zusammengehängt und einige Teile vom UTI Programm belassen. // Dieses Demo Programm ist nur für Mega128 #ifdef MEGA32 #pragma Error " Timer3 nur für Mega128 " #endif // Deklaration der Formatierungsvariablen #define SPACE 0x20 #define CR 13 #define PORT_UTI 2 // Port C #define PORTDIR_UTI 0x07 // UTI1=PortC.0, UTI2=PortC.1, UTI3=PortC.2 int n, m; word PM_Wert, T_OFF1, T_OFF2, T_REF, T_X0, T_X1, T_X2; // globale Variablen char str[20]; //------------------------------------------------------------------------------ // Messung // void Timer3_ISR(void) { PM_Wert=Timer_T3GetPM(); // Messwert auslesen n++; Irq_GetCount(INT_TIM3CAPT); // Interrupt zurücksetzen } //------------------------------------------------------------------------------ // Hauptprogramm // void main(void) { n=0; m=0; PM_Wert=0; Irq_SetVect(INT_TIM3CAPT,Timer3_ISR);// Interrupt Service Routine definieren Timer_T1PWM(256,72,PS_1024); // Pulsgenerator // Puls=69,4 µs*72= 5 ms // Periode=69,4 µs*256= 17,7ms Port_DataDir(PORT_UTI,PORTDIR_UTI); Timer_T3PM(0,PS_64); // Pulsmessung initialisieren und starten Port_Write(PORT_UTI,0x01); // die Messung beginnt hier // Timer Output verbinden mit ICP (input capture pin) Timer1 while (1) { label1: switch(n) { case 1: T_OFF1=PM_Wert; break; case 2: T_OFF2=PM_Wert; break; case 3: T_REF=PM_Wert; break; case 4: T_X0=PM_Wert; break; case 5: T_X1=PM_Wert; break; case 6: T_X2=PM_Wert; break; } Msg_WriteText("TOFF1"); Msg_WriteWord(T_OFF1); Msg_WriteChar(SPACE); Msg_WriteText("PM"); Msg_WriteWord(PM_Wert); // Wert ausgeben Msg_WriteChar(SPACE); Msg_WriteInt(n); if (n!=6) goto label1; // fürs testen Msg_WriteWord(PM_Wert); // Wert ausgeben Msg_WriteChar(SPACE); Msg_WriteInt(m); Msg_WriteChar(SPACE); Msg_WriteInt(n); Msg_WriteChar(SPACE); Msg_WriteWord(T_OFF1); Msg_WriteChar(SPACE); Msg_WriteWord(T_OFF2); Msg_WriteChar(SPACE); Msg_WriteWord(T_REF); Msg_WriteChar(SPACE); Msg_WriteWord(T_X0); Msg_WriteChar(SPACE); Msg_WriteWord(T_X1); Msg_WriteChar(SPACE); Msg_WriteWord(T_X2); Msg_WriteChar(SPACE); Msg_WriteChar(CR); AbsDelay(500); // Delay 500ms n=0; } } hier nun die Ausgabe: Interpreter gestartet - 4kb RAM TOFF10 PM0 0PM0 0TOFF10 PM0 0TOFF10 PM0 0TOFF10 PM0 0TOFF10 PM0 1TOFF10 PM0 1TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 Anscheinend kommt das Programm nur 2mal in die interruptoutine und die Werte werden an T_OFF1 auch nicht übergeben. Habe die caseabfrage auch in der interruptroutine gehabt, hat auch nicht gfunkt. wenn berechnungen eingebaut werden z. B.: PM_WERT=PM_Wert*4.64 kommt null raus. Vielleicht kann mir jemand weiterhelfen? Gru� Josef | ||
Antwort schreiben Antworten: Re: Pulsmessung (von Josef - 9.08.2009 11:46) Re: Pulsmessung (von PeterS - 15.08.2009 21:51) Re: Pulsmessung (von Josef - 17.08.2009 19:09) Re: Pulsmessung (von ER - 20.08.2009 13:44) Re: Pulsmessung (von PeterS - 20.08.2009 14:52) Re: Pulsmessung (von Josef - 21.08.2009 10:37) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum