Wie unterscheide ich die verschiedenen Boards

um @HotSystems Vorschlag nochmal aufzugreifen: ein anderes USB-Kabel probieren (hat hier auch schon oft zum Erfolg geführt) und einen anderen USB-Steckplatz (hat bei mir schonmal geklappt). Bis zum Hochladevorgang mal die Reset-Taste auf dem Board gedrückt halten.

Ist das den alles Richtig?

Gruß Detlev

Ja, alles richtig....Programmer ist da egal, also braucht hier nicht gewählt werden.

Und noch die Frage, hast du beim Flashen etwas am Board angeschlossen und wenn ja, wo ?

Ja, dass habe ich schon alles gemacht nachdem @HotSystems das geschrieben hat.
Zwei Kabel probiert und zwei USB-Ausgänge benutzt.
Jetzt werde ich das noch mit der Reset-Taste probieren.
Gruß Detlev

Mit dieser IDE-Version stehe ich aber auch auf Kriegsfuss.. Muss manchmal z.B. vor dem Upload den Seriellen-Monitor einmal geöffnet haben, damit der Upload auch klappt.. Fragt nicht... Arduino-Voodoo.. :japanese_ogre:

Also bevor ich jetzt zur Version 1.8.19 rate, nochmal die Varianten mit oder ohne "oldBootloader" bei Prozessor-Einstellung testen..

Hallo derGeppi,
mit der Reset-Taste war kein Unterschied zu erkennen.
Der Versuch mit oder ohne "oldBootloder" bringt den gleichen Fehler, aber jedes Mal blinkt kurz hintereinander die rote RX-LED. Ich würde das mal so deuten, dass die Daten zwar zum Nano geschickt werden, der kann die Daten aber nicht verarbeiten. Oder?
Gruß Detlev

Nochmal die Frage, hast du am Nano beim Flashen etwas angeschlossen ?

Oder andere Frage, dein letzter Sketch läuft da noch drauf ?
Nutzt der die serielle Schnittstelle ?

Versuch's mal auch mit "new Bootloader".

Hallo HotSystem,
Nein, der Nano ist nur über das USB Kabel mit dem PC verbunden. Sonst ist nichts angeschlossen.


Sobald ich den Nano anschließe wird USB-Serial CH340 (COM4) angezeigt.
Gruß Detlev

Und der Sketch?

Ich habe jetzt einen neuen Nano aus der Verpackung geholt und angeschlossen.
Sofort fällt auf, dass die Rote LED L ständig blinkt. Beim Upload bekomme ich dann einen anderen Fehler.

Der Sketch verwendet 3928 Bytes (12%) des Programmspeicherplatzes. Das Maximum sind 30720 Bytes.
Globale Variablen verwenden 351 Bytes (17%) des dynamischen Speichers, 1697 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0xfc
avrdude: stk500_program_enable(): unknown response=0x90
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.

Fehlgeschlagenes Hochladen: Hochladefehler: exit status 1

Auf jedewn Fall ist das nicht gut was man da liest.
Gruß Detlev

Das ist ok. Seit längerem ist im Bootloader ein Blinken eingebaut.

Ach ja, hier der Sketch:

/* Mit Arduino-NANO
   Der Servo soll sich langsam von einer zur anderen Stellung bewegen.
   gesteuert über Tasten. LEDs zeigen die Fahrtrichtung an.
*/

#include <Servo.h>  // Aus der Bibliothek

Servo Serv;
int W1 = 0;   // Aktuell Position vom Servo für Weiche abspeichern
              // Servo auf Pin D5
int T1 = 9;   // Zuordnung Taster 1 auf den Ausgang D9
int T2 = 10;  // Zuordnung Taster 2 auf den Ausgang D10

int pinLed1 = 3;  // LED1 auf Pin D3 gelb
int pinLed2 = 6;  // LED2 auf Pin D6 grün

void setup() {
  Serial.begin(9600);  // Datenübertragung zum seriel Monitor

  pinMode(T1, INPUT);        // Der Taster 1 am Pin D3 ist als INPUT generiert
  pinMode(T2, INPUT);        // Der Taster 2 am Pin D5 ist als INPUT generiert
  pinMode(pinLed1, OUTPUT);  // Pin D3 für geradeaus Fahrt
  pinMode(pinLed2, OUTPUT);  // Pin D6 für abbiegen Fahrt
}

// ------------------- Funktion ---------------------------------
int schalten(int PIN, int soll, int ist, int Pause) { /* Die Funktion "schalten" beinhaltet die PIN-Nr an der 
                                                        der Servo angeschlossen ist, die Stelle wo der Servo hin
                                                        soll, die Stelle wo der Servo ist, die Pause nachdem 
                                                        der Servo die Stelle erreicht hat */

  Serv.attach(PIN);  // Der Servo am PIN D5 wird angesprochen
  if (soll > ist)
    ;
  {                                  // Wenn die "ist" Stelle kleiner als die "soll" Stelle ist, dann
    for (ist; ist <= soll; ist++) {  // for Schleife solange mit "ist" um 1 erhöhen bis der Wert erreicht ist.
      Serv.write(ist);               // Servo geht um 1 "ist" Stelle weiter
      delay(Pause);                  // Servo macht Pause
    }
  }
  if (ist > soll)
    ;
  {
    for (ist; ist >= soll; ist--) {  // for Schleife solange mit "ist" um 1 weniger bis der Wert erreicht ist.
      Serv.write(ist);
      delay(Pause);
    }
  }
  Serv.detach();               // Der Servo wird abgeschaltet
  return soll;                 // Inhalt von "soll" wird in die Funktion "schalten" geschrieben
  digitalWrite(pinLed1, LOW);  // LED für geradeaus ist aus
  digitalWrite(pinLed2, LOW);  // LED für abbiegen ist aus
}

void loop() {

  if (digitalRead(T1) == HIGH) {                              // Wenn Taste 1 gedrückt wird, dann
    digitalWrite(pinLed1, HIGH);                              // LED für geradeaus ist an
    digitalWrite(pinLed2, LOW);                               // LED für abbiegen ist aus
    W1 = schalten(5, 40, W1, 50);                             // die Funktion "schalten" schaltet die Weiche 1
    Serial.print("Taste T1 / Weiche steht auf geradeaus: ");  // Ausgabe zum seriel Monitor (Text)
    Serial.println(W1);                                       // Ausgabe zum seriel Monitor (Stellung der Weiche 1)
    Serial.println("Die LED Grün ist an ");                   // Ausgabe zum seriel Monitor (Text)
    delay(500);                                               // Pause
  }


  if (digitalRead(T2) == HIGH) {  // Wenn Taste 2 gedrückt wird, dann
    digitalWrite(pinLed2, HIGH);  // LED für abbiegen ist an
    digitalWrite(pinLed1, LOW);   // LED für geradeaus ist aus
    W1 = schalten(5, 0, W1, 50);
    Serial.print("Taste T2 / Weiche steht auf abbiegen: ");
    Serial.println(W1);
    Serial.println("Die LED Rot ist an ");  // Ausgabe zum seriel Monitor (Text)
    delay(500);
  }
}

Wie bereits gesagt, bei meinen alten Nano's, die noch in Betrieb sind funktioniert alles.
Gruß Detlev

Sicher das das im Bootloader ist?

Mit old oder new Bootloader? Richtiger COM Port?

Irre ich mich oder ist der Servo tatsächlich auf Pin D0 ?
Damit blockierst du vermutlich die serielle Schnittstelle.
Anders verstehe ich das nicht.

Für mich sieht das so aus, als ob der Servo an Pin 5 hängt.

Der Code ist aber schon ein bischen „komisch“:


 […]
  Serv.detach();               // Der Servo wird abgeschaltet
  return soll;                 // Inhalt von "soll" wird in die Funktion "schalten" geschrieben
  digitalWrite(pinLed1, LOW);  // LED für geradeaus ist aus
  digitalWrite(pinLed2, LOW);  // LED für abbiegen ist aus
}

Die LEDs werden über diese Funktion nie geschaltet.

Hat aber sicher nichts mit dem Hochladeproblem zu tun…

Dachte immer daß neben dem Bootloader auch der Blink Sketch im Flash drauf ist.

Grüße Uwe

@wwerner
Ja sorry, war etwas falsch ausgedrückt.
Mit dem Bootloader wird auch ein Blinksketch installiert.

Ja stimmt, nach mehrmaligem durchlesen, hab ich es jetzt auch gesehen.

dem fehlt der bootloader. der blinksketch ist drauf, aber ohne bootloader.