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