Forum: Mikrocontroller und Digitale Elektronik Hex in dezimal in c


von andy (Gast)


Lesenswert?

Hallo,

Weis jemand einen befehl damit ich aus einer hex zahl eine dezimal 
machen kann?

also ich weis das mann mit sprintf(buffer,"%d",(unsigned int)erg);
eine dezimalzahl ausgeben kann, aber ich will diese dezimalzahl weiter 
verwenden, das geht aber mit dieser methode nicht, da der buffer ein 
feld ist und wenn ich auch den buffer auslesen will steht nichts drin. 
Hab ich schon auf alle arten versucht.

vielen dank

mfg andy

von Klaus W. (mfgkw)


Lesenswert?

was für eine Hex-Zahl denn?

von Karl H. (kbuchegg)


Lesenswert?

andy schrieb:
> Hallo,
>
> Weis jemand einen befehl damit ich aus einer hex zahl eine dezimal
> machen kann?

Das brauchst du nicht.
Im Rechner ist alles eine Zahl.

Hex und Dezimal wird erst dann interessant, wenn es darum geht, die Zahl 
irgendwo auszugeben. Erst dann wird darüber entschieden, wie die interne 
Zahl aufzubereiten ist, so dass sie das Ausgabegerät als Hex-Zahl oder 
als Dezimal-Zahl anzeigt.

Aber intern ist es immer das Gleiche: eine Zahl.

von Klaus W. (mfgkw)


Lesenswert?

unsigned int gibt man übrigens nicht mit %d aus, mit %u.
%d ist für eine signed int bzw. einfache int.

von Grrrr (Gast)


Lesenswert?

1. Gross- Kleinschreibung
2. Hex? Meinst Du die ASCII Darstellung einer Hexadezimalzahl?
3. Dezimal? Meinst Du die ASCII-Darstellung einer Dezimalzahl?
4. Vollständiger Code der das Problem zeigt?
5. Code soll Befehle enthalten auf welche Weise Du den Buffer ausliest 
wenn Du feststellst, das dort nach dem printf nichts drin ist.

Bemerkungen:

Rechtschreibung macht uns allen das Leben leichter. Und sie erhöht die 
Wahrscheinlichkeit das wir Dir helfen.

Eine Zahl oder ein Zeichen ist das Ergebnis einer Interpretation eines 
binären Musters im Computer. Sie ist, so wie sie da ist, weder eine 
Hexadezimal-, noch eine Dezimalzahl oder ein ASCII-Zeichen.

Wir können das Problem nur nachvollziehen, wenn wir den Code kennen mit 
dem Du das Problem hast. Reduziere den Code soweit, das das Problem noch 
auftaucht, aber alles dazu nicht notwendige entfällt.

"Geht nicht" hängt oft auch davon ab, auf welche Weise Du das 
feststellst.

von andy (Gast)


Lesenswert?

eine hex zahl wie zb 99B; Ich brauch diese zahl dann aber in dezimal, 
weil ich eine rechnung damit machen will, und ich hex mit einer 
dezimalen zahl nicht mulitplizieren bzw addieren kann.

von Klaus W. (mfgkw)


Lesenswert?

Schreibweise immer noch Sch..., und ich weiß immer noch nicht,
wie du deine Hexzahlen hast.
In einer C-Variable wie int i = 0x99B, oder als ASCII in
einer Datei oder was?

Redest du überhaupt von C?

Wie soll man so jemandem helfen?

von MarioT (Gast)


Lesenswert?

>weil ich eine rechnung damit machen will, und ich hex mit einer
>dezimalen zahl nicht mulitplizieren bzw addieren kann.
Hex?
Dezimal?
Leider kennt ein µC nur Bit.
Das andere redest Du ihm ein.

von Klaus W. (mfgkw)


Lesenswert?

Ich habe hier übrigens auch ein Problem, das ihr gleich mit
erledigen könntet.
Hat schon jemand eine Lösung für mich?

von Bernd (Gast)


Lesenswert?

Grrrr schrieb:
> Bemerkungen:
>
> Rechtschreibung macht uns allen das Leben leichter. Und sie erhöht die
> Wahrscheinlichkeit das wir Dir helfen.

Wer den Rechtschreibfehler, den Kommafehler und den Grammatikfehler 
findet darf sie behalten!

von B. M. (Gast)


Lesenswert?

andy schrieb:
> Ich brauch diese zahl dann aber in dezimal,
> weil ich eine rechnung damit machen will, und ich hex mit einer
> dezimalen zahl nicht mulitplizieren bzw addieren kann.

Wo kommt denn auf einmal die Dezimalzahl her ?

von Klaus W. (mfgkw)


Lesenswert?

@ Bernd (Gast) :
Blödsinn.

Wie soll man so ein Gestammel wie im ersten Beitrag entziffern?
Jeden Satz fünf Mal lesen? Erst mal entziffern, wo überhaupt
ein Satz anfängt und aufhört?

Wer sich beim Schreiben nicht mal soviel Mühe gibt, daß es
lesbar ist, kann getrost ignoriert werden. Ich habe in
meinem Leben noch was anderes vor, als fremder Leute
Absonderungen zu interpretieren, bloss weil die zu faul
sind.

von MarioT (Gast)


Lesenswert?

kan mier jemant hilfe kote geed net feler bei:
(unsiknet ind)erg)
danke!!!!!!!!!!!!!!!

von Karl H. (kbuchegg)


Lesenswert?

MarioT schrieb:
> kan mier jemant hilfe kote geed net feler bei:
> (unsiknet ind)erg)
> danke!!!!!!!!!!!!!!!

Aber klar doch.
Du musst in Zeile 42 das Carry Bit von hinten durch die Lasche schieben 
:-)

von Karl H. (kbuchegg)


Lesenswert?

Nun habt euch nicht so.
Der Code ist schliesslich geheim und stammt aus dem Steuergerät einer 
Atombombe.
Da geht nix mit herzeigen. Aus den 5 Zeilen Code könnte man ja 
schliesslich das komplette Steuergerät rekonstruieren.

von Grrrr (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Du musst in Zeile 42 das Carry Bit von hinten durch die Lasche schieben
> :-)

Nicht ganz. Nach Mey/Krüger muss er "gezogen" werden, nicht geschoben, 
da sonst das Bit mit 4% Alkohol in das Null-Device fällt.

von Grrrr (Gast)


Lesenswert?

Natürlich "es" nicht "er".

von Remote O. (remote1)


Lesenswert?

Also, ich versuche einmal zu helfen. Ich weiß zwar auch nicht was du 
willst, aber ich denke einmal, dass du einen String hast und mit dem 
rechnen musst. Bei meiner Handy Fernsteuerung ist das auch so. Ich 
bekomme als String Hex Zahlen und muss die interpretieren. Ich mache das 
wie folgt:
1
uint8_t str2int(char data){
2
  data -= '0';
3
  if (data>9) data-= 7;
4
  return data;
5
}
Um nun z. B. einen String pdu="9B" in eine Zahl zu wandeln, schreibe 
ich:
1
uint8_t tmp;
2
tmp = str2int(pdu[0])*16 + str2int(pdu[1]);

Das ganze kann man natürlich  auch mit Oktal- oder Dezimalzahlen machen. 
Man(n) müsste nur die Wertigkeiten ändern (also 8 bzw. 10).

Sollte es kein String sein, so kannst du hex und dez problemlos addieren 
oder was auch immer.

von Grrrr (Gast)


Lesenswert?

Remote One schrieb:
> if (data>9) data-= 7;

Ach.

0 -> 0
1 -> 1
.
.
.
9 -> 9
A -> 3
B -> 4
.
.
.
F -> 8

von Grrrr (Gast)


Lesenswert?

Ooops. Ich nehme alles zurück und behaupte das Gegenteil.

if (data>9) data-= 7;

ist richtig.

von andy (Gast)


Lesenswert?

Sorry wegen der Rechtschreibung, hatte einen höllischen stress.

Also, ich bekomm von ADC einen Hex wert. Der zb 99B ist, bei einer 
Spannung von 1,5 V.

Ich programmier in C, und ich muss den Feuchtigkeitswert der Luft 
messen. Der Sensor gibt mir jz zb eine Spannung von 1,5 V aus. Das heißt 
ich muss diese 1,5 V in meine Formel für den Feuchtigkeitswert der Luft 
einberechnen. Aber dies ist eine ganz normale Formel, dh sie ist 
Dezimal.
erg = 150 + 20*T - 150*U + 16*U*U

Mein U-wert in der Formel ist jz aber noch in Hex, da dieser Wert vom 
ADC kommt. Jetzt muss ich den Wert in Dezimal umrechnen.

Aber ich weis leider nicht den Befehl in C. Denn der mit der Ausgabe 
sprintf(buffer,"%d",erg); funktioniert nicht.

Vielen dank

von Karl H. (kbuchegg)


Lesenswert?

andy schrieb:

> Also, ich bekomm von ADC einen Hex wert.

Nein, bekommst du nicht.
Du bekommst eine Zahl. Die ist weder Hex noch Dezimal. Die ist einfach 
nur eine Zahl


> einberechnen. Aber dies ist eine ganz normale Formel, dh sie ist
> Dezimal.

Die Formel ist auch nicht dezimal.
Eine Formel verknüpft Zahlen

> erg = 150 + 20*T - 150*U + 16*U*U
>
> Mein U-wert in der Formel ist jz aber noch in Hex,

Nein, ist er nicht.
Der ist einfach nur eine Zahl.

> ADC kommt. Jetzt muss ich den Wert in Dezimal umrechnen.

Musst du nicht.
Benutze einfach nur den Wert den du vom ADC kriegst und gut ists

von Grrrr (Gast)


Lesenswert?

andy schrieb:
> ich bekomm von ADC einen Hex wert.

Nein. Du bekommst eine binär kodierte Zahl.

Du kannst also ganz normal damit rechnen. Brauchst nichts umwandeln.

> Aber dies ist eine ganz normale Formel, dh sie ist
> Dezimal.

Eine Formel ist nicht "dezimal" oder sonstwas. Die Zahlen darin mögen 
als Dezimalzahlen interpretiert werden.

Aber den Compiler stört das nicht. Nimm einfach diese Formel und rechne 
so damit. Du brauchst da nichts umwandeln.

Alles OK so.

Schau halt mal in einem Lehrbuch oder dem Internet nach was es mit den 
binären Codes und deren Interpretation bzw. Darstellung auf sich hat.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

andy schrieb:
> Aber dies ist eine ganz normale Formel, dh sie ist Dezimal.
In einer Formel wird idR. nichts darüber ausgesagt, ob eine Zahl 
Dezimal, Hex, Binär oder Float oder sonstwas ist. Nur funktioniert die 
Berechnung der Formel mit dem einen oder anderen Datentyp besser oder 
schlechter.

Aber es ist ganz einfach: dein AD-Wandler gibt keine 99B Hex aus, 
sondern 2459, was die einfache dezimale, nicht vorzeichenbehaftete 
Entsprechung dieses Wertes ist. Solltest du das Ganze vorzeichenbehaftet 
ansehen wollen, dann brauchst du ein 12-Bit Wort und du bekämst den Wert 
-1637.
Wenn du das jetzt nicht verstanden hast, mußt du das Kapitel 
Binär-Dezimal-Hex und die Darstellung in einer Integerzahl nochmal 
grundlegend genauer anschauen. Zur Beruhigung: du bist nicht der Erste, 
der vor dieser Aufgabe steht...

von Grrrr (Gast)


Lesenswert?

@ Karl Heinz

Jetzt würde mich doch langsam mal interessieren warum diese 
Missverständnis so weit verbreitet ist. Das kommt mindestens zweimal die 
Woche vor. Ist doch eigentlich absolute Grundlage.

Naja. Is' halt so. Aber wenn es eine Erklärung gäbe würde die mich mal 
interessieren.

von Grrrr (Gast)


Lesenswert?

Lothar Miller schrieb:
> dein AD-Wandler gibt keine 99B Hex aus,
> sondern 2459

Grrrr schrieb:
> Jetzt würde mich doch langsam mal interessieren warum diese
> Missverständnis so weit verbreitet ist.

Sorry Lothar. Du bist hier einer der kompetenten Antworter (ich lese 
immer gerne Deine VHDL-Beiträge) und ich habe auch schon Sch... erzählt 
(siehe diesen Thread :-{ ), aber:

Wenn es falsch ist zu sagen das man vom AD-Wandler einen Hex-Wert 
bekommt ist es genauso falsch zu sagen, das es sich um einen Dezimalwert 
handelt.

Die Bits bekommen ja erst durch unsere Interpretation eine Bedeutung in 
diesem Sinn. Vorher sagen sie nichts anderes als etwas physikalisches 
(Etwa das Bit Nr 0 das 2^12te des Spannungswertes der Referenz beim 
Wägeverfahren zu der Gesamtsumme addiert).

von Klaus W. (mfgkw)


Lesenswert?

@ Grrrr:
Bin zwar nicht Karl Heinz, aber auch schon egal.
Ich glaube, das liegt einfach daran, daß die Leute früher
sich mehr Mühe gegeben haben, etwas zu verstehen.
Inzwischen will jeder ganz tolle Sachen machen, sich
dabei aber nicht mehr anstrengen.

Suchen? Anstrengend.
Buch lesen? Anstrengend.
Selber Fehler suchen? Anstrengend.
Fehler ordentlich beschreiben? Anstrengend.
Also macht ihr mal, ich will das dringend bis 01.04. fertig
haben und mit meinem Mofa dann 160 fahren.

Mit Sachen wie C oder C++ oder MC oder anderen Dingen
mit C drin kommt man da halt dann nicht weit und fragt erstmal.

Ich habe auch den Eindruck, daß man von den Leuten bald nichts
mehr hier hört, aber sie wachsen nach wie die Fliegen.

Das muß jetzt nicht konkret nicht für den TE hier gelten,
nur als Anmerkung zur Frage, wieso sich das häuft.

Kann auch sein, daß ich inzwischen etwas gereizt bin
wegen dämlicher-Nicht-so-richtig-Fragen, aber eigentlich
bin ich gut drauf und glaube nicht, daß es an mir liegt.

von andy (Gast)


Lesenswert?

ja es ist mir klar das ich keine Hexzahl bekomme. Aber ich wandel sie in 
eine Hex zahl um, weil ich einen 12 bit ADC hab.
Das ist ja nicht das Problem. Ich kann nicht die normale ADC zahl 
benutzen da die Formel einen Zusammenhang mit dem Spannungswert hat. U 
ist in der Formel zb 1,5V und der Hex wert vom ADC ist 99B bei der 
Spannung.

Da kann ich nicht einfach mit 99B in der Formel rechnen.

@Miller, bist du dir sicher das der 12 Bit ADC den Wert 2459 ausgibt 
wenn ich ihn nicht in Hex umwandel? Ich bekomm ja eig Binär zahlen vom 
ADC, 4 high bits und 8 low bits

mfg

von Karl H. (kbuchegg)


Lesenswert?

andy schrieb:
> ja es ist mir klar das ich keine Hexzahl bekomme. Aber ich wandel sie in
> eine Hex zahl um, weil ich einen 12 bit ADC hab.
nein,
Du lässt dir eine Ausgabeform basteln, in der die Zahl als Hex-Zahl 
angezeigt wird. Aber deswegen ist der Ausgangswert einfach trotzdem nur 
eine Zahl.
Du musst unterscheiden zwischen der Zahl an sich und in welcher Form sie 
angezeigt wird. Du kannst dir dieselbe Zahl als Dezimalzahl, als Hexzahl 
oder wenn du willst auch zu jeder anderen Zahlenbasis ausgegben lassen. 
Aber das sind nur unterschiedliche Schreibweisen für immer dieselbe 
Zahl.

> Das ist ja nicht das Problem. Ich kann nicht die normale ADC zahl
> benutzen da die Formel einen Zusammenhang mit dem Spannungswert hat. U
> ist in der Formel zb 1,5V und der Hex wert vom ADC ist 99B bei der
> Spannung.

Doch kannst du.

> Da kann ich nicht einfach mit 99B in der Formel rechnen.

Doch kannst du.
Vor allen Dingen deshalb, weil du im Speicher nicht 99B hast. Du hast 
ein Bitmuster, welches eine Zahl repräsentiert. Ob dieses Bitmust als 
Hexdezimalzahl in der Form 99B ausgegeben wird oder als Dezimalzahl mit 
dem Wert 2459 ist eine Frage der Ausgabe! Intern ist es immer das 
gleiche Bitmuster und immer dieselbe Zahl. Während des Rechnens 
existiert kein Hex oder Dezimal sondern nur Zahlen. Erst bei der Ausgabe 
der Zahl entscheidest DU, in welcher Form du die Zahl zu Gesicht 
bekommen willst. Als Hexadzinmalzahl oder in ihrer dezimalen Form. Aber 
das ist nur Schreibweise.

von Klaus W. (mfgkw)


Lesenswert?

Es sei denn, er hat es irgendwo als String.
Aber wer weiß das schon, wenn er nicht Konkretes zeigt.
Schön über 20 Beiträge Spekulation und noch keine verwertbare
Zeile Quelltext im Original.
Was für eine Zeitverschwendung.

von Grrrr (Gast)


Lesenswert?

andy schrieb:
> ja es ist mir klar das ich keine Hexzahl bekomme.

"Jetzt", meinst Du, oder?

Du hattest nämlich geschrieben:

andy schrieb:
> Also, ich bekomm von ADC einen Hex wert.


So ganz klar scheint es Dir aber noch nicht zu sein. Denn wenn Du 
schreibst:

> Aber ich wandel sie in
> eine Hex zahl um, weil ich einen 12 bit ADC hab.

suggerierst Du, dass aus der Tatsache das der AD-Wandler 12 Bit hat, 
folgt das Du die erhaltene Zahl in die hexadezimale Darstellung 
umwandeln musst.
Das ist aber keine mögliche Folgerung. Dazwischen besteht kein innerer 
Zusammenhang. Erkläre doch bitte warum Du meinst, das das eine das 
andere erforderlich macht.

> Ich kann nicht die normale ADC zahl
> benutzen da die Formel einen Zusammenhang mit dem Spannungswert hat.
Auch hier formulierst Du so, als wenn das eine aus dem anderen folgt. 
Also etwa so: Wenn eine Formel einen Zusammenhang mit einem 
Spannungswert hat, kann man den AD-Wert nicht in dieser Formel 
verwenden.
So ist das nicht. Aber erkläre doch bitte mal wie Du darauf kommst, das 
das so ist.

andy schrieb:
> Da kann ich nicht einfach mit 99B in der Formel rechnen.

Wieso nicht? Dem Compiler ist das egal. Du musst ihm nur mitteilen, das 
es sich bei 99b um eine Hexadezimalzahl handelt, indem Du "0x" 
voranstellst. Also "0x99b" schreibst. Dann ist gut. Folgen von Ziffern 
'0' bis '9' ohne Zusatz werden vom Compiler als Dezimalzahlen 
interpretiert.

von Klaus W. (mfgkw)


Lesenswert?

außer, sie fangen mit einer 0 an :-)

von Tom M. (Gast)


Lesenswert?

andy schrieb:
> U
> ist in der Formel zb 1,5V und der Hex wert vom ADC ist 99B bei der
> Spannung.
>
> Da kann ich nicht einfach mit 99B in der Formel rechnen.

Doch, kannst du. Einfach die C KOnvention für Zahlenbasen einhalten (0x 
prefix für hexadezimal oder führende 0 für oktal).

Du kriegst ein Bitmuster von deinem ADC. Dazu hast du eine Konvention, 
die sagt z.B. "du liest eine 16 bit Zahl vom ADC, von dem aber nur die 
unteren 12 bit zu berücksichtigen sind".

Mit Zahlen kannst du bzw. die CPU rechnen. Erst bei der Anzeige sagst 
du, wie du das jeweilige Bitmuster ausgeben willst, dezimal, oktal, 
hexadezimal usw. usf. Das geht händisch oder über sprintf() & co...

von Karl H. (kbuchegg)


Lesenswert?

Karl heinz Buchegger schrieb:

> existiert kein Hex oder Dezimal sondern nur Zahlen. Erst bei der Ausgabe
> der Zahl entscheidest DU, in welcher Form du die Zahl zu Gesicht
> bekommen willst. Als Hexadzinmalzahl oder in ihrer dezimalen Form. Aber
> das ist nur Schreibweise.

....

In einem gewissen Sinne ist das gleichwertig mit
Du zählst Schafe auf der Weide
Um die Anzahl anzuzeigen, streckts du 7 Finger in die Höhe
Du kannst auch 7 Bierflaschen hinstellen
Oder einen großen Stein für jeweils 5 Schafe und 2 kleine Steine
Du kannst auch ein Papier nehmen und da so einen lustigen Winkel
 draufmalen: 7
Oder du kannst hinschreiben: VII
Oder du machst entsprechend der Anzahl Schafe Striche aufs Papier 
IIIIIII

Es gibt viele verschiedene Repräsentierungen. Aber letztendlich stehen 
all diese Repräsentierungen für etwas: nämlich die Mächtigkeit der Menge 
von Schafen auf der Weide, egal wie du diese Anzahl sichtbar machst. Das 
Konzept xxxxxxx darfst du nicht mit der 7 (oder 5 + 2, oder 1 großer 
Stein und 2 kleine Steine) verwechseln. Das eine ist das abstrakte 
Konzept 'Zahl'. Das andere ist die Art und Weise wie du dieses Konzept 
visualisierst.

Und jeder, der dein System kennt, wird bei jeder dieser 
Repräsentierungen die gleiche Anzahl an Schafen durch das Gatter lassen. 
Warum? Weil das Konzept 'Zahl' unabhängig davon ist, welche Technik man 
benutzt um es sichtbar zu machen.

von Zaphod B. (brezel) Benutzerseite


Lesenswert?

Zu deinem Problem:
einfach
1
double U = adc / 0x99B * 1.5
und du hast deine Spannung als Wert.

Zum allgemeinen Mathe Problem:
Da das Forum mit den ganzen Artikeln mittlerweile ja schon weit über µCs 
hinausgeht, mach doch mal BITTE jemand einen Artikel zum Thema 
Zahlensysteme! Dann könnten sich in Zukunft solche Threads mit einem 
einfachen Link erledigen, anstelle von 30 verzweifelten Beiträgen.

von Grrrr (Gast)


Lesenswert?

Klaus Wachtler schrieb:
> außer, sie fangen mit einer 0 an :-)

Ja. Dann ist sie oktal. War unvollständig. Ist wohl nicht mein Tag 
heute. Schon der zweite Lapsus. Dabei muss ich heute noch ein paar Bugs 
fixen.

von Karl H. (kbuchegg)


Lesenswert?

Grrrr schrieb:
> Klaus Wachtler schrieb:
>> außer, sie fangen mit einer 0 an :-)
>
> Ja. Dann ist sie oktal. War unvollständig.

Ich bitte euch inständig, ihn jetzt nicht noch mehr zu verwirren, in dem 
da jetzt auch noch Oktalzahlen auf der Bildfläche auftauchen :-)

von Grrrr (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Ich bitte euch inständig, ihn jetzt nicht noch mehr zu verwirren, in dem
> da jetzt auch noch Oktalzahlen auf der Bildfläche auftauchen :-)

