Hallo, Gibt es eine Megafunction seitens ALTERA mit der ich Bitfolgen aus der RS232 Schnittstellen interpretieren/decodieren kann? Ich arbeite derweil in einem Blockschaltdiagramm. Hintergrund: Ich habe ein KEIL MCB-XC167, dass über RS232 ein Wort an mein FPGA sendet. Dieses Wort wird in Schieberegister geschrieben. Allerdings entspricht die Empfangene Bitfolge nicht dem erwarteten Zeichen, weder in ASCII noch über HEX nach ASCII konvertiert. Ich weiß, dass das Programm auf dem µC die einzelnen Zeichen des Wortes als String überträgt. Meine Vermutung ist, dass ich das Wort auf dem FPGA interpretieren muss, nur wie?
Chris P. schrieb: > Dieses Wort wird in Schieberegister geschrieben. Wie siehr dieser Empfangsteil aus? Wann wird mit welcher Preiodendauer geschoben? Wann wird mit dem Schieben begonnen? > Allerdings > entspricht die Empfangene Bitfolge nicht dem erwarteten Zeichen Falsche Baudrate? Startbit nicht erkannt? > dass über RS232 ein Wort an mein FPGA sendet. Was für ein Wort? Ein Wort wie z.B. "Wort"? Oder ein Integer-Wort? Wenn ja: wie breit? 16 oder 32 Bit? > Ich weiß, dass das Programm auf dem µC die einzelnen Zeichen des Wortes > als String überträgt. Das ist nicht viel. Es wird also z.B. die Zahl 1234 als die Zeichenkette '1', '2', '3', '4' übertragen? Und dann? Wie erkennst du das Ende der Zeichenkette? Kommt da ein CR-LF? Hast du führende Nullen? > Meine Vermutung ist, dass ich das Wort auf dem > FPGA interpretieren muss, Da hast du vermutlich recht. > nur wie? So, dass das herauskommt, was du willst. BTW: Was für eine Sprache willst du denn überhaupt verwenden?
>> Dieses Wort wird in Schieberegister geschrieben. > Wie siehr dieser Empfangsteil aus? > Wann wird mit welcher Preiodendauer geschoben? > Wann wird mit dem Schieben begonnen? Über den REALTERM gebe ich den Befehl zum Senden. Mit Empfang des Startbits werden N Zeichen ins Schieberegister geschrieben (nur N Zeichen weil es sich hierbei noch um eine Testversion handelt). Gesendet wird der String "111" CR-LF dann "100000" CR-LF usw. (das kann in REALTERM sehen). Emfangen wird (in positive Logik umgewandelt): 1* 0111 0011 0*1* 0111 0011 0*1* 0111 0011 0*1* 0100 1111 0* ... hierbei entspricht 1* dem Startbit und 0* dem Stopbit (meine Annahme), und natürlich ist das * von mir hinzugefügt... Ich kann das CR-LF in der Folge nicht finden, vielleicht ist meine Interpretation der Zeichenfolge auch falsch? Eingestellt ist: Baud 19200, 8N1, no flow control. >> Allerdings >> entspricht die Empfangene Bitfolge nicht dem erwarteten Zeichen > Falsche Baudrate? > Startbit nicht erkannt? Baudrate korrekt, Startbit ebenfalls korrekt erkannt. >> dass über RS232 ein Wort an mein FPGA sendet. > Was für ein Wort? > Ein Wort wie z.B. "Wort"? > Oder ein Integer-Wort? > Wenn ja: wie breit? 16 oder 32 Bit? Sind halt ASCII Zeichen, siehe unten. >> Ich weiß, dass das Programm auf dem µC die einzelnen Zeichen des Wortes >> als String überträgt. > Das ist nicht viel. > Es wird also z.B. die Zahl 1234 > als die Zeichenkette '1', '2', '3', '4' übertragen? Richtig. > Hast du führende Nullen? Ein Stopbit nach jedem Character. >> Meine Vermutung ist, dass ich das Wort auf dem >> FPGA interpretieren muss, > Da hast du vermutlich recht. >> nur wie? > So, dass das herauskommt, was du willst. ;) > BTW: Was für eine Sprache willst du denn überhaupt verwenden? Läuft das jetzt drauf hinaus, dass ich mir den Interpreter selbst schreiben muss? Ich hatte gehofft das ich es mit einer Megafunction umgehen kann, weil es auf irgendeinem Standard basieren könnte. Am besten wärs es dann zu wissen, wie die Codierung am KEIL µC funktioniert, oder? Gibts da einen Standard? Muss ich zur Lösung des Problems auf C++ oder ähnliches zurückgreifen oder gibts alternative Lösungswege?
Chris P. schrieb: > hierbei entspricht 1* dem Startbit und 0* dem Stopbit (meine Annahme), Was verleitet dich zu dieser Annahme? > Emfangen wird (in positive Logik umgewandelt): In "normalen" 5V Pegeln ist der Ruhezustand auf der RS232-Leitung eine '1'. Das Startbit ist eine '0', dann kommen 8 Datenbits, und dann das Stoppbit als '1'. > Startbit ebenfalls korrekt erkannt. Sicher? Chris P. schrieb: > Ich habe ein KEIL MCB-XC167, dass über RS232 ein Wort an mein FPGA > sendet. Wie kommt denn hier das ALTERA FPGA ins Spiel? Chris P. schrieb: > Läuft das jetzt drauf hinaus, dass ich mir den Interpreter selbst > schreiben muss? Ich hatte gehofft das ich es mit einer Megafunction > umgehen kann, weil es auf irgendeinem Standard basieren könnte. Du mußt ja irgendeine Funktion ins FPGA bekommen. Das tut von sich aus gar nichts. Geneigte Zeitgenossen verwenden zur Hardwarebeschreibung VHDL, Verilog, Matlab, oder sonst was, was letztlich Daten für ein FPGA erzeugt...
Danke für deine Response Lothar. >> hierbei entspricht 1* dem Startbit und 0* dem Stopbit (meine Annahme), > Was verleitet dich zu dieser Annahme? Okay, sorry hab mich da schlecht ausgedrückt. Diese Nomenklatur hab ich so definiert um zu zeigen wie ich die Bitfolge verstehe. >> Emfangen wird (in positive Logik umgewandelt): > In "normalen" 5V Pegeln ist der Ruhezustand auf der RS232-Leitung eine > '1'. Das Startbit ist eine '0', dann kommen 8 Datenbits, und dann das > Stoppbit als '1'. Genau, auf der RS232-Leitung werden die Daten in negativer Logik übermittelt. D.h. am µC kann ich mit dem Oszilloskop folgendes Messen: 0* 1000 1100 1*0* 1000 1100 1*0* 1000 1100 1*0* 1011 0000 1*.... Hier hast Du das Startbit(0*), wie du schreibst, logisch low und das Stopbit (1*) logisch high. Wenn ich den UART_RXD_Pin des FPGAs an einen Ausgangspin lege, kann ich das Wort mit dem Oszilloskop in positiver Logik auslesen. D.h., dass es auf dem FPGA Board umgewandelt werden muss. >> Startbit ebenfalls korrekt erkannt. > Sicher? Ja, mit dem Oszi geprüft. >> Ich habe ein KEIL MCB-XC167, dass über RS232 ein Wort an mein FPGA >> sendet. > Wie kommt denn hier das ALTERA FPGA ins Spiel? Das FPGA Board ist mit Schaltung programmiert, die vor dem Ausführen konfiguriert werden muss. Der KEIL µC konfiguriert mir mit dem Wort, versendet über die RS232-Leitung, diese Schaltung ehe das FPGA Board anfängt zu arbeiten. Ich schätze diese Lösung ist umständlich, da die Aufgabe des Mikrokontrollers vom FPGA Bord ebenfalls übernommen werden könnte, aber das steht nicht zur Debatte weil ich das FPGA Board in diese Umgebung einbinden muss. > Geneigte Zeitgenossen verwenden zur Hardwarebeschreibung VHDL, Verilog, > Matlab, oder sonst was, was letztlich Daten für ein FPGA erzeugt... Ok, das hört sich danach an als ob es wohl keine bequeme Fertiglösung von ALTERA gibt. Dann müsste ich es in VHDL lösen, aber ohne Ahnung wie der KEIL µC das codiert, bin ich wohl aufgeschmissen, oder?
Chris P. schrieb: > Dann müsste ich es in VHDL lösen, aber ohne Ahnung wie > der KEIL µC das codiert, bin ich wohl aufgeschmissen, oder? Der Keil uC ist ein Infineon uC und da ist kein Geheimnis dahinter, denn du selber sagst ja: >> Gesendet wird der String "111" CR-LF dann "100000" CR-LF usw. >> (das kann in REALTERM sehen). Ich verstehe ehrlich gesagt dein Problem nicht. Wenn du die Zahl im Terminalprogramm ansehen kannst (und sogar ein CR-LF empfängst), dann ist für mich eigentlich klar, dass es bis an den FPGA-Pin funktioniert. Oder aber du hast ein eklatantes Verständnisproblem und drehst dir umsonst einen Knoten ins Hirn. Denn ehrlich gesagt: die serielle Schnitte ist schon ziemlich unkompliziert zu implementieren... Zeichne mal ein Blockdiagramm und mal da rein, was deiner Meinung nach wo raus und wo reingeht... Denn: > Allerdings entspricht die Empfangene Bitfolge nicht dem erwarteten > Zeichen, weder in ASCII noch über HEX nach ASCII konvertiert. Wenn du etwas erwartest, dann mußt du doch nur dort schauen, wo es nicht mehr stimmt...
Hallo Lothar, danke für Deine Hilfe. Das Problem ist gelöst. Es war ein Verständnisproblem mit dem Ausdruck "negativer Logik" bei RS232. Ich muss das ankommende Signal auf dem FPGA invertieren (!) und die beachten die msb/lsb Reihenfolge beachten, eh klar. Das wars. Gruß
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.