binär-Decimal Umwandlung von Daten

Gast #362209
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
am PC isses einfacher.
Im µC mußt dus erst in die passenden Zahlen zerlegen, als ASCII
umwandeln ausgeben. Die meisten hochsprachen am PC könne das
"automatisch"
Gast
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
>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
...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
>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
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
AVR-IAR hat kein dtostr...(und dann ist das Ding sooooo teuer!)
sprintf kann er, will ich aber nicht. Soll ja nur eine float oder
double anzeigen.
Muß ich wohl "händisch" machen.
Gast
@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
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

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.