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
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.
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.
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.
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?
>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.
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!
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 ?
@ 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.
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
:-)
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.
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.
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_tstr2int(chardata){
2
data-='0';
3
if(data>9)data-=7;
4
returndata;
5
}
Um nun z. B. einen String pdu="9B" in eine Zahl zu wandeln, schreibe
ich:
1
uint8_ttmp;
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.
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
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
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.
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...
@ 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.
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).
@ 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.
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
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.
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.
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.
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...
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.
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.
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.
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 :-)
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.
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!)
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.
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?
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.
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 ,
-.- 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
?
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?
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.
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???
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....
Karl heinz Buchegger schrieb:
> So wird von Hex auf Dezimal umgerechnet: Erg = Erg * 1 / 0x01;
aber mir sagen, ich soll niemanden mit oktal verwirren....
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
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!
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.
@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
intmain()
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
return0;
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:
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')
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
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
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.
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.
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??
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.
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.
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.
@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" :-)
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.
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.
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
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.
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.