Forum: Mikrocontroller und Digitale Elektronik Programmcode, für das Antreiben eines Schrittmotors durch einen ATmega8 in Assembler


von Marcel Klein (Gast)


Lesenswert?

Hallo liebe Forenmitglieder,

mein Name ist Marcel und ich besuche zurzeit das berufliche Gymnasium.

Vor einer Woche hat mein Techniklehrer Präsentationen verteilt, mit den 
Themen Motoren und Sensoren, die wir bis Donnerstag (01.11.2018) fertig 
haben sollen.
Mir wurde das Thema Schrittmotor zugeteilt. Soweit so gut. In den 
Präsentationen sollen wir unseren Mitschülern den Schrittmotor näher 
bringen, ihnen zeigen wo, wofür man ihn braucht und den Aufbau erklären. 
Alles nicht so schlimm. Dann sagte der Lehrer, dass wir außerdem noch 
zeigen sollen, wie man einen Schrittmotor an einen Microcontroller 
anschließt und ein Programm in Assembler schreiben sollen, mit dem man 
den Schrittmotor antreibt. Da fängt das Übel auch schon an. Ich kann 
Assembler nicht mal ansatzweise. Wir hatten Assembler innerhalb von 
drer/vier Stunden durchgenommen und da mir Programmieren wirklich schwer 
fällt, habe ich nichts mitgenommen.

Übers Wochende habe ich mich dann mal hingesetzt und habe gegoogelt, 
gegoogelt und nochmals gegoogelt aber habe kein Programmcode zum Antrieb 
gefunden. Ich habe mir dann etliche Videos auf YouTube angeschaut, Foren 
durchgelesen bin aber kein Stück weiter gekommen.

Momentan bin ich dabei das Lehrbuch myAVR Lehrbuch 
Mikrocontroller-Programmierung von Dipl. Ing. Toralf Riedel und Dipl. 
Ing. Päd. Alexander Huwaldt zu lesen. Habe also nochmal komplett von 
vorne angefangen. Mittlerweile habe ich das Gefühl, dass ich es zeitlich 
auf keinen Fall mehr hinbekommen werde, da Technik leider nicht das 
einzige Fach in der Schule ist, für das man was machen muss.

Meine Frage an euch ist also:

Hat jemand von euch ein in Assembler geschriebenes Programm, dass einen 
Schrittmotor antreibt??

