Forum: Mikrocontroller und Digitale Elektronik (AVR) welcher Zeichsatz?


von pacer (Gast)


Lesenswert?

Hallo,

ich weiß, die Frage gabs hier schon öfter, aber irgendwie hab ich keine 
Antworten erhalten.
Ich arbeite mit VMLab und programmiere in Assembler die serielle 
Schnittstelle. Nun kann ich über VMLab Zeichen an die serielle 
Schnittstelle schicken und mir anschauen was im Speicher abgelegt wird.
Nun wird bspw. für 'a' der Hexwert E1 abgelegt, für die Taste Return D8, 
für 'x' der Wert F8 usw.
Nur leider finde ich die Werte so in der ASCII-Tabelle nicht wieder?

Gruß, JK

von Εrnst B. (ernst)


Lesenswert?

der AVR als solcher hat keinen Zeichensatz, der kennt nur Bytes.

String/char-Konstanten im AVR haben also den selben Zeichensatz, den 
auch deine Source-Code Files hatten (ausser der Compiler/Assembler 
konvertiert die, ist aber nicht üblich)

Die Zeichen die über die Serielle reinkommen, haben denselben 
Zeichensatz den dein Terminal sendet.
Wenn dein Terminal also für "a" ein 0xE1 sendet, hat alles seine 
Richtigkeit... Wobei ich mich dann nach einem anderen Terminal-Programm 
umsehen würde...

Tippe eher darauf, dass dein UART das Zeichen nicht richtig liest.

von Reinhard R. (reirawb)


Lesenswert?

Setz einfach das höchstwertige Bit auf "0", dann kommt
was sinnvolles raus. Frag mich aber nicht, warum bei
dir dieses Bit gesetzt ist :-)

Gruß Reinhard

von pacer (Gast)


Lesenswert?

wenn es seine Richtigkeit hat, warum soll ich mich dann nach einem neuen 
Terminalprogramm umschauen? Und um welchen Zeichensatz handelt es sich 
hierbei?
Blöderweise ist das Terminal in VMLab eingebaut und im AVR-Studio wüsste 
ich nicht, wie ich die serielle Schnittstelle simulieren soll.

von pacer (Gast)


Lesenswert?

Welches bit ist gemeint, im AVR oder im VMLAB-Terminal?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ich tippe auf nicht zueinander passende Baudraten.  VMlab kann das
richtig gut simulieren, welcher ,,Zeichensalat'' dann rauskommt. ;-)

von Εrnst B. (ernst)


Lesenswert?

> wenn es seine Richtigkeit hat, warum soll ich mich dann nach einem neuen 
Terminalprogramm umschauen?

Weil es zwar insofern "richtig" ist, dass der AVR genau das Byte 
empfängt, das vom Terminal gesendet wurde, aber "falsch" ist weil das 
Terminal zum senden einen obskuren Zeichensatz verwendet, der für die 
Weiterverarbeitung im AVR ungeeignet ist.

von Frank B. (frank_b) Benutzerseite


Lesenswert?

Einer der beiden Kommunikationspartner hate eine falscher Baudrate oder 
falsche Parameter (7n2 ??) eingestellt.

von pacer (Gast)


Lesenswert?

nein, das stimmt schon, der "Fehler" ist reproduzierbar.
Ich denke, dass es etwas mit VMLab zu tun hat.

von Fred S. (Gast)


Lesenswert?

Hallo JK,

> nein, das stimmt schon, der "Fehler" ist reproduzierbar.

wie Reinhard schon geschrieben hat, ist bei 'a' und 'x' der Wert 
richtig, außer dass das höchste Bit gesetzt ist. Bist Du sicher, dass CR 
als 0xd8 erkannt wird? Eventuell hast Du Dich in Deinem ersten Beitrag 
verschrieben und meintest 0x8d für CR (?)-- dann wäre einfach konsistent 
bit7 gesetzt.

Notiere Dir doch ein paar der empfangenen Hex-Werte mit den 
dazugehörigen korrekten Codes und vergleiche die Bits, um den Fehler 
einzugrenzen.

Viele Grüße

Fred

von pacer (Gast)


Lesenswert?

Stimmt, wenn ich das bit 7 lösche kommt rechnerisch das korrekte 
ASCII-Zeichen heraus. Wenn ich Enter drücke wird tatsächlich 8D im 
Speicher abgelegt.
Doch was bedeutet das jetzt? Wenn ich auf Enter abfrage wird das wohl 
auf meinem AVR nicht funktionieren, weil der HexCode nicht stimmt.
Was wäre denn der richtige Code für die Enter-Taste?

von Karl H. (kbuchegg)


Lesenswert?

pacer wrote:
> Stimmt, wenn ich das bit 7 lösche kommt rechnerisch das korrekte
> ASCII-Zeichen heraus. Wenn ich Enter drücke wird tatsächlich 8D im
> Speicher abgelegt.
> Doch was bedeutet das jetzt? Wenn ich auf Enter abfrage wird das wohl
> auf meinem AVR nicht funktionieren, weil der HexCode nicht stimmt.
> Was wäre denn der richtige Code für die Enter-Taste?

0x0D

Also ohne gesetztes 7.Bit
Du musst jetzt herausfinden warum VMLAB bei dir immer
das 7. Bit setzt.

von Fred S. (Gast)


Lesenswert?

> Was wäre denn der richtige Code für die Enter-Taste?
0x8d & 0x7f = 0x0d

P.S. Karl Heinz war schneller....

von Spess53 (Gast)


Lesenswert?

Hi

Kann es sein , dass VMLab die Com-Schnittstelle auf 7 Bit gestellt hat?
Dadurch würde der AVR das Stoppbit als Bit 7 interpretieren. Bei 
ausreichend langen Pausen zwischen den Zeichen entsteht auch kein 
Fehler.

MfG Spess

von pacer (Gast)


Lesenswert?

Danke,der letzte Tipp war so eindeutig, dass ich es nicht mehr übersehen 
konnte. Jetzt funktioniert alles so wie es sollte.

von Frank B. (frank_b) Benutzerseite


Lesenswert?

Das hatte ich Dir um 14:00 schon geschrieben.

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.