ATmega644 Baudratenproblem bie 2.5MBpps

OP #1482447
Lesenswert?

hallo miteinander

Ich stehe vor einem kleinen Problem:
Ich möchte gerne meinen FTDI Chip mit 2.5MBaud füttern, doch leider 
funktioniert das nicht ganz so wie es sollte:
Der Atmega644 wird mit einem 20MHz Quarz betrieben. 1.25MBaud 
funktioniert mit und ohne Double Speed, aber 2.5MBaud läuft überhaupt 
nicht.

Laut dem FTDI-Datenblatt (FT232) kann der bis zu 3MBaud verarbeiten.

Hier sind mal die Settings der UART:
1
#define F_CPU 20000000
2
#define BAUDRATE 2500000
3

4
UBRR0H = ((F_CPU/(BAUDRATE*8L)-1) >> 8);
5
UBRR0L = (uint8_t)(F_CPU/(BAUDRATE*8L)-1);
6
UCSR0A |= (1<<U2X0);
7
UCSR0B |= (1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0);
8
UCSR0C |= (1<<UCSZ01)|(1<<UCSZ00);

Rechnerisch gesehen sollte das einwandfrei laufen:
UBRR0 ergibt 0
und
UBRR = (f_osc/ 8/ baud rate) - 1 = (20 MHz/8/ 2.5M) - 1 = 0
closest match baud rate = f_osc/8/ (UBRR + 1) = 20 MHz/8/(0 + 1) = 2.5 
Mbps
Error=((closest match baud rate/baud rate)-1)*100%= 
((2.5Mbps/2.5Mbps)-1)*100% = 0%
Das mit dem Error ist schon mal nicht gegeben, da (wenns mir richtig in 
Erinnerung ist) bei Double Speed +/-1.5% Abweichung sein darf.

Als Terminals habe ich HTerm und Docklight v1.9 benutzt, beide hatten 
das gleiche Ergebnis.

Kann mir da jemand weiterhelfen??
MFG
P.Berger
#1482751
Lesenswert?

Wirf nochmal einen Blick ins FT232 Datenblatt. 2.5MBaud sind nicht 
möglich:

>Baud Rate = 3000000 / (n + x)
>where n can be any integer between 2 and 16,384 ( = 2^14 ) and x can be a
>sub-integer of the value 0,
>0.125, 0.25, 0.375, 0.5, 0.625, 0.75, or 0.875. When n = 1, x = 0, i.e.
>baud rate divisors with values between 1 and 2 are not possible.
OP #1482782
Lesenswert?

Sorry, aber im Datenblatt auf der 1. Seite bei den Spezifikationen 
steht:

>• Data transfer rates from 300 baud to 3 Mbaud
>(RS422, RS485, RS232 ) at TTL levels.

ausserdem habe ich mal noch was bei den Treibern gefunden:
>• Data transfer rate to 1 Megabyte / second - D2XX Direct Drivers.
>• Data transfer rate to 300 kilobyte / second - VCP Drivers.

Die einzige Erklährung von mir aus gesehen ist, dass ich den VCP Treiber 
über das Terminal anspreche, und dann nur 1.8Mbps als Baud erreichen 
kann.
#1482792
Lesenswert?

Patrick B. schrieb:
> Sorry, aber im Datenblatt auf der 1. Seite bei den Spezifikationen
> steht:
>
>>• Data transfer rates from 300 baud to 3 Mbaud
>>(RS422, RS485, RS232 ) at TTL levels.

Passt ja auch: Der FT232 kann 3Mbaud, 2MBaud, 1,5MBaud, 1,411765MBaud, 
1,333333MBaud, 1,263158MBaud usw.
Der letze Wert ist auch die Erklärung dafür warum 1,25MBaud 
funktionieren.
#1482793
Lesenswert?

Patrick B. schrieb:
> Sorry, aber im Datenblatt auf der 1. Seite bei den Spezifikationen
> steht:
>
>>• Data transfer rates from 300 baud to 3 Mbaud
>>(RS422, RS485, RS232 ) at TTL levels.

Natürlich, 3 MBaud sind auch möglich mit n=1 und x=0, so steht es im 
Datenblatt. Die nächstkleinere Baudrate sind dann aber schon 1.5 MBaud, 
gefolgt von 1.41, 1.33, 1.26, 1.2 ... MBaud.

@Justus: Das kommt darauf an, von welcher Version wir genau sprechen.
Der FT232R z.B. kann 3MBaud auch mit RS232.

@Benedikt: Da hab ich eine Sekunde länger gebraucht als du - welcher 
Baustein aus der Serie schafft denn 2 MBaud?
OP #1482818
Lesenswert?

Benedikt K. schrieb:
> Patrick B. schrieb:
>
>> Mist, da muss ich wohl auf einen FT245 ausweichen, oder kennt jemand
>> eine andere Lösung?
>
> - Du übertaktest den AVR auf 24MHz und verwendest 3MBaud.
> - Du taktest den AVR mit 16MHz und verwendest 2MBaud.

Übertakten??? Dachte ich bin hier in einem MCU Forum und nicht in einem 
PC optimirungs-Forum.
Geht das überhaupt??
OP #1482831
Lesenswert?

Was für Probleme sollen das sein? das Programmteile nicht richtig 
ausgeführt werden, oder dass man von der Software nicht mehr so einfach 
ins EEPROM schreiben kann?

Das ist natürlich eine ganz elegante aber nicht unbedingt 
standartisierte Lösung: 1 Bauelement austauschen, welches pinkompatibel 
ist als FTDI-Chip ersetzen, anderer MCU (da zu wenig IO's vorhanden 
FT245 braucht 13 IOs) was mit neuem Print und und und .... verbunden 
ist.

Werde ich auf jeden Fall mal ausprobieren.
Danke für die Antworten.
MFG
P.Berger

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