mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Schrittmotorsteuerung/Anfängerproblem


Autor: Stefan T. (_distance_07)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan T. (_distance_07)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keiner eine Idee ?

Autor: Johannes M. (johnny-m)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.