mikrocontroller.net

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


Autor: Conan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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"

Autor: olfi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: Daniel N. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
man alda : prinf("%c",nummaaaaaa);
so einfach!

Autor: johnny.m (Gast)
Datum:

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

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: inoffizieller WM-Rahul (Gast)
Datum:

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

Autor: Signator (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber wer signiert schon seine Zahlen?

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dieter Bohlen vielleicht ;)

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, geht jetzt...

Autor: Marko B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe ein paar Umwandlungsfunktionen programmiert, vielleicht hilft
das ja jemandem:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.