Register Abfrage

Gast #71901
Lesenswert?

Hallo miteinander,

Ich wollte mal fragen wie ich ein Register abfragen kann um dann eine
Funktion auszuführen.

laden wandlung1 = ADCH;

 if (wandlung1 == 1)

ich habs auf die Weise versucht aber der Kontroller (atmega128)
nimmt des einfach ned er ignoiert es kann mir da jemand helfen.
Vielen Dank schonmal!

Gruß Thomas
Gast #71902
Lesenswert?

Hallo

Bin C zwar auch noch so fit, aber man lernt ja nie aus.

Was willst du denn mit der Abfrage abfragen.

Gehe mal davon aus, das wandlung1 eine Variable ist.

Du fragst also jetzt ab, ob der Wert deiner AD Wandlung zwischen 256
und 511 liegt. Weiß nicht, ob du das willst.

Außerdem muß erst ADCL ausgelesen werden, dann ADCH.

Schreib mal genauer, was du genau willst.

MFG
Dieter
Gast #71903
Lesenswert?

Hallo Dieter,

Ja genau des will ich machen hab die Wandkung jetzt gemacht und
natürlich als erstes das ADCL ausgelesen jetzt will ich den Wert
auslesen und ausgeben soll von 0 bis 5 V ausgegeben werden jetzt will
ich die letzten zwei Bit von der 10 Bit Wandlung abfragen und
dementsprechend dann die Werte dazuaddieren wenn die Bits gesetzt sind
damit ich den richtigen Wert ausgebe hier is mein Programm .

read_adc(0x00);
wandlung = ADCL;
wandlung1 = ADCH;
if (wandlung1 == 1)
           {
             wandlung = wandlung + 512;
      if (wandlung1 == 3)
             {
               wandlung = wandlung + 1024;
             }
                    else {;}
           }
       else
           {
             if (wandlung1 == 2)
             {
               wandlung = wandlung + 1024;
             }
             else {;}
           }


       kommazahl = wandlung * 0.00244;
       sprintf (buf," Laser  AN   SPG: %2.2f V  " ,kommazahl);
       textlcd (buf,1);

So hab ich mir des zumindest gedacht villeicht gibts auch ne andere
Möglichkeit Vielen Dank schonmal.
Gruß
Thomas
Gast #71905
Lesenswert?

hm danke schonmal;
aber wenn ich mir den Befehl (ADCH<<8) anschau dann bedeutet des ja des
ich um 8 Stellen nach links scheibe wenn ich jetzt z.B. 00000011b in
dem Resgister stehen hab dann hab ich ja danach 00000000b dirn stehn
und damit sind meine 2 Bit die ich mit einrechnen will verlohren
gegangen oder seh ich des falsch ?

MFG
Thomas
Gast #71906
Lesenswert?

Hallo

Mit (ADCH<<8) schiebst du den Wert von ADCH ( 8 Bit)  um 8 Stellen nach
links, in der 16 Bit Variablen wandlung ( Bits 9 bis 16) . Dann
addierst du ADCL dazu, die aber ja nur auf den unteren 8 Bits
"landen" können, da es ja nur eine 8 Bit Variable ist.

Das Ergebnis ist ja eine 16 Bit Variable, damit stimmt dein Wert ja.

Hoffe es kommt jetzt so besser rüber.

Die Variable Wandlung kann jetzt Werte von 0 bis 1023 annehmen.

Probier das im Simunlator mal aus, da sieht man dann, das es klappt.

MFG
Dieter
Gast #71908
Lesenswert?

@crazy horse

Danke für den Tip.

Habe mir die datei io4433.h nochmal genau angeschaut und die define
gefunden. Hatte es damals mal mit ADC probiert, ging aber nicht. Dachte
es wäre wie beim TCNT1, einfach L oder H weglassen.

Ist für mich aber nicht nachzuvollziehen, warum bei ADC ein W daran
muß, bei allen "Doppelregistern" jedoch nicht.

MFG
Dieter

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