Forum: Mikrocontroller und Digitale Elektronik Arduino Mega 2560 Absturz bei Signal auf Digital Input


von key (Gast)


Lesenswert?

Hallo
Wie in der Überschrift beschrieben hab ich das Problem dass mein 
Programm auf dem Arduino Mega 2560 abstürzt sobald ein High signal an 
einem als Input Konfiguriertem Pin anliegt. Ich kann das Programm im 
Ganzen nicht Posten, da es über 800 Zeilen Code enthält. Laut Arduino 
IDE verwendet der sketch 13332 Bytes(5%) des Programmspeichers und 4020 
Bytes (49%) des dynamischen Speichers werden durch Globale Variablen 
verwendet.

Bei Steigender Flanke an dem Pin soll eine ISR ausgeführt werden (der 
einfachheit halber erstmal nur
[c]
void setup()
{
...
 pinMode(3,INPUT);//Interruptpin
 attachInterrupt(1,gedrueckt,RISING);
...
}

void loop()
{
...
}

void isr ()
{
Serial.println("Interrupt");
}
[c]

setze ich diese Zeilen in einen neuen sketch und lade ihn auf den 
Arduino funzt alles prima

nur in meinem eigentlichen Sketch leider nicht... Statt dessen beginnt 
das Programm wieder bei 0(da ist unter anderem eine Zeitzählung 
basierend auf der millis() funktion mit im Programm)
hat jemand schonmal ein ähnliches Phänomen gehabt?

Kann es vielleicht sein dass der Arbeitsspeicher überläuft und das ganze 
deshalb abstürzt? kann man das Irgendwie überprüfen wie voll der 
Arbeitsspeicher ist?

von Karl H. (kbuchegg)


Lesenswert?

key schrieb:

> setze ich diese Zeilen in einen neuen sketch und lade ihn auf den
> Arduino funzt alles prima

Das glaube ich nicht!

Schon alleine deswegen, weil du hier behauptest
1
  attachInterrupt(1,gedrueckt,RISING);

die Interrupt Funktion würde 'gedrueckt' heissen und tatsächlich
1
void isr ()
2
{
3
  Serial.println("Interrupt");
4
}
heisst sie aber ganz anders.

Wenn man sich hier im Forum extrem unbeliebt machen will, dann postet 
man zu seinen Fragen Codeausschnitte, bei denen schon ein Blinder aus 5 
Meter Entfernung sagen kann, dass die nie und nimmer durch den Compiler 
gegangen sind bzw. auf dem µC gelaufen sind.
Und noch unbeliebter macht man sich mit der Frage
"Ich hab da ein Problem aber ich zeig euch den Code nicht"
Kommt dann auch noch beides zusammen, dann fragt sich jeder: "Wenn er 
schon das SChnipsel schlampig postet, welche Schlampigkeitsfehler 
stecken dann noch im realen Code?" und geht zum nächsten Thread. Zeit 
verplempern kann mann auf amüsantere Art.

von key (Gast)


Lesenswert?

ich habs nochmal probiert mit den definitiv richtigen namen!!! selbes 
ergebniss. ich kann gerne 800 Zeilen Code posten. Dann beschwert sich 
jemand dass es unübersichtlich ist weil zu viel... Als ich das ganze 
letzten Monat verwendet habe hat alles prima funktioniert... inzwischen 
habe ich nur reglerwerte verändert... also nichts an der 
funktionalität...

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

key schrieb:
> ich kann gerne 800 Zeilen Code posten.

Das ist überhaupt kein Problem. Man kann an jedes Posting (fast) 
beliebig viele Dateien anhängen. So bleibt die Übersichtlichkeit 
gewahrt und der Leser kann sich diese Datei dann anschauen. Hat sie auch 
eine vernünftige Dateiendung (nämlich wie im Original auf Deinem PC), 
werden Schlüsselwörter sogar farblich hinterlegt.

> Als ich das ganze letzten Monat verwendet habe hat alles prima
> funktioniert... inzwischen  habe ich nur reglerwerte verändert...
> also nichts an der funktionalität...

Wahrscheinlich hattest Du den Fehler schon vorher drin, jedoch ist 
dieser bis zum Zeitpunkt der Änderungen nicht in Erscheinung getreten. 
Vermutlich irgendein Überschreibser eines Buffers oder Arrays...

Her mit dem Source - alles andere ist Glaskugel-Lesen.

von Blinky (Gast)


Lesenswert?

key schrieb:
> ich kann gerne 800 Zeilen Code posten. Dann beschwert sich
> jemand dass es unübersichtlich ist weil zu viel...

Dafür gibt es die Funktion "Dateianhang". Dann ist das ein Attachment 
und kein seitenlanger Post.

von Michael S. (stroggi)


Lesenswert?

Wenn das Programm ja vor der Änderung der Regelerwerte funktioniert hat, 
dann liegt es vermutlich (nur) an deinen Regelerwerten. Hast du schonmal 
probiert die ursprünglichen Reglerwerte wieder einzutragen und geschaut 
ob das System dann noch funktioniert?

von Albrecht H. (alieninside)


Lesenswert?

Nach der bereits erfolgten Kritik an der Darstellung beziehe ich mich 
mal auf die sehr allgemein gestellten Fragen selbst.

key schrieb:
> ...
> hat jemand schonmal ein ähnliches Phänomen gehabt?
> ...

Davon ist auszugehen.

> Kann es vielleicht sein dass der Arbeitsspeicher überläuft und das ganze
> deshalb abstürzt?

Schon möglich.

> kann man das Irgendwie überprüfen wie voll der
> Arbeitsspeicher ist?

Prinzipiell schon, kommt aber halt im Einzelfall auf den Kenntnisstand 
an über den man verfügt.

Vor einiger Zeit gab es mal eine ähnliche Fragestellung, da haben z.B. 
Leute beim Programmstart feste Werte in den RAM-Speicher geschrieben und 
dann regelmäßig überprüft ob diese Werte da noch drinstehen oder bereits 
überschrieben wurden. Hier z.B. wird so etwas beschrieben, (aber halt 
nicht speziell für Arduinos):
http://rn-wissen.de/wiki/index.php/Speicherverbrauch_bestimmen_mit_avr-gcc

Allgemeine Tipps:

Alles auskommentieren bis auf das Grundgerüst, dann einen Programmteil 
nach dem anderen wieder hinzufügen und schauen ab wann es hängt.

Immer schön Status-LEDs blinken lassen und reichlich Variableninhalte 
und Statusmeldungen über den seriellen Port an den PC versenden!

von key (Gast)


Lesenswert?

hallo
ok hab das ganze nochmal ausprobiert (ohne was verändert zu haben) jetzt 
funzt es auf einmal wieder dafür läuft ein anderer Programmteil nicht 
mehr... ich werd mich nochmal selber in meinem code vergraben und 
versuchen abzuspecken ohne die funktionalität zu gefärden. Hab mir auch 
einen 2. Arduino bestellt um auszuschließen dass meiner kaputt 
ist.(wollte sowiso noch nen 2.haben)

ich werde wenn der 2. da ist auch mal versuchen meinen mit nem 9V block 
versorgen die Daten an den 2. Arduino senden, der dann über USB alles an 
den Rechner sendet. Vielleicht hat der ja auch nur Probleme, wenn er 
über USB versorgt wird.

Danke schonmal

von Hubert G. (hubertg)


Lesenswert?

key schrieb:
> ich werde wenn der 2. da ist auch mal versuchen meinen mit nem 9V block
> versorgen die Daten an den 2. Arduino senden, der dann über USB alles an
> den Rechner sendet. Vielleicht hat der ja auch nur Probleme, wenn er
> über USB versorgt wird.

Verwende lieber ein Steckernetzteil anstelle des 9V Blocks, sonst hast 
du sicher mehr Probleme als vermeintlich mit USB.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.