Programmcode, für das Antreiben eines Schrittmotors durch einen ATmega8 in Assembler

Gast #5602942
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.
#5602951
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
Moderator (Firma: Titel) Persönliche Seite #5602958
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.
Gast #5602966
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.
#5602972
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ß.
Gast #5602991
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
#5603218
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.
Gast #5603335
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.
Gast #5603858
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).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren