PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AT90USB1287 mit Nutzung von USB und UART mit 460800 Baud



uffi
11.07.2008, 09:05
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.

BlackDevil
11.07.2008, 13:10
Wenn 8MHz für das System gehen könntest du mit einem FlipFlop die Frequenz schlichtweg Teilen ;)

uffi
11.07.2008, 13:14
und wie teilt man 8 MHz, um dann auf 7,3728 MHz für den UART zu kommen?

BlackDevil
11.07.2008, 14:20
Wie gesagt, wenn 8Mhz auch gehen kannste ja nen 1:2 Teiler nehmen und gut ist ;) Ansonsten weis ich nich ob man auch anders Teilen kann (auser 1:5 oder so)

uffi
11.07.2008, 15:42
ich denke Du hast mein Problem nicht richtig gelesen bzw. verstanden...

Besserwessi
11.07.2008, 15:52
Für den USB wird man den Quarz wohl immer brauchen, denn da braucht man für die 12 MBit Rate ein ziehmlich enges timing. Bei niedrigen Baudraten kommt man eventuell noch mit einem relativ schnellen (z.B. 16 MHz) geraden Takt klar. So weit ich das kennen geht die UART nicht über den alternativen 2 ten Takt.

Mit etwas glück könnte man mit einem 12 Mhz Quarz auch die 460800 Baud hinkriegen. Immhin sind 12 MHz : 26 = 461538 Hz. Das ist nicht so weit daneben.

uffi
11.07.2008, 16:20
nette Idee!

Leider nicht realisierbar, da 12 MHz keine 2er Potenz ist. Der Clock prescaler erlaubt nur die Teilerfaktoren 1,2,4,8, und 16, um aus der Frequenz des Quartzkristalls die 2 MHz für die 48 MHz PLL zu erzeugen.

Daher sind die 12 MHz für USB nicht nutzbar.

Besserwessi
11.07.2008, 23:25
Die 12 Mhz haben noch ein Weiteres Problem: Die Hardare UART hat nur Teilerfaktoren die vielfache von 8 bzw. 16 sind. Mit viel Aufwand könnte man eventuell noch eine Software UART bei 16 Mhz hinkriegen, aber dann ist der controller im wesenlichen damit beschäftigt. Das ist bestimmt nicht Sinn der Sache. Da wäre der 2 te Controller, oder ein externes USB Interface wohl die bessere Wahl.

uffi
12.07.2008, 21:54
Die 12 Mhz haben noch ein Weiteres Problem: Die Hardare UART hat nur Teilerfaktoren die vielfache von 8 bzw. 16 sind.

Da irrst Du Dich: der UART Baud Raten Generator erlaubt das Teilen des Systemtaktes durch (fast beliebige) ganze Zahlen.

sternst
12.07.2008, 23:07
Da irrst Du Dich: der UART Baud Raten Generator erlaubt das Teilen des Systemtaktes durch (fast beliebige) ganze Zahlen.

Ja, das Ergebnis der Teilung ist aber nicht die Baudrate selber, sondern das 16-fache der Baudrate (oder das 8-fache bei Nutzung von U2Xn). D.h. wenn sich der Takt ganzzahlig auf die Baudrate teilen lässt (wie bei 12 MHz : 26 = 461538 Hz), nützt dir das nichts. Der Takt muss sich ganzzahlig auf das 16-fache (oder halt 8-fache) der Baudrate teilen lassen.

PS: Warum ist das so? Weil der UART ein einzelnes Bit 16 mal abtastet (oder eben 8 mal, wenn U2Xn gesetzt ist).

uffi
14.07.2008, 09:35
stimmt, ihr habt Recht:

BAUD = fOSC / (8*(UBRRn + 1))

(im double speed mode).

Also, dann geht es mit 12 MHz auch vom UART her schon nicht, 460800 Baud zu realisieren (mal abgesehen von USB).