(Daten: -Mikrocontroller ist der ATmega8
        -Programmiersprache: Assembler
        -Schrittmotor: S-SPSM-5V

-> Technische Daten:(Treiber-Board): Betriebsspannung: 5V / IC: ULN2003A 
/ Status-LED´s: 4 / 7 Steuereingänge (IN1-IN-7) / 7 Steuerausgänge (A-G)

-> Technische Daten: (Motor 28BYJ-48): Betriebsspannung: 5V / Phasen: 4 
/ Schrittwinkel: 5,625 Grad / Gleichstromwiderstand: 50 Ohm / 
Drehmoment: >34,3 mNm


Ich weiß dass das ziemlich viel verlangt ist und bestimmt auch für euch 
dreist klingt, aber es ist (leider) die Wahrheit und ich wäre sehr 
dankbar und glücklich, wenn mir jemand helfen könnte.

MfG,
Marcel.

von Joachim B. (jar)


Lesenswert?

Marcel Klein schrieb:
> und ich wäre sehr
> dankbar und glücklich, wenn mir jemand helfen könnte.

hilft dir das wirklich wenn es einer für dich löst? (und wenn ja, wobei 
hilft es?)

Marcel Klein schrieb:
> Übers Wochende habe ich mich dann mal hingesetzt und habe gegoogelt,
> gegoogelt und nochmals gegoogelt aber habe kein Programmcode zum Antrieb
> gefunden

unglaubwürdig, aber nun gut manchmal findet man wirklich was nicht, 
vielleicht kommt ja jemand mit der Lösung, ich befürchte nur es wird dir 
nicht helfen.

Schrittmotor
https://de.wikipedia.org/wiki/Schrittmotor
ab und an auf Ports Spannung legen warten Spannung wegnehmen warten, 
sollte machbar sein

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Marcel Klein schrieb:
> Vor einer Woche hat mein Techniklehrer Präsentationen verteilt, mit den
> Themen Motoren und Sensoren, die wir bis Donnerstag (01.11.2018) fertig
> haben sollen.
Das wird spannend.

> Meine Frage an euch ist also:
> Hat jemand von euch ein in Assembler geschriebenes Programm, dass einen
> Schrittmotor antreibt??
Wie ist denn der Schrittmotor angeschlossen?
Und was hast du die letzte Woche schon hinbekommen? Wie würdest du 
denn den Schrittmotor in deiner Schaltung ansteuern? Kannst du die dafür 
nötigen Abläufe aufzeigen (das brauchst du sowieso für deine 
Präsentation, sonst fliegst du da SOFORT auf die Nase)? Dann kann man 
mal über das Programmieren nachdenken.

> Übers Wochende habe ich mich dann mal hingesetzt und habe gegoogelt,
> gegoogelt und nochmals gegoogelt aber habe kein Programmcode zum Antrieb
> gefunden.
Hast du schon mal die blinkende LED programmiert? Darin ist alles 
enthalten, was man für einen Schrittmotor auch braucht. Und dazu noch 
ein wenig BRAIN 1.0 um das zu erkennen.

: Bearbeitet durch Moderator
von Mach (Gast)


Lesenswert?

In ein paar Tagen ist das nicht ohne fuer einen Anfaenger. Zumindest die 
Elektronik scheint ja vorhanden zu sein.

Mach eine ganz einfache Ansteuerung, durchlaufe die vier Ausgabemuster 
und rufe dazwischen Warteschleifen auf. Der Motor dreht dann mit 
konstanter Geschwindigkeit in eine Richtung.

Eine Warteschleife findest du hier im Assembler-Tutorial.

Die Muster sehen in der Art aus:
H L H L
L H H L
L H L H
H L L H

Das Programm ist dann soetwas in der Art:


loop:
  call delay; //Warte

  ldi r20, 0b00001010; //Speicher Muster in Register
  out PortA, r20;  //Setzte Ausgang PortA entsprechen Register

  call delay;

  ldi r20, 0b00000110;
  out PortA, r20;

  call delay;

  ldi r20, 0b00000101;
  out PortA, r20;

  call delay;

  ldi r20, 0b00001001;
  out PortA, r20;

rjmp loop;

Ports und Bits musst du natuerlich anpassen, Port auch noch 
initialisieren, also das Register DDRA setzen.

von Thomas W. (diddl)


Lesenswert?

Marcel Klein schrieb:
> (Daten: -Mikrocontroller ist der ATmega8
>         -Programmiersprache: Assembler
>         -Schrittmotor: S-SPSM-5V
>
> -> Technische Daten:(Treiber-Board): Betriebsspannung: 5V / IC: ULN2003A
> / Status-LED´s: 4 / 7 Steuereingänge (IN1-IN-7) / 7 Steuerausgänge (A-G)
>
> -> Technische Daten: (Motor 28BYJ-48): Betriebsspannung: 5V / Phasen: 4
> / Schrittwinkel: 5,625 Grad / Gleichstromwiderstand: 50 Ohm /
> Drehmoment: >34,3 mNm

Das ist genau die Hardware die Kuman so liefert:
https://www.amazon.de/dp/B01IP7IOGQ/


Bei den größeren Kuman Sets ist da auch ein Arduino Dabei mit einem 
Atmega 328.
Und da war auch immer eine CD mit drin mit Beispielcode, auch für den 
Schrittmotor.

Guck mal auf die Kuman Seite, der Code ist zwar in C geschrieben.

Aber der GCC kann auch Assembler Source ausgeben, soviel ich weiß.

von Thomas W. (diddl)


Lesenswert?

Hier ist der Code in C.

https://42bots.com/tutorials/28byj-48-stepper-motor-with-uln2003-driver-and-arduino-uno/

Entweder implementierst du es sinngemäß in Assembler.
Oder du nimmst dir den GCC zur Hilfe und nimmst den Output 
Assemblercode.

von Marcel Klein (Gast)


Lesenswert?

Joachim B. schrieb:
> hilft dir das wirklich wenn es einer für dich löst? (und wenn ja, wobei
> hilft es?)

Helfen würde es mir in der Hinsicht, dass ich was hätte, was 
funktioniert und ich meinen Mitschülern zeigen kann. Helfen in der Sicht 
es zu lernen nicht, das gebe ich zu.

Lothar M. schrieb:
> Wie ist denn der Schrittmotor angeschlossen?
> Und was hast du die letzte Woche schon hinbekommen? Wie würdest du
> denn den Schrittmotor in deiner Schaltung ansteuern? Kannst du die dafür
> nötigen Abläufe aufzeigen (das brauchst du sowieso für deine
> Präsentation, sonst fliegst du da SOFORT auf die Nase)? Dann kann man
> mal über das Programmieren nachdenken.

Hinbekommen habe ich nichts. Ich bin wirklich eine Null in Assembler. 
Ich muss, wie ich gerade dabei bin, komplett von vorne anfangen.
Angeschlossen wird der Schrittmotor an das myAVR Board MK1 LPT Version 
1.6

Lothar M. schrieb:
> Hast du schon mal die blinkende LED programmiert? Darin ist alles
> enthalten, was man für einen Schrittmotor auch braucht. Und dazu noch
> ein wenig BRAIN 1.0 um das zu erkennen.

Wir hatten das mal in der Schule mit dem Lehrer gemacht und das Programm 
habe ich auch noch, aber mir fehlt das BRAIN 1.0

von Marcel Klein (Gast)


Lesenswert?

Schonmal vielen Dank für die zahlreichen Antworten und die Hilfe.

von Stefan F. (Gast)


Lesenswert?

Hier findest du einen handlich kleinen Assembler Kurs für AVR:
http://stefanfrings.de/avr_workshop/index.html

Das erklärt aber noch nicht die Ansteuerung eines Schrittmotors. Ich 
finde diese Aufgabe ziemlich gemein, denn das sind zwei Baustellen 
gleichzeitig.

von Wolfgang (Gast)


Lesenswert?

Stefanus F. schrieb:
> Das erklärt aber noch nicht die Ansteuerung eines Schrittmotors.

Die kann man sich z.B. bei Nanotec angucken.
Unter "Schrittmotor" den Typ wählen und los gehts
https://de.nanotec.com/support/knowledge-base-pages/schrittmotor-animation/

von Joachim B. (jar)


Lesenswert?

Stefanus F. schrieb:
> Ich
> finde diese Aufgabe ziemlich gemein, denn das sind zwei Baustellen
> gleichzeitig.

na ja, eigentlich nicht schwer, ich skizzierte es ja hier:

Joachim B. schrieb:
> Schrittmotor
> https://de.wikipedia.org/wiki/Schrittmotor
> ab und an auf Ports Spannung legen warten Spannung wegnehmen warten,
> sollte machbar sein

und ein anderer schrieb ja ausführlicher:

Mach schrieb:
> loop:
>   call delay; //Warte
>
>   ldi r20, 0b00001010; //Speicher Muster in Register
>   out PortA, r20;  //Setzte Ausgang PortA entsprechen Register
>
>   call delay;
>
>   ldi r20, 0b00000110;
>   out PortA, r20;
>
>   call delay;
>
>   ldi r20, 0b00000101;
>   out PortA, r20;
>
>   call delay;
>
>   ldi r20, 0b00001001;
>   out PortA, r20;
>
> rjmp loop;
>
> Ports und Bits musst du natuerlich anpassen, Port auch noch
> initialisieren, also das Register DDRA setzen.

was genau dasselbe ist, ab da ist es doch nicht so schwer.

von Rainer V. (a_zip)


Lesenswert?

...und wenn er wiklich bis Do. fertig sein muß, ist dann der Vortrag am 
Freitag? Fände ich auch noch gemein...
Gruß Rainer

von Cerberus (Gast)


Lesenswert?

Marcel Klein schrieb:
> Übers Wochende habe ich mich dann mal hingesetzt und habe gegoogelt,
> gegoogelt und nochmals gegoogelt aber habe kein Programmcode zum Antrieb
> gefunden. Ich habe mir dann etliche Videos auf YouTube angeschaut, Foren
> durchgelesen bin aber kein Stück weiter gekommen.

Dann scheinst du nicht lernfähig und Abitur-Untauglich zu sein.
Das ist ja auch der Nebeneffekt des Bildungssystems, nämlich die Spreu
vom Samen zu trennen und wir sollen das hier nun korrigieren.
Da musst du schon deinen Lehrer bemühen. Auf die Schnelle wird das
kaum was werden, denn man muss sich mit Elektronik, Datentechnik, 
Motortechnik, Prozessorarchitektur und Assemblertechnik beschäftigen.
Man kann schon einiges googlen, aber das kostet natürlich sehr viel 
Zeit.
Ich würde gern mal wissen, was deinen Lehrer da geritten hat.

von Frank D. (Firma: Spezialeinheit) (feuerstein7)


Lesenswert?

http://www.avr-asm-tutorial.net/avr_de/stepper/stepper.html
hier ist ein Schrittmotortreiber in asm mit ULN2003 für einen Attiny13,

von Stefan F. (Gast)


Lesenswert?

Fred F. schrieb:
> http://www.avr-asm-tutorial.net/avr_de/stepper/stepper.html
> hier ist ein Schrittmotortreiber in asm mit ULN2003 für einen Attiny13,

Stefanus F. schrieb:
> Hier findest du einen handlich kleinen Assembler Kurs für AVR:
> http://stefanfrings.de/avr_workshop/index.html

Ich denke, dass du mit diesen beiden Anleitungen zusammen genau das 
Richtige vorliegen hast. Falls du noch kein Assembler kannst, arbeite 
erstmal mein Tutorial durch.

Das schöne dabei ist, dass du es prinzipiell mit jedem beliebigen AVR 
Mikrocontroller machen kannst und nur minimal Bauteile brauchst. Ein 
paar LED's und Taster lötet man notfalls aus einem Schrott-Gerät oder 
einer Lichterkette aus und als Lautsprecher tut's zur Not ein alter 
Kopfhörer.

Nur bei den Register-Zugriffen must du aufpassen. Die Register und die 
Bits in den Registern sind nicht bei allen AVR Modellen sehr ähnlich. 
Wenn du ins Datenblatt schaust (und das solltest du unbedingt), wirst du 
die Unterschiede sofort sehen und die Beispielcodes entsprechend 
anpassen können.

Von nun an kannst du gerne konkrete Fragen zu einzelnen Text-Passagen 
oder Codes stellen. Diese beiden Anleitungen zu einem Programm zu 
kombinieren, das musst du aber selbst machen.

Ohne Erfahrung in der Programmierung dieser Mikrocontroller schätze ich 
einen Aufwand von 4 Wochen (Abends und an Wochenenden).

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.