Forum: Mikrocontroller und Digitale Elektronik mit putc nur 8 bit möglich?


von Anfänger (Gast)


Lesenswert?

hallo zusammen,

ich versuche mit putc() eine int16 variable zu versenden, empfange aber 
auf der anderen seite (serialwatcher) nur werte zwischen 0 und 255.

kann ich mit putc überhaupt mehr als 8 bit auf einmal senden???

falls das nicht geht:
das man strings in int wandeln kann, habe ich schon rausgefunden. 
funktioniert das auch anders rum?
wenn ich "580" versenden will, könnte ich die zahl in nen string 
verwandeln, als string schicken, und auf der anderen seite wieder in ne 
zahl wandeln....

von Andreas K. (a-k)


Lesenswert?

Anfänger wrote:

> kann ich mit putc überhaupt mehr als 8 bit auf einmal senden???

Nein. Das "c" in putc steht für character, also Zeichen.

von Anfänger (Gast)


Lesenswert?

das war schon klar, dass das C für char steht.

gibt es denn ne möglichkeit auch 16 bit-variablen zu senden???

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Nein, weil putc() fuer Zeichen gedacht ist.

von Karl H. (kbuchegg)


Lesenswert?

Anfänger wrote:
> hallo zusammen,
>
> ich versuche mit putc() eine int16 variable zu versenden, empfange aber
> auf der anderen seite (serialwatcher) nur werte zwischen 0 und 255.
>
> kann ich mit putc überhaupt mehr als 8 bit auf einmal senden???

Nein.
Aber niemand hindert dich daran, die 16 Bit auf 2 Stück 8 Bit
aufzuteilen und dann die beiden Bytes nacheinander zu versenden.

> falls das nicht geht:
> das man strings in int wandeln kann, habe ich schon rausgefunden.
> funktioniert das auch anders rum?

Klar. Warum sollte es nicht.

> wenn ich "580" versenden will, könnte ich die zahl in nen string
> verwandeln, als string schicken, und auf der anderen seite wieder in ne
> zahl wandeln....

Das ist gar keine so schlechte Idee.
Denn: In welcher Reihenfolge verschickst du denn in obigen Vorschlag
die Bytes? Zuerst das Low-byte und dann das High-Byte, oder anders
rum. Solange du mit dir selbst einig bist, welche Reihenfolge
du verschickst und die Empfangsseite kontrollieren kannst, so dass
du die Teile wieder richtig zusammensetzt, ist das kein großes
Problem. Aber wehe, wenn nicht. Dazu kommt, dass man dann auch noch
sowas wie eine Synchronisierung benötigt. Denn wenn du dich
in den Bytestrom einklinkst und zu Lesen anfängst, woher weist
du denn welches Byte das High-byte und welches das Low-Byte ist?

Mit Strings umgeht man allerdings diese Problematik mit einem
lachenden und einem weinenden Auge.
Lachend deshalb, weil man dadurch unabhängig von der Bytereihenfolge
wird. Der Empfang unterscheidet sich in nichts von dem Fall,
dass am anderen Ende ein menschlicher Benutzer sitzt und die
Werte in ein Terminal eingibt. Dadurch wird zb. auch die
Programmentwicklung vereinfacht, weil Sender und Empfänger
sehr viel einfacher unabhängig voneinander entwickelt werden können.
Ausserdem lässt sich das Synchronisierproblem sehr viel naheliegender
lösen, weil du neben den 10 Ziffern-zeichen noch jede Menge anderer
Zeichen zur verfügung hast, die du als "Start" und "Ende" Zeichen
misbrauchen kannst.

Weinendes Auge deshalb, weil die reine Übertragungszeit dadurch
etwas höher wird.

von Anfänger (Gast)


Lesenswert?

wie würdet ihr denn die integer->String wandlung mit C-Code 
bewältigen???

von Karl H. (kbuchegg)


Lesenswert?

http://www.mikrocontroller.net/articles/FAQ#Wie_kann_ich_Zahlen_auf_LCD.2FUART_ausgeben.3F

Das Ergebnis geht dann natürlich nicht auf ein LCD sondern
an die UART :-)

von Anfänger (Gast)


Lesenswert?

für all die, die es interessieren sollte:

das ganze habe ich einfach durch den printf befehl erledigt.
einfacher geht es kaum. so muß keine variable geändert werden.

von Kanone (Gast)


Lesenswert?

Wo eine Kanone ist, sind die Spatzen nicht weit.

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.