mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hyperterminal unterschiedliche Einstellg für Senden und Emp


Autor: Karl-Alfred Römer (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe eine serielle Funkuhr. Deren Daten möchte ich mit
Hyperterminal auslesen. Dazu muss ich ihr erst mal ein kleines
o und carriage Return senden.  Dann soll die Uhr mit einem 16 Byte
langen ASCII-String antworten, der Uhrzeit und Datum im Klartext
anzeigt.

Das Problem:
Laut mitgeliefertem Hilfetext hat die Uhr für Senden und Empfangen
unterschiedliche Schnittstellenparameter.

Daten zur Funkuhr
Geschwindigkeit:    300 bps
      Datenbits:    8       !!!
    Paritätsbit:    nein    !!!
      Stoppbits:    2


Antworten der Funkuhr
Geschwindigkeit:    300 bps
      Datenbits:    7
    Paritätsbit:    gerade
      Stoppbits:    2

Mit den Einstellungen zum Senden kann ich Daten zur Uhr senden,
die dann auch mit dem 16 Byte langen Uhrzeit-String antwortet.
Aber die Antwort ist nicht direkt lesbar, weil die Anzahl der
Datenbits ja falsch ist.

Gibt es einen Trick, wie ich gleichzeitig unterschiedliche
Einstellungen für Senden und Empfangen einstellen kann, so dass
ich einerseits korrekt senden und andererseits wieder korrekt
empfangen kann?

Danke für Eure Antworten und viele Grüße
Karl

Autor: __ __ (unrouted)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wie wäre es, wenn du das Terminal auf die Sendeparameter einstellst und
die empfangenen Datenbytes (8Bit=7Daten+1Parity) in der anschließenden
Weiterverarbeitung einfach mit einem Shift nach rechts korrigierst..

(DDDDDDDP >> 1) = 0DDDDDDD

(Entspricht einer Integer division durch 2)

Ich glaube nicht das irgendein Terminal von haus aus sowas
unterstützt!

Beim Bray Terminal http://bray.velenje.cx/avr/terminal/ hab ich auch
eine kleine Skript-Funktion entdeckt, damit könntest du vielleicht die
empfangenen Bytes vor dem Anzeigen durch 2 teilen und dann ausgeben.

Autor: Christian Rötzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke, Du hast Glück.
Du stellst also Hyperterminal auf 300 Baud, 8 Datenbits, No Parity, 2
Stoppbits.
Somit kannst Du der Uhr schon mal in den Hintern treten. Empfangen
kannst Du auch, aus dem Parity wird einfach das oberste Datenbit. Das
sieht in Hyperterminal dann wahrscheinlich doof aus, mit einer
selbstgestrickten Anwendung, kannst Du das Parity aber einfach per
Und-Verknüpfung mit 0x7F ausblenden oder evtl. sogar auswerten...

Autor: __ __ (unrouted)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, das mit dem Shift war ein Mist!
Hatte nicht daran gedacht, dass zuerst das LSB gesendet wird....

Autor: Karl-Alfred Römer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Müsste ich denn nicht beim ersten Byte 1 Bit schieben, beim zweiten
Byte 2 Bit, beim dritten Byte 3 Bit usw. Müßte ja bei jedem weiteren
Byte ein Bit verrutschen das Ganze oder?

Falls nicht, müßte ich ja nur wissen, welcher Ziffer welches
Sonderzeichen zugeordnet ist. Und es sind ja nur 10 Ziffern.

Autor: Christian Rötzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum solltest Du das tun wollen? Denke nicht zu kompliziert. Probier's
aus!

50% der Zeichen, die aus der Uhr kommen, sollten ja eh schon korrekt
dargestellt werden. Nachdem es eine Atomuhr ist, sollte eine bekannte
Uhrzeit/Datum erscheinen. Hast Du's schon gewagt, die Uhr mal
anzuschließen. Und? Was passiert? Du wirst ja nicht für alle Zukunft
Hyperterminal verwenden wollen, oder?

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist, wenn Du mit 7,e,2 sendest?
Die Chancen stehen 50:50, dass das Parity des o so ist wie das
erwartete Bit7, nämlich low...

Nein, geht nicht, 0D 0A kommt auch noch....
Wie reagiert die Uhr auf gesetztes Bit7 (=gesendetem Parity)?

Wenn Du 2 Serielle hast, kannst Du ja auf der einen senden und auf der
anderen mit anderen Parametern empfangen.
(2x Hyperterm oder anderes Programm aufmachen).

Nochmal zum Mitdenken:
Sta 0 1 2 3 4 5 6 7 Sto Sto    8,n,2
Sta 0 1 2 3 4 5 6 P Sto Sto    7,e,2

 0  1 1 1 1 0 0 1 0  1   1     o  8,n,2 Parity falsch
 0  1 1 1 1 0 0 1 1  1   1     o  7,e,2

 0  1 0 1 1 0 0 0 0  1   1     CR 8,n,2 Parity falsch
 0  1 0 1 1 0 0 0 1  1   1     CR 7,e,2

 0  0 1 0 1 0 0 0 0  1   1     LF 8,n,2
 0  0 1 0 1 0 0 0 0  1   1     LF 7,e,2

Bin mir nicht sicher, ob die Parities so richtig sind, aber mindestens
einmal ist sie sicher falsch.

Autor: Karl-Alfred Römer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke erst mal, dass ihr euch die Arbeit gemacht habt.

Ich habe gerade die ausgegebenen Ziffern in der DOS-ASCII-Tabelle

http://www.free-solutions.de/js/zeichensatz_ascii-...

herausgesucht und deren Binärdarstellung mit den Ziffern verglichen
die hätten erscheinen müssen.

Dabei kam ich auf folgendes:

Ziffern 0,3,5,6 und 9 wurden korrekt übertragen.
Bei den anderen Ziffern wurde das höchste Bit von
einer Null zur Eins und damit dem ASCII-Code die
Zahl 128 aufaddiert.  Sieht schwer danach aus, als
ob das Parity-Bit das höchste Bit der 8 Bit Ziffer
überschrieben hat.

Ich müsste also in meiner Software schauen ob die Parität
gerade ist und falls ja, von dem übergebenen ASCII-Wert 128
abziehen.  Dann würde es stimmen.

Die Frage ist nur, ob ich das in meine gewünschte Anwendung
umsetzen kann.

Mal kräftig nachgrübeln.
Werde daraus dann wahrscheinlich einen neuen Thread eröffnen,
wenn ich alleine nicht weiter komme.

Autor: TOM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@all,

ich ahbe zwar keine Erfahrungen mit dem hier gestellten Problem doch
mit Hyperterminal hatte ich auch so meine Probleme, dass Zeichen nicht
ganz richtig übertragen bzw. empfangen wurden.
Habe im Netz ein anderes Tool gefunden das wesentlich einfacher
aufgebaut ist eventuell versuchst Du es mal mit diesen Tool.
Bei go* einfach Realterm eingeben und downloaden ca. 1,5 MB und staunen
was es alles kann.

TOM

Autor: Christian Rötzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Karl-Alfred

Es ist nicht so komlipiziert. Wie gesagt: Setze einfach immer das
oberste Bit auf null und Du hast den gesuchten ASCII-Code. Du musst
nicht ein einziges aml Einsen zählen...

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könntest Du mal bitte folgende oben gestellte Fragen beantworten:
Hast Du 2 serielle Schnittstellen zur Verfügung?

Hast Du schon versucht, was die Uhr macht, wenn sie falsche Parität
empfängt?

Hast Du schon mit 7,e,2 probiert zu Senden und Empfangen?

Hast Du im Hyperterm schon die verschiedenen Terminal-Emulationen
versucht?
Eigenschaften | Einstellungen | Emulation   und

Eigenschaften | Einstellungen | ASCII-Konfiguration | 7-bit-Empfang

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.