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 > Hi, > du kannst bei PWM doch das Signal auch auf einen freien Interruptfähigen Eingang legen; > Damit kannst du zählen, allderdings kann ich nicht sagen ob es bis 25KHz reicht. Bei 25KHz > käme ein Interrupt alle 40µs; Teste es doch einfach mal. > > Good luck > > Jo > > > 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 > > } > > > >