Bei einem AVR Register auslesen (in c)

Gast #699091
Hy leute
ich bin noch nicht so wirklich gut im umgang mit mikrocontrollern, und 
möchte aber gerne ein register auslesen.
Es handelt sich dabei um die Register ADCL und ADCH.
Da ich genau wissenmöchte was für werte die einzelnen Bits haben würde 
ich diese gerne auslesen, also zum Beispiel ob das 1 bit im Register 
ADCH den Wert 0 oder den Wert 1 trägt.
Ist das so überhaupt möglich wie ich mir das vorstelle?
ich danke schonmal
Gast
Hallo.
Wenn du das ganze Register auslesen möchtest:
variableL = ADCL
variableH = ADCH

Wenn du nur einzelne Bits checken willst:

if (ADCL & (1<<Bit))
   //Bit gesetzt
else
   //Bit nicht gesetzt
Fisch wrote:
> Hallo.
> Wenn du das ganze Register auslesen möchtest:
> variableL = ADCL
> variableH = ADCH
Dafür bietet jeder mir bekannte AVR-C-Compiler ein 16-Bit-Register ADC 
oder ADCW an. Das Auslesen der Einzelregister ist in C unsinnig, außer, 
man hat ADLAR gesetzt und will nur das High-Byte auslesen. Die 
Verwendung des 16-Bit-Registers sorgt auch dafür, dass man sich um die 
Reihenfolge des Auslesens keine Gedanken machen muss. Und wenn man es 
doch unbedingt machen will, muss man eben unbedingt beachten, dass das 
Low-Byte vor dem High-Byte gelesen werden muss.

> Wenn du nur einzelne Bits checken willst:
>
> if (ADCL & (1<<Bit))
>    //Bit gesetzt
> else
>    //Bit nicht gesetzt
Das geht schief. Wenn ADCL gelesen wird, muss IMMER anschließend ADCH 
gelesen werden, weil sonst beide Register gesperrt bleiben und der ADC 
keinen neuen Wert reinschreiben kann! Abgesehen davon ist es i.d.R. 
sinnfrei, in den ADC-Datenregistern einzelne Bits abzufragen...
Gast
um den sin möchte ich mir gerade keinen gedanken machen, ich habe das so 
als augabe gestellt bekommen und möchte es daher auch so erledigen ( ich 
bitte um verständnis)

wenn ich
1
if (ADCL & (1<<Bit))
 schreibe, möchte er das ich "Bit" deklariere.
Wie muss ich das machen?
"Bit" ist ein Platzhalter. Hier kannst Du einfach die Nummer des 
gewünschten Bits einsetzen, also 0 bis 7.
Diese Schreibweise bedeutet, dass der Wert "1" (0x01) um Bit Stellen 
nach links verschoben wird, eine sehr gebräuchliche Schreibweise in C.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.