Forum: Mikrocontroller und Digitale Elektronik Frage zu (ACSR&(1<<ACO))


von Andi (Gast)


Lesenswert?

Servus,

bin grad daran einen C-Code zu entschlüsseln und hab grad ein kleines 
Verständnissproblem mit:

#define SENSE (ACSR&(1<<ACO))

Also, AC0 wertet doch das Ergebnis einer ADC Messung aus? ACSR ist das 
Register?

In dem Fall wird "SENSE" im Fall IST < SOLL den Wert 1 annehmen und bei 
IST > SOLL den Wert 0? Ist das so Richtig?

Gruß Andi

von Andreas W. (geier99)


Lesenswert?

Hallo Andi

> #define SENSE (ACSR&(1<<ACO))
>
> Also, AC0 wertet doch das Ergebnis einer ADC Messung aus? ACSR ist das
> Register?
Ja, ACSR ist das Analog Comparator Register , ACO ist der Komperator 
Ausgang (von einer ADC Messung würde ich da nicht sprechen, ausser Du 
machst gerade einen Delta-Sigma-Wandler)

>
> In dem Fall wird "SENSE" im Fall IST < SOLL den Wert 1 annehmen und bei
> IST > SOLL den Wert 0? Ist das so Richtig?
Nein, da ACO nicht "0" ist.  (0x20 oder 0x00)

Bye
Andi

von Andi (Gast)


Lesenswert?

Erstmal vielen Dank für deine schnelle Hilfe. Aber kann SENSE nicht ein 
TRUE oder FALSE annehmen?

Weil in einem weiteren Codeschnipsel wird eine If- Abfrage auf SENSE 
gemacht.

if(!SENSE || startup)

Also wenn SENSE = 0 ist & STARTUP = 1 dann...

Mein Problem ich kenn diese Schreibweise nicht. (ACSR&(1<<ACO))

Gruß Andi

von Andi (Gast)


Lesenswert?

Sorry || bedeutet ja ODER :)

von Andreas W. (geier99)


Lesenswert?

Andi schrieb:
> Erstmal vielen Dank für deine schnelle Hilfe. Aber kann SENSE nicht ein
> TRUE oder FALSE annehmen?
>
> Weil in einem weiteren Codeschnipsel wird eine If- Abfrage auf SENSE
> gemacht.
>
> if(!SENSE || startup)
>
> Also wenn SENSE = 0 ist & STARTUP = 1 dann...
>
> Mein Problem ich kenn diese Schreibweise nicht. (ACSR&(1<<ACO))
>
> Gruß Andi

wenns denn 0 oder 1 sein soll, dann kannst Du es so schreiben:
  (ACSR&(1<<ACO))>>ACO

obiges If geht auch, aber solltest Du mal auf die Idee kommen folgendes 
zuschreiben: if(SENSE==TRUE) ....  so wird diese Bedingung nie erfüllt 
sein.

von Andi (Gast)


Lesenswert?

Vielen vielen Dank. Hab das mit der Schreibweise jetzt in etwa kapiert. 
Das es bei C  Mikrocontrollern auch immer tausend Schreibweisen für 
alles gibt :)
Hast mir echt geholfen, Danke :)

von Steffen H. (stef_fen)


Lesenswert?

Ich habe das auch noch nicht ganz verstanden:

(1<<ACO) ist doch eine Bitverschiebung (ACO Bit 5 im ACSR Register)?
0b00100000

(ACSR&(1<<ACO)
0b00100000 -> ACSR
0b00100000 -> ACO

0b00100000 -> nach der UND Verknüpfung


Was bringt mir das dann in Verbindung mit  #define SENSE_H 
(ACSR&(1<<AC0) ?
Was würde SENSE oder !SENSE für Ergebnisse liefern?


Schönen Sonntag. Gruß Steffen

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.