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