Prozessorstillstand

Hallo,

hab hier einen Arduino Mega mit einem Haufen Code, Ethernetshield und einem ATtiny via I2C als Coprozessor am Start.

Ab und an hängt sich der Mega mittlerweile komplett auf. Innerhalb des Codes hatte ich mir mittlerweile zu Testzwecken eine Funktion geschrieben, die mir einmal pro Sekunde seriell ein Zeichen ausgibt. Diese Zeichen werden nach einem Absturz ebenfalls nicht mehr ausgegeben. Außerdem schaltet sich eine zu Sketchbeginn einmalig eingeschaltete LED in jedem Fall aus, wenn es mal wieder zu einem Absturz kam. An keiner Stelle des Codes wird diese LED jedoch ausgeschaltet.

Das Merkwürdige ist, dass der Mega permanet Strom hat. Ein Wechsel von 5V via USB auf 9V bzgl. der Spannungsversorgung brachte keine Verbesserung.

Der Code ist mittlerweile leider viel zu groß um ihn hier zu posten und beinhaltet zudem private Daten, die ich nicht im Internet veröffnetlichen möchte.

Bin für jeden Tipp bzgl. der Fehlersuche dankbar und bezweifel, dass der Fehler aufgrund der Gegebenheit mit der LED am Code liegt.

Gruß Chris

Ok, du verlangst von uns, dass wir jetzt alle wieder die Glaskugel auspacken.

Ohne den Sketch können wir nur raten.

Hänge den hier an und überschreibe zuvor deine privaten Daten.

Was für Aufgaben haben deine Ethernet-Shild und der ATtiny85 ?

Kandidaten sind Endlosschleifen, Zuviel RAM benutzt, Indexoverflow eines Arrays, Pointer falsch verwendet und diverse Hardwahrefehler in Deiner Schaltung..

Grüße Uwe

Danke. Da sind Dinge dabei, nach denen ich forschen kann. :slight_smile:

Gruß Chris

Besteht die Möglichkeit, dass sich der Mega abschaltet, wenn zu viel Strom an seinem 5V-Anschluss gezogen wird? Hab da einen billigen 433MHz-Sender verbaut und wenn ich dessen Stromversorgung unterbreche scheint der Sketch stabil zu laufen.

Gruß Chris

Chris72622:
Besteht die Möglichkeit, dass sich der Mega abschaltet, wenn zu viel Strom an seinem 5V-Anschluss gezogen wird? Hab da einen billigen 433MHz-Sender verbaut und wenn ich dessen Stromversorgung unterbreche scheint der Sketch stabil zu laufen.

Dann muss der Sender defekt sein. Die ziehen nicht so viel Strom, dass dies für den Mega gefährlich wird.
Oder der Aufbau hat ne Macke.

Nimmst du die Spannung vom 5 Volt Pin oder von einem GPIO ?

Hallo,
also wenn es ein echter Mega2560 R3 ist, dann kannst Du da schon etwas dranhängen.
Min. Versorgungsspannung 7,5v.

"433MHz-Sender verbaut und wenn ich dessen Stromversorgung unterbreche scheint der Sketch stabil "

Warum? Weil der Sender keinen Strom mehr zieht- oder weil der Code des Sender nichts mehr zu tun hat?
Du bist doch bei so einem umfangreichen Code bestimmt ein Profi...
Warum fügst Du nicht am Anfang jeder Funktion ein "Serial.print" ein.
Dann weißt Du genau wie weit abgearbeitet wird.
Gruß und Spaß
Andreas

void Funktion1()
{
Serial.println("Funktion1 erreicht")

//weiter in Funktion
}

Chris72622:
Besteht die Möglichkeit, dass sich der Mega abschaltet, wenn zu viel Strom an seinem 5V-Anschluss gezogen wird?

Eher dass er nicht richtig anläuft und/oder einen Dauer-Reset macht

HotSystems:
Nimmst du die Spannung vom 5 Volt Pin oder von einem GPIO ?

Vom 5V Pin.

Am 5V Pin hängt ein ATtiny85, der via SPI mit dem Mega kommuniziert.
Die rcSwitch-Library ist auf dem ATtiny85 und der 433MHz Sender bekommt seine Triggersignale folglich von ihm.

SkobyMobil:
Warum? Weil der Sender keinen Strom mehr zieht- oder weil der Code des Sender nichts mehr zu tun hat?

Der Sketch scheint deshalb stabil zu laufen, weil er die Dinge, die er neben der 433MHz-Sendefunktionalitäten abzuarbeiten hat abarbeitet.

Gruß Chris

