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 Forenuser, > > ich benötige erneut eure Hilfe, hatte den Beitrag schon mal gepostet aber keine zufriedenstellende > Antwort erhalten (Ulli: vielen Dank für Deinen Tipp: der Nachteil an PWM ich kann die Pulse nicht > genau zählen was aber Bedingung ist oder ?????) > > Ich möchte eine Schrittmotoransteuerung mit dem CControl realisieren. Die Endstufenkarte des > Steppers verlangt ein Step/Direction Signal. Mein Frage ist dabei wie kann ich solche Steps > erzeugen die im Bereich von 0..25kHz.Bedingung ist das ich genau weis wieviele Pulse ausgegeben > wurden= Weginfo. > - Ist es sinnvoll das mit dem Timer zu realisieren oder mit Absdelay? > - Gibt es eventuell eine Lib oder Funktion dafür? > - Mein Beispiel von unten funktioniert einwandfrei, ist nur viel zu langsam. Egal welchen Preteiler / > Zählkonstante ich verwende, diese Routine mit ISR kommt nicht über 800Hz! > - Gibt es eine andere Lösung? > - Kann ich diese ISR mit Timer mit der neuen IDE in Assembler programmieren und ist sie dann > schneller? Gibt es evtl. schon Assembler Doku mit Beispielen für die neue IDE?? > > Schon mal vielen Dank für die Hilfe > Jürgen > > <b>Beispiel:</b> > #define AnzSteps = 2000 // Anz.Steps bis Schleife abbricht > byte busy; // globale Variablendeklaration > word stepcount; // zählt die anzahl der perioden = steps > > void Timer0_ISR(void) > { > busy=0; > //Timer_T0Stop(); //das bring nichts, laut beispiel!? > Irq_GetCount(INT_TIM0COMP); > } > > void main(void) > { > stepcount=0; > Port_DataDirBit(PORT_LED1,PORT_OUT); // PORT für Ausgabe vorbereiten > Irq_SetVect(INT_TIM0COMP,Timer0_ISR); // Interrupt Service Routine definieren > Port_DataDirBit(PORT_LED2,PORT_OUT); // Ausgabe vorbereiten > Port_WriteBit(PORT_LED2,PORT_ON); // Ausgang Led2 einschalten > > while (stepcount<AnzSteps) > { > Timer_T0Time(150,PS0_8); > Port_WriteBit(PORT_LED1,0); // Ausgang auf 0 setzen > busy=1; > while (busy); > Timer_T0Time(150,PS0_8); > Port_WriteBit(PORT_LED1,1); // Ausgang auf 1 setzen > busy=1; > while (busy); > stepcount++; > } > Port_WriteBit(PORT_LED2,PORT_OFF); // Ausgang LED2 ausschalten > } >