Dein Wunsch sei mir Befehl. Ich muss jetzt ohnehin mal Geld verdienen.

von Klaus W. (mfgkw)


Lesenswert?

Also auch kein Dreiersystem?

(Ehrlich gesagt hält sich mein Mitleid irgendwann auch in
Grenzen, wenn jemand es nach Stunden nicht schafft, mal halbwegs
konkret sein Problem zu beschreiben und jede Bitte um genaue Angaben
und Quelltext einfach ignoriert.
Wenn man hier im Forum jedem Lernverweigerer alle elementarsten
fachlichen Grundlagen und Minimalstandards bzgl. Kommunikation
nachtragen muß, dann gute Nacht!)

von P. S. (Gast)


Lesenswert?

Zaphod Beeblebrox schrieb:
> Dann könnten sich in Zukunft solche Threads mit einem
> einfachen Link erledigen, anstelle von 30 verzweifelten Beiträgen.

Das wird nichts helfen, denn es werden trotzdem immer Leute versuchen, 
trotz des alles erklaerenden Links "ihre" Hilfe loszuwerden. Muss das 
Pfadfinder-Syndrom sein.

von andy (Gast)


Lesenswert?

QBuchegger

Okay das hört sich gut an das ich den ADC Wert als Dezimal 
"zusammenstellen" kann.

Im moment mach ich eine Hex zahl mit

Erg = ((ADCDATAH & 0xF) <<8) | ADCDATAL;

Wie schaff ich es eine Dezimalzahl zu bekommen? Weist du den die 
Schritte dafür?



@grr also wenn ich in der Formel dann verwende 0x99b*150 ist das dann 
das selbe wie 2459*150?

Wenn das so währe müsste ich die 2459 * 0,61 rechnen. Funktioniert das 
dann mit 0x99b*0,61 auch?

von Koch (Gast)


Lesenswert?

Das passt hier gerade:

http://psychsurvivor2.files.wordpress.com/2009/05/base10.png?w=297&h=255
(bzgl. der Zahlendiskussion)

von Karl H. (kbuchegg)


Lesenswert?

andy schrieb:
> QBuchegger
>
> Okay das hört sich gut an das ich den ADC Wert als Dezimal
> "zusammenstellen" kann.
>
> Im moment mach ich eine Hex zahl mit
>
> Erg = ((ADCDATAH & 0xF) <<8) | ADCDATAL;
>
> Wie schaff ich es eine Dezimalzahl zu bekommen? Weist du den die
> Schritte dafür?

OK. Ich geb's auf.
Du hast nichts kapiert.

Such dir ein anderes Hobby.

von Klaus W. (mfgkw)


Lesenswert?

andy schrieb:
> QBuchegger

Bin ich nicht, aber vielleicht kann man den armen Kerl mal
entlasten; er hat es dir doch schon mehrfach gesagt.

>
> Okay das hört sich gut an das ich den ADC Wert als Dezimal
> "zusammenstellen" kann.
>
> Im moment mach ich eine Hex zahl mit
>
> Erg = ((ADCDATAH & 0xF) <<8) | ADCDATAL;

Erg ist damit KEINE Hexzahl, keine Dezimalzahl.
Es ist eine Zahl.
(Genau genommen intern eine Binärzahl, aber das ist vollkommen egal 
hier)

Erst bei der Ausgabe würde man sie hex, dezimal oder sonstwie ausgeben.


>
> Wie schaff ich es eine Dezimalzahl zu bekommen? Weist du den die
> Schritte dafür?
>

Eine dezimale AUSGABE z.B. mit sprintf mit %d bzw. %u, eine#
Hexadezimale Ausgabe mit %x.

Aber die Zahl selbst wird davon nicht hex und nicht dezimal.

>
>
> @grr also wenn ich in der Formel dann verwende 0x99b*150 ist das dann
> das selbe wie 2459*150?

ja

>
> Wenn das so währe müsste ich die 2459 * 0,61 rechnen. Funktioniert das
> dann mit 0x99b*0,61 auch?

ja

Außer daß es . heiißt und nicht ,

von Klaus W. (mfgkw)


Lesenswert?

Karl heinz Buchegger schrieb:
> OK. Ich geb's auf.

So schnell? :-)

von andy (Gast)


Lesenswert?

-.- ich weis doch e das es eine zahl ist, aber es repräsentiert eine HEX 
ZAHL!!


Eine dezimale AUSGABE z.B. mit sprintf mit %d bzw. %u, eine#
Hexadezimale Ausgabe mit %x.

Aber die Zahl selbst wird davon nicht hex und nicht dezimal.
___
Ja funktioniert nur bei einer Ausgabe, aber im Programmcode sonst nicht

von Klaus W. (mfgkw)


Lesenswert?

?

Sorry, melde mich jetzt auch mit Overflow ab.
Das passiert sonst doch nur beim Reden mit Frauen.
andy, bist du eine Frau? Reden wir die gleich Sprache?

von Grrrr (Gast)


Lesenswert?

"Every base is base 10"

Jenau. Dit rockt, Mann.

von Karl H. (kbuchegg)


Lesenswert?

Klaus Wachtler schrieb:
> Karl heinz Buchegger schrieb:
>> OK. Ich geb's auf.
>
> So schnell? :-)


Er hat mich jetzt fertig gemacht. Noch einfacher kann ichs ihm nicht 
erklären. Wenn er wenigstens die Antworten gelesen hätte, die da immer 
wieder das Gleiche sagen: Da braucht nichts umgerechnet zu werden.


Obwohl.
So wird von Hex auf Dezimal umgerechnet:
1
   Erg = Erg * 1 / 0x01;

Das funktioniert deswegen weil mit einer Dezimalzahl multiplizert und 
durch eine Hexadezimalzahl dividiert wird. Erg ist Hexadezimal. Werden 
jetzt die 'Einheiten' weggekürzt, bleibt dezimal übrig.

Uff.

von Zaphod B. (brezel) Benutzerseite


Lesenswert?

1
double U = erg / 0x99B * 1.5
Dann eben SO man. mit "U" kannst du dann deine Gleichung da 
weiterrechnen! Eine Zahl ist nie hexadezimal oder binär oder dezimal, 
das sind nur Darstellungsarten (zun 38. mal!). Hattest du jemals 
mathe???

von Klaus W. (mfgkw)


Lesenswert?

Klaus Wachtler schrieb:
> -.- ich weis doch e das es eine zahl ist, aber es repräsentiert eine HEX
> ZAHL!!

Letzer Versuch:
Eine ZAHL hat einen Wert. Die Zahl ist nicht hex, nicht dez, sie ist 
eine Zahl mit einem Wert.

Die DARSTELLUNG einer Zahl kann hex oder sonstwas sein.

Eine Variable wie dein Erg hat den Wert und nicht die Darstellung.
Erg kann also nicht hex sein.

Das bitte jetzt erst lesen und schweigen, bis du es verstanden hast.

Wenn du jetzt noch einmal sagst, deine Zahl wäre hex....

von Klaus W. (mfgkw)


Lesenswert?

Karl heinz Buchegger schrieb:
> So wird von Hex auf Dezimal umgerechnet:   Erg = Erg * 1 / 0x01;

aber mir sagen, ich soll niemanden mit oktal verwirren....

von Grrrr (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Er hat mich jetzt fertig gemacht.

Ich schicke Dir mal ein virtuelles Bier. (Nein. Garantiert kein Bit). 
;-)

von andy (Gast)


Lesenswert?

lol, Nein ich bin keine Frau.

Nur ich glaub wir reden trotzdem einander vorbei.

Ich wollt doch nur wissen wie ich von meinen ADC eine Dezimalzahl 
bekomme. Ich bekomm ADCDATAH und ADCDATAL in H steht zb 1011 und in low 
1101111

Jz wär es intressant die 2 in eine Dezimalzahl zusammen zufügen :P

Kann doch nicht so schwer sein, aber ich weis leider nicht wie

von Zaphod B. (brezel) Benutzerseite


Lesenswert?

Klaus Wachtler schrieb:
> Das bitte jetzt erst lesen und schweigen, bis du es verstanden hast.

jetz copy und paste den code, schalte den Kopf ab, so wie du es wohl 
geplant hattest :P und bitte schließ einer diesen Thread!

von Klaus W. (mfgkw)


Lesenswert?

Bekomme ich auch ein Bier?

von Klaus (Gast)


Lesenswert?

meld

bekomm ich auch eins? =)

von Grrrr (Gast)


Lesenswert?

andy schrieb:
> Ich wollt doch nur wissen wie ich von meinen ADC eine Dezimalzahl
> bekomme.

> Jz wär es intressant die 2 in eine Dezimalzahl zusammen zufügen

Das ist ein Troll, Leute. Der verschaukelt uns.

von Karl H. (kbuchegg)


Lesenswert?

Klaus Wachtler schrieb:
> Bekomme ich auch ein Bier?

Ich geb dir was ab.

von Grrrr (Gast)


Lesenswert?

Freibier!

von Frank E. (erdi-soft)


Lesenswert?

@andy

Nimm dir mal den gcc für PC, kompiliere dir folgenden Sourcecode und 
führe ihn aus.
1
#include <stdio.h>
2
#include <stdlib.h>
3
4
int main()
5
{
6
    printf("Multiplikation Hex * Dez als dez: %d\n", 0x99b * 150);
7
    printf("Multiplikation Dez * Dez als dez: %d\n", 2459 * 150);
8
9
    printf("Multiplikation Hex * Dez als hex: %x\n", 0x99b * 150);
10
    printf("Multiplikation Dez * Dez als hex: %x\n", 2459 * 150);
11
12
    return 0;
13
}

Wie du sehen wirst, spielt die Darstellung, die du siehst, keine Rolle. 
Der Controller rechnet alles in binär, egal ob du im C-Code Zahlen zur 
Basis 2, 8, 10, 16 oder was weiß ich verwendest (sofern der Compiler die 
entsprechende Basis beherrscht).

Und zur Sicherheit auch gleich die Ausgaben dazu:
1
Multiplikation Hex * Dez als dez: 368850
2
Multiplikation Dez * Dez als dez: 368850
3
Multiplikation Hex * Dez als hex: 5a0d2
4
Multiplikation Dez * Dez als hex: 5a0d2

von Zaphod B. (brezel) Benutzerseite


Lesenswert?

Jetzt plötzlich....
Erst Spannung jetz was ganz anderes, HILFE!
der Thread muss mindestens schon nach /dev/null -.-

von Karl H. (kbuchegg)


Lesenswert?

andy schrieb:
> lol, Nein ich bin keine Frau.

Dann hast du zumindest extrem viele weibliche Hormone

>
> Kann doch nicht so schwer sein, aber ich weis leider nicht wie

Zum 3 hundert 8 und sechzigsten mal.
Du brauchst nichts tun.
Du hast die Zahl schon!


(Wahrscheinlich liefert sein Programm ein falsches Ergebnis und jetzt 
schiebt er es auf die 'fehlende Dezimal Umrechnung')

von Frank E. (erdi-soft)


Lesenswert?

Btw.: Hat noch jemand Popcorn?

von Grrrr (Gast)


Lesenswert?

Frank Erdrich schrieb:
> Frank Erdrich

Aha. Und wie wandelt der das intern von dez in hex und umgekehrt?

Duck und weg! Prost!

von Klaus W. (mfgkw)


Lesenswert?

MarioT schrieb:
> kan mier jemant hilfe kote geed net feler bei:
> (unsiknet ind)erg)
> danke!!!!!!!!!!!!!!!

Das hört sich irgendwie Cwedisch an?

von Frank E. (erdi-soft)


Lesenswert?

Grrrr schrieb:

> Aha. Und wie wandelt der das intern von dez in hex und umgekehrt?

Magiiieee.

von spess53 (Gast)


Lesenswert?

Hi

>Jz wär es intressant die 2 in eine Dezimalzahl zusammen zufügen :P

Wozu. Damit kann dein Contoller eh nicht rechnen. Der rechnet nicht 
Dezimal, sondern binär. Und er rechnet z.B. auch nicht mit 1,5. Das muss 
vom Compiler auch erst in ein controllerverdauliches Format gebracht 
werden. Nur davon merkst du nichts.

MfG Spess

von andy (Gast)


Lesenswert?

okay, Jetzt hab ichs :P

Es funktioniert wirklich das ich mit der Zahl vom ADC einfach weiter 
rechne

Danke an alle, die mich noch nicht aufgegeben haben gg

mfg

andy

von Grrrr (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> (Wahrscheinlich liefert sein Programm ein falsches Ergebnis und jetzt
> schiebt er es auf die 'fehlende Dezimal Umrechnung')

Möglich. Den Quelltext haben wir auch immer noch nicht gesehen. 
Reichlich hartleibig der Mensch.

von Grrrr (Gast)


Lesenswert?

andy schrieb:
> Es funktioniert wirklich das ich mit der Zahl vom ADC einfach weiter
> rechne

Ach was.

von Karl H. (kbuchegg)


Lesenswert?

andy schrieb:
> okay, Jetzt hab ichs :P
>
> Es funktioniert wirklich das ich mit der Zahl vom ADC einfach weiter
> rechne

Vodooooooo

von Thomas K. (rlyeh_drifter) Benutzerseite


Lesenswert?

ok, ich probiers auchmal.

Dein Problem:
Es gibt ein high- und ein low-byte, du willst daraus eine "ganze" Zahl 
machen. Das ganze deswegen, weil du einen ADC mit 12 bit hast, und das 
passt ja nicht in den Bereich 0x00 bis 0xFF.

Lösung:
uint_16t ergebnis = (ADCDATAH << 8) + ADCDATAL



wenn dein Kopf jetzt aufgeregt zustimmend genickt hat bitte nicht 
weiterlesen.

Zitat:
Ich bekomm ADCDATAH und ADCDATAL in H steht zb 1011 und in low 1101111.

Das ist, weil deine Anzeige führende Nullen unterdrückt. Über deine 
Beispielwerte kann man folgendes sagen:
ADCDATAH ist in binär 00001011, in hex 0x0B und in dezimal 11.
ADCDATAL ist in binär 01101111, in hex 0x6F und in dezimal 111.

Mach dir klar, dass das im µC zwei 8 bit Werte (unsigned char) sind, die 
du zu einem 16 bit Wert (unsigned int) zusammengefügt werden sollen.

von Grrrr (Gast)


Lesenswert?

Ich habe allerdings das Gefühl wir haben nur die Symptome kuriert.

von Grrrr (Gast)


Lesenswert?

Siehst Du? Thomas hat das Problem auf Anhieb verstanden. War doch ganz 
einfach.

von MarioT (Gast)


Lesenswert?

01111111
11100000
11111111
00000000
Das ist alles was ein µC kann, sieht und weiß.
Es gibt nur Bit, mehr nicht. was ist da so schwer?
Wie bekommt man 12Bit in "eine" Dezimalzahl umgewandelt in den µC??

von Grrrr (Gast)


Lesenswert?

Is noch Bier da?

von Ewald S. (rentner62)


Lesenswert?

Eine Frage an alle, die in diesem Thread mitgemacht haben.
Was habe ich gegenüber andy falsch gemacht. Soooo viele Antworten, und 
mich jagt ihr gleich nach Hause, obwohl ich nur gefragt habe, ob einer 
sowas hat, nicht mehr.
Siehe Thread "Drehzahlregelung Filmprojektor mit ATMega8-16".
Trotzdem hat es mir bei dieser Runde Spass gemacht, still mitzulesen, 
den Durst habe ich aber im Gegensatz zu euch mit "Badener Spatburgunder" 
gelöscht. Vielleicht bekomme ich dort doch einmal mehr Hilfe von euch.

von Kurt (Gast)


Lesenswert?

Immer wieder erstaunlich mit welchem Eifer sich viele Leute auf die 
doofsten Fragen stürzen, ich frage mich immer warum.
Dem Frager ist damit auch nicht geholfen, wer es nicht über doofe Fragen 
raus schafft und nicht mal fähig ist die Antworten zu lesen der muss 
erst Mal auf einer ganz anderen Ebene etwas dazu lernen bevor er anderen 
Leute mit seinen Hausaufgaben die Zeit stiehlt.

von Klaus W. (mfgkw)


Lesenswert?

Ewald Scherer schrieb:
> Eine Frage an alle, die in diesem Thread mitgemacht haben.
> Was habe ich gegenüber andy falsch gemacht.

Was du falsch gemacht hast, weiß ich nicht.
Es wäre nett, wenn du mich aufklärst, wo du etwas gefragt hast
und man dich nach Hause geschickt hat.
Vielleicht liegt es daran: du fragst etwas, ohne zu sagen,
worum es geht?
Ok, ich habe ein schlechte Gedächtnis und dein Name sagt mir
jetzt nicht gleich, worum es geht.
Soll ich jetzt nach dem Thread suchen, den su meinst? Mit
einem kleinen Link wäre es einfacher gewesen...

Warum ich zum Schluß noch (oder besser gesagt: wieder)
dabei war, war eigentlich mehr Mitleid mit KHB, dessen
Geduld ich einerseits bewundere, aber andererseits auch
nicht wegen Hausfrauen- und Kindergartenkram überstrapaziert
sehen möchte.

von Klaus W. (mfgkw)


Lesenswert?

@Kurt: Ja.
Verstehe ich auch nicht, aber manchmal falle ich auch wieder
drauf rein.

(Und wenn ich um lesbare+verständliche Fragen bitte, bin ich
ein "Rechtschreib-Faschist" und "kleinkarierter Affe" :-)

von Karl H. (kbuchegg)


Lesenswert?

Ewald Scherer schrieb:

> Siehe Thread "Drehzahlregelung Filmprojektor mit ATMega8-16".

Ich kann mich nicht mehr an die Details der Fragestellung erinnern.
Aber es war irgendetwas, was sich nicht in 3 oder 4 Sätzen beantworten 
lässt. Und die Frage "Hat wer fertigen Code für mich" hat eigentlich das 
Potential in eine Schlammschlacht über den Sinn von fertigem Code 
auszuarten. So eine Frage ist in den seltensten Fällen zielführend.

Die Frage hier hatte eigentlich das Potential, schnell abgehandelt zu 
werden. Quasi im Vorübergehen.
Das sich das dann so entwickelt, damit hatte wohl niemand gerechnet.

von MarioT (Gast)


Lesenswert?

Ewald Scherer schrieb:
> Eine Frage an alle, die in diesem Thread mitgemacht haben.
> Was habe ich gegenüber andy falsch gemacht.
Er hat gefragt wie man eine Zahl umwandelt und es wurde versucht, ihm 
das Prinzip zu erklären, um es mal richtig zu machen. Du wolltest nur 
fertigen Code.
Wenn man erstmal weiß, wie man eine LED ein und ausschaltet, ist das 
andere nicht mehr so schwer. Die meisten wollen aber als erstes, etwas 
ganz großes Programmieren, weil sie im Wiki mal was gelesen haben das es 
mit µC gehen soll.

von P. S. (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:

> Das sich das dann so entwickelt, damit hatte wohl niemand gerechnet.

Doch, schon. Den die Frage wurde erst vor ein paar Tagen gestellt. Und 
ein paar Wochen vorher. Und...

http://thedilbertstore.com/images/periodic_content/dilbert/dt970529dhc0.jpg?1252609435

von Peter D. (peda)


Lesenswert?

Ewald Scherer schrieb:
> Eine Frage an alle, die in diesem Thread mitgemacht haben.
> Was habe ich gegenüber andy falsch gemacht. Soooo viele Antworten, und
> mich jagt ihr gleich nach Hause, obwohl ich nur gefragt habe, ob einer
> sowas hat, nicht mehr.

Du wolltest eine recht komplexe Applikation fertig für Dich auf dem 
Servierbrett. Sowat gibbet hier nich, ham wa nich und kriejen wa die 
nächsten Jahre ooch nich mehr rin.

Du hast die Programmierregel Nr.1 mißachtet: "divide and conquer".
Du mußt Dein Problem in kleine Teilaufgaben zerlegen und die dann Stück 
für Stück lösen. Dann werden sie auch gehülft.

Hier ging es um eine Teilaufgabe, nämlich 2 Bytes zu einem 16Bit-Wert 
zusammen zu fügen. Es war zugegebener Maßen sehr schwer, die Frage 
überhaupt erstmal zu finden.


Peter

von Karl H. (kbuchegg)


Lesenswert?

Peter Stegemann schrieb:
> Karl heinz Buchegger schrieb:
>
>> Das sich das dann so entwickelt, damit hatte wohl niemand gerechnet.
>
> Doch, schon. Den die Frage wurde erst vor ein paar Tagen gestellt. Und
> ein paar Wochen vorher. Und...

Ja leider.
Die meisten Fragen kommen regelmässig wieder.
Standardantworten sind
* volatile
* JTAG Fuse abschalten
* Wie sieht die Spannungsversorgung aus?
* Job Flags
* 5 / 8 ergibt 0. Selbst wenn das Ergebnis einem float zugewiesen wird.

von Link zu (Gast)


Lesenswert?

Beitrag "Drehzahlregelung Filmprojektor mit ATMega8-16"

Ja schrieb (15.03.2010 10:57, "Drehzahlregelung Filmprojektor mit 
ATMega8-16"):
> Im Ernst: du wirst hier keinen finden, der für dich die Arbeit macht.
> Beschäftige dich lieber erstmal mit den Grundlagen deines µC:
Ist eigentlich eine gute Beschreibung deines Problems.
Abgesehen davon, dass du nur den Thread gestartet hast, aber sonst nie 
wieder etwas geschrieben hast.

Das passt auch:
Karl heinz Buchegger schrieb(15.03.2010 22:28, "Drehzahlregelung 
Filmprojektor mit ATMega8-16"):
> rentner62 schrieb:
>> Nein das wollte ich bestimmt nicht. Aber mit halbwegs ähnlichen
>> Beispielen kann man doch schneller lernen!
>
> Trugschluss.
> Am schnellsten lernst du, wenn du dich an einen fertigen Fahrplan hälst
> und den durcharbeitest.
Wobei ich starke Zweifel hege, dass du je einen fertigen Fahrplan 
hattest.

Im übrigen hättest du die Probleme im Thread selbst ansprechen sollen.

Karl heinz Buchegger schrieb:
> Ewald Scherer schrieb:
>
>> Siehe Thread "Drehzahlregelung Filmprojektor mit ATMega8-16".
>
> Ich kann mich nicht mehr an die Details der Fragestellung erinnern.
> Aber es war irgendetwas, was sich nicht in 3 oder 4 Sätzen beantworten
> lässt.
Er hätte klein, in diesem Fall Abschnittsweise, sich durch sein Projekt 
durcharbeiten sollen. Eventuell vorher noch ein paar Grundübungen, LED 
ansteuern, Taster auslesen. Hilfestellungen wären die Tutorials hier und 
sonstwo und dann erst ein Thread mit konkreten Fragen.

Im übrigen ist im oben genannten Thread gar keine Frage von Ewald 
Scherer zu lesen, nur dass er etwas plant, klingt eher nach einem 
Info-Thread. ;-)

Das ist jetzt alles nicht wirklich nett von mir, aber du hast ja auch 
den völlig falschen Weg gewählt, der sich imho auch nicht gehört.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.