Forum: Mikrocontroller und Digitale Elektronik FT232RL 3Mbaud senden und empfangen


von Claudio Hediger (Gast)


Lesenswert?

Hallo


Ich versuche mit dem FT232RL und einem Attiny2313 mit 3MBaud's daten 
auszutauschen.

Mein C Programm
1
void uart_init(void)
2
{
3
  UCSRB |= (1<<RXEN);
4
  UCSRB |= (1<<TXEN);                // UART TX einschalten
5
  UCSRB |= (1<<RXCIE);
6
  UCSRC |= (3<<UCSZ0);    // Asynchron 8N1 
7
8
  UBRRH = 0;
9
  UBRRL = 0;
10
}
11
12
ISR(USART_RX_vect)
13
{
14
15
}
16
17
void main(void)
18
{
19
  uart_init();
20
  sei();
21
  
22
  
23
  
24
  while(1)
25
  {
26
      while (!(UCSRA & (1<<UDRE)));  /* warten bis Senden moeglich                   */
27
  UDR = ('o');                    /* schreibt das Zeichen x auf die Schnittstelle */
28
  }
29
30
}

Auf der PC Seite verwende ich ein angepasstes Beispielprogramm von FTDI

Ich stelle in delphi so die Baudrate ein:
1
FT_Current_Baud := 3000000;
2
Set_USB_Device_BaudRate;

Doch leider kommt nur "müll" beim PC an...

Ich empfange erst 30000 bytes und zeige diese an.

bei o wie in diesem beispiel kommt

~~~~~~~~

an


Hoffe ihr könnt mir helfen...
Danke schonmal

von Claudio Hediger (Gast)


Lesenswert?

Hab ich noch vergessen....

Der Attiny wird vom 24Mhz Clockout des FT232RL versorgt

von (prx) A. K. (prx)


Lesenswert?

Must den /8 (U2X) Modus der UART einschalten, sonst /16 ergibt 1,5Mbd.

von (prx) A. K. (prx)


Lesenswert?

Wenn schon ISR für Rx, dann Daten abholen um Int zu löschen, sonst 
Interrupt im Dauerfeuer.

NB: Dass aus Sicht des AVR die Rx Richtung keine 3Mbps verkraftet, weil 
dessen CPU das nicht packt, jedenfalls nicht per Interrupt, dürfte wohl 
klar sein. D.h. das PC Programm muss da sehr dezent vorgehen und 
ausserdem berücksichtigen, dass der USB-Layer Zeug bündelt was innerhalb 
einer Millisekunde rüberkommt. Also maximal 2 Bytes pro Millisekunde in 
den AVR schieben.

von Claudio Hediger (Gast)


Lesenswert?

Also ich hab nun folgendes hinzugefügt
1
UCSRA |= (1<<U2X);

Nun kommt

========== an

von holger (Gast)


Lesenswert?

Mach mal ne Pause zwischen den Bytes.

von (prx) A. K. (prx)


Lesenswert?

Sende mal 0xFF, dann kommt genau und nur das Startbit auf 0, der Rest 
ist 1. Anderer ähnlicher Test geht mit 0xEF, um eine Bitverschiebung zu 
sehen.

von Claudio Hediger (Gast)


Lesenswert?

Bei 0xFF kommt 127dez an und bei 0xEF 111dez
Ich lese die Werte an einer Beliebigen Stelle im empfangenen Array aus


Somit sollte ja alles gut sein oder?

von holger (Gast)


Lesenswert?

>Somit sollte ja alles gut sein oder?

Nö, 0xFF ist 255dez. Du hast einen Bitschieber;)

von (prx) A. K. (prx)


Lesenswert?

Claudio Hediger schrieb:

> Bei 0xFF kommt 127dez an und bei 0xEF 111dez

Klingt nach Bitratenfehler, wie immer du das geschafft hast. Wenn 
127=0x7F empfangen wird, dann kommt das nächste Startbit zu früh. Oder 
jemand unterwegs maskiert das obere Bit weg, denn bei 111=0x6F statt 
0xEF passt alles ausser dem letzten (obersten) Bit.

> Somit sollte ja alles gut sein oder?

Wieso? 0xFF ist 255, nicht 127.

von Claudio Hediger (Gast)


Lesenswert?

A. K. schrieb:
> Wieso? 0xFF ist 255, nicht 127.

Stimmt...

Ist jalogisch.... war ein langer tag :)


Jetzt ist blos die frage, woo hier der Fehler liegt...

Das wird bestimmt schwierig bis unmöglich den zu finden

von (prx) A. K. (prx)


Lesenswert?

Mach das mal wie vorgeschlagen mit deutlich Pause dazwischen, um auch 
definitiv auf das Startbit zu triggern.

von Claudio Hediger (Gast)


Lesenswert?

A. K. schrieb:
> Mach das mal wie vorgeschlagen mit deutlich Pause dazwischen, um auch
> definitiv auf das Startbit zu triggern.

Hab das problem gefunden...

Asche auf mein haupt...

Ich hab doch tatsächlich vergessen dem 232RL bzw meinem Programm 
mitzuteilen das es ein Parity bit gibt...

Nun empfange ich bei 0xFF 255

von Arc N. (arc)


Lesenswert?

A. K. schrieb:
> Mach das mal wie vorgeschlagen mit deutlich Pause dazwischen, um auch
> definitiv auf das Startbit zu triggern.

Was, falls es am Timing liegt, auch funktionieren kann (je nach 
Controller, Last, etc.pp), ist, statt mit einem, mit zwei Stop-Bits zu 
arbeiten.
Controller war hier ein C8051F585 + FT232RL mit 3 MBit/s

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.