Hallo, ich versuche mit einem ATmega16 einen Schrittmotor zu betreiben. Dazu verwende ich Timer0 und Timer1. Mit Timer 1 erzeuge ich die Step-Freqenz und mit dem Timer 0 die Beschleunigungs/Bremskurve. Wenn ich dies so teste bekomme ich eine Frequenz die immer wieder stockt, aber wenn ich die nicht den Timer0 für die Rampen benutze und diesen Teil in Main schreibe funktioniert es. Liegt es daran dass sich die beiden Timer Interrupts überschneiden und so die Lücken im Timer1 entstehen und wenn ja wie kann ich das fixen ? Danke im Vorraus :)
Warum einen eigenen Algorithmus erfinden. Gibt doch 2 bewährte funktionierende. Amtels Application Note AVR446 und das Grbl Projekt.
Das Delay mit 500ms ist ja am Anfang um dem Start zu verzögern und hat keine einwirkung auf die ISR. Gibt es zu AVR446 eine Library ?
Der Beitrag "Schrittmotoransteuerung mit A4982 und ATmega328" ist gut aber er ist für den ATmega328 geschrieben und der Code kann nur 1 Schrittmotor gleichzeitig und ich bräuchte 2. Gibt es nicht eine Library für Schrittmotoren oder gibt es eine Möglichkeit die 2 Timer gleichzeitig laufen zu lassen ?
Christoph K. schrieb: > Der Beitrag "Schrittmotoransteuerung mit A4982 und ATmega328" ist gut > aber er ist für den ATmega328 geschrieben und der Code kann nur 1 > Schrittmotor gleichzeitig und ich bräuchte 2. Zwischen Timer1 vom ATmega328 oder vom ATmega16 besteht kein signifikanter Unterschied. Die gezeigte Routine arbeitet mit dem OCR1A-Register. Verwendet man zusätzlich das OCR1B-Register läßt sich damit ein 2. Schrittmotor ansteuern. Wenn man es braucht, muß man es nur machen. Ich brauche es nicht ;-)
Für mich ist das eine ISR und dort steht für den Fall, dass status=3 ist, ein delay_ms(500) drin.
1 | ////////////////////////////////////////////////////////////////////////// Timer/Counter0 Overflow
|
2 | ISR (TIMER0_OVF_vect){ |
3 | |
4 | switch (status){ |
5 | case 1 : status=1;a_fast();break; |
6 | case 2 : b_fast();break; |
7 | case 3 : status=1;PORTD ^= (1 << PD4);delay_ms(500);a_timer=0;b_timer=99;break; |
8 | }
|
9 | |
10 | }
|
War das nicht auch timer0, der ab und zu "stockt"? Aber ich bin kein Experte ..
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.