Upload kaputt, Board nicht mehr (wirklich) erkannt, Software hängt

Hi!

Ich bin ziemlich neu hier und kenn mich auch noch nicht sonderlich gut mit dem Arduino aus. Allerdings dachte ich, da ich sicherlich öfters mit Fragen hier antanzen werde, dass ich dann auch mein Wissen teilen sollte, sofern das relevant erscheint.

Vor Kurzem hatte ich folgendes Problem mit meinem Arduino Uno:
Nachdem ich versucht habe, die Kommunikation zwischen Board und serial monitor zu aktivieren schien es so, als ob der Arduino irgendwie in einer Schleife gehangen hat, die ihn so beschäftigt hat, dass die Software auf dem PC (version 0022) sich mehr oder weniger aufgehängt hat. Sie hat den Arduino auch nicht mehr erkannt, was bewirkte, dass ich keinen anderen code mehr hochladen konnte. Nach ein paar Versuchen, das Problem mit der Reset Taste zu beseitigen stellte ich fest, dass einen ganz kurzen Moment nach der Betätigung dieser das Board erkannt wurde und die Software auch kurz wieder funktionierte. Diese Zeit reichte aber nicht aus, um einen harmlosen Code hochzuladen.

Nach dem ersten Panikanfall hab ich angefangen, zu googlen, aber keine Lösung dafür gefunden. Eventuell hab ich nur die falschen Begriffe verwendet aber darum dachte ich, ich sollte meine Lösung veröffentlichen, zumal mir gestern in einer anderen Situation das gleiche nochmal passiert ist. In einem anderen Forum (das ich leider nicht mehr finde) stand bei der gleichen Problematik, man müsse den atmega328 austauschen, was ich bisher verhindern konnte.

Nachdem ich das Board bzw. zumindest den MC sowieso abgeschrieben habe dachte ich, ich könnte einfach mal rumprobieren und bin dann auf folgende Lösung gekommen:

  1. Board ausstecken
  2. Code in der Software vorbereiten (ich habe einfach folgenden verwendet, da man scheinbar kein "leeres Blatt" hochladen kann)
    void setup(){} void loop(){}
  3. Reset Taste auf dem Board gedrückt halten
  4. Board einstecken, kurz warten
  5. Code hochladen, was eine Fehlermeldung provoziert
  6. Reset Taste loslassen
  7. Code nochmal hochladen

Ich kann natürlich keine Verantwortung für eventuelle Folgeschäden übernehmen - bei meinem Arduino Uno gab es bisher aber keine.

Falls das Verfahren schon bekannt ist - sorry habs gesucht und nicht gefunden :slight_smile:
Aber eine Frage hätte ich noch: kann sich jemand vorstellen, dass das Board oder der Chip dadurch beschädigt werden? Gibts vielleicht sogar eine bessere Lösung?

Sieht so aus als würde der Autoreset bei Deinem Board nicht funktionieren. Fragt sich nur warum. Das kann man so aus der Ferne nur schwer sagen.

hab da kurz mal rein gelesen - wenn ich das richtig verstehe heisst autoreset, dass das board von selbst resettet, wenn ich code hochlade - dann liegt es aber glaub ich nicht daran, weil das eben nur mit zwei codes nicht mehr funktionierte (wiederholbar nicht funktionierte übrigens - während andere codes ganz normal gingen)

Kanns sein, dass in diesem code (einer der beiden, die Probleme machen) irgend ein Fehler ist? Leider kann ich da noch nicht viel dazu sagen, weil ich eben noch ziemlicher Anfänger bin.

uint8_t rows[7] = {1,2,3,4,5,6,7};
uint8_t columns[5] = {8,9,10,11,12};

uint8_t matrix[7][5] = {
  {1,0,0,0,0},
  {0,1,0,0,0},
  {0,1,0,0,0},
  {0,0,1,0,0},
  {0,0,1,0,0},
  {0,0,0,1,0},
  {0,0,0,0,1},
};

void setup(){
  for (int i=0; i<7; i++) {
    pinMode(rows[i], OUTPUT);
  }
  for (int i=0; i<5; i++) {
    pinMode(columns[i], OUTPUT);
  }
}

void showMatrix() {
  for (int x = 0; x<4; x++) {
    for (int y = 0; y<5; y++) {
      digitalWrite(rows[y], !matrix[y][x]);
    }
    digitalWrite(columns[x], 1);
    delay(1);
    digitalWrite(columns[x], 0);
  }
  
}


void loop() {
  showMatrix();
}

Die Reaktion: alle leds auf ner 5x7 matrix leuchten (keine Diagonale am Anfang, wie das angeblich sein soll)
Weiteres Rumexperimentieren hat gezeigt, dass das upload Problem nicht auftritt, wenn ich in void showMatrix() die erste Zeile weg lasse...

panzerdampf:
hab da kurz mal rein gelesen - wenn ich das richtig verstehe heisst autoreset, dass das board von selbst resettet, wenn ich code hochlade

Autoreset heißt der IDE resetiert den Arduino damit der Uploadvorgang beginnen kann da der Bootloader nache dem Reset aufgerufen wird und kontrolliert ob ein Sketch übertragen werden kann. Der Reset erfolgt durch einen impuls auf dem DTR-Pin der serielle Schnittstelle.

panzerdampf:
Kanns sein, dass in diesem code (einer der beiden, die Probleme machen) irgend ein Fehler ist? Leider kann ich da noch nicht viel dazu sagen, weil ich eben noch ziemlicher Anfänger bin.

uint8_t rows[7] = {1,2,3,4,5,6,7};

uint8_t columns[5] = {8,9,10,11,12};

Pin 1 ist das TX-Pin der seriellen Schnittstelle. Wenn Du etwas dranhänst kann die Datenübertragung und das Upload nicht funktionieren. Du kannst die Analogen Eingänge als digitale Ein-Ausgänge verwenden; Pin 14 bis 19.

Grüße Uwe

Ah... und schon läufts wie geschmiert - vielen Dank!

Ich wusste das mit dem RX pin nicht - stand auch in meinem Buch nicht drin, aus dem auch der Code stammt... allerdings steht da sehr viel nicht drin :confused:

Kanns sein, dass Pin 14-19 beim Arduino Uno A0-A4 heissen? Ich benötige die momentan noch nicht darum kenn ich mich auch nicht aus damit..

panzerdampf:
Kanns sein, dass Pin 14-19 beim Arduino Uno A0-A4 heissen? Ich benötige die momentan noch nicht darum kenn ich mich auch nicht aus damit.

A0-A5 sind die analogen Eingänge. wenn Du diese Pins als digitale Ein- bzw Ausgänge verwenden willst heißen sie 14 bis 19.
Grüße Uwe

Ah alles klar vielen Dank!