Uhr mit Arduino bauen - Troubleshooting

Hallo Arduino-Gemeinde,
ich arbeite seit mehreren Wochen an der Umsetzung einer Uhr mit einem Arduino Nano, einem DS1307 RTC Modul und 132 (60 + 60 + 12) LEDs. Nun ist der Großteil der Arbeitsschritte geschafft und die ersten Probleme treten auf.
Das größte Problem ist folgendes:
Wenn ich den Arduino an Strom anschließe (egal ob PC oder anderweitige Stromquellen), passiert es häufig, dass er nicht beginnt, das Programm ablaufen zu lassen. Die POWER-LED leuchtet auf, ein paar LEDs der Stundenzeiger (meistens die ersten 5) leuchten schwach, und der Arduino ist wie eingefroren.
Bis jetzt konnte ich das Problem nur unter großem Zeitaufwand immer mal wieder durch zufälliges Drücken des Reset-Knopfes auf dem Arduino und dem Verbinden an eine Stromquelle beheben.
Sobald der Arduino aber normal läuft, funktioniert alles wie gewünscht. Es liegt also nur am ‘Hochfahren’ des Arduinos.

Ich habe bereits Ansätze gemacht, es zu beheben, beispielsweise durch den Watchdog-Timer, der zu Beginn des Setups mit 2 Sekunden eingeschaltet wird und zu Beginn des Loops wieder deaktiviert wird, ohne Erfolg.

Im Anhang sind Bilder der Uhrvorderseite, Uhrrückseite, Uhrmitte, Schaltplan der Uhrmitte und dem momentanen Test-Sketch.

Ich hoffe, dass jemand eine Idee hat wie ich den Arduino wieder zum Laufen bringe, ohne an der Hardware etwas zu verändern, da dies mit großem Aufwand verbunden ist.

Danke im Vorraus

The Programmer

Uhr Steckplatine.png

Uhr.ino (1.32 KB)

Hallo, versuche doch einmal mit z.B. delay() eine StartPause zu setzen.

Loop
{
If (start == 0)
{
delay(2000)
start = 1;
}

}

wenn´s funktioniert delay() raus- millis() rein. Gruß und Spaß Andreas

Hallo Andreas, das habe ich versucht mit dem WDT zu erreichen, dass nach 2 Sekunden nichtstun der Arduino automatisch zurückgesetzt wird und es erneut versucht. Der Haken daran: nicht einmal der WDT wird aktiviert, also wird auch nicht die Setup-Funktion aufgerufen und auch nicht die loop-Schleife.

Hallo, dann könntest Du mit-

Loop
{
Serial.println("Start 1");

ratter, ratter

Serial.println("Start 2");

ratter, ratter u.s.w.
}

mal versuchen zu sehen, wie weit es denn läuft. Könnte man auch im Setup probieren. Sonst wüßte ich nichts. Gruß und Spaß Andreas

Hier wäre ein Komplett-Schaltbild wichtig.

Ich vermute einen Spannungseinbruch o.ä., der den Arduino stoppt.

Sind beim Start alle Leds ausgeschaltet?

Hast du alle notwendigen GND-Verbindungen hergestellt?

Wo hast du die Leds (+VCC) angeschlossen?

Hallo HotSystems,
die 120 LEDs außenherum haben insgesamt 2 GND-Bahnen (jeweils für Minuten und Sekunden), die mit Multiplexing über die Transistoren abgeleitet werden. Die Pluspole der LEDs sind (pro LED-Paar für Sekunde und Minute) über einen 91Ohm Widerstand an (momentan 3) Schieberegister angeschlossen.
Diese werden über den Arduino angesteuert (vgl. Bilder).

Ein Komplettschaltbild besitze ich selbst nicht.

Was könnte den Spannungseinbruch hervorrufen? Wie kann ich das beheben?

Zwischen Arduino und LEDs sind nur die Schieberegister als ‘Ein-Aus’ Schalter.

The_Programmer:
Was könnte den Spannungseinbruch hervorrufen? Wie kann ich das beheben?

Wenn beim Starten des Arduino viele Leds eingeschaltet sind, kann die Spannung zusammenbrechen.
Wenn das der Fall ist, muss verhindert werden, dass die Leds Spannung bekommen.
Das ist aber nur eine Vermutung.

Hier ist ein Oszilloskop zum Messen nützlich.

Zwischen Arduino und LEDs sind nur die Schieberegister als ‘Ein-Aus’ Schalter.

Woher beziehen die Schieberegister ihre Spannung?

Die Spannung für die Schieberegister kommt vom Arduino.

The_Programmer: Die Spannung für die Schieberegister kommt vom Arduino.

Woher, welcher Pin? Woher bezieht der Arduino seine Spannung ? Welche Spannung bekommt dieser ? An welchen Pin geht diese Spannung ?

Ein Schaltbild würde diese einfacher machen!

Edit: Ich habe mir jetzt nochmal deinen Start-Post durchgelesen und vermute ganz stark, deine Betriebsspannung bricht einfach zusammen.

Also bitte unbedingt obige Fragen beantworten.

Momentan wird der Arduino direkt über 5V von meinem Laptop über USB betrieben.
Nach der Fertigstellung wird diese Stromquelle durch einen externen Transformator ersetzt, der 12V mit maximal 500mA an Vin leitet, die der Arduino wiederum zu 5V umwandelt.

Die Schieberegister, das DS1307 und der 433MHz Empfänger sind an +5V Pin am Arduino angeschlossen.
Die Transistoren sind dafür da, dass der Strom direkt nach GND abfließen kann und nicht über die Pins muss.

Ein Schaltplan ist vorhanden, begrenzt auf die Mitte (vgl. Bild im Anhang)

EDIT: Im Schaltplan ist die rote Leitung falsch verbunden, sie muss zu +5V anstatt zu Vin.

The_Programmer:
Momentan wird der Arduino direkt über 5V von meinem Laptop über USB betrieben.
Nach der Fertigstellung wird diese Stromquelle durch einen externen Transformator ersetzt, der 12V mit maximal 500mA an Vin leitet, die der Arduino wiederum zu 5V umwandelt.

Damit handelst du dir das nächste Problem ein.
Das wird der OnBoard Spannungsregler nicht schaffen.

Die Transistoren sind dafür da, dass der Strom direkt nach GND abfließen kann und nicht über die Pins muss.

Das verstehe ich nicht.
Ok ohne richtiges Schaltbild geht es nicht mehr.

Ein Schaltplan ist vorhanden, begrenzt auf die Mitte (vgl. Bild im Anhang)

EDIT: Im Schaltplan ist die rote Leitung falsch verbunden, sie muss zu +5V anstatt zu Vin.

Das ist kein Schaltplan, nur ein Fritzing-gewurschtel.

Sorry, aber da kann man nichts drauf erkennen.

Wenn du aber alles an den 5 Volt aus dem USB-Port ziehst, kann es für den Start (div. Leds sind an) schon zu viel sein.

Miss mal den Strom, der in die Schaltung fließt.

Zuerstmal das ist kein Arduino NANO sondern irgendeine andere Platine.

132 LED an 5V mit 91 Ohm sind über 2,5A wenn alle eingeschaltet sind.

Das bringt Dir weder der USB noch der NANO-Nachbau bei 12V an Vin. Ich tippe auch daß die Spannung zu nieder ist damit der Controller überhaupt den Reset startet. Bitte den gesamten Schaltplan (auch mit Bleistift und Papier)

Grüße Uwe

Das mit der zu hohen Stromstärke verstehe ich ja, aber 120 von den 132 LEDs sind vom Stromkreis durch die Transistoren getrennt. Nur die mittleren 12 Stunden-LEDs sind beim Anschließen des Stroms am Arduino angeschlossen.

Mittlerweile habe ich eine Vermutung, warum der Arduino nicht startet, und eine mögliche Lösung: Die LEDs, die zu Beginn schwach leuchten sind alle rot. Diese LEDs werden von einem Schieberegister betrieben, das zu Beginn komplett angeschlossen ist und Strom durch die LEDs fließen lässt. Wenn ich nun mit einem Jumper +5V und OE dieses Schieberegisters verbinde, startet der Arduino und alles läuft. Anscheinend braucht der Arduino zum Starten eine gewisse Spannung, die ihm von diesen LEDs genommen wird. Das bringt mich auch zu dem Schluss, dass die Pins des Arduinos beim Einschalten keinen definierten Wert haben, also weder HIGH noch LOW, und es bei mir manchmal 'durch Zufall' geklappt hat, da der Pin, der mit OE des Schieberegisters verbunden ist, zufällig lange genug auf HIGH war, um die LEDs auszuschalten.

LG The Programmer

HotSystems: Damit handelst du dir das nächste Problem ein. Das wird der OnBoard Spannungsregler nicht schaffen.

Doch, ich glaube schon, dass der Spannungsregler des Nanos das aushält, zumal ich es bereits seit Monaten in einem Projekt verwende. https://www.arduino.cc/en/Main/ArduinoBoardNano

The_Programmer: Doch, ich glaube schon, dass der Spannungsregler des Nanos das aushält, zumal ich es bereits seit Monaten in einem Projekt verwende. https://www.arduino.cc/en/Main/ArduinoBoardNano

Aber nicht, wenn du dem 12 Volt anbietest. Der muss dann 7 Volt verbraten, dass ist für den zu viel, da kein Kühlkörper vorhanden ist.

Für den Nano allein ok, aber nicht wenn noch diverse Module und Leds dran hängen.

The_Programmer: Mittlerweile habe ich eine Vermutung, warum der Arduino nicht startet, und eine mögliche Lösung: Die LEDs, die zu Beginn schwach leuchten sind alle rot. Diese LEDs werden von einem Schieberegister betrieben, das zu Beginn komplett angeschlossen ist und Strom durch die LEDs fließen lässt. Wenn ich nun mit einem Jumper +5V und OE dieses Schieberegisters verbinde, startet der Arduino und alles läuft. Anscheinend braucht der Arduino zum Starten eine gewisse Spannung, die ihm von diesen LEDs genommen wird.

Das habe ich versuch dir zu erklären. Da ich aber kein Schaltbild habe, kann ich auch keine genaue Erklärung abgeben.

Logik-IC's möchten einen Abblockkondensator über der Betriebsspannung "sehen", der kurze Spannungseinbrüche beim Schalten abpuffert. Die verteilten IC's mit über 10cm Drahtverhau sind ebenfalls mehr als suboptimal. Die Länge der LED Zuleitungen ist weitestgehend rille. Besser wäre es gewesen, du hättest die IC's nahe beieinander auf Lochraster gezimmert und den Arduino gleich dazu und das so kurz, wie es geht, verdrahtet. Nun, da das Kind quasi ins Wasser gefallen ist, versuche folgendes: - über die 595'er ein 100nF Keramikkondnesator so kurz wie irgend möglich, am besten huckepack aufs IC - zum 100n parallel noch einen 47µF Elko, der darf ruhig 2-3 cm weg sein. Normalerweise langt ein Elko für 4-6 IC's, aber bei deinen langen Leitungen rate ich zu einem pro IC. Und dann noch ein 1000µ Elko über die 5V, wo sie reinkommen. Ein langes USB Kabel ist einer stabilen Versorgung eher abträglich, denn die Pufferelkos sitzen entweder am USB Port oder bei einem Steckernetzteil im Netzteil. Eine 2m oder längere Zuleitung wirkt wie eine kleine Drossel. - löte zum Testen statt des 91 Ohm Widerstandes erst mal welche mit 1 KOhm ein. Dann ziehen die LEDs nur 1/10 des eigentlichen Stromes und du kannst probieren ob es prinzipiell funktioniert und weiter optimieren und dich rantasten - verwende statt des USB Ports eine 5V "Wandwarze" mit 1 oder 2A Ausgangsstrom. Die geht nicht so schnell in die Knie, wie der USB Port, der eventuell auch als Störenfried in Frage kommt. - auch die langen Leitungen für Takt usw. sind suboptimal. Die Eingänge sind sensibel auf Impulse von ein paar Nanosekunden Länge. So eine Drahtschleife kann sich aus der Luft alles möglich einfangen, was dder Arduino nie gesendet hat, das Schieberegister aber liest. Sowas kann gut gehen, muß es aber nicht. Ich sage es nochmal, die ICs zu nahe wie möglich zusammen und so kurz wie möglich verkabeln. 5cm sind unkritisch, 10 gehen noch, 20 sind Glückssache. Wenn dann noch mehrere Schieberegister hintereinander geschaltet sind und Taktleitungen aus einem Ausgang (z.B. Clock für alle Register) aus einem Ausgang des Arduinos gespeist werden sollen, bist du auf einmal bei 50 cm Leitung bis zum letzten Register. Bei sollchen Längen spielen schon Effekte aus der HF-Technik mit rein. kapazitives Übersprechen, zu langsames Ansteigen des Signalpegels und Signalreflexionen an den Leitungsenden :astonished:

The_Programmer: Das mit der zu hohen Stromstärke verstehe ich ja, aber 120 von den 132 LEDs sind vom Stromkreis durch die Transistoren getrennt. Nur die mittleren 12 Stunden-LEDs sind beim Anschließen des Stroms am Arduino angeschlossen.

12 rote LED an 5V mit 91 Ohm Widerständen?? das sind fast 500mA!!!

Mittlerweile habe ich eine Vermutung, warum der Arduino nicht startet, und eine mögliche Lösung: Die LEDs, die zu Beginn schwach leuchten sind alle rot. Diese LEDs werden von einem Schieberegister betrieben, das zu Beginn komplett angeschlossen ist und Strom durch die LEDs fließen lässt. Wenn ich nun mit einem Jumper +5V und OE dieses Schieberegisters verbinde, startet der Arduino und alles läuft. Anscheinend braucht der Arduino zum Starten eine gewisse Spannung, die ihm von diesen LEDs genommen wird.

Du kannst einnen Pullup-Widerstand von OE nach +5V nehmen und somit die LED beim Einschalten nicht leuchten. Das ist aber wieder nur Symtomunterdrückung und keine Lösung Deines Falsch konzipierten Projekts.

Das bringt mich auch zu dem Schluss, dass die Pins des Arduinos beim Einschalten keinen definierten Wert haben, also weder HIGH noch LOW, und es bei mir manchmal 'durch Zufall' geklappt hat, da der Pin, der mit OE des Schieberegisters verbunden ist, zufällig lange genug auf HIGH war, um die LEDs auszuschalten.

Die Pins des ATmega sind nach dem Reset alle Eingänge und darum ist der Logikpegel abhängig von etwaigen Leckströmen bzw eingefangenen Störungen.

Verschmeiß Deine Shaltung und plane sie neu und richtig.

Der Spannungsstabilisator veträgt bei einem Orginale-Arduino NANO bei 12V eingangspannung max 100mA wobei der Arduino selbst bereits die Hälfte braucht. Ich weiß nicht welchen Spannungstabilisator ein XY-Nachbau drauf hat von dem es keine Daten noch Schaltpläne gibt. Der Arduino-NANO Schaltplan sagt nichts über eine andere Platine aus..

Grüße Uwe

Danke Uwe, das ist mal eine deutliche Ansage.

Aber keine Angst, wir helfen Dir.