binär-Decimal Umwandlung von Daten

Gast #362209
Lesenswert?

Hi,

ich arbeit mich gerade in µC ein. Dabei möchte ich die serielle
Schnittstelle für die Datenübertragung benützen.
Im µC läuft ein binärer Zähler von 8 Bit. Dessen Werte möchte ich am PC
abfagen und in leicht abzulesbare Dezimalzahlen umwandeln.

00000001 soll als "1" erscheinen
00000010 soll als "2" erscheinen ...

Was macht mehr Sinn und weniger Arbeit? Das umwandeln am PC oder im µC?
Gast #362211
Lesenswert?

Der PC hat doch etwas mehr Ressourcen.
Kommt drauf an wieviel Speicherplatz du frei hast um eine
Umwandlungsroutine im µC einzubinden, Prozessorzeit, ob du im PC die
Daten aufbereiten musst....

Gruß, olfi
Gast #362215
Lesenswert?

>00000001 soll als "1" erscheinen
>00000010 soll als "2" erscheinen ...

Interessant wird es erst bei Zahlen grösser 0b00001001.
Wie sollen die dann aussehen? Dreistellig?
Divisionsroutinen wurden hier letzte Woche diskuttiert...

Eigentlich (in C) sehr simpel, wenn man sprintf etc umgehen will:

unsigned char n; // umzucodierende Zahl (0..255)
unsigned char einer, zehner, hunderter;

einer = 0;
zehner = 0;
hunderter = 0;

while (n>10)
{
 n -= 10;
 zehner++;
 if (zehner>9)
 {
  zehner = 0;
  hunderter++;
 }
}
einer = n;

Fertig...

Mich würde jetzt interessieren, wie man das mit float macht.
Gast #362219
Lesenswert?

...Oder wenn mans schön einfach will, Bibliotheksfunktionen aus der
stdlib.h nehmen (itoa, dtostr(e)...). Die machen auch wesentlich
weniger Code als printf und sind einfach in der Anwendung.

Da der OP sich bisher allerdings darüber ausschweigt, was für einen µC
er eigentlich verwenden will, ist es schwer, da irgendwelche präziseren
Empfehlungen zu geben.
Gast #362220
Lesenswert?

>Bibliotheksfunktionen aus der stdlib.h nehmen (itoa, dtostr(e

Komisch: Ich mach mir bei solchen Sachen immer nen Kopp, und dann hat
das schon jemand vor mir gemacht...
Ich geh dann mal die stdlib.h filzen...
Gast #362221
Lesenswert?

Die Funktionen sind an sich ganz Nett und haben, da sie sehr
spezialisiert sind, v.a. gegenüber den printf-Abkömmlingen gegenüber
den großen Vorteil, dass sie weit weniger Overhead erzeugen...
Gast #362223
Lesenswert?

@Rahul:
Die Funktionen mit double-Werten (also dtostr und dtostre, double to
string [exponential]) heißen da u.U. anders, da viele kommerzielle
Embedded-Compiler eh nur mit float arbeiten (float und double sind bei
solchen Anwendungen eh identisch, da i.d.R. kein 64-Bit-Fließkommatyp
unterstützt wird). Bei CodeVision heißt es z.B. ftoa (float to ASCII).
Möglicherweise gibts die Funktion gar beim IAR...
Gast #362224
Lesenswert?

Danke für den Hinweis. IAR besitzt aber scheinbar wirklich nichts
derartiges ausser sprintf.
Dafür kann man dessen Umfang mit Hilfe von
Compiler-/Linker-Einstellungen (weiß jetzt nicht wo das war [eher
Compiler]...) einstellen.
Ich hab mir meine jetzt nach dem obigen Schema selber gebastelt. Für
positive Zahlen gar kein Problem. Negative sind jetzt dran ( "if
(zahl<0.0) zahl = -zahl;" und Vorzeichen merken...).
Vielleicht mach ich mir noch eine struct, wird sich aber nicht lohnen
es sind insgesamt 5 Bytes: hunderter bis hunderstel. Wenn ich noch
etwas rechnen lasse, spare ich mir noch eine Schleife...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren