FT232RL 3Mbaud senden und empfangen

Gast #1739194
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
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.
Gast
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?
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.
Gast
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
Gast
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
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.