Re: Timer mit 100µs Kategorie: Programmierung C (von PeterS - 8.07.2006 13:06) | ||
Als Antwort auf Re: Timer mit 100µs von PeterS - 8.07.2006 12:39 | ||
| ||
Hallo ich opimiere mal das ganze Programm. Da ich unter Stress stehe kann ich es nicht testen, aber sollte bis auf Syntax Fehler funktioieren: void main(void) { Port_DataDirBit(0,1); //Port PA.0 auf Ausgang Port_DataDirBit(1,1); //Port PA.1 auf Ausgang Port_WriteBit(0,0); //Ausgang PA.0 wird zurückgesetzt Port_WriteBit(1,0); while (true) { busy=1; Irq_SetVect(INT_TIM3COMPA,Timer3_ISR_1); Timer_T3Time(30,PS_64); // Differenzzeit 30 x 4,34µs while (busy); // warten auf IRQ busy=1; Irq_SetVect(INT_TIM3COMPA,Timer3_ISR_2); Timer_T3Time(50,PS_64); // Aus-Zeit festlegen und Timer1 starten while (busy); Port_WriteBit(0,0); // Port 50 zurücksetzen Port_WriteBit(1,0); // Port 51 zurücksetzen } } void Timer3_ISR_1(void) { Port_WriteBit(0,1); // Port 51 setzen busy=0; Irq_GetCount(INT_TIM3COMPA); } void Timer3_ISR_2(void) { Port_WriteBit(1,1); // Port 50 setzen busy=0; Irq_GetCount(INT_TIM3COMPA); } Ich hoffe das Primzip ist klar. Gruss Peter > Hi, > > ich konnte mich wegen Urlaubs nicht um das Forum kümmern, deshalb verspätet: > > Pack das "Port_WriteBit(1,1); // Port 50 setzen" doch direkt in die ISR: > > void Timer3_ISR(void) > { > Port_WriteBit(1,1); // Port 50 setzen > irq_GetCount(INT_TIM3COMPA); > } > > das sollte min doppelt so schnell gehen wie die vorherige Methode. Wenn man den Wert von "irqcnt" > nicht braucht, kann man sich die Zuweisung auch sparen. > > Man kann in einer Interruptroutine alles machen. > > Gruss Peter > > > Hallo, > > 2 Ports sollen nacheinander eingeschaltet werden (Differenzzeit). > > Die Zeit dazwischen 100µs, die Auszeit ist unkritisch. > > Bei 300µs ist Schlu�, kürzer geht offentsichtlich nicht. (Interpreter zu langsam?) > > > > Lä�t sich das Problem überhaupt lösen? > > > > Gru� Klaus > > > > void main(void) > > { > > Port_DataDirBit(0,1); //Port PA.0 auf Ausgang > > Port_DataDirBit(1,1); //Port PA.1 auf Ausgang > > Port_WriteBit(0,0); //Ausgang PA.0 wird zurückgesetzt > > Port_WriteBit(1,0); > > Irq_SetVect(INT_TIM3COMPA,Timer3_ISR); > > > > while (true) > > { > > Timer_T3Time(30,PS_64); // Differenzzeit 30 x 4,34µs > > Port_WriteBit(0,1); // Port 51 setzen > > busy=1; > > while (busy==1); // warten auf IRQ > > Port_WriteBit(1,1); // Port 50 setzen > > Timer_T3Time(50,PS_64); // Aus-Zeit festlegen und Timer1 starten > > busy=1; > > while (busy==1); > > Port_WriteBit(0,0); // Port 50 zurücksetzen > > Port_WriteBit(1,0); // Port 51 zurücksetzen > > } > > } > > > > void Timer3_ISR(void) > > { > > int irqcnt; > > busy=0; > > irqcnt=Irq_GetCount(INT_TIM3COMPA); > > } | ||
Antwort schreiben Antworten: Re: Timer mit 100µs (von Klaus B. - 10.07.2006 10:08) Re: Timer mit 100µs (von PeterS - 10.07.2006 10:39) Re: Timer mit 100µs (von Klaus B. - 10.07.2006 16:03) Re: Timer mit 100µs (von PeterS - 10.07.2006 17:53) Re: Timer mit 100µs (von Klaus B. - 11.07.2006 7:43) Re: Timer mit 100µs (von Klaus B. - 13.07.2006 6:44) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum