Umrechnung DEZ in HEX

Gast #747046
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
Persönliche Seite #747049
HEX und DEZ sind nur verschiedene Darstellungen!

Oder hast du die "Zahl" als String vorliegen?
Ansosnten noch Programmiersprache etc...

wenn du die einzelnen Zahlen als Characters (z.B. von der Seriellen 
Schnittstelle) hast kannst du das so umrechnen:

(c_hunderter-48)*100+(c_zehner-48)*10+(c_einer)
Gast #747053
@Michael Wilhelm
Ich möchte das der Controller die Umrechnung selber vornimmt

@Läubi:
Und kann ich die Zahl 100 einfach in das Register schreiben?
#747055
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.