Dezimal in Hex

Gast #4704978
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
Moderator Persönliche Seite #4705001
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:
1
#define INT_TO_BCD(x)           (((x) / 10) << 4) + ((x) % 10)
2
#define BCD_TO_INT(x)           (10 * ((x) >> 4) + ((x) & 0x0F))
#4705006
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?
Gast #4705063
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;
Gast #4705072
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.
Moderator Persönliche Seite #4705078
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren