Hallo zusammen,
erst mal ein frohes neues Jahr. Ich möchte hier ein Problem vorstellen, dass mich im Jahr 2018 fast bis zur Verzweifelung getrieben hat und zu dem man in diversen Foren leider nur die üblichen Ratschläge erhält.
Ich habe an meiner Modellbahnanlage ein paar Probleme mit der EMV und dem I²C Bus. Ich weiß, dass das sehr individuell ist und man gewisse Dinge einhalten soll, damit Störungen sich nicht ausbreiten und keinen Einfluss haben. Auch weiß ich, dass der I²C nunmal störanfällig ist und nicht das Maß der Dinge im Bezug auf EMV ist.
Der Arduino Nano den ich benutze stürzt mir manchmal ab. Ich habe an diesen ein 2x16 Zeichen Display angeschlossen und dieses wird nunmal über den I²C Bus angesteuert. Ich habe es ausprobiert, ob es an etwas anderes liegt, aber es ist offensichtlich der Bus. Immer wenn eine bestimmte Weiche schaltet kann es passieren und der Arduino hängt sich auf. Dummerweise bleibt dann noch die Weiche eingeschaltet. Das ist garnicht gut. Pro Weiche fließen im Anfangsmoment ca. 2 Ampere. Das ist ordentlich. Nun suche ich nach einer einfachen Lösung. Der Weg vom Nano bis zum Display ist 200mm lang. Ich verwende die handelsüblichen Steckverbinder. In diversen Foren wurde eine so kurze Verbindung als unkritisch betrachtet und ich hätte auch diesem zugestimmt.
Dem Ganzen bin ich auf die Schliche gekommen, indem ich im kompletten Programm einmal den I²C Bus ausgeklammert habe und keine I²C Kommunikation hatte mit dem Display. Da lief die ganze Anlage über Stunden und an mehreren Tagen einwandfrei. Dann habe ich die "alte" Software eingespielt und siehe da, wieder ein Absturz. Eigentlich wollte ich den Watchdog beim Nano benutzen, der aber mit den Bootloader nicht wirklich funktioniert. Das war mein erster Gedanke. Die zweite und vielleicht sogar bessere Idee kam mir gleich hinterher. Erst garnicht den I²C Bus benutzen, solange ich ihn nicht brauche. Im Nachhinein betrachtet, benötige ich das Display nur, wenn ich Daten verändern möchte. Es sind 5 Tasten angeschlossen und wenn ich die Parameter damit ändern möchte muss der Betrieb sowieso pausieren. Schöner wäre es aber, dass mir wenigstens die Parameter vor Beginn einmal angezeigt werden, damit ich entscheiden kann die Parameter anzupassen. Daher hier meine Frage. Wenn der I²C Bus einmal mit "Wire.begin" initialisiert wurde, wie kann ich dann diesen komplett deaktivieren? "Wire.off" oder "Wire.end" gibt es ja leider nicht. Wenn ich keinen Befehl zum Display sende, findet dann auf dem Bus trotzdem eine Kommunikation statt? In dem Moment, wo eine Weiche geschaltet wird, wird auch an dem Display eine Nachricht ausgegeben. Ich habe hier im Programm schon mit "delays" gearbeitet, sogar im Sekunden Bereich, allerdings immer ohne Erfolg. Auch wenn keine Nachricht gesendet wird zum Display, bleibt der Effekt der gleiche. Es tritt eigentlich schon auf mit "Wire.begin". Sobald diese Programmzeile entfernt wird, läuft es. Wie kann ich also den Controller wieder so einstellen, dass A4 und A5 wieder normal arbeiten? Es ist nur das Display angeschlossen an dem Bus. Vielen dank für Eure Mühen und/oder weitere Vorschläge!