- LiTime Speicher und Akkus         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Arduino Pro Micro - Treiber Problem, oder was sonst?

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied Avatar von basteluwe
    Registriert seit
    15.11.2012
    Beiträge
    131

    Arduino Pro Micro - Treiber Problem, oder was sonst?

    Anzeige

    Powerstation Test
    Hallo Gemeinde,
    ich habe gestern versucht einen neuen Pro Micro zu programmieren. Es ist kein Original sondern ein billiger Clone aus Fernost.

    Beim ersten Anstecken am USB wurde er im Gerätemanager korrekt als "Pro Micro" an COM9 erkannt.
    In der IDE konnte ich das Board "Pro Micro" und die COM9 problemlos auswählen. Kompilieren ging ohne Fehlermeldung und Hochladen schien ebenfalls ohne Probleme zu gehen. Allerdings hatte ich den Eindruck, daß das Hochladen SEHR schnell beendet war.

    Seit dem Hochladen wird der Pro Micro am USB NICHT mehr erkannt! In der IDE ist der COM9 nicht mehr da und im Gerätemanager steht an betreffender Stelle: "unbekanntes usb-gerät (fehler beim anfordern einer gerätebeschreibung.)"
    Beim Versuch die Treiber neu zu installieren, behauptet Windows, daß der beste Treiber bereits installiert ist. Deinstallieren des Geräts und Neuinstallieren bring das gleiche Ergebnis.

    Nun komm ich auf das Board nicht mehr drauf, Mist!
    Irgendwelche Ideen?

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Andree-HB
    Registriert seit
    10.12.2004
    Ort
    Bremen
    Alter
    53
    Beiträge
    2.803
    Dieser Ardino (Clone) hat USB integriert ("based on the ATmega32u4"), wird also nicht über einen Wandler angesteuert - daher kann man ihn z.B. auch als HID-Device (wie eine Tastatur oder Maus) benutzen.
    ...habe ich gerade die Tage gemacht:
    http://www.pixelklecks.de/projekteiii/zusatztastatur/

    Einmal abziehen und wieder draufstecken, dann meldet er sich evtl. über einen anderen Com-Port

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied Avatar von basteluwe
    Registriert seit
    15.11.2012
    Beiträge
    131
    Zitat Zitat von Andree-HB Beitrag anzeigen
    Einmal abziehen und wieder draufstecken, dann meldet er sich evtl. über einen anderen Com-Port
    SO einfach ist es leider nicht. Das hatte ich natürlich sofort getestet. Ich hab sogar das Gerät komplett gelöscht und dann von Neuem installiert. Das Ergebnis ist das gleiche wie oben beschrieben.

  4. #4
    HaWe
    Gast
    ich hatte mal so etwas bei einem meiner MCUs, der musste neu geflasht werden, dann hat es wieder funktioniert (habe ich aber nicht selber machen können).
    Wenn sich der Aufwand für dich nicht lohnt: kauf dir einen neuen...

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    55
    Beiträge
    2.197
    Manchmal hilft es auch, unter Prozessor die Variante "old bootloader" zu wählen.
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Man kann durch eine falsche Programmierung den Bootloader deaktivieren
    und dann meldet sich das Gerät garnicht mehr am USB an.

    Wie schon beschrieben, hat er keinen, wie so oft übliche USB to RS232 Converter mit eigenem Treiber
    FTDI oder Silabs, sondern es befindet sich der USB Code im Chip selbst.

    Man muss den Bootloader nun separat aktivieren, das geht meistens über einen speziellen Pin.
    Schau mal hier bitte rein, vielleicht hilft das weiter:
    https://forum.arduino.cc/index.php?topic=255248.0

    Wenn man den USB Code versehentlich überschrieben hat, kann man das wohl über den ISP
    Programmer auch wieder hin bekommen.

  7. #7
    HaWe
    Gast
    Zitat Zitat von Rabenauge Beitrag anzeigen
    Manchmal hilft es auch, unter Prozessor die Variante "old bootloader" zu wählen.
    das hilft IMO nur, wenn der COM-Port auch erkannt wid, dann aber das Hochladen trotzdem nicht klappt - dann hättest du Recht:
    eine COM-Port-Erkennung aber wäre Vorraussetzung.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied Avatar von basteluwe
    Registriert seit
    15.11.2012
    Beiträge
    131
    Danke für die Hilfe soweit! Auf jeden Fall hab ich erst mal HaWe's Rat befolgt, und einen neuen Micro bestellt.

    Nun würde mich aber interessieren, wie denn das eigene Programm strukturiert sein sollte, damit es NICHT mit der USB-Routine kollidiert? Ich meine, solange ich dort nichts ändere, wird mir der Mist ja mit dem neuen Micro wieder passieren!?
    Geändert von basteluwe (24.04.2020 um 15:35 Uhr)

  9. #9
    HaWe
    Gast
    beliebte Fehler sind zB.: direkt an (versehentlich falsche) Speicheradressen schreiben oder cstrings über ihre Größe hinaus beschreiben, wie etwa
    char test[5];
    strcpy(test, "zulang");
    wenn alles sauber programmiert ist, "dürfte" es nicht passieren.

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied Avatar von basteluwe
    Registriert seit
    15.11.2012
    Beiträge
    131
    Zitat Zitat von HaWe Beitrag anzeigen
    beliebte Fehler sind zB.: direkt an (versehentlich falsche) Speicheradressen schreiben oder cstrings über ihre Größe hinaus beschreiben, wie etwa
    char test[5];
    strcpy(test, "zulang");
    wenn alles sauber programmiert ist, "dürfte" es nicht passieren.
    Na gut, für das "sauber programmieren" leg ich besser nicht meine Hand in's Feuer. Ich bin ja eher so der "Cut & Paste"-Programmierer. Das fragliche Programm läuft zwar mit Arduino Pro Mini in zwei Versionen bisher problemlos. Trotzdem passierte beim Micro diese Pleite
    Ich habe einige wenige "char"-Befehle drin und schreibe zwei Variablen in den EEPROM.
    Hier ist das komplette Programm:
    Code:
    /*********************************************************************
     * FM-Radio mit RDA5708M, Leonardo Pro Micro 3.3V und OLED 64x32     *
     * Steuerung über vier Drucktaster:                                  *
     *    button 1 - volume down                                         *
     *    button 2 - volume up                                           *
     *    button 3 - scan frequency down                                 *
     *    button 4 - scan frequency up                                   *
     * Das OLED-display zeigt drei Zeilen:                               *
     *  1- "Empfangsfrequenz"                                            *
     *  2- "RDS Daten" wenn vorhanden, falls nicht dann "No RDS          *
     *  3- "Volume: 0-15"                                                *
     * Die Empfangsfrequenz und der Wert für Volume wird im EEPROM       *
     * gespeichert, so dass bei jedem Neustart die alten Werte gelten.   *
     *                                                                   *
     * U.Galepp April 2020                                               *
     ********************************************************************/
    
    #include <Arduino.h>
    #include <Wire.h>                                       // für I2C
    #include <radio.h>                                      // für allgemeine Radio-Befehle
    #include <RDA5807M.h>                                   // für spezifische RDA5807 Details
    #include <RDSParser.h>                                  // für RDS Daten Verarbeitung
    #include <EEPROM.h>                                     // für Datenspeicherung wenn Aus
    #include "er_oled.h"                                    // für spezielles OLED
    
    #define FIX_BAND     RADIO_BAND_FM                      // ausgewähltes Band ist FM
    
    RDA5807M radio;                                         // create an instance of class for RDA5807M chip
    
    RDSParser rds;                                          // get RDS parser
    
    int button_1 = 4;                                       // Taster für volume down an D4
    int button_2 = 5;                                       // Taster für volume up an D5
    int button_3 = 6;                                       // Taster für scan down an D6
    int button_4 = 7;                                       // Taster für scan up an D7
    int buttonState_1 = 0;
    int buttonState_2 = 0;
    int buttonState_3 = 0;
    int buttonState_4 = 0;
    
    int volume;                                             // integer Variable für Lautstärke
    int roll = 64;                                          // integer Variable für Laufschrift RDS
    int frequency;                                          // integer Variable für Frequenz
    byte storeVol;                                          // Speichervariable "Volume" für EEPROM
    byte storeFreq;                                         // Speichervariable "Frequenz" für EEPROM
    char vol[2];                                            // Zeichenkette Variable für Lautstärke (0-15)
    char* info;                                             // Zeichenkette Variable für RDS-Info
    unsigned long previousMillis = 0;                       // Laufvariable für Zeitmessung EPROM-Speicher
    uint8_t oled_buf[WIDTH * HEIGHT / 8];                   // Dimension für OLED Puffer
    
    /*** setup ***/
    void setup()
      {
      Serial.begin(57600);                                  // Start seriellen Terminal für Debugging
      er_oled_begin();                                      // OLED starten  
      radio.init();                                         // Radio initialisieren
      radio.setBand(FIX_BAND);                              // Radio auf ausgewähltes Band (FM) setzen
      storeFreq = EEPROM.read(0);                           // Speicherwert für Frequenz aus EEPROM holen
      frequency = (storeFreq + 825)*10;                     // Frequenzwert zu int für Radio-Chip wandeln
      radio.setFrequency(frequency);                        // Radio auf gespeicherte Frequenz setzen
      storeVol = EEPROM.read(1);                            // Speicherwert für Volume (byte) aus EEPROM holen
      volume = storeVol;                                    // byte zu int (volume) wandeln
      radio.setVolume(volume);                              // Radio auf gespeicherte Lautstärke setzen
    
      radio.attachReceiveRDS(RDS_process);                  // setup the information chain for RDS data.
      rds.attachServicenNameCallback(ServiceName);
    
      pinMode(button_1, INPUT);                             // Taster-Pins als Eingang definieren
      pinMode(button_2, INPUT);                             // -||-
      pinMode(button_3, INPUT);                             // -||-
      pinMode(button_4, INPUT);                             // -||-
      digitalWrite(button_1, HIGH);                         // Pull-Up Widerstände aktivieren
      digitalWrite(button_2, HIGH);                         // -||-
      digitalWrite(button_3, HIGH);                         // -||-
      digitalWrite(button_4, HIGH);                         // -||-
      }
    
    void ServiceName(char *name)
      { info = name; }
    
    void RDS_process(uint16_t block1, uint16_t block2, uint16_t block3, uint16_t block4)
      { rds.processData(block1, block2, block3, block4); }
    
    
    void loop() 
      {
    
    // alle 15 Sekunden Abfrage ob Volume oder Frequenz reändert? Wenn ja, dann in EPROM schreiben!
       if (millis() - previousMillis > 15000){              // Sind 15 Sekunden um?
        previousMillis = millis();                          // Zeit zurücksetzen
        frequency = (radio.getFrequency());                 // Frequenz aus Radio auslesen (int)
        storeFreq = (frequency/10)-825;                     // Frequenz (int) in Speicherwert storeFreq (byte) umrechnen
        volume = radio.getVolume();                         // Volume aus Radio auslesen (int)
        storeVol = volume;                                  // Volume (int) in Speicherwert storeVol (byte) umwandeln
        EEPROM.update(1, storeVol);                         // falls neuer Speicherwert von altem abweicht, dann update EEPROM
        EEPROM.update(0, storeFreq);                        // falls neuer Speicherwert von altem abweicht, dann update EEPROM
        }
    
    // Tastenabfrage für Lautstärke und Frequenzänderung
       if(!digitalRead(button_1) ) {                        // wenn Taster 1 gedrückt, Volume einen Schritt runter
        while(!digitalRead(button_1) )                      // warten auf Taster loslassen == HIGH
          {delay(10);}
          volume --;
          if (volume < 0) volume = 0;
          radio.setVolume(volume);
          }
    
       if(!digitalRead(button_2) ) {                        // wenn Taster 2 gedrückt, Volume einen Schritt hoch
        while(!digitalRead(button_2) )                      // warten auf Taster loslassen == HIGH
          {delay(10);}
          volume ++;
          if (volume >15) volume = 15;
          radio.setVolume(volume);
          }
    
       if(!digitalRead(button_3) ) {                        // wenn Taster 3 gedrückt, abwärts scannen   
        while(!digitalRead(button_3) )                      // warten auf Taster loslassen == HIGH
          {delay(10);}
          radio.seekDown();
          info = "";                                        // RDS-Info löschen
          delay(100);
          }
    
       if(!digitalRead(button_4) ) {                        // wenn Taster 4 gedrückt, aufwärts scannen   
        while(!digitalRead(button_4) )                      // warten auf Taster loslassen == HIGH
          {delay(10);}
          radio.seekUp();
          info = "";                                        // RDS-Info löschen
          delay(100);
          }
    
    // OLED-Ausgabe der Daten
       char s[12];                                          // Formatierung der Frequenzangabe
       radio.formatFrequency(s, sizeof(s));                 // -||-
    
       er_oled_clear(oled_buf);                             // OLED Puffer löschen (Anzeige leeren)
    
       radio.checkRDS();                                    // RDS Daten abrufen
    
       if (roll == 0)roll = 64;                             // wenn Laufschrift-Position ganz links, setze wieder auf rechts
    
        if(info == "")                                      // Wenn keine RDS-Info gefunden...
         { 
         er_oled_string(roll, 11, "No RDS", 12, 1, oled_buf); // ...zeige "No RDS"
          }
          else                                              // ansonsten... 
           {
           er_oled_string(roll, 11, info, 12, 1, oled_buf); // ...zeige RDS-Info
            }
        roll --;                                            // setze RDS-Position einen Pixel nach links
    
        er_oled_string(0, 0, s, 12, 1, oled_buf);           // schreibe Frequenz in erste Zeile OLED Puffer
        er_oled_string(6, 22, "Volume: ", 12, 1, oled_buf); // schreibe Zeichenkette "Volume:" in dritte Zeile OLED Puffer
        sprintf (vol, "%d", volume);                        // Umwandlung int "volume" zu char "vol"
        er_oled_string(49, 22, vol, 12, 1, oled_buf);       // schreibe Zeichenkette vol in dritte Zeile OLED Puffer
        er_oled_display(oled_buf);                          // gesammten Puffer im OLED darstellen
    
        // Ausgabe der Werte für Debugging (Terminal)
        Serial.print(" Frequenz: ");
        Serial.print(frequency);                            // Ausgabe der Frequenz
        Serial.print("   Volume: ");
        Serial.print(volume);                               // Ausgabe der Lautstärke
        Serial.print("   RDS Daten: ");
        Serial.println(info);                               // Ausgabe der RDS-Info
        Serial.print("V  ");
    
      } // End
    Wenn ihr da drinn einen Bug findet, der den USB killed, wäre ich sehr dankbar.
    Schönes Wochenende!

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Arduino Leonardo/Micro Frage
    Von Andi#87 im Forum Arduino -Plattform
    Antworten: 22
    Letzter Beitrag: 26.01.2019, 13:58
  2. Arduino Due + Treiber + Schrittmotor PROBLEM
    Von stevie3354 im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 31.01.2014, 00:11
  3. Blue Earth Micro-485 oder Micro-440
    Von Mandi Nice im Forum Elektronik
    Antworten: 0
    Letzter Beitrag: 02.11.2008, 08:26
  4. Fehler des Compilers? / LIB? oder sonst was.
    Von raptor_79 im Forum Asuro
    Antworten: 11
    Letzter Beitrag: 15.01.2008, 01:20
  5. Problem was sonst (neues RNBFRA) i2c funktioniert nicht
    Von paladin im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 1
    Letzter Beitrag: 17.12.2005, 16:38

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test