Forum: Mikrocontroller und Digitale Elektronik ATmega 2560: Pinsteuerung über Counter


von Jonas B. (jokodd)


Lesenswert?

Liebe Leute,

ich habe folgendes Problem:

Über den Timer 4 des Arduino Mega erzeuge ich eine PWM Signal, welches 
als Step-Signal an drei Schrittmotortreiber (A4988) geht. Die 
Schrittmotoren sollen unabhängig voneinander eine bestimmte Anzahl von 
Schritten zurücklegen. Dafür werden über 3 weitere Pins Enable-Signale 
an die Treiber gegeben.

Um die Belastung für die CPU möglichst gering zu halten, soll Timer 5 
als Counter das PWM-Signal als Clock-Source nutzen. Die Enable-Pins des 
Motortreibers sind an die Output-Compare Pins angeschlossen. Um eine 
bestimmte Anzahl von Schritten zu gehen, wird in das OCR5 Register der 
aktuelle Timerwert + die gewünschte Schrittzahl geschrieben. Wenn die 
Schrittzahl erreicht wurde und es zu einem Compare Match gekommen ist, 
wird der Motor über den Enable-Pin deaktiviert.

Soweit so gut, das funktioniert bereits. Allerdings nur beim ersten 
Counter-Match. Möchte ich jedoch mehrfach hintereinander den Motoren 
eine Schrittzahl vorgeben, scheitere ich daran, den durch die 
Output-Compare-Unit gesetzten Pin wieder zu löschen.

Ich weiß, dass ich den Pin über TCCR5C-Register im Toggle-Modus 
umschalten könnte, aber ich hätte gerne die Kontrolle darüber, dass der 
Timer den Motor nur aus- und nicht auch einschalten kann.

Gibt es eine Möglichkeit, den Ausgang des Waveform Generators (OC5x) zu 
beeinflussen ohne ein Compare-Match auszulösen?

Vielen Dank im Voraus!

Gruß
Joko

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
Noch kein Account? Hier anmelden.