www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Register Abfrage


Autor: Thomas Fehres (Gast)
Datum:

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

Autor: Dieter B (Gast)
Datum:

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

Autor: Thomas Fehres (Gast)
Datum:

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

Autor: Dieter B (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Probier es doch mal so


unsigned int wandlung;

wandlung = (ADCH<<8) + ADCL;


Damit steht der Wert der AD Wandlung in wandlung.

MFG
Dieter

Autor: Thomas Fehres (Gast)
Datum:

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

Autor: Dieter B (Gast)
Datum:

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

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn schon in C, warum denn nicht gleich als int-Variable lesen?

unsigned int AD;
AD=read_adc (0);

unsigned int read_adc (unsigned char channel){
.
.
return (ADCW)
}

Autor: Dieter B (Gast)
Datum:

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

Autor: Thomas Fehres (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke euch hat bei mir jetzt auch alles geklappt ;-)

Gruß
Thomas

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.