Chris72622:
Vom 5V Pin.

Am 5V Pin hängt ein ATtiny85, der via SPI mit dem Mega kommuniziert.
Die rcSwitch-Library ist auf dem ATtiny85 und der 433MHz Sender bekommt seine Triggersignale folglich von ihm.

Das ist normal kein Problem für den 5Volt-Pin.
Es sei denn, da liegt ein Defekt in der angeschlossenen Schaltung (ATTiny) vor.
Hast du mal den Stromverbrauch der Platine gemessen ?
Ich vermute da ungefähr 25 mA (nur Sender und ATTiny) beim Senden.
Wenn deutlich mehr, dann ist da ein Problem.

uwefed:
..Zuviel RAM benutzt..

Ich denke, das war das Problem.

Der Mega muss auf Anforderung eine kleine Html-Seite darstellen, deren Darstellung relativ viel Text erfordert.
Dank F-Macro (ohne technisch genau erklären zu können was das ist) scheint das Problem gebannt.

Zusatzfrage:

Gibt es eine Möglichkeit Arduinos bei RAM-Problemen "runterzutackten", oder ist dieser Denkansatz grundverkehrt?

Gruß Chris

Gibt es eine Möglichkeit Arduinos bei RAM-Problemen "runterzutackten", oder ist dieser Denkansatz grundverkehrt?

Ja!

Weisst Du auch wie das geht?

Gruß Chris

? ? ?

JA:
Man kann die meisten Arduinos runtertakten, in dem man den Systemtakt Vorteiler manipuliert.
Wie das geht, und welche Teiler es gibt, steht im Datenblatt.

JA:
Der Denkansatz ist grundverkehrt. Denn das hat keinerlei Auswirkungen auf den RAM Speicher.

Danke.

Gruß Chris

Das Problem ist leider doch noch immer nicht gelöst. Werde nun in den nächsten Tage mal den Code aufbereiten, so dass er "postbar" ist. Zwischenzeitlich bin ich grad testweise mal dabei den Code ohne Watchdog Timer laufen zu lassen, erhoffe mir jedoch eigentlich ehr nix davon. Is langsam ehr pure Verzweiflung.

Gruß Chris

Wenn du RAM-Speicherüberlauf hast, hilft nur RAM-Belastung zu verkleinern. Welche Möglichkeiten es da gibt, ist aber sehr stark von deinem Code abhängig. Man kann die anderen Speicherbereiche benutzen, man kann aber auch eine einzelne Varibale hernehmen und sie jeweils bei Bedarf mit dem aktuell nötigen Inhalt befüllen, danach aber auch sofort wieder frei geben. Der Inhalt käme dann zb aus einer SD-Karte.

Wie man es auch dreht, schon als ich gelesen habe: wird eine kleine Webseite dargestellt, war eigentlich klar, das du deinen Speicher überlastest. Was eine kleine Webseite beeinhaltet ist eben nicht wenig. Der Atmel rechnet in bytes und Kbytes, Webseiten rechnen in Kbytes und Mbytes. Also ungefähr eine 1000er Dimension höher.

Aber bekanntlich gibts auch nichts was nicht geht, man muss nur wissen, wo man ansetzen kann. Und dazu braucht es deinen Code.

So, nachdem der Arduino Mega 2560 nun erneut abgestürzt ist und ich nach wie vor den Fehler nicht finde, anbei der Code. Aufgrund seiner Größe konnte ich ihn leider nicht wie gewohnt in Code-Tags setzen.

Die Zuhilfenahme von F-Macros verlangsamte lediglich die Darstellung der Weboberfläche und löste nicht das Problem mit den Abstürzen, die noch immer gefühlt nach ca. drei bis vier Tagen regelmäßig auftreten.

Die Abstürze treten auch dann auf, wenn die Weboberfläche aktuell nicht aufgerufen wird.

Gruß Chris

sketch_mar27a.ino (32.1 KB)

Ohne Einzelheiten angeschaut zu haben: Kannst Du die css-Inhalte nicht von einem anderen Webspace als css-Datei zuladen?
Das würde Dein System erst mal um einiges entlasten.

Mach aus den beiden Strings const String oder besser noch const CharArrays.

Gruß Tommy

Ebenfalls ohne Deinen Sketch durchforstet zu haben...

Ich hatte mal eine Zeitvariable als int deklariert.
Immer wenn diese voll war, also bei etwa 32000 irgendwas, hat das Programm angehalten.

Ich glaube zwar nicht, dass es in Deinem Fall so offensichtlich ist, aber es klingt schon irgendwie ähnlich.

Gruß

schUk0