Forum: Mikrocontroller und Digitale Elektronik Analog Comparator


von Thomas Jung (Gast)


Lesenswert?

Hallo,

ich komme mit dem Analog Comparator nicht klar. Ich möchte einfach einen 
Spannungsteiler an die AIN0 und AIN1 legen, natürlich mit Potis.
Je nach dem welche Spannung anliegt soll irgendwo eine LED oder die 
andere LED leuchten. Leider klappt das nicht.

Die Abfrage ob ein Zustand sich ändert erfolgt im Interrupt, der aber 
meiner Meinung nach nie angesprochen wird. Was mache ich den falsch? An 
beiden Eingängen sind zwei 4,7kOhm Potis angeschlossen. Egal wie ich 
drehe, nie wird der Interrupt angesprchen, wenn es toggelt. Irgenwie 
blick ich es nicht. Der AC ist auch eingeschaltet.

Ich dachte immer, sobald der eine Eingang höher wie der andere bzw. 
umgekehrt ist, muss eine der entsprechenden LEDs leuchten, oder liege 
ich da falsch?

Danke im Voraus.

MFG

Thomas

von Thilo M. (Gast)


Lesenswert?

Potis wie angeschlossen? INTs (globaler und Comparator) eingeschaltet?
Probier's doch erstmal mit GNDund +5V (Vcc). Einfach mal umpolen, dann 
muss er schalten.

von Thomas Jung (Gast)


Lesenswert?

Hallo,

jetzt steht die Schaltung, und der Analog Comparator erfüllt seine 
Funktion zu fast 100%, aber leider nur fast. Ich möchte jetzt keine 
Schaltung als Grafik schicken, da sie zu simpel ist. An AIN1 liegt via 
Teiler eine Spannung von ca. 1V. An AIN0 ist eine LDR angeschlossen. An 
PortB0
ist eine weiße Led und an PortB7 eine rote Led. Wenn es hell ist, 
befindet sich die Spannung am LDR unter der des Teilers und es leuchtet 
die rote Led. Wird es dunkel, so wird die Schwelle überschritten und die 
weiße Led leuchtet. So weit okay.

Folgender Codeausschnitt aus dem AC Interrupt sollte doch eigentlich 
funktionieren (Übrigens ist AC auf toggeln eingestellt)
...
com  schalter

cpi  schalter, 0xFF  ; hell
brne pc+3
ldi  copy, 0b11111110
out  PortB, copy

tst  schalter            ; dunkel
brne pc+3
ldi  copy, 0b01111111
out  PortB, copy
...

Eine frühere Version war, dass ich einfach den Portzustand mit com 
negierte. Dies hatte aber zur Folge, das irgendwas statisch wurde, und 
der LDR nicht mehr reagiert hat, wahrscheinlich hatte ich damit auch die 
Pull-Ups deaktiviert, wer weiß.

Mit dem obigen Code passiert aber folgendes: Wenn Zustand = hell -> rote 
Led leuchtet. Ändert sich der Zustand auf dunkel, leuchtet die weiße 
ganz kurz auf, dann leuchtet im dunklen die rote und im hellen die weiße 
Led. Da ich noch neu in der Thematik bin, vermute ich das die LDR am AC 
Eingang prellt, liege ich da richtig? Jedenfalls hat ein 10nF von AIN0 
auf Masse das Problem erheblich verbessert. Trotzdem passiert es selten, 
dass eine Zustandsänderung nicht sofort erkennt wird, vor allem wenn ich 
ganz schnell von hell nach dunkel oder umgekehrt verfahre.

Meine Fragen:

- Muss ich den Analog Comparator entprellen, bzw., eine Hysterese 
einbauen?
- Später soll eigentlich nur das Bit ACO ausgelesen werden, erübrigt 
sich dann das Problem?
- Können mögliche Störlichtquellen den Sensor verwirren, wie z.B. die 
weiße Led (eigentlich ne dumme Frage)?

Gruß und Danke

Thomas

von Karl H. (kbuchegg)


Lesenswert?

> Da ich noch neu in der Thematik bin

Drum sehen wir dir auch einiges nach.

> Ich möchte jetzt keine
> Schaltung als Grafik schicken, da sie zu simpel ist

Aha. Drum beschreibst du es lieber und überlässt es der
Fanatasie deiner Leser, was da draus wird.

Mach einen Schaltplpan und poste ihn!

> Folgender Codeausschnitt

Poste dein komplettes Programm!


Gib uns alle Unterlagen die du hast. Das verhindert, dass
hier geraten werden muss.

> LDR am AC Eingang prellt
ein LDR kann nicht prellen. Prellen entsteht, wenn sich mechanische
Kontakte schliessen.

von Thomas Jung (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

also gut. Im Anhang ist die Schaltung und mein kompletter Code.

Danke für die Tips.

MFG

Thomas

von Thomas Jung (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

jetzt noch der Code.

MFG

Thomas

von Karl H. (kbuchegg)


Lesenswert?

Thomas Jung wrote:
> Hallo,
>
> also gut. Im Anhang ist die Schaltung

Aha.
Und wie soll deiner Meinung nach der LDR am AIN0 Eingang eine
bestimmte Spannung bewirken.
Du musst mit dem LDR und einem Widerstand genauso einen
Spannungsteiler aufbauen wie du ihn am anderen Eingang
hast.

Denk dir einfach den Aufbau vom AIN1 dupliziert auf den AIN0
Eingang. Und dann ersetzt du einen der Widerstände durch die
LDR

Ins Pgm hab ich noch nicht reingeschaut

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.