Forum: FPGA, VHDL & Co. RS232->USB. Signale werden gespiegelt und umgedreht und nicht nur.


von GS (chromosoma)


Lesenswert?

Hallo.
Ich arbeite an der Kommunikation zwischen DE1-Altera board und Laptop 
via RS232 Protocol.
Soweit so gut.
Das Programmierteil scheint zu funktionieren. Auf jedem Fall lese ich 
direkt am RS232 Port die richtige Signale aus(mit meinem beliebten 
LogicSniffer:http://www.watterott.com/de/Open-Logic-Sniffer ;)



Aber sobald ich den Signal am Laptop betrachte, sehe ich zwei Sachen:

Aus 1 wird 0 und umgekehrt.

Das MSB wird zu LSB, LSB wird entsprechend zu MSB.

In anderen Worten wird aus (Altera DE1)"01101101"-->>"01001001"(Laptop)
Ist das normal so? Habe ich was vergessen?
Damit kann ich noch im Prinzip leben, muss nur entsprechend die Daten 
spiegeln und negieren.
Was mich noch sorgen macht, dass selbst nach spiegeln und negieren in 
95% der Fälle anstatt  "00000001" eine "01000000"  an der Laptopseite 
gesehen wird.
Ich habe den Signal wieder an Altera Seite mit LogicSniffer 
nachgeprüft,  der Sniffer sieht aber immer die richtige  1 und nie 64 
(dec).


Was noch wichtig ist:  Mein Laptop  hat keinen RS232 Anschluss, deswegen 
verwende ich einen "guten" RS232 to USB Converter. Liegt es vllt an ihm 
das solche Spiegelungen,Negation und falsche "1"  auftretten?
Oder mache ich was falsch?


Frohes Neues, Anton.

von Gustl B. (-gb-)


Lesenswert?

Mach mache auch viel RS232 mit auch hohen Baudraten und habe das immer 
so:

im FPGA stelle ich mir Bytes zusammen und die schiebe ich dann seriell 
auf den TX Pin der zum Pegelwandler geht.

Byte XXXX XXXX
Seriell 0 XXXX XXXX 1 für 8N1
Und dann in den PC rein mit RS232 Adapter, und Realterm/Cutecom.

Die Bits sind zwischen Pegelwandler und RS232-USB-Adapter invertiert.
Also wann du dazwischen das anguckst siehst du was falsches, also das 
Invertierte.

Ich lasse das mit den Pegelwandlern weg und gebe die Seriellen Signale 
gleich mit 921600 Baud auf einen FPGA-IO der dann direkt zu dem RX Pin 
am CP2102 geht. Der CP2102 ist ein ziemlich guter USB-UART, der bekommt 
die Signale im TTL/CMOS-Pegel und gibt die über USB aus. So spart man 
sich die Pegelwandler. Ich empfehle für hohe Baudraten eigentlich nur 
den CP2102, viele andere Steine wie der PL2303 können das laut 
Datenblatt zwar auch, schaffen es aber nur sehr kurzzeitig.

Aber so wie du das machst solle es auch gehn, wenn du beachtest, dass 
die Bits zwischen den Pegelwandlern invertiert sind.

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.