Forum: Mikrocontroller und Digitale Elektronik UART Zeichen interpretieren und umwandeln


von Matthias N. (mat81927)


Lesenswert?

Hi,

bevor jemand mich hierauf verweist
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Schreiben_einer_Zeichenkette_.28String.29
das habe ich mir durchgelesen.

Ich würde gerne die Zeichen, die mein UART mir auf meinen Rechner 
schickt interpretieren können. Neben mir liegt eine ASCII-Tabelle mit 
der ich leider keine übereinkunft bekomme. Ich schreibe mal ein 
Beispiel.

Ich sende als Dezimalzahl "48"
Im ASCII code wäre das das Zeichen "0"

erhalten tue ich die Dezimalzahl "32"
und kein Zeichen

Ich lese den empfangenen Wert in ein unsigned char array und schicke mir 
diese dann wieder zurück. Ich würde wirklich gerne verstehen, wie das 
abläuft.

Grüsse
Matthias

von Matthias N. (mat81927)


Lesenswert?

So nun habe ich es hingekriegt, allerdings so richtich erklären geht 
nicht.
Habe im HT unter den Einstellungen die 7-Bit Ascii erkennung 
eingestellt. Musste die Baudrate auf 9600 stellen (arbeite auf der STK 
500). In einem andren Tool (HTerm) funktioniert es auch nur im 7-Bit 
Modus + 1 Stopbit.

Würde mir das gerne erklären können

Grüsse

Matthias

von Karl H. (kbuchegg)


Lesenswert?

Matthias Nagel wrote:

> Ich würde gerne die Zeichen, die mein UART mir auf meinen Rechner
> schickt interpretieren können. Neben mir liegt eine ASCII-Tabelle mit
> der ich leider keine übereinkunft bekomme. Ich schreibe mal ein
> Beispiel.
>
> Ich sende als Dezimalzahl "48"
> Im ASCII code wäre das das Zeichen "0"
>
> erhalten tue ich die Dezimalzahl "32"
> und kein Zeichen

Wenn du in deine ASCII Tabelle schaust, dann siehst du,
dass der Code 32 (oder in Hex: 0x20) für das Leerzeichen steht.

> Würde mir das gerne erklären können
Wenn wir mal davon ausgehen, dass die Hardware funktioniert,
dann kann das 'Problem' eigentlich nur in deinem Programm
stecken. Da du das aber nicht zeigst, kann dir hier keiner sagen,
warum du am PC das Terminalprogramm auf 7 Bit setzen musst.


von Matthias N. (mat81927)


Angehängte Dateien:

Lesenswert?

Da ich in dem Programm HTerm nur bis 8-Bit Modus gehen kann, könnte es 
vielleicht sein, dass er bei 0 Bit anfängt zu zählen.

Auf jeden Fall ist hier mal mein Code.

von Uwe N. (ulegan)


Lesenswert?

Bist du dir sicher, dass deine Verwendung von sprintf() richtig ist?
Soweit ich weiss, übergibt man erst den Zeiger auf den String, dann 
einen Formatstring und dann das, was man ausgeben will. Du übergibst den 
Zeiger, den auszugebenden String und dann die Länge!
Gut, wenn du "0" als Formatstring übergibst sollte er das auch senden... 
und Size ignorieren.
Leider fehlt die main(), mit der du testest.

von Karl H. (kbuchegg)


Lesenswert?

Was haben diese Funktionen mit deiner eingangs erwähnten
Aufganestellung zu tun?

Und ja: der sprintf ist wirklich 'nicht koscher'.

Dürfte ich vorschlagen dass du die UART Geschichte mal
mit dem allerinfachsten Testprogram (aus dem Tutorial)
testest, bevor du zu komplizierteren Strukturen übergehst.

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.