Forum: Mikrocontroller und Digitale Elektronik Umrechnung von Dezi zu HEX und Kontrolle


von Paul (Gast)


Lesenswert?

Hallo
Bitte nicht gleich erschlagen für die x-Nachfrage zu dem Thema. Habe im 
Netz gesucht und einiges gefunden. Leider sind teilweise die Links tot.
Zum Problem (alles in C)

0x30 bis 0x39 sind die Zahlen 0 bis 9
0x41 bis 0x46 sind A bis F

Zur Ansteuerung eines Graphigdisplays muss ich den Wert von 0x00 bis 
0xFF übertragen (bis zu 3 mal). Zur Eingabe der Werte kann ich nur 0 bis 
255 nutzen.
Wie kann ich die Werte in C umrechnen und gleizeitig die Eingabewerte 
kontrollieren (Begrenzung der Hexzahlen)?

LG Paul

: Verschoben durch Moderator
von Dirk B. (dirkb2)


Lesenswert?

Es gibt sprintf() und  sscanf().
Oder bei manchen itoa() kann man auch die Basis angeben. Bei strtol() 
sowieso

Man kann das aber auch selber schreiben. Mit etwas Bitoperationen geht 
das recht einfach.
Mit Division und Modula aber auch (etwas langsamer)

von Frank (Gast)


Lesenswert?

Was möchtest du denn umrechnen? Eine Dezimalzahl in einen Hex Wert? Wenn 
du char als Datentypp verwendest gibt es nichts umzurechnen. Das ist 
beides Mal das gleiche in einer anderen Schreibweise. Oder brauchst du 
die hex Zahlen als Zeichenkette? Was meinst du mit Begrenzung der 
Hexzahlen? Eine Sättigunng dr Zahlen?

von Paul (Gast)


Lesenswert?

Hallo Dirk
ich möchte nicht den Wert auf dem Display ausgeben. Das mit itoa kenne 
ich. Möchte den Wert übertragen um die Helligkeit einzustellen. Danach 
erfolgt erst die Ausgeb eines Textes.
Gleizeitig möchte ich auf die korrekte Eingabe achten und wenn nötig 
begrenzen.
Beispiel:
Eingabe ist 255 übertrage FF
Eingabe ist 256 übertrage FF (Kontrolle eingabe Wert)
Eingabe ist 378 übertrage FF (Kontrolle eingabe Wert)

paul

von Frank (Gast)


Lesenswert?

Wo ist das Problem?
if eingabe > 255
return 255;
else
return eingabe;

von Paul (Gast)


Lesenswert?

Die Begrenzung ist klar und wie kann ich vorher die Umrechnung von Dezi 
auf Hex machen?

von Dirk B. (dirkb2)


Lesenswert?

Paul schrieb:
> Die Begrenzung ist klar und wie kann ich vorher die Umrechnung von Dezi
> auf Hex machen?

Hex oder Dezimal sind nur andere Schreibweisen.
Wenn es um Text geht: sprintf oder itoa
Wenn nicht, ist es egal, dann kannst du das Byte direkt übertragen.

von Frank (Gast)


Lesenswert?

Tut mir leid. Ich verstehe echt nicht, was du vorhast. Du willst 
wirklich den String "FF" übertragen? Falls ja, da hat Dirk dir doch 
schon eine Antwort gegeben: sprintf oder Bitoperationen (die Zuordnung 
hast du ja schon in deiner Frage stehen).

von neustart (Gast)


Lesenswert?

Mmhhh, wie kommst du darauf, dass 0x30 der Zahl 0 entspricht? 0x30 
entspricht einer dezimalen 48. Du meinst das ASCII Zeichen '0'.

Also nochmal aufräumen: was möchtest du genau tun? Zeichen darstellen, 
Steuerzeichen senden? Zeichen sind vom 8 Bit Typ char. Damit gibt es 
keinen Überlauf. ;-)

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Paul schrieb:
> Die Begrenzung ist klar und wie kann ich vorher die Umrechnung von Dezi
> auf Hex machen?

Du musst überhaupt nichts umrechnen.

Das Zeichen 'A' kann hexadezimal 0x41, 65 dezimal oder 1000001 binär 
geschrieben werden. Das sind aber nur Schreibweisen für den Menschen. 
Gespeichert wird der Wert im µC nämlich immer gleich.

An das Graphikdisplay musst Du diesen internen Wert schicken, dabei ist 
es egal, wie Du das schreibst, z.B.
1
send_character ('A');
2
send_character (0x41);
3
send_character (65);
4
send_character (0b1000001);

Das Resultat ist immer dasselbe: Es wird das Zeichen 'A' übertragen.

P.S.
Dass da im Handbuch des Displays etwas von Hex-Werten steht, ist für nur 
Dich  als Leser relevant. Damit Du die Zahlenbereiche auch verstehst.

Es wäre zwar theoretisch denkbar, dass tatsächlich Hex-Zeichenketten 
übertragen werden müssen, also zunächst das Zeichen '4' und dann '1' 
(also 2 Bytes statt einem!) für 0x41, aber das ist höchst 
unwahrscheinlich. Warum sollte man die Kommunikationsschnittstelle bei 
einem Graphikdisplay derart aufblähen, dass für den Menschen(!) lesbare 
Zeichen übertragen werden müssen? Diese müssten ja auf dem µC erst in 
Zeichenketten umgestaltet werden und anschließend auf dem 
Graphiksdisplay wieder zurückgerechnet werden. Das wäre nicht nur ein 
unnötiger, sondern auch komplett unnützer Aufwand. Dabei verdoppelt sich 
nicht nur der nötige Datenstrom, auch die Rechenleistung wäre auf beiden 
Seiten höher. Desweiteren ist es kompletter Unsinn, sich bei einer 
Kommunikation nur auf die Zeichen 0-9A-F zu beschränken. Hier werden 
komplette Bytes verschickt und nicht nur 16 verschiedene Werte, für die 
eine 4-Bit-Übertragung ausgereicht hätte.

Man kann daher allein durch logische Überlegungen darauf schließen, dass 
Du auf dem falschen Dampfer bist. Dabei brauche ich den Typ Deines 
Displays gar nicht zu kennen.

: Bearbeitet durch Moderator
von Günter Lenz (Gast)


Lesenswert?

Paul schrieb:
>Die Begrenzung ist klar und wie kann ich vorher die Umrechnung von Dezi
>auf Hex machen?

Du möchtest das eine Dezimalzahl auf dem Display in Hex
dargestellt wird?

>Eingabe ist 255 übertrage FF
>Eingabe ist 256 übertrage FF (Kontrolle eingabe Wert)
>Eingabe ist 378 übertrage FF (Kontrolle eingabe Wert)

Eine Dezimalzahl größer als 255 passt in ein Byte nicht
mehr rein.

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.