Forum: Mikrocontroller und Digitale Elektronik Softwareseitiger baudrate converter?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Paul S. (oldpowel)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich bin auf der Suche nach einem softwareseitigen baudrate-converter. 
Gibt es sowas?

Mein Problem:
An meinen Roboter ist ein rs485 Gerät angeschlossen, das auf baudrate 
2400 sendet. Der Roboter kann aber nur über 4800 kommunizieren! Das 
übertragene Signal des Gerätes wird dementsprechend missinterpretiert 
und kommt als Hieroglyphen am PC an.

Gibt es ein Programm, um das "defekte" Signal zurück zu konvertieren? 
Rein logisch gesehen, muss es ja möglich sein, das Signal 
(Hex-Zahlenkette) eineindeutig in ein 2400er Signal umzurechnen, wenn 
man Stop- und Startbits des ursprünglichen Signal kennt.
Für einen Baudrateconverter ist im Roboter leider kein Platz mehr, ich 
muss es also softwareseitig lösen.

Hat jemand einen Vorschlag?
Vielen Dank und beste Grüße
OldPowel

: Verschoben durch Admin
von Bernd K. (prof7bit)


Bewertung
0 lesenswert
nicht lesenswert
Paul S. schrieb:
> wenn man [...] Startbits des ursprünglichen Signal kennt

Wenn es 0xff sendet empfängst Du 0xfe und kein zweites Byte.
Wenn es 0xf7 sendet empfängst Du 0xfe 0xfe (ab dann verschoben!)
Wenn es 0xfd sendet empfängst Du 0xfe 0xfe (ab dann verschoben!)
Wenn es 0xfb sendet empfängst Du 0xfe 0xfe (ab dann verschoben!)

Also keine umkehrbare Abbildung.

Erschwerend kommt hinzu dass Du fast immer schon beim zweiten Byte aus 
dem Tritt kommst und das Startbit nicht mehr erwischst, dann verschiebt 
sich auch noch alles. Nimm ein Blatt Papier und mals Dir auf, dann wird 
klar warum das nicht gehen kann.

Ändere die Firmware Deines Roboters so daß er das mit der richtigen 
Baudrate auf normalem Wege empfangen kann, oder finde die 
Konfigurationsoption wo man das einstellt.

: Bearbeitet durch User
von A. S. (achs)


Bewertung
0 lesenswert
nicht lesenswert
Mir ist nicht klar, ob du beide Seiten unter Kontrolle hast. Prinzipiell 
kannst Du bei auf der 4800er Seite mit odd parity + 2 stoppbits fahren 
und auf beiden Seiten umrechnen.

von Paul S. (oldpowel)


Bewertung
0 lesenswert
nicht lesenswert
Hi,
die Geräteseite habe ich leider nicht unter Kontrolle. Das Teil sendet 
immer mit 2400er baud, 8 bits, 1 stop, parity none und flow control 
none.

von A. S. (achs)


Bewertung
0 lesenswert
nicht lesenswert
Paul S. schrieb:
> die Geräteseite habe ich leider nicht unter Kontrolle

OK. Wenn da was mit 2.4 rauskommt, dann muss das 4te Bit high sein und 
das 5te Bit ein Low. Wenn das nicht der Fall ist, kannst Du am Empfänger 
nicht zurückrechnen mit 4.8.

: Bearbeitet durch User
von Christian M. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Paul S. schrieb:
> Für einen Baudrateconverter ist im Roboter leider kein Platz mehr

Paul S. schrieb:
> die Geräteseite habe ich leider nicht unter Kontrolle

Wie willst Du das dann softwaremässig lösen? Ist das ominöse "Gerät" 
zwischen PC und Roboter geschaltet? Hat das "Gerät" intelligenz, also 
setzt es die Baudrate irgendwie um, oder wandelt es nur 2400 <-> 4800? 
Bitte skizziere Dein Aufbau detailliert!

Gruss Chregu

von malsehen (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Verräter...

von Paul S. (oldpowel)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,
danke für die Antworten!

Die Schaltung sieht so aus:

PC, rs485, 4800baud <---> RoboterPortA 4800baud <-intern-> RoboterPortB, 
4800baud <---> Gerät, 2400baud

Das ominöse Gerät sendet ausschließlich. Es ist in keiner Weise 
intelligent oder konfigurierbar. Es sendet nur auf 2400.

Der Roboter kann auf 1200 oder 4800 empfangen und leitet das Signal 
direkt an den PC weiter, den man natürlich frei konfigurieren kann.

Ich bräuchte also ein Programm, das die "fehlerhafte" Weiterleitung des 
Signals im Roboter wieder herausrechnet.

Beste Grüße
OldPowel

von Crazy H. (crazy_h)


Bewertung
0 lesenswert
nicht lesenswert
Wäre es nicht einfacher am Gerät einen Mikrocontroller zu platzieren, 
der mit 2400 empfängt und mit 4800 weiter sendet? Könnte nur schwierig 
werden, wenn du in Gegenrichtung viele Daten sendest, also mehr, als der 
uC puffern kann.

ich hasse die Leertaste meines Tablets .......

: Bearbeitet durch User
von Joe F. (easylife)


Bewertung
0 lesenswert
nicht lesenswert
Paul S. schrieb:
> Das ominöse Gerät sendet ausschließlich. Es ist in keiner Weise
> intelligent oder konfigurierbar. Es sendet nur auf 2400.
>
> Der Roboter kann auf 1200 oder 4800 empfangen und leitet das Signal
> direkt an den PC weiter, den man natürlich frei konfigurieren kann.

Da die Daten (bei direkter Verbindung) schon zwischen dem ominösen Gerät 
und dem Roboter kaputt gehen, kannst du auch auf PC Seite nichts mehr 
machen.

Die einzig sinvolle Lösung ist zwischen Gerät und Roboter die Baud-Rate 
umzusetzen, z.B. mit einem solchen Teil:
http://www.serialgadget.com (RS-232)
oder
http://www.4n-galaxy.de/440_de.html (für RS-485)

Paul S. schrieb:
> Für einen Baudrateconverter ist im Roboter leider kein Platz mehr, ich
> muss es also softwareseitig lösen.

Wenn die Kaufteile zu groß sind, kann man sich sowas natürlich auch mit 
einem uC selber zusammenschustern. Um eine Hardwarelösung wirst du aber 
nicht herum kommen.

Vielleicht ist ja dieser Code hier schon alles was du brauchst, musst 
halt ausprobieren, ob der Code noch funktioniert, wenn du die 
baud-Raten-Defines entsprechend deiner Bedürfnisse anpasst.

http://community.atmel.com/projects/baud-rate-converter

(PCMIDIoverview.zip Attachment)

: Bearbeitet durch User
von Paul S. (oldpowel)


Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank!
Das werde ich in Betracht ziehen.
Ihr habt mir sehr weitergeholfen.

Greetz
OldPowel

von Paddy (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Es ist mich nicht ganz deutlich wie die RS485 aus der PC kommt. Falls 
das mittels FTDI (USB-Serial) chip gemacht wird, dann ist das folgende 
vielleicht eine loesung.

Der FTDI chip kann mann so programmieren das, unabhaengig welche 
baudrate vom software eingestellt wird, immer eine feste baudrate 
benutzt wird. Also wenn deine PC software initialisiert mit 4800 baud, 
benutzt er doch 2400. Ich bin micht nicht mehr ganz sicher ob es im FTDI 
chip selber oder nur im driver angepasst werden musz.

von Georg (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Paul S. schrieb:
> Das ominöse Gerät sendet ausschließlich. Es ist in keiner Weise
> intelligent oder konfigurierbar. Es sendet nur auf 2400.

Eine brachiale Lösung: Gerät öffnen und Quarz suchen, und den durch 
einen Quarz halber Frequenz ersetzen. Dann sendet das Gerät mit 1200 
Baud.

Welche Nebenwirkungen entstehen, kann man ohne nähere Kenntnisse über 
das Gerät nicht beurteilen. Aber die Modifikation lässt sich ja genauso 
leicht rückgängig machen.

Die saubere Lösung ist in jedem Fall ein Prozessorchen, das mit 2400 
Baud empfängt und mit 4800 Baud weitersendet, Hardware und Software sind 
ziemlich trivial.

Georg

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]
  • [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.