Forum: Mikrocontroller und Digitale Elektronik binär-Decimal Umwandlung von Daten


von Conan (Gast)


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?

von Läubi (Gast)


Lesenswert?

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"

von olfi (Gast)


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

von Hannes L. (hannes)


Lesenswert?

Wenn du am PC nur ein vorhandenes Terminalprogramm nutzen willst, dann
solltest Du es auf dem Controller tun. Ist ja eigentlich kein Akt, bei
LCD-Ansteuerung musst Du es ja auch tun.

...

von Daniel N. (Gast)


Lesenswert?

man alda : prinf("%c",nummaaaaaa);
so einfach!

von johnny.m (Gast)


Lesenswert?

@Daniel N.:
Ich glaub, das ist wirklich ne Psychose oder so... Spar Dir solche
Postings doch einfach.

von inoffizieller WM-Rahul (Gast)


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.

von inoffizieller WM-Rahul (Gast)


Lesenswert?

Für signierte Zahlen muß man halt noch das Komplement bilden und sich
das Vorzeichen merken...

von Signator (Gast)


Lesenswert?

Aber wer signiert schon seine Zahlen?

von inoffizieller WM-Rahul (Gast)


Lesenswert?

Dieter Bohlen vielleicht ;)

von johnny.m (Gast)


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.

von inoffizieller WM-Rahul (Gast)


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...

von johnny.m (Gast)


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...

von inoffizieller WM-Rahul (Gast)


Lesenswert?

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.

von johnny.m (Gast)


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...

von inoffizieller WM-Rahul (Gast)


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...

von inoffizieller WM-Rahul (Gast)


Lesenswert?

So, geht jetzt...

von Marko B. (Gast)


Lesenswert?

Ich habe ein paar Umwandlungsfunktionen programmiert, vielleicht hilft
das ja jemandem:

http://www.mikrocontroller.net/forum/read-4-278748.html

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.