www.mikrocontroller.net

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


Autor: Patrick (Gast)
Datum:

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

Autor: Fisch (Gast)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

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

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
if (ADCL & (1<<Bit))
 schreibe, möchte er das ich "Bit" deklariere.
Wie muss ich das machen?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Patrick (Gast)

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

> schreibe, möchte er das ich "Bit" deklariere.
>Wie muss ich das machen?
#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-Tu...

MFG
Falk

Autor: M. H. (doktorgnadenlos)
Datum:

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

Autor: Patrick (Gast)
Datum:

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

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.