Pages: [1]   Go Down
Author Topic: Arduino Stürzt ab, RAM?  (Read 1501 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich bin dabei mein erstes Projekt zu realisieren.
Das ganze klappt eigentlich auch sehr gut.
Nur stürzt der Adruino ab und zu einfach ohne erkennbaren Grund ab. Dies vor allem wenn ich mit Zeiten rechne. Ich könnte mir vorstellen das zuwenig RAM da ist und er dann einfach von vorne beginnt.
Ich habe ca. 15 integer Variablen und ca. 5 Long Variablen welche die meisten Global gesetzt sind. Geladen ist das LCD und Servo Lib. (ein Servo)

Gibt es eine Möglichkeit ausfindig zu machen ob es am RAM liegt? Und wenn ja, was für Möglichkeiten haben ich?
Der Code ist leider zu Lang um ihn hier anzuhängen, wenn er benötigt wird lade ich ihn irgend wo hoch.
Binär grösse des Sketch ist 10,6Kbyte
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 92
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich denke, das kann man so pauschal nicht beantworten - jedenfalls glaube ich erstmal nicht, dass es am "RAM" liegt.Es könnte genauso gut an deinem Code oder an den verwendeten Bibliotheken liegen.

Welchen Arduino hast du eigentlich? Wieviel Hauptspeicher?

Wie sind denn die Fehlersymptome genau? Heißt Absturz, dass er einen Reset durchführt? Kannst du den Fehler einigermaßen zuverlässig reproduzieren oder kommt er völlig sporadisch vor?

Ich würde den Code erst mal mit Debug-Statements (Serial.println) an wichtigen Stellen ergänzen, um herauszufinden, wo da Problem auftritt und anschließend mich auf diesen Bereich konzentrieren. Dadurch findest du dann am ehesten die Ursache des Fehlers heraus.

Rudi

Logged

Offline Offline
Sr. Member
****
Karma: 2
Posts: 260
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
    int availableMemory()
    {
     int size = 8192;
     byte *buf;
     while ((buf = (byte *) malloc(--size)) == NULL);
     free(buf);
     return size;
    }
Serial.print("free memory = ");
 Serial.print(availableMemory());
 Serial.print(" - memory used = ");
 Serial.println(8192-availableMemory());

Die Funktion gibt den verfügbaren Arbeitsspeicher (8192 byte beim Arduino Uno) zurück.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich habe den Uno, das Problem tritt immer an der selben Stelle bzw. selben Stellen auf.
Interessant ist das auf dem Display dann anstelle von einer Zahl welche da ausgegeben werden soll zwei "||" ausgegeben werden. Danach geht es nochmals eine Runde und sobald wieder der Wert angezeigt werden soll kracht er zusammen und macht ein reset. Wirkich reproduzieren kann ich das ganze nicht, da es unabhängig von den eingestellten Zahlen vorkommt, vor allem aber bei Zahlen über 30 und so..
Code:
int time = 60;
int pos_end = 180;
int pos_start_set= 0;

 while(pos_start_set < pos_end+1)
  {
    if(!mili || (millis()-mili) > (time*1000))
    {
      mili= millis();
      myservo.write(pos_start_set);
      lcd.setCursor(0,1);
      lcd.print("Left: ");
      
      int tt= time * (pos_end-pos_start_set);
      if(tt <120)
      {
      lcd.print(tt);
      lcd.print("Sek   ");
      } else {
      lcd.print(tt / 60);
      lcd.print("Min   ");
      }
      to_button() ;
      pos_start_set++ ;
    }


  }

Dies ist so ein bereich wo es vorkommen kann. Oftmals macht er hier auch Garnichts mehr, wobei ich da wohl eher ein Problem wegen einer zu hohen Zahl für int habe.
Die Variablen oben sind normalerweise über ein Menü definiert, hier einfach mal solche werte welche schon Problem gemacht haben.


Edit:
Ausgabe vom freien Speicher bleibt egal bei welchen Zahlen ich einsetze bei:
free memory = 1346 - memory used = 6846

Das Problem ist jetzt aber auch nicht mehr aufgetreten.
« Last Edit: January 22, 2012, 10:30:46 am by aargau » Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 92
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Was wird denn als || angezeigt? Die Minuten oder die Sekunden?

Um die Bibliotheken als Schuldige auszuschließen, könntest du ja mal die Steuerung des Servos auskommentieren und die lcd.print-Statements durch Serial.print-Statements ersetzen (möglichst in zwei Schritten - falls das Problem nicht mehr auftritt, weißt du gleich, was die Ursache war).

Wenn du die Servos mal auskommentiert hast, dann kannst du ja auch die Zeit etwas schneller laufen lassen -statt Faktor 1000 für Millisekunden kannst du ja auch den Faktor 10 verwenden, dann läuft es schneller durch.

Ciao,

Rudi


Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 272
Posts: 21940
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Die Funktion gibt den verfügbaren Arbeitsspeicher (8192 byte beim Arduino Uno) zurück.

Der Arduino UNO hat definitiv nicht 8kByte RAM sondern 2kByte. Der Arduino Mega2560 hat 8kByte.
Grüße Uwe
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 272
Posts: 21940
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich hab eher die Stromversorgung im Verdacht.
Du hats ein LCD mit Hintergrundbeleuchtung und einen Servo?

Bitte:
* Den gesamten Code; (Du kannst Files als anhang einfügen: unter "Additional Optinos" und "Attach" unterhalb des Editorfensters, files bis 4MByte)
* die gesamte Beschaltung (auch nur Beschreibung oder Schaltplan)
* wie wird der Arduino mit Strom versorgt?
* genaue beschreibung wie der Arduino abstürzt (geht das  PWR LED aus? geht das LCD aus? ecc)

Viele Grüße Uwe

Logged

Pages: [1]   Go Up
Jump to: