Arduino Leonardo clone wird über USB nur noch im Bootloader Modus erkannt

Hallo!
Mein erster Beitrag nach ein paar Wochen Erfahrungen mit der Arduino-Welt. Leider etwas genervt, da ich in dieser Zeit bereits auf das zweite Board nicht mehr zugreifen kann.
Heutige Situation:

  • SeeedStudio / Longan "CANBed 1.2e": Atmega32U4 microcontroller mit Arduino Leonardo bootloader
  • Arduino 1.8.19 IDE auf Windows 11
  • Arduino nur über USB verbunden.
    Zur Zeit erprobe ich drei OLED 0.91" Displays mit I2C Bus und der U8G2 Lib zu betrieben. Ich hatte gerade erfolgreich ein OLED im HW Modus und ein OLED im SW Modus (Emulation I2C) im Betrieb, als das Hochladen nicht mehr zu einem bootenden Arduino führte.
  1. Arduino über USB mit Windows Rechner verbinden = Im Gerätemanager erscheint für 10 Sekunden "Arduino Leonardo Bootloader". Danach verabschiedet sich die Meldung wieder.
  2. Hochladen Sketch über IDE während dieser 10 Sekunden wird erfolgreich abgeschlossen.
  3. Das Programm startet jedoch nicht. Kein OLED arbeitet und der Arduino wird nicht mehr über USB erkannt. Weder automatisch, noch Reset oder Power Cycle. Im Gerätemanager fehlt der "Arduino Leonardo" den ich bisher immer gesehen hatte.
  4. Ein weiterer Arduino Nano ist vorhanden.
    Hier die Ausgabe bei Hochladen:

avrdude: Version 6.3-20190619
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch

     System wide configuration file is "C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware\tools\avr/etc/avrdude.conf"

     Using Port                    : COM10
     Using Programmer              : avr109
     Overriding Baud Rate          : 57600
     AVR Part                      : ATmega32U4
     Chip Erase delay              : 9000 us
     PAGEL                         : PD7
     BS2                           : PA0
     RESET disposition             : dedicated
     RETRY pulse                   : SCK
     serial program mode           : yes
     parallel program mode         : yes
     Timeout                       : 200
     StabDelay                     : 100
     CmdexeDelay                   : 25
     SyncLoops                     : 32
     ByteDelay                     : 0
     PollIndex                     : 3
     PollValue                     : 0x53
     Memory Detail                 :

                              Block Poll               Page                       Polled
       Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
       ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
       eeprom        65    20     4    0 no       1024    4      0  9000  9000 0x00 0x00
       flash         65     6   128    0 yes     32768  128    256  4500  4500 0x00 0x00
       lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
       hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
       efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
       lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
       calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
       signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

     Programmer Type : butterfly
     Description     : Atmel AppNote AVR109 Boot Loader

Connecting to programmer: .
Found programmer: Id = "CATERIN"; type = S
Software Version = 1.0; No Hardware Version given.
Programmer supports auto addr increment.
Programmer supports buffered memory access with buffersize=128 bytes.

Programmer supports the following devices:
Device code: 0x44

avrdude: devcode selected: 0x44
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9587 (probably m32u4)
avrdude: reading input file "C:\Users\DELL\AppData\Local\Temp\arduino_build_264550/threeOLED.ino.hex"
avrdude: writing flash (15904 bytes):

Writing | ################################################## | 100% 1.19s

avrdude: 15904 bytes of flash written
avrdude: verifying flash memory against C:\Users\DELL\AppData\Local\Temp\arduino_build_264550/threeOLED.ino.hex:
avrdude: load data flash data from input file C:\Users\DELL\AppData\Local\Temp\arduino_build_264550/threeOLED.ino.hex:
avrdude: input file C:\Users\DELL\AppData\Local\Temp\arduino_build_264550/threeOLED.ino.hex contains 15904 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.13s

