Forum: Mikrocontroller und Digitale Elektronik Schrittmotorsteuerung/Anfängerproblem


von Stefan T. (_distance_07)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

ich habe vergangenes Wochenende mal versucht eine einfache 
Schrittmotorsteuerung zu programmieren.

Einmal über die nicht erfolgte Tastenentprellung und Flankenerkennung 
und den damit verbundenen Unregelmäßigkeiten hinweggesehen funktioniert 
die Taktausgabe so wie ich es mir vorgestellt habe.

Was jedoch nicht funktioniert ist die Erhöhung sowie die Verringerung 
der Taktgeschwindigkeit. Dies sollte durch Multiplikation/Division des 
zweiten Schleifenregisters "clock" erfolgen.

Ich hab mal wieder nen Brett vorm Kopf.

Und wenn das Prinzip schon komplett sch**** ist, wäre es nett wenn Ihr 
mir das mitteilen könntet und sagen würdet, wie man sowas normalerweise 
machen sollte.

Danke schonmal für die Bemühungen

Stefan

von Stefan T. (_distance_07)


Lesenswert?

Keiner eine Idee ?

von Johannes M. (johnny-m)


Lesenswert?

Stefan T. wrote:
> Keiner eine Idee ?
Eine zumindest: Ein mit (r)call aufgerufenes Unterprogramm wird mit ret 
beendet und nicht mit reti...

von Johannes M. (johnny-m)


Lesenswert?

Du lädst den Timer nirgends nach. Abgesehen davon ist es in so einem 
Fall wesentlich sinnvoller, den Timer im CTC-Modus zu betreiben. Dann 
mit dem Compare-Interrupt arbeiten und den "Überlauf-Wert" ins OCR0 
schreiben.

von Johannes M. (johnny-m)


Lesenswert?

Hmmm, ich sehe grad, Du rufst die Funktionen aus dem Interrupt Handler 
heraus auf. Naja, kann man so machen. Aber trotzdem erschließt sich mir 
das ganze noch nicht 100%ig.

von Johannes M. (johnny-m)


Lesenswert?

Oha, ich glaube, so langsam komme ich dahinter, was Du da eigentlich 
machen willst. Also: Einen Takt an einem Portpin ausgeben kann der Timer 
selbst. Das brauchst Du nicht in Software zu machen. Und eine 
Verzögerungsschleife in einem Interrupt Handler ist erstens Pfui und 
zweitens in diesem Fall speziell unsinnig.

Nochmal: Betreibe den Timer im CTC-Modus. Konfiguriere das ganze so, 
dass der Takt an dem OC0-Pin ausgegeben wird. Ins OCR0 kommt dann der 
Überlauf-Wert (bei dem der Timer zurückgesetzt wird). Ein Blick ins 
AVR-Tutorial schadet sicher auch nicht...

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.