Forum: Mikrocontroller und Digitale Elektronik Bei einem AVR Register auslesen (in c)


von Patrick (Gast)


Lesenswert?

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

von Fisch (Gast)


Lesenswert?

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

von Johannes M. (johnny-m)


Lesenswert?

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...

von Patrick (Gast)


Lesenswert?

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?

von Falk B. (falk)


Lesenswert?

@ Patrick (Gast)

>if (ADCL & (1<<Bit))

> schreibe, möchte er das ich "Bit" deklariere.
>Wie muss ich das machen?
1
#define bit 4

Aber du willst sicher ein bereits definertes Bit nutzen. Die haben den 
gleichen Namen wie im Datenblatt.

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#ADC_.28Analog_Digital_Converter.29

MFG
Falk

von M. H. (doktorgnadenlos)


Lesenswert?

"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.

von Patrick (Gast)


Lesenswert?

ah cool ich danke euch für eure hilfe, auf ein gwissen teil hätte ich 
eigentlich kommen können, aber naja man lernt nie aus
thx

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.