Phänomen Arduino Nano springt immer zum Programmanfang

Ich will mit einem Arduino ein Anti Coolision Light (ACL) für ein Segelflugzeug realisieren. Dazu steuert ein Digitalausgang z.B. D6 über ein Logic Level MOSFET IRLZ34N mehrere 12V Power Leds an. Diese sollen einmal länger aufblitzen und dann soll ein kurzer Doppelblitz folgen. Das Programm dazu:

void setup() {
pinMode(6, OUTPUT); // Den digitalen Pin 6 (D6) als Ausgang deklarieren.
}

// Die Haupt-Schleife (Main-Loop)
void loop() {
digitalWrite(6, HIGH); // Den Ausgang D6 HIGH setzen.
delay(70); // 0,07 Sekunde warten.
digitalWrite(6, LOW); // Den Ausgang D6 LOW setzen.
delay(1000); // 1 Sekunde warten.
digitalWrite(6, HIGH); // Den Ausgang D6 HIGH setzen.
delay(50); // 0,05 Sekunde warten.
digitalWrite(6, LOW); // Den Ausgang D6 HIGH setzen.
delay(200); // 0,2 Sekunde warten
digitalWrite(6, HIGH); // Den Ausgang D6 HIGH setzen.
delay(50); // 0,05 Sekunde warten.
digitalWrite(6, LOW); // Den Ausgang D6 HIGH setzen.
delay(2000); // 2 Sekunden warten.
}

Das ganze funktioniert mit einer LED sehr gut. Wird dann die Last durch parallel schalten mehrer LED erhöht, blinkt die LED nur noch gleichmäßig. Durch Experimente fand ich heraus, dass nach dem ersten Blitz das Programm offensichtlich zum Programmanfang zurück springt! Gleichzeitig blinkt die onboard Led "L" syncron dazu auf. Also wird D13 auch auf High gesetzt! Wird die Last wieder veringert, läuft das Programm wieder ganz normal durch. Mit einem UNO-Board funktioniert die Sache auch ohne Probleme.

Reset durch zu hohen Stromverbrauch.

Da gibt es natürlich verschiedene Möglichkeiten als Ursache und als Lösung.

Die onboard LED (Pin 13) wird bei Reset durch den üblichen Bootloader kurz eingeschaltet. Das ist soweit normal.

Wenn du Code in Code-Tags setzt und die Kommentare korrigierst (geht sogar nachträglich),
kriegst du auch ein "Herzlich Willkommen" :wink:

Nachtrag:
Nano und Uno haben unterschiedliche Spannungsregler, und evtl. auch unterschiedliche Level bei der "Brown-Out-Detection (BOD)" also ab wann der Controller wegen Unterspannung abschaltet.

Das könnte man modifizieren, so dass der Nano genausolang bei Unterspannung weiterläuft, das ist aber nach meiner Meinung nicht der erste Ansatz.

Du belastest die Spannungsquelle durch die Parallelschaltung der Leds, sodass der Arduino resettet.

Zeig mal ein Schaltbild.

Das mit dem Reset wegen Spannungseinbruch dachte ich auch schon. Scheint es aber nicht zu sein. Passiert nämlich auch, wenn ich über die USB-Buchse 5V das Nano-Board zusätzlich mit Spannung versorge.

Wenn Deine Schaltung stimmt: LED ohne Vorwiderstand (jede ihren eigenen) leben nicht lange.

Gruß Tommy

@Tommy Ohne Vorwiderstand hatte ich auch erst Bauchschmerzen. LED´s sind aber für 12V zertifiziert und werden nur für sehr sehr kurze Zeit eingeschaltet (Blitze). Wird auch so schon über mehrere Jahre in einer diskreten Schaltung so genutzt, ohne das sie ihren Geist aufgegeben haben

Und damit hast du schon deinen Fehler.
Die Leds nehmen sich den Strom, den sie brauchen und das kann "fast" zu einem Kurzschluss führen.

Neustart des Arduino und die Leds sind wieder aus.

matti5:
@Tommy Ohne Vorwiderstand hatte ich auch erst Bauchschmerzen. LED´s sind aber für 12V zertifiziert und werden nur für sehr sehr kurze Zeit eingeschaltet (Blitze). Wird auch so schon über mehrere Jahre in einer diskreten Schaltung so genutzt, ohne das sie ihren Geist aufgegeben haben

Dann sollten die über eine Konstantstromquelle betrieben werden.

gelöst! In der Tat war der Reset durch Spannungseinbruch die Ursache. Wenn ich das Nano-Board mit einer seperate Spannungsquelle mit 5V über die USB-Buchse bei getrenntem Vin (12V) läuft es. (Bei paralleler Einspeisung dieser 12V resetet es trotz der 5V USB! Deswegen hatte ich es erst ausgeschlossen)

Vielen Dank für die vielen, schnellen und nützlichen Hinweise

Wenn Du beide Spannungen dran hast, wird die USB-Spannung nicht genutzt.

Gruß Tommy

Tommy56:
Wenn Du beide Spannungen dran hast, wird die USB-Spannung nicht genutzt.

Gruß Tommy

Das ist die Erklärung

Könnte diese Modifikation Abhilfe schaffen?

Könnte evtl.
Das hängt davon ab, wie tief und wie lange Deine Versorgung einbricht.
Eine leistungsfähigere Versorgung wäre der bessere Weg.
Meinst Du, dass Du dafür überhaupt eine Zulassung vom LBA bekommst?

Gruß Tommy

Über dieses "Problem" wird in der Szene kräftig diskutiert. Zuständig ist nicht mehr das LBA sondern die EASA, die europäische Behörde. Die Vorschriften, und das was es auf dem Markt gibt, ist schon lange nicht mehr Stand der Technik. Max 2000-3000 lm. Sinvoll ist aber, wenn es wirklich vor Kollision (am Tage mit Sonne) schützen soll >10.000 lm. Also nach dem Motto "hilf dir selbst, so hilft dir Gott" will ich (andere haben das bereits schon seit ein paar Jahren) eine nicht fest verbaute Lösung. Für meine ersten Versuche mit dem Arduino habe ich einen Bleiakku 12V/7,2 Ah genommen und LED´s von insgesamt 100W. Deswegen konnte ich mir kaum vorstellen, dass der Akku bei ca. 10 A so weit einfbricht, dass die 5V des Arduino gefährtet sind. Im Flugzeug ist dann ein Akku von 20Ah

Du willst damit doch nicht etwa sagen, dass das "größte beleuchtete deutsche Luftfahrthindernis" (Zitat eines ehemaligen Kollegen) in Braunschweig arbeitslos wird?

100W / 12V = 8,33 A

Gruß Tommy

Nein, gaaaanz sicher nicht. Sie arbeiten für die EASA auf dem Gebiet von D. Und da die Bürokratie durch Europa nicht weniger wird, haben sie ganz sicher genug zu tun. Gegenwärtig werden da sogar reichlich neue Stellen geschaffen.

Verstehe ich schon. Ich wollte nur die Bezeichnung vom ehemaligen Kollegen mal an den Mann bringen :wink:

Aber der Strom ist schon heftig und ohne Vorwiderstand wohl noch größer.
Hast Du mal einen Link zu solch einer LED?

Gruß Tommy

Deine Schaltung kann helfen. Reicht evtl. auch schon, die Arduino 5V mit einem dickeren Kondensator zu stützen. Das (dickerer Elko) könnte der beobachtete Unterschied Uno / Nano sein.
Dann noch BOD Fuses auf disabled setzen.

Mit Power-LED würde ich nicht direkt eine Batterie kurzschliessen. Solch eine Schaltung rechnet doch mit dem Innenwiderstand der Batterie als Strombegrenzer. Das reduziert dann die "12V" an Vin.

Oder eine extra Batterie für den Arduino vorsehen.

Tommy56:
Aber der Strom ist schon heftig und ohne Vorwiderstand wohl noch größer.
Hast Du mal einen Link zu solch einer LED?

Gruß Tommy

Für die ersten Versuche diese billigen China LEDs:

Für die finale Version diese:

http://www.leds.de/High-Power-LEDs/Cree-High-Power-LEDs/Cree-MK-R-weiss-1665-Lumen.html

ok, die nehmen den Innenwiderstand als Begrenzung, wie Michael schon schrieb. Das kann schief gehen.
Zusätzlich noch die Parallelschaltung. Es gibt immer Streuungen in den Fertigungsdaten. Die LED mit dem geringsten Spannungsabfall bekommt den höchsten Strom und stirbt zuerst.

Beim Impulsbetrieb kannst Du in der Hinsicht Glück haben, dass die Wärme nicht hoch genug wird.

Eine stabile Schaltung ist das allerdings nicht und da hängt im Zweifelsfall real Dein A... dran..

Gruß Tommy