avrdude: verifying ...
avrdude: 15904 bytes of flash verified

avrdude done. Thank you.

Fehlen noch Angaben? Ist Neu-Programmierung des Bootloaders über weiteren Arduino erfolgversprechend? Warum kommt es zu dieser Situation nach 2 Stunden Programmierübungen?
Vielen Dank für die Unterstützung
Frank

Nöö...
Der Bootloader tuts doch!

Nein, ich vermute er startet das Programm, d.h. den auszuführenden Code nicht. D.h. er führt seine eigentliche Aufgabe nicht aus.
Sonst würde 1. der Arduino über USB erkannt werden und 2. die OLED arbeiten.
Bis vor kurzem war das noch so.

Welche Pins?

Pin 9, 8 werden für die SW-Emulation des I2C eingesetzt. Funktioniert einwandfrei.
Beim 3. OLED werde ich 4 und 5 verwenden.
Aktuell habe ich wieder alles auf ein OLED an HW I2C 2 (SDA) und 3 (SDL) reduziert.

Kannst du mal eins der Beispiel Sketches testen? Z.B. das mit der AsciiTable.

Boah, der redet wieder! Hast Du heilende Hände?
Danke für den Tipp. Und dabei hatte ich schon einen ganz anderen Sketch - von mir - probiert.
Evtl. die <Wire.h> Bibliothek? Die hatte ich bei beiden Sketches im Einsatz.

Und jetzt schalten wir wieder um zu "ThreeOLED.ino" und schauen ob und wie lange es jetzt wieder läuft.

Sind das die mit 128x32 Pixel? Das sind möglicherweise 512 Byte belegter RAM der nicht in der Zusammenfassung beim Compilieren angezeigt wird. Und das Pro OLED... Wieviel freien RAM hast du?

Wenn du willst, das das hier nicht so eine Rateshow ist, kannst du noch Schaltplan, Code und Bilder vom Aufbau posten.

Tatsächlich habe ich den Fehler schon im Constructor gemacht und da alle meine Projekte gerade mit den OLED arbeiten hat Copy&Paste das übrige getan. Der Constructor für u8g2 sieht bei HW I2C und SW I2C leicht unterschiedlich aus und ich habe missachtet, den - nicht vorhandenen Reset-Pin - anzugeben -> U8X8_PIN_NONE.
Das Titel-Problem ist daher gelöst.

Diese Variante steuert - als Test - drei gleiche OLED's (mit gleicher I2C Adresse) an und benutzt dafür bei der SW-Emulation nur einen SWL Pin 9. Sicher außerhalb der Spezifikation und es Bedarf weiterer Tests, wie robust das ganze ist. Bei dem Board ist leider nur eine 18 polige GPIO Leiste erreichbar und für die Anwendung gehen mit die Pins aus (außerdem werde ich sie neu sortieren). Sehr wahrscheinlich ist das Multiplexen des I2C Busses die ordentlichere Lösung.

/* Das Display erhält die Bezeichnung odometer, Ausgabe um 180 gedreht, Standard HW I2C über wire.h (SCL Pin 3 und SDA Pin2))*/
U8G2_SSD1306_128X32_UNIVISION_1_HW_I2C odometer(U8G2_R2,U8X8_PIN_NONE);
/* Das Display erhält die Bezeichnung reserve, Ausgabe um 180 gedreht, SW I2C Emulation (SCL Pin 9 und SDA A0*****************/
U8G2_SSD1306_128X32_UNIVISION_1_SW_I2C reserve(U8G2_R2, 9, A0,U8X8_PIN_NONE); 
/* Das Display erhält die Bezeichnung stopandgo, Ausgabe um 180 gedreht, SW I2C Emulation (SCL Pin 9 und SDA 8****************/
U8G2_SSD1306_128X32_UNIVISION_1_SW_I2C stopandgo(U8G2_R2, 9, 8,U8X8_PIN_NONE);

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.