USB-Problem SparkFun ProMicro 3.3V

#6923705
Lesenswert?

Ein Sensor mit 3.3V soll am SparkFun ProMicro-Board (3.3V 8MHz) mit 
atmega32u4-CPU angeschlossen werden. Das SparkFun ProMicro-Board meldete 
sich im Auslieferungszustand im Gerätemanager als "USB IO-Board" und 
nach Laden des Treibers per inf-Datei als "SparkFun Pro Micro (COM11)". 
Der Bootloader meldet sich mit "SparkFun Pro Micro bootloader (COM12)". 
So weit so gut.

Das Anwender-Programm ist ein C-Code-Beispiel von PJRC das auf einem 
ProMicro-Board mit 5V 16MHz bereits lief. Der Treiber dazu wurde 
installiert.

Zur Anpassung der 16MHz auf 8MHz wurden Anpassungen gemacht im Makefile, 
main.c, delay.h, usb_serial.h.

Der Upload per Bootloader, AVRDUDE klappt. Nur erscheint dann eine 
Meldung "USB-Gerät wurde nicht erkannt" und unter USB-Controller ist ein 
"Unknown Device" wo keinerlei VID/PID angezeigt wird.

Der Fehler scheint im C-Code zu liegen, nur wo.

Der Prescaler stand für 16MHz auf: PLL_CONFIG() (PLLCSR = 0x12).
Für 8MHz habe ich umgestellt auf: #define PLL_CONFIG() (PLLCSR = 0x02).

Vielleicht hat jemand einen Hinweis um das Problem zu beheben.
Angehängte Dateien:
#6923755
Lesenswert?

Jim M. schrieb:
> Musste man bei der USB Hardware nicht auch ein Bit umsetzen wenn man von
> 16 auf 8 MHz umstellt?

Laut Datenblatt 32u4 sollte die PLL mit 8MHz gefüttert werden um daraus 
48MHz für USB zu erzeugen. PJRC betrieb den Teensy mit 16MHz, egal ob 5V 
oder 3.3V. Daher sah sein Code keine Umstellung auf 8MHz vor.

Aufgrund Quarz 8MHz muss der Teiler/2 für PLL raus. Das sollte die Zeile 
#define PLL_CONFIG() die ich auf (PLLCSR = 0x02) geändert habe bewirken. 
Es kann ggf. sein dass diese Änderung nicht in einem Schritt geht, so 
wie PJRC das im Code zeigt. Dann müsste das angepasst werden.

> Für USB muss eine Menge funktionieren: Takt, Pins, USB/EP0 Interrupt
> Handler.

ja. Keine Ahnung wo da noch etwas anzupassen ist.
#6924159
Lesenswert?

Thomas Z. schrieb:
> was soll da passieren? Beschreib mal was du machen willst.

Danke für den Hinweis Thomas. Diese Zeile ist hier unnötig, sie dient 
mir als Merker wenn man Prescaler >1 nutzen will.

Laut Datenblatt Atmega328p S.38 ist der Clock Division Factor so 1. Mit 
16MHz Quarz wird die CPU also mit 16MHz getaktet. Da hier ein 8MHz Quarz 
da ist wird die CPU mit 8MHz getaktet was nach Datenblatt bei 3.3V Sinn 
macht.
#6924479
Lesenswert?

Thomas Z. schrieb:
> Dein Pll Macro ist für den atmega32u4 falsch.

Danke Thomas !

oben hatte ich noch geschrieben:
Der Prescaler stand für 16MHz auf: PLL_CONFIG() (PLLCSR = 0x12).
Für 8MHz habe ich umgestellt auf: #define PLL_CONFIG() (PLLCSR = 0x02).

diese Änderung hatte ich leider im falschen Ordner gemacht, so dass 
diese nicht wirksam werden konnte. Ohne Dich hätte ich das nicht 
gefunden weil so nicht vermutet.
#6924552
Lesenswert?

Thomas Z. schrieb:
> ich bin mir nicht mal sicher ob das korrekt ist. Im Datenblatt steht ja
> "before enabling PLL"

ja Thomas. Das hat mich auch verwirrt.

leider ist kein Beispiel mit C-Code im Datenblatt enthalten.
PJRC hat das in seinem Beispielcode einfach so gemacht.
möglicherweise ist das schlicht falsch.
aber der Code scheint doch immerhin bei 16MHz funktioniert zu haben?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren