Umrechnung DEZ in HEX

Gast #747046
Lesenswert?
• ▲
▼
Hallo.

Ich möchte ein PWM erzeugen mit einem ATMega64 mit Timer 3.

Initialisierung habe ich durchgeführt --> PWM funktioniert. Regelt 
Stromausgang mit 0-20mA.

Jetzt möchte ich eine gemessene Temperatur als Strom ausgeben.
Messbereich: -40 - +80 °C  also 120K. Das macht 0,16mA/K.

Ich berechne mir intern den Zählwert um den Counter für das PWM zu 
laden. Mein Problem ist nun, das ich eine Dezimalzahl berechnet habe 
z.B. 100, muss diese aber in ein Register schreiben, welches ich nur mit 
Hexadizimalzahlen beschreiben kann.

Wie kann ich dez in hex umrechnen?

Kann mit jemand helfen?

Danke
#747055
Lesenswert?
• ▲
▼
Hier gibts eine math-Library für AVR,
http://users.i.com.ua/~birua/math32.zip
u.a. auch Bcd zu Bin für 16 und 24 Bit:
;*********************************************************************** 
****
;* BCD3bin == BCD to 24-Bit Binary Conversion
;* fBCD0:fBCD1:fBCD2:fBCD3  >>>  tbin0:tbin1:tbin2
;*       dec      hex
;*   r16r17r18r19      >>>      r20r21r22
;*********************************************************************** 
****
#747058
Lesenswert?
• ▲
▼
Der Controller liefert als Ergebnis der Umrechnung keine Dezimalzahl, 
sondern eine Binärzahl (die man natürlich auch in eine Dezimalzahl 
umrechnen könnte). Und die kann dann direkt an das Timer-Register 
übergeben werden.

Oder meist du den Fall, dass du eine KONSTANTE Zahl von hand berechnet 
hast, udn diese verwenden willst? Dann kannst du bei den allermeisten 
Compilern einfach schreiben
timerregister=zahl;
und die Umwandlung wird automatisch vorgenommen.
#747073
Lesenswert?
• ▲
▼
Stefan KM wrote:
> @Uwe
>
> Ist das in C auch so?


Ja.
Wie schon gesagt: Hex, Dezimal, Binär sind alles nur verschiedene
Schreibweisen für ein und dasselbe Ding: Ein Zahl

Ob du

  Register  = 113;
  Register  = 2 * 50 + 13;
  Register  = 0x71;
  Register  = 0b01110001;
  Register  = 'q';

schreibst, ist völlig egal. Es sind nur verschiedene Schreibweisen
für immer dasselbe:
Das Register wird mit dem Bitmuster  0111 0001  geladen.
Gast #747077
Lesenswert?
• ▲
▼
Der Controller kennt gar keine Hex- oder Dezimalzahlen. Der kennt nur 
binäre Bits und Bytes. Mit Hexzahlen kann der genausowenig anfangen, wie 
mit Dezimalzahlen.

Weil aber die binäre Darstellung (z.B. 00001010 für dez 10) für den 
Meschen furchtbar schlecht lesbar ist, schreibt der lieber 10 (dezimal) 
oder 0x0A (hexadezimal). Der Compiler (und auch der Assembler) kennt 
beides, wandelt es ins Binärsystem um, und schreibt daraufhin 00001010 
ins Register.

Und auch in einer uint8_t-Variablen mit dem Wert dez 10 steht im 
Speicher 00001010, und nicht "10" oder "A". Insofern kannts du beruhigt 
deinen berechneten Wert einfach so ins Register schreiben - das kommt da 
schon richtig an.

Oliver

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