Forum: Compiler & IDEs ATmega644 Baudratenproblem bie 2.5MBpps


von Patrick B. (p51d)


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

von Jan M. (mueschel)


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.

von Patrick B. (p51d)


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.

von Justus S. (jussa)


Lesenswert?

Patrick B. schrieb:

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

> Data transfer rates from 300 baud to 3 Megabaud (RS422 / RS485 and at TTL 
levels) and 300 baud to 1 Megabaud (RS232).

von Benedikt K. (benedikt)


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.

von Jan M. (mueschel)


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?

von Justus S. (jussa)


Lesenswert?

Jan M. schrieb:

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

das stammt aber von der Webseite zum FT232R...

von Patrick B. (p51d)


Lesenswert?

Ah, jetzt hab ich glaubs auch begriffen:
>baud rate divisors with values
>between 1 and 2 are not possible.

und 3000000/2500000 = 1.2

Mist, da muss ich wohl auf einen FT245 ausweichen, oder kennt jemand 
eine andere Lösung?

von Benedikt K. (benedikt)


Lesenswert?

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.

von Patrick B. (p51d)


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??

von Benedikt K. (benedikt)


Lesenswert?

Ja geht meist problemlos da die Dinger nicht so hochgezüchtet sind wie 
andere CPUs. Nur z.B. das EERPOM macht beim Übertakten Probleme. Und 
Atmel garantiert dann halt nicht mehr für die korrekte Funktion, aber 
davon abgesehen spricht nichts dagegen.

von Patrick B. (p51d)


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

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.