Forum

Einloggen | Registrieren | RSS  

sylvia(R)

24.09.2009,
09:02
 

Analog Comparator funktioniert nicht (Bauelemente)

Hallo,

ich bin gerade dabei, den Analog Comparator meines Atmega32 ein zu
stellen.
ich habe mit dem Befehl
ACSR =(1<<ACBG);
den AIN0 auf innere Referenz (2,56V) umgeschaltet.

Danach mit
DDRB =(0<<PB3);
den AIN1 als Eingang definiert.


Laut AVR Tutorial würde der AC immer parallel zum Controller mitlaufen,
man müßte ihn sogar explizit ausschalten wenn man ihn nicht benötigt, um
Strom zu sparen.
Damit er AC auch wirklich eingeschaltet ist, sag ich dem ACSR noch:
ACSR = (0<<ACD);

Die Allgemeinen Interrupts werden mit
sei();
eingeschaltet

Über einen Spannungsteiler gebe ich nun die Vergleichsspannung auf den
Eingang AIN1.
Nun kommt das Problem:

Egal wie hoch die Vergleichsspannung ist, der AC gibt mir immer auf ACO
ein High heraus, er sagt also, die innere Referenzspannung sei höher als
die Vergleichsspannung.
Selbst wenn die Vergleichsspannung bei +5V liegt, meint der ACO, die
Referenzspannung sei aber immer noch höher.
Habe ich irgendetwas vergessen?


Ich habe da so ein Gerücht gehört, der AC des Atmega32 würde in der DIL
Version nicht funktionieren? Hat da jemand schon so etwas gehört, oder
ähnliche Erfahrungen gemacht?

Grüße von
Sylvia

m(R)

24.09.2009,
10:52

@ sylvia

Analog Comparator funktioniert nicht

Hallo,

sylvia schrieb:

» ACSR =(1<<ACBG);
» den AIN0 auf innere Referenz (2,56V) umgeschaltet.
[...]
» Damit er AC auch wirklich eingeschaltet ist, sag ich dem ACSR noch:
» ACSR = (0<<ACD);


Um ein einzelnes Bit zu setzen, muss man |= benutzen anstatt =, sonst werden alle anderen Bits wieder auf 0 gesetzt.


Gruß,
m

sylvia(R)

24.09.2009,
11:32

@ m

Analog Comparator funktioniert nicht

»
» Um ein einzelnes Bit zu setzen, muss man |= benutzen anstatt =, sonst
» werden alle anderen Bits wieder auf 0 gesetzt.
»
»
» Gruß,
» m

Ich habe jetzt geschrieben:
DDRB &=~(1<<PB3);
ACSR &=~(1<<ACD); um beide (Pin und Register ) auf 0 zu setzen, es geht aber trotzdem nicht.
Gruß
Sylvia

m(R)

24.09.2009,
18:19

@ sylvia

Analog Comparator funktioniert nicht

» »
» » Um ein einzelnes Bit zu setzen, muss man |= benutzen anstatt =, sonst
» » werden alle anderen Bits wieder auf 0 gesetzt.
» »
» »
» » Gruß,
» » m
»
» Ich habe jetzt geschrieben:
» DDRB &=~(1<<PB3);
» ACSR &=~(1<<ACD); um beide (Pin und Register ) auf 0 zu setzen, es geht

Das sieht besser aus.


» aber trotzdem nicht.

Schade.

Im Datenblatt steht, für die Revisionen A-F des Chips gelte, dass nach einem langsamen Einschaltvorgang der erste Vergleichsvorgang "lange" dauere. Dem lasse sich abhelfen durch einmaliges Aus- und wieder Einschalten des Komparators nach dem Einschalten oder Reset.

Ob das hier weiter hilft, weiß ich allerdings nicht.


Gruß,
m

sylvia(R)

25.09.2009,
09:22

@ m

Analog Comparator funktioniert nicht

Ich habs ausprobiert, und den AC aus- und dann wieder eingeschaltet, bevor weitere Register gesetzt werden,
hat leider nichts genützt.
Aber danke trotzdem
Sylvia