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.
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 !
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.
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.
>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).
Nimm nen Attiny2313 und programmier ihn als UART-SPI Converter. Peter
@ 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.