Forum: Mikrocontroller und Digitale Elektronik AT90USB1287 mit Nutzung von USB und UART mit 460800 Baud


von uffi (Gast)


Lesenswert?

Hallo,

ich möchte auf einem neu zu entwerfenden PCB einen AT90USB1287 
einerseits mit der USB-Schnittstelle zum Programmieren via FLIP und nach 
dem Code flashen für die UART-Kommunikation zu einer Sony Ericson MCA-25 
Kamera mit 460800 Baud nutzen.

Mein Problem:
- USB braucht einen Quartzkristall für die Systemclock mit einer 
Zweierpotenz von 2 MHz (z.B. 16 MHz).
- Für den UART brauche ich aber einen Quartzkristall mit 14,7456 oder 
7,3728 MHz für die Systemclock.

Erste Idee zur Lösung:
2 verschiedene Quartzkristalle auf das Board setzen und über Jumper 
konfigurieren.
Nachteil: Man muss jedesmal zweimal zwei Jumper umstecken, wenn man 
neuen Code laden will.

Habt ihr noch eine pfiffigere Idee?

Braucht man den Quartzkristall für USB auch schon dann, wenn man nur mit 
dem Bootloader Code laden will?

Kann man evtl. die Baudrate für den UART auch vom externen Quartz für 
den Timer2 generieren?

Danke und Gruß, uffi.

von M. H. (doktorgnadenlos)


Lesenswert?

Die UART ist sehr tolerant hinsichtlich Taktgenauigkeit. Soweit ich weiß 
synchronisieren die AVRs bei jedem Flankenwechsel. Nach 9 bzw. 10 Bits 
(Startbit + 8 Datenbits (+ 1 Paritybit)) ergibt sich zwangsläufig ein 
Flankenwechsel. Die Abtastung erfolgt etwa in der Bitmitte, sodass die 
maximal tolerierte Taktabweichung einfach zu berechnen ist.

Also, nur Mut beim Runden des UBRR-Registers !

von uffi (Gast)


Lesenswert?

Laut Datenblatt des AT90USB1287 liegt der max tolerierbare Fehler bei 
1-3% je nach Konfig.

Der auftretende Fehler beim Runden des UBRR liegt aber in diesem Fall 
mit 460800 Baud bei 8%. Also wird das nicht hinhauen.

von M. H. (doktorgnadenlos)


Lesenswert?

Ich hab's mal kurz überschlagen :
UBRR = 0x03 ergibt tatsächlich eine Abweichung von ca. 9% (mit Double 
Speed).
Daraus ergibt sich eine Baudrate am AVR von 500000Baud. Nach 6 Bits sind 
die 50% bereits überschritten. Resynchronization geschieht nur beim 
Startbit.
Tja, da scheint in der Tat nicht zu funktionieren.

von Stefan Salewski (Gast)


Lesenswert?

>Braucht man den Quartzkristall für USB auch schon dann, wenn man nur mit
>dem Bootloader Code laden will?

Gerade da, denn die Übertragung soll ja fehlerfrei sein.

>- USB braucht einen Quartzkristall für die Systemclock mit einer
>Zweierpotenz von 2 MHz (z.B. 16 MHz).

Nach dem aktuellen Datenblatt sind sogar nur noch 8 und 16 MHz Quarze 
für USB erlaubt (steht irgendwo am Ende, Errata oder so).

von Peter D. (peda)


Lesenswert?

Nimm nen Attiny2313 und programmier ihn als UART-SPI Converter.


Peter

von uffi (Gast)


Lesenswert?

@ peda: Das ist ein konstruktiver Vorschlag. Danke für den Tipp. Das ist 
wirklich ne Überlegung wert. Danke, uffi.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.