www.mikrocontroller.net

Forum: Projekte & Code RS232-Interface in VHDL


Autor: bebork (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
hier mal eine Schnittstellenbeschreibung für die RS232 in VHDL mit 
zugehöriger Testbench. Der Code ist plattformunabhängig.
Das System kann unter Angabe der Parameter clk_rate und baud_rate vor 
der Synthese auf die gewünschte Baudrate eingestellt werden.

Die Verifikation habe ich bis jetzt nur auf einem Virtex4-Board mit 100 
MHz Taktrate und bei 57600 Baud durchgeführt.

Anregungen, Bugs, Verbesserungsvorschläge bitte hier posten. Ansonsten 
viel Spaß damit...

Autor: bebork (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... was ich noch vergessen habe: 1 Startbit, 8 Datenbits, 1 Stopbit, 
keine Parität, kein Handshake.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch wenns schon älter ist, wollte das gerade mal auf meinem neu 
erworbenem Baord (Spartan-3A Starter) ausprobieren, leider "rührt und 
ruckt" sich nix.

Im UCF sind die Pins nach der Vorgabe von XILINX folgendermaßen gesezt:
NET "RS232_DTE_RXD" LOC = "F16"  | IOSTANDARD = LVCMOS33 ;
NET "RS232_DTE_TXD" LOC = "E15"  | IOSTANDARD = LVCMOS33 | DRIVE = 8 | 
SLEW = SLOW;

Hab das folgendrmaßen eingebunden:
component RS232_Interface is
  generic(clk_rate  : integer := 50000000; -- Taktrate
  baud_rate: integer := 57600
);
  port(...);
end component;

RS232if: RS232_Interface
port map(
 clk            => CLK_50M,
 rs232_rxd      => RS232_DTE_RXD,
 rs232_txd      => RS232_DTE_TXD,
 rs232_tra_en   => tx_send,
 rs232_dat_in   => tx_data,
 rs232_txd_busy  => tx_busy,
 rs232_rec_en   => rx_ready,
 rs232_dat_out  => rx_data
);
Da ich noch nicht ganz sicher war wie jezt die Signalzustände liegen 
müssen fürs senden, hab ich erstmal die Statusleitungen auf die LEDs 
gelegt ebenso die unteren 4bit der Empfangene Daten.
ledkeys: process(CLK_50M) 
begin 
 if rising_edge(CLK_50M) then 
  led(0) <= BTN_EAST XOR ROT_A XOR SW(3) XOR SW(0) XOR SW(1) XOR SW(2);
  led(1) <= rx_data(4);
  led(2) <= rx_data(5);
  led(3) <= rx_data(6);
  led(4) <= rx_data(7);
  led(5) <= rx_ready;
  led(6) <= tx_send;
  led(7) <= tx_busy;
 end if; 
end process;
Dann habe ich mit Hterm die Verbindung hergestellt und erstmal 
Loopbacktest(am Kabel 2+3 gebrückt) ging, dann mit dem Board verbunden 
und mal kontinuierlich Zeichen gesendet, an den LEDs ändert sich leider 
nix...

(LED 0-5 leuchten, LED 6+7 sind aus)

Habe ich irgenwas übersehen?

Autor: Patrick Sulimma (abaddon1979)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lade dir von Xilinx Modelsim XE herunter. Schreibe eine Testbench und 
schau dir an wie dein Signalverlauf ist. Das RS232 Protokoll ist nicht 
sehr schwierig und ziemlich schnell auf Fehler überprüft.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Testbench ist dabei, allerdings hätte ich wenigstens Fehlerhafte Zeichen 
erwartet es passiert aber garnix, und bebork hat es ja angeblich 
shconmal erfolgreich eigesezt. Naja werddie Tage nochmal gucken.

Autor: Dete Kosschlovsski (dete)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich habe mir dir die datei auch mal geladen und auf meinen FPGA 
gespielt.
leider tut sich bei mir auch nichts.

ich bekomme den fehler leider nicht raus.

ist jemand schon schlauer?

gruß dete

Autor: Iulius (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> ich habe mir dir die datei auch mal geladen und auf meinen FPGA
>> gespielt.
>> leider tut sich bei mir auch nichts.

nur die Datei ?

Dann kann sich ja auch nichts tun. Man muss schon etwas drumherum bauen.


Falls du das getan hast : hochladen, dann kann man es prüfen.

Das rs232 Modul von hier funktioniert jedenfalls(gerade getestet), auch 
wenn die Beschreibung extrem umständlich ist, aber das ist wohl 
Geschmackssache.

Autor: Dete Kosschlovsski (dete)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja ich habe nur die datei geladen und in mein projekt mit eingefügt.

die datei funktioniert in der simulation mit modelsim genauso wie sie 
soll.
da geb ich dir recht.

mir ist klar das ich da "schon etwas drumherum bauen muss". das ist bei 
mir aber hardwareseitig gelöst.

bei mir tut sich aber ebenfalls nichts, so wie es  Läubi (weiter oben) 
gepostet hatte, auch noch nicht einmal fehlerahfte zeichen

Autor: Iulius (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das drumherum ist hardwareseitig gelöst ?

Klar musst du tx und rx auf die tatsächlichen pins geben.

Nötig ist aber auch ein enable in das rs232 modul zu geben, sonst 
startet da erstmal gar nichts.


Leider kann man aus deinen Infos nicht schließen was du verkehrt gemacht 
hast.

Autor: devotschka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tach.
Hab das ganze mal auf einem CPLD probiert. Empfangen funktioniert nach 
viel Rumprobieren endlich. Ich hab das ganze mit 8 LEDs verknüpft und 
die per minicom eingegebenen Zeichen werden sogar korrekt angezeigt. 
Feine Sache find ich :) Aber wie sende ich denn jetzt Bytes in Richtung 
PC? Byte auf rs232_dat_in legen is klar, aber wie weiter?
MfG

Autor: Harald D (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ht jemand sowas3akw mit CRC / automatischer Korrektur?

Autor: Josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe eine Frage, und zwar wie ihr das Signal rs232_tra_en antriggert
Dazu muss ja das Signal auf 1 und anschließend wieder zurückgenommen 
werden
Nun habe ich aber einen Prozess welcher von einem AdcLese-Entity (siehe 
hier :http://www.codeforge.com/read/21280/ADC_TLC549.vhd__html) 
angetrigggert wird. Dabei setze ich das Signal auf '1', wie kann ich es 
aber wieder heruntergbekommen bevor der nächste ADC-Wert ankommt?

Autor: Pelz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tach auch

Danke für den code läuft einwandfrei

Autor: Anfäng (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pelz schrieb:
> Tach auch
>
> Danke für den code läuft einwandfrei

Hi,
hast du den bereitgestellten Code verwendet?
Was hast du zusätzlich eingefügt, damit es lauffähig wurde?

Gruss

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.