Hinweis / Tipp gesucht

Hallo allerseits!

Nachdem ich mich tagelang in die Materie eingelesen hatte, habe mir kürzlich ein Seeeduino Mega Board gekauft, ein Nokia LCD 5110 plus Kleinkram (Kabel, Schalter etc). Ich konnte alles installieren & konfigurieren, auch mein erstes Programm bzw Sketch schreiben zur Ansteuerung des LCDs. Klappt alles perfekt, bin sehr zufrieden. Ich war jahrelang Software Entwickler, jedoch für Gross-Systeme dh habe zur Zeit eingentlich null Erfahrung mit Mikroprozessoren und 2000 Byte RAM.

Durch das herumexperimentieren sind mir jedoch ein paar Sachen aufgefallen, welche ich in keiner Dok / Anleitung / Forum gefunden habe, oder ich habe es einfach überlesen. Konkret geht es um folgende Sachen, zu denen ich euch gerne um eure Meinung bitten möchte:

Reihenfolge
Das Board bekommt zZ den Saft via USB vom PC. Wenn ich nun die Platine zB mit einem Sensor verbinde und zum überspielen des Sketches an den USB stöpsle, bootet das Board und führt automatisch das letzte geladene Sketch aus.
Somit können Pins geschaltet werden, welche möglicherweise für den angeschlossenen Sensor nicht passend sind.
Frage: kann man das Board dazu bringen, das letzte Programm zu löschen, so wie es bei Auslieferung war? Oder muss man jedesmal zuerst das Sketch schreiben, dann auf das Board laden, wieder vom USB trennen, Zubehöhr anschliessen und wieder mit der Stromversorgung verbinden?

Abschaltung
In einem Tutorial stand, das Board kann nicht "heruntergefahren" werden o.ä. sondern via sleep / delay etc reduziert werden. Das ist ok für mich. Wenn ich nun das Board ausschalten muss, dann einfach Stecker ziehen? Oder muss da etwas speziell beachtet werden?

Besten Dank für eure Unterstützung!

Frage: kann man das Board dazu bringen, das letzte Programm zu löschen, so wie es bei Auslieferung war? Oder muss man jedesmal zuerst das Sketch schreiben, dann auf das Board laden, wieder vom USB trennen, Zubehöhr anschliessen und wieder mit der Stromversorgung verbinden?

Das Ausführen des Sketches wird durch die aktivierte DTR-Leitung des seriellen Anschlusses verursacht. Das macht Dein PC, wieso das so ist, entzieht sich meiner Kenntnis, meiner macht das nicht (zumindest nicht, ohne meine aktive Beteiligung). Aber in Deinem Fall wäre es wirklich besser, den Sketch hochzuladen und erst dann die neuen Komponenten anzuschliessen, zumindest, falls die Komponenten empfindlich auf falsche Beschaltungen reagieren könnten.

In einem Tutorial stand, das Board kann nicht "heruntergefahren" werden o.ä. sondern via sleep / delay etc reduziert werden. Das ist ok für mich. Wenn ich nun das Board ausschalten muss, dann einfach Stecker ziehen? Oder muss da etwas speziell beachtet werden?

Ja, ausgeschaltet wird das Board durch Entzug der Stromversorgung. Dabei muss im Allgemeinen nichts speziell beachtet werden. Meist sind die Anwendungen von Microcontrollern auch so gelegt, dass sie durchgehend laufen. Ein plötzlicher Stromentzug hat aber unter normalen Umständen keine negativen Konsequenzen.

Danke!

Im Zweifelsfall macht jede Schaltung für kurze Zeit nach dem Anlegen der Betriebsspannung was sie will. Gleiches gilt beim Abfall der Spannung. Es ist ein Designprinzip alles so auszulegen, dass das keine Probleme macht.

Weiterhin ist für das Reset Verhalten wie schon erwähnt DTR verantworlich. Wenn der Arduino während des Bootens am Computer hängt kann das sogar mehrfach einen Reset auslösen.

Ein plötzlicher Stromentzug hat unter normalen Umständen schon manchmal Konsequenzen. Insbesondere dann wenn man gerade ins EEPROM schreibt oder am Flashen ist. Das Ergebnis ist dann inkonsistenter persistenter Speicherinhalt. Das ist häufig nicht schlimm, aber je nach Anwendung könnte sowas schon mal zu einem echten Problem werden. Leute die so kritische Anwendungen bauen wissen sowas aber normalerweise. Die Arbeiten in der Regel auch nicht mit Arduinos :wink:

Das ist klar :slight_smile: Deshalb fasziniert mich das Zeugs auch so, ist für mich ein wenig wie back to the roots. Als ich vor Jahrzenten noch in Cobol für Host Systeme programmierte, musste man auch effizient mit den vorhandenen Ressourcen umgehen. Da waren die Netzwerke so langsam, da hätte man -wenn die Leitungen aus Glasfaser gewesen-wären jedes Byte per Handschalg persönlich begrüssen können welches da durch die Leitung krabbelte :wink:

Naja, genaugenommen ist es wie bei einem grossen System auch. Die CPU hat keine Probleme mit Strom abschalten. Die Probleme treten immer in der Persistenz auf. Da der Arduino nur wenig Persistenz hat und die noch dazu eher selten verwendet wird gibt es da eben selten Probleme.

Du hast aber schon recht. Das ist "back to the roots". Bei 2k Hauptspeicher kannst Du jedes Byte einzeln mit Namen benennen :wink:

Du solltest den Arduino nicht mit einem COBOL "Groß"-Rechner, sondern mit einer speicherprogrammierbaren Steuerung ( SPS, englisch PLC ) vergleichen.
Da treten ähnliche Probleme bezüglich Ein/Ausschalten auf.

Dass der Anschluß des SerialMonitor oder eines anderen Terminalprogramms einen Reset auslöst, ist allerdings speziell, und wurde schon öfters diskutiert.

Hängt damit zusammen, es einerseits dem Arduino-Fan zu einfach wie möglich zu machen, einen neuen Sketch aufzuspielen, und andererseits dass windows inzwischen ein "sicheres" Betriebssystem ist, was nicht zulässt, das ein Programm einfach eine offene serielle Schnittstelle übernimmt.

Wenn dieser Reset nicht passt, gibt es verschiedene Abhilfe-Möglichkeiten zwischen

  • gar kein Reset durch PC Software (Taster drücken vor dem Upload)
  • kein Soft-Reset wenn ein Kondensator gesteckt ist
  • kein Soft-Reset wenn der gerade laufende Sketch es nicht will (erfordert ein bisschen mehr Hardware als den obigen Kondensator)

Im Zweifelsfall macht jede Schaltung für kurze Zeit nach dem Anlegen der Betriebsspannung was sie will.

Na ja, da will ich dich etwas beruhigen, nach Reset sind alle Pins erstmal Digital-Eingaben ohne Pullup-Widerstand, d.h es kommt nichts raus was du nicht willst.
(Ausser im Speicher ist das falsche Programm). Deine Hardware sollte so ausgelegt sein, dass diese Konstellation keinen unmittelbaren Schaden verursacht :wink:

Aber beim Ausschalten stimmt es schon, da ist es evtl. deine Sache damit zurecht zu kommen, in welcher Reihenfolge die Stromversorgung wegbricht. Der Prozessor selbst bietet da mehr als die Arduino-Bibliotheken unterstützen ( Stichwort BrownOut )
Man findet vergleichsweise wenige Arduinos in kritischen Bereichen in der Medizintechnik, bemannten Flugzeugen oder Atomkraftwerken. (Dafür sind sie wonaders umso beliebter)

Stimmt genau, das Ding fasziniert, und sich auf die Beschränkungen einzulassen hat seinen Reiz.

Na ja, da will ich dich etwas beruhigen, nach Reset sind alle Pins erstmal Digital-Eingaben ohne Pullup-Widerstand, d.h es kommt nichts raus was du nicht willst.

Stimmt so nicht. PIN 0, 1 und 13 verhalten sich anders. Basic Sketches | Blinkenlight. Verursacher sind die serielle Schnittstelle und der Bootloader. Davon abgesehen gilt Deine Aussage nur solange keine externen Komponenten an den Arduino angeschlossen sind. Wenn noch andere Teile angeschlossen sind kann sonst was bei Start passieren. Darauf sollte man etwas aufpassen. Wie gesagt, häufig ist das kein Problem, aber man sollte sich das merken.