@Peter S - Timer 0 läuft nicht stabil Kategorie: CC-Pro Unit & Appl.Board (von Hannes - 10.09.2008 8:14) | ||
| ||
Hallo Peter, ich möchte exakt 5ms nachdem ein Interrupt ausgelöst wurde eine Spannung messen. Zum Testen habe ich an INT0 ein stabiles Rechtecksignal von einem Frequenzgenerator mit einer Periodendauer von 20ms angeschlossen. Die positive Flanke triggert den INT0, dieser startet den Timer0 und nach 5ms wird die Spg. eingelesen. Zum Messen schalte ich bei der INT0 Routine und der Timer0 Routine eine LED kurz EIN + AUS. Zum Problem: Das INT0 Signal ist stabil vorhanden, und die 5ms Verzögerung passen, nur das Signal das der Timer auslöst zittert, d.h. die 5ms werden vom Timer nicht exakt reproduziert. Das Signal schwankt rund 100us hin und her, teilweise setzt es sogar ganz aus. Kann man das verbessern? Weil es bringt mir nichts, wenn man Timer0 mit 67.8ns auflösen kann, der Timer aber die Zeit nicht stabil reproduzieren kann. Gruss word ADCWert_L1; byte cnt1, Sekunde, Minute, Stunde, Sekunde_alt; void main(void) { SPI_Disable(); Serial_Init(0,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD38400); // Schnittstelle 0 LCD_Init(); // Display initialisieren LCD_ClearLCD(); // Display löschen LCD_CursorOff(); // Display Cursor ausschalten Port_DataDirBit(PORT_LED1,PORT_OUT); Port_WriteBit(PORT_LED1,PORT_OFF); Irq_SetVect(INT_0, Nulldurchgang_L1); // INT0 setzen für Nulldurchgang L1 (Port D.2) Ext_IntEnable(0,3); // INT0: Mode 3 = steig Flanke Irq_SetVect(INT_TIM0COMP,Timer0_ISR); // Interrupt Routine Timer 0 definieren while(1); } void Nulldurchgang_L1(void) // Aufruf bei steigender Flanke { int irqcnt; Timer_T0Time(72,PS0_1024); // Zeit (5ms) festlegen und Timer0 starten Port_WriteBit(PORT_LED1,PORT_OFF); // LED1 OFF Port_WriteBit(PORT_LED1,PORT_ON); // LED1 ON Impulsdauer Off-On 50us irqcnt=Irq_GetCount(INT_0); } void Timer0_ISR(void) // Aufruf 5ms nach Nulldurchgang der Wechselspg. { int irqcnt; Port_WriteBit(PORT_LED1,PORT_OFF); // LED1 OFF Timer_T0Stop(); // Timer0 anhalten ADC_Set(ADC_VREF_VCC, 0); // VREF für ADC0(=PortA.0) = VCC (5.000V) ADCWert_L1 = ADC_Read(); // Spitzenwert von L1 in den ADC irqcnt=Irq_GetCount(INT_TIM0COMP); Port_WriteBit(PORT_LED1,PORT_ON); // LED1 ON, Laufzeit LED1 OFF-ON ca. 400us } | ||
Antwort schreiben Antworten: Re: @Peter S - Timer 0 läuft nicht stabil (von Werner - 11.09.2008 8:59) Re: @Peter S - Timer 0 läuft nicht stabil (von Hannes - 12.09.2008 13:51) Re: @Peter S - Timer 0 läuft nicht stabil (von Werner - 13.09.2008 10:18) Re: @Peter S - Timer 0 läuft nicht stabil (von PeterS - 10.09.2008 18:33) Re: @Peter S - Timer 0 läuft nicht stabil (von Hannes - 11.09.2008 16:48) Re: @Peter S - Timer 0 läuft nicht stabil (von PeterS - 12.09.2008 14:27) Re: @Peter S - Timer 0 läuft nicht stabil (von Hannes - 12.09.2008 15:40) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum