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
Stefan T. wrote:
> Keiner eine Idee ?
Eine zumindest: Ein mit (r)call aufgerufenes Unterprogramm wird mit ret
beendet und nicht mit reti...
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.