Forum: Mikrocontroller und Digitale Elektronik Arduino spinnt nach dem reset/programmieren für ca. 3 Sek.


von Vollnoob (Gast)


Lesenswert?

Hallo,

ich habe gerade angefangen mich mit den Arduinos/Atmel AVRs zu 
beschäftigen. Habe auch erste Erfolge zu verbuchen (ansteuern A4988, 
serielle Schnittstelle, etc.). Jedoch stört mich eine Sache wenn ich den 
Arduino resette/programmiere, "spinnt" der Arduino für ca. 3 Sek. D.h. 
der Schrittmotor an pin 13 (A4988->STEP) dreht lustig vor sich hin, also 
gibt der Arduino dort ein PWM Signal raus. Danach führt er mein Programm 
wie gewollt aus.

Kann man dagegen was machen?

Vielen Dank

Der Vollständigkeit halber nachfolgend der Code der rein zu Testzwecken 
dient:
#define MOTORLEFT_DIR_FORWARD  HIGH
#define MOTORRIGHT_DIR_FORWARD LOW

void setup() {
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);

  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(8, MOTORLEFT_DIR_FORWARD);
  digitalWrite(12, MOTORRIGHT_DIR_FORWARD);

  digitalWrite(9, HIGH);
  digitalWrite(13, HIGH);
  delay(150);
  digitalWrite(9, LOW);
  digitalWrite(13, LOW);
  delay(150);
}

von STK500-Besitzer (Gast)


Lesenswert?

Vollnoob schrieb:
> also
> gibt der Arduino dort ein PWM Signal raus. Danach führt er mein Programm
> wie gewollt aus.

Sicher? Könnte aber auch so sein, dass der Programmer den 
Schrittmotortreiber "mitversorgt", du also die Programmierbits zu sehen 
bekommst. Dagagen hilft es, einen Enable-Eingang des Treibers mit einem 
Pin oder einem Pull-Up/Down-Widerstand zu beschalten.

von Stefan S. (sschultewolter)


Lesenswert?

Das liegt am Bootloader. Für solche "empfindliche" Hardware solltest du 
die SPI Pins sowie UART0 Pins vermeiden. (D11, D12, D13, D0, D1)

von Vollnoob (Gast)


Lesenswert?

Super vielen Dank. Also an die SPI/UART pins lieber irgendwelche 
passiven Komponenten dranhängen.

von someone (Gast)


Lesenswert?

Noch eine Anmerkung zum bereits Gesagten: D13 ist der LED-Pin, der 
Bootloader blinkt beim Start einige Male die LED.

Du kannst deinen Aufbau so lassen, wenn du dafür sorgst, dass der 
Arduino erst über sein Programm den Motortreibern ein enable-Signal 
gibt. Das ist sowieso empfehlenswert, da der Arduino mit 
High-Z-Ausgängen startet und somit die Signalleitungen zu den 
Motortreibern empfindlich auf Einstrahlung sind. Sinnvoll ist hier also, 
enable der Motortreiber auch vom Arduino steuern zu lassen, ihn aber 
über einen Widerstand so an eine Spannung zu legen, dass die 
Motortreiber standardmäßig ausgeschaltet sind (wenn es "enable" ist, 
dann brauchst du einen Widerstand gegen GND (pulldown), wenn es 
"~enable" ist, dann brauchst du einen Widerstand gegen Vdd (pullup). 10k 
sollten reichen.)

von F. F. (foldi)


Lesenswert?

Auch würde es nicht schaden die Ausgänge erstmal auf LOW zu setzen. Das 
am Anfang des Programms, denn dann hat dein Programm immer und ganz 
sicher einen definierten Ausgangszustand.

: Bearbeitet durch User
von Ulrich F. (Gast)


Lesenswert?

F. F. schrieb:
> dann hat dein Programm immer und ganz
> sicher einen definierten Ausgangszustand.
Das greift erst NACH dem Bootloader.

von abc.def (Gast)


Lesenswert?

F. F. schrieb:
> erstmal auf LOW zu setzen

Bist Du Dir sicher? Üblich ist das inaktive mit Pullup, Ausgänge 
hochohmig. Und das active-low. Natürlich gibt es massenweise Ausnahmen, 
jeder macht es nach Gutdünken. Aber Pull-Up Widerstände sind eingebaut, 
nach Bedarf zuschaltbar. Pull-down Widerstände sind eher unüblich. 
Früher (TM) konnten die 74xx TTL-Bausteine brauchbar Strom nach Null 
schalten, das hat für eine LED gereicht (20mA), die war dann aktiv bei 
Low. Die Stromtreibfähigkeit bei High war eher untergeordnet.

von Vollnoob (Gast)


Angehängte Dateien:

Lesenswert?

Vielen Dank für eure Antworten. Ich habe nur noch eine Frage zu den 
Pullup-Widerstand.
Da es an meinem A4988 ein ~ENABLE ist (also LOW = Eingeschaltet) lege 
ich den Pullup an VCC (Logik) und schließe z.B. pin 3 des Arduinos 
zwischen Widerstand und ENABLE. Und wenn ich dann den pin 3 auf LOW 
stelle ist ~ENABLE = Enabled, ist das so richtig ?

von Ulrich F. (Gast)


Lesenswert?

Vollnoob schrieb:
> ist das so richtig ?

Da du ein Arduino Programm zeigst, vermute ich ganz stark, dass du den 
Baustein nicht selber beschaltest. Also vermutlich sowas verwenden 
möchtest: http://www.exp-tech.de/a4988-stepper-motor-driver-carrier
Da ist zu sehen, dass ENABLE schon mit einem 100K Pulldown versehen 
wurde.

von Karl (Gast)


Lesenswert?

Vollnoob schrieb:
> Da es an meinem A4988 ein ~ENABLE ist (also LOW = Eingeschaltet) lege
> ich den Pullup an VCC (Logik) und schließe z.B. pin 3 des Arduinos
> zwischen Widerstand und ENABLE. Und wenn ich dann den pin 3 auf LOW
> stelle ist ~ENABLE = Enabled, ist das so richtig ?


Ulrich F. schrieb:
> Da ist zu sehen, dass ENABLE schon mit einem 100K Pulldown versehen
> wurde.


Er braucht aber einen Pullup. Wenn der Pulldown vorhanden ist, dann darf 
der Pullup nicht zu klein werden.

von Vollnoob (Gast)


Lesenswert?

Vielen Dank(!) für eure Antworten. Habe nun nach dem Motto "probieren 
geht über studieren" es einfach mal so angeklemmt wie in meinem letzten 
Post angegeben. Läuft jetzt wie gewünscht und auch das "rumgezicke" nach 
reset/program hat ein Ende.

@Ulrich F.: Ja genau habe ein fertiges (noname)Breakout-Board für 
3€/Stk. (sicher aus dem tiefsten Hindukusch?! :) ) genommen.

von F. F. (foldi)


Lesenswert?

abc.def schrieb:
> F. F. schrieb:
>> erstmal auf LOW zu setzen
>
> Bist Du Dir sicher? Üblich ist das inaktive mit Pullup, Ausgänge
> hochohmig. Und das active-low.
Dann halt andersrum.
Mir ging es um den definierten Zustand.
Dass das aber nicht die grundsätzliche Lösung für sein Problem ist 
(bootloader), war mir klar. Pullup/-down wurde ja schon geschrieben.
Das man gerade bei der Hardware schon von vorn herein alles machen muss, 
um Störungen zu vermeiden, setzte ich mal als bekannt bei allen 
Tippgebern voraus.

von Cihan S. (cihan_s)


Lesenswert?

Ist D13 nicht die LED onboard? Die flackert doch paarmal beim 
einschalten.

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.