www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Umrechnung DEZ in HEX


Autor: Stefan KM (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Windows Taschenrechner vorhanden?

MW

Autor: Stefan KM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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?

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht 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
;*********************************************************************** 
****

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan KM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Uwe

Ist das in C auch so?

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also irgenwo muß doch die Zahl gespeichert sein.
Wenn sie schon im Speicher/Regsiter/wasweisich liegt, oder ergebnis 
einer Berechnung ist, kannst du die einfach ins steuerregister 
schreiben.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du eine Zuweisung machst wie
REGISTER = 100;
oder in Assembler
ldi r16, 100
dann steht in REGISTER bzw. r16 "01100100". Genausogut hättest Du auch
REGISTER = 0x64;
bzw.
ldi r16, 0x64
schreiben können, das Ergebnis ist dasselbe.

Autor: Stefan KM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verstehe vielen Dank

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.