mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Dezimal in Hex


Autor: andre (Gast)
Datum:

Bewertung
-3 lesenswert
nicht lesenswert
Hallo,

Ich möchte gerne den wert einer Variable in HEX wandeln.

u8 stunde_dez; // 0-59

u8stunde_hex;

Mit sprintf wäre ja eine Möglichkeit aber das nimmt mir ja zu viel 
Programm Speicher.

Gibst denn noch eine andere Möglichkeit den Wert in HEX zu wandeln
mfg

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Wert ist schon hexadezimal. Oder binär, je nachdem wie man es 
betrachtet.

Was genau willst Du machen? Den Wert irgendwo anzeigen?

Autor: Ingo Less (corrtexx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dem Controller ist das egal welches Zahlenformat du hast, er kennt nur 
binär. Alles andere macht der Compiler.

: Bearbeitet durch User
Autor: Hugo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
andre schrieb:
> u8 stunde_dez; // 0-59
>
> u8stunde_hex;

Wenn du schreibst:

stunde_dez = 59;
stunde_hex = 0x3B;

dann enthalten die beiden Variablen exakt den gleichen Inhalt.

Autor: andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich möchte eine RTC Uhr die Stunde stellen, da ist das Format nur in 
hex.

ich zähle die variable Stunde_dez 0-23  bis ich meine Uhrzeit hab. bei 
der minute auch so.
zB. in hex ist 0x17  in dezimal 23.

wie Wandel ich nun meine Zahl in hex um

Autor: Peter Dannegger (peda)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
andre schrieb:
> Ich möchte gerne den wert einer Variable in HEX wandeln.

In welchem Format eine CPU einen Wert intern speichert, kannst Du nicht 
beeinflussen.
Du kannst nur bestimmen, wie eine Variable als Text ausgegeben werden 
soll.

Autor: Amateur (Gast)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Bis Du Dir sicher, dass die Uhr Hex-Zahlen verdaut und nicht BCD's?

Autor: Hugo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
andre schrieb:
> wie Wandel ich nun meine Zahl in hex um

Wer sucht, der wird finden :-)
http://stackoverflow.com/questions/16928517/conver...

Nur ein Beispiel...

Autor: Ingo Less (corrtexx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
andre schrieb:
> wie Wandel ich nun meine Zahl in hex um
Garnicht weil nicht nötig, die übertragen Daten sind sowieso binär.

Hugo schrieb:
> Nur ein Beispiel...
Hier wird aber aus der Variable ein String gemacht...

: Bearbeitet durch User
Autor: Frank M. (ukw) (Moderator) Benutzerseite
Datum:

Bewertung
1 lesenswert
nicht lesenswert
andre schrieb:
> ich möchte eine RTC Uhr die Stunde stellen, da ist das Format nur in
> hex.

Vorsicht! Die meisten RTCs wollen nicht Hex, sondern BCD. Und das ist 
was ganz anderes!

> ich zähle die variable Stunde_dez 0-23  bis ich meine Uhrzeit hab. bei
> der minute auch so.
> zB. in hex ist 0x17  in dezimal 23.

Beispiel:

23 Uhr:

   DEZ   23
   HEX 0x17
   BCD 0x23

Nenne mal den RTC-Typ. Dann wetten wir, ob Hex oder BCD. Ich tippe stark 
darauf, dass die RTC 0x23 und nicht(!) 0x17 für die Stunde 23 haben 
will.

> wie Wandel ich nun meine Zahl in hex um

Falsche Frage. Jede Zahl im Rechner ist binär abgelegt, Du kannst sie in 
dezimal oder Hex auslesen oder beschreiben. Da wird nix Konvertiert.

Was Du willst: Dez -> BCD. Da muss man tatsächlich etwas konvertieren.

Dafür reichen 2 Makros:
#define INT_TO_BCD(x)           (((x) / 10) << 4) + ((x) % 10)
#define BCD_TO_INT(x)           (10 * ((x) >> 4) + ((x) & 0x0F))

Autor: andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Amateur schrieb:
> Bis Du Dir sicher, dass die Uhr Hex-Zahlen verdaut und nicht
> BCD's?

Ja richtig
ist für die internevuhr des F4

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
andre schrieb:
> ich möchte eine RTC Uhr die Stunde stellen, da ist das Format nur in
> hex.
>
> ich zähle die variable Stunde_dez 0-23  bis ich meine Uhrzeit hab. bei
> der minute auch so.
> zB. in hex ist 0x17  in dezimal 23.
>
> wie Wandel ich nun meine Zahl in hex um

Gar nicht. Weil eine Umwandlung an der Stelle nicht nötig ist.

andre schrieb:
> Ja richtig
> ist für die internevuhr des F4

Was auch immer ein F4 sein mag.

Beschreibe Dein Problem mal vernünftig. Was ist gegeben, was soll 
gemacht werden?

: Bearbeitet durch User
Autor: Ingo Less (corrtexx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mark B. schrieb:
> Was auch immer ein F4 sein mag.
Vermutlich ein Cortex der Serie STM32F4. Man fragt sich allerdings wie 
er den im Zaum halten will...

Autor: andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich möchte gerne die RTC vom stm33f4 stellen.
Dazu habe ich 2Taster up down 0-23 für die Stunde erstmal.

wenn ich die Uhr jetztvauf 23 stelle erhalte ich als Ausgabe 15uhr.


das geht

RTC_TimeStructure.RTC_Hours   = 0x05;
  RTC_TimeStructure.RTC_Minutes = 0x20;
  RTC_TimeStructure.RTC_Seconds = 0x00;

und  so gehts nicht.
RTC_TimeStructure.RTC_Hours   = 23;
  RTC_TimeStructure.RTC_Minutes = 0x20;
  RTC_TimeStructure.RTC_Seconds = 0x00;

Autor: Karl M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es wurde ja schon n-mal geschrieben.

Es wird sich um eine Zahlendarstellung als BCD-Zahl handeln !

Und 23dez = 17hex als BCD-Zahl ist das dann 1 7.
Man betrachtet jeweils nur die 4bit Nippel der Zahl im  Zahlenbereich 
von 0 bis 9.

Autor: Frank M. (ukw) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
andre schrieb:
> wenn ich die Uhr jetztvauf 23 stelle erhalte ich als Ausgabe 15uhr.

Sicher 15? Nicht 17?

Und was ist, wenn Du

  RTC_TimeStructure.RTC_Hours   = 0x23;

schreibst?

andre schrieb:
> das geht
> RTC_TimeStructure.RTC_Hours   = 0x05;

Und da komm dann 23 Uhr raus?

>   RTC_TimeStructure.RTC_Minutes = 0x20;

Und was sagen die Minuten?

Wie gesagt, benutze das oben erwähnte Makro INT_TO_BCD, also

int hours = 23;

RTC_TimeStructure.RTC_Hours   = INT_TO_BCD(hours);

Dasselbe gilt für die Minuten und Sekunden.
Dann klappt das schon.

: Bearbeitet durch Moderator

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.