Forum: Mikrocontroller und Digitale Elektronik avr128 komparator


von Zmarzly Daria (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich möchte den Komparator von avr128 ausprobieren. Ich habe ein kleines
Programm geschrieben (als Anhang) und an die Komparator Eingänge laut
Schema (als Anhang) unterschiedliche Volt Werte angeschlossen. Ich habe
erwartet, dass der Komparator schalten wird, der scheint aber nicht zu
funktionieren.
Wenn der Unterschied zwischen AIN1 und AIN0 groß ist (ca. 4V) dann ist
ok, sobald ich aber die Differenz verkleinre sagt mir der Komparator
Ausgang Misst.
Hat jemand Erfahrung mit dem Komparator? Reagiert er tatsächlich nur
auf große Unterschiede? Was könnte ich in diesem Fall tun?
Vielen Dank für jede Hilfe.
Mit freundlichen Grüßen Daria Zmarzly
PS. Ich benutze STK500 und AVR Studio 4.12.

von Mario Schrenk (Gast)


Lesenswert?

Der Komparator reagiert schon auf sehr kleine Spannungsunterschiede.
Aber nur, wenn die Spannung an AIN0 höher ist als an AIN1.
Zum Ausprobieren würde ich eher Potis nehmen und keine festen
Widerstände. Zumal Du die Widerstände auch als Spannungsteiler schalten
solltest. Einfach in Reihe zum Eingang bringt ein Vorwiderstand nichts,
da der Eingang fast kein Strom zieht, also am Widerstand auch so gut
wie keine Spannung abfällt.

von Zmarzly Daria (Gast)


Lesenswert?

da, verstehe ich nicht ganz:
"reagiert schon auf sehr kleine Spannungsunterschiede.
Aber nur, wenn die Spannung an AIN0 höher ist " sobald ich die AIN1
größer mache, soll nicht mehr reagieren?

Die Wiederstände in Reihe am Eingang sollten meinen AVR schützen (habe
ich in Tutorial gelesen, dass es gut ist max 1mA am Port zulassen)

von Mario Schrenk (Gast)


Lesenswert?

Der Komparator vergleicht 2 Spannungen. Ist die an AIN0 höher als die
andere, dann schaltet der Komparator durch und generiert in Deinem Fall
einen Interrupt. Die Höhe der Spannungen ist egal, nur der Unterschied
zählt!

Eingänge brauchen nicht vor zu hohem Strom geschützt zu werden, wenn,
dann vor zu hohen Spannungen. Aber bei Experimenten mit Ausgängen
können die Widerstände doch ab und zu mal das Leben des uC verlängern,
auch wenn die Atmel ziemlich robust sind ...

von Zmarzly Daria (Gast)


Lesenswert?

ja, ich verstehe den Komparator glaube ich richtig:
AIN1 < AIN0 --> ADO = 1
AIN1 > AIN0 --> ADO = 0
das Interrupt auslösen kann ich doch "beliebig" einstellen (in ACSR
habe inzwischen auf toggle umgestellt).
mein Problem liegt aber daran, dass ich nicht weiß ob ich richtig die
Spannung einschließe! Ich habe leider keine Potis, nur feste
Widerstände.
Was mache ich denn in meiner Schema falsch? Bitte könntest DU mir ein
par Tips geben?
Danke,D.

von Mario Schrenk (Gast)


Lesenswert?

Mal 'ne andere Frage: Wo hast Du genau die LED angeschlossen und
leuchtet die immer oder garnicht?

von Zmarzly Daria (Gast)


Lesenswert?

die LEDs sind am PORTC des avrs angeschlossen, die togglen öfters als
sich das ADO Signal ändert. Das AVRStudio hat ein Debuger Modul, wo ich
der Zustand aller REgister sehen kann, daher weiß ich wann ADO sein
Zustand ändert.
D.

von Mario Schrenk (Gast)


Lesenswert?

Nach Deinem Programm hast Du 3 LEDs angeschlossen. Nimm doch mal eine
davon her und kopier in der main ständig das AC0-Bit auf den Port zu
dieser LED. Dann kannst Du auch ohne Debuger den Zustand des AC0-Bits
sehen. In der ISR darfst Du die LED dann natürlich nicht mehr toggeln.

von Zmarzly Daria (Gast)


Lesenswert?

also ich habe so in main gemacht:
while(1){
  if(ACSR & (1<<ACO)) PORTC = 7;
  else PORTC = 0;
  }
und jetzt aber nur ACI0 angeschlossen, dass ACI1 is gar nicht an. ( Ich
vermute, dass an den negativen Eingang 0V liegt). Und jetzt sehe ich,
dass ACO ist bei ab 70mV gesetzt (mit 5 kOhm in Reihe).

Was heißt das??? Wieso erst ab 70mV?
D.

von Mario Schrenk (Gast)


Lesenswert?

Falls AIN1 wirklich auf 0V liegt, sind in diesem Fall die 70mV die
Schaltschwelle für den Komparator.

Leg doch mal AIN1 an einen 3.3k / 3.3k Spannungsteiler. Dann sollten
die LEDs nur bei einer Spannung größer 2.5V an AIN0 leuchten.

von Zmarzly Daria (Gast)


Lesenswert?

wie kann man so einen Spannungsteiler realisieren? Bin leider keine
Elekrotechnikerin. Ich verstehe den Komparator gar nicht mehr, als ob
irgend etwas bei den uP falsch eingestellt wäre...
Und noch was,
ich habe falsch abgelesen, dass waren 700mV nicht 70mV. D.h. dass er
zwischen 200 und 600 hin und her schaltete, bei 100mV waren dann die
LEDs aus (ADO = 0) und ab 700mV LEDs waren an (ADO = 1 ).
Verbleibende Frage ist immer noch: Wieso gibt es keine Reaktion auf den
ACI1 Port?
Ich habe heute keine Ideen mehr, gehe jetzt nach Hause. Morgen versuche
ich mit frischen Kopf was weiter zu erreichen. Vielen Dank für Deine
Tipps :)
Grüße Daria

von Mario Schrenk (Gast)


Lesenswert?

Heute Abend nur noch den Spannungsteiler in aller Kürze:

(+) ---R1---+----R2--- (-)
            |
            |
          AIN1

An AIN1 sollten ca. 2.5V anliegen wenn beide Widerstände gleich groß
sind.

OK, dann bis Morgen

von Zmarzly Daria (Gast)


Lesenswert?

Guten Morgen,
also ich habe an den AIN1 eingang den Spannungsteiler angeschaltet, das
hat aber in meinem Fall immer noch keine Wirkung. Ich stelle fest, dass
egal ob etwas an den negativen Eingang liegt oder nicht, Der Komparator
schaltet sobald sich die Spannung an den positiven Eingang 0,30 V
nähert.
Könnte es sein, das es an den FUSES liegt? Ich habe "Brown-out
detection level at VCC=2,7V; BODLEVEL=1"programmiert, außerdem habe
ich VTarget = 3,3V. Was mich noch wundert ist, dass egal ob der AREF
Jumper mounted oder nicht ist, ich kann die ARef Spannung nicht
verändern, die ist auch garnicht aktiv (auf 0 gestellt).
Bitte um Tips!
Verzweifelte Daria

von Zmarzly Daria (Gast)


Lesenswert?

ulala, ich glabe das Problem gelöst zu haben. Habe das STK500 Board mich
nochmal genauer angeschaut. Und folgendes: da gibt es zwei
"ausgeführte" E Ports, PORTE/AUX und oben noch einmal Port E. Ich
habe jetzt an den oberen Port die Spannungen angelegt und voilà, es
funktioniert. Aber wieso erlaubt nicht der Stk500 (oder das AVRStudio)
das ARef zu modifizieren???
D.

von Mario Schrenk (Gast)


Lesenswert?

Mit dem STK500 habe ich zwar noch nicht gearbeitet, aber VTarget dürfte
die Betriebsspannung für den ATmega128 sein. Wenn der wirklich mit 3.3V
läuft, sollte man keine Spannung darüber an die Eingänge legen. Die
würde dann über die eingebauten Schutzdioden nac Vcc abgeleitet werden.
In Deinem Fall (5V am Eingang) haben die Widerstände in Reihe zum
Eingang den Kontroller geschützt, vielleicht sogar gerettet.

An den FUSES sollte es eigentlich auch nicht liegen und AREF spielt nur
bei der AD-Wandlung eine Rolle.

Eine andere Möglichkeit wäre noch, daß über ACME, ADEN und  MUX2..0 ein
anderer negativer Eingang ausgewählt worden ist. Aber wenn Dein Programm
im Kontroller wirklich so ist wie angegeben, dann scheidet diese
Möglichkeit auch aus.

von Zmarzly Daria (Gast)


Lesenswert?

ja, ich habe nicht mehr die 5V sondern max 3,3V getestet (dank den
Widerständen funktioniert mein STK500 immer noch :)). Die ADC Register
setze ich nicht. Ich habe noch ein anderen Board mit avr128 und auf der
kann man auch den ARef nicht einstellen. Das ist wirklich Schade :(
Noch welche Ideen?
Vielen Dank für Deine Hilfe
Daria

von Rahul (Gast)


Lesenswert?

Im AVRStudio kann man doch im "Board"-Menu die Aref und die VTarget
ändern, wobei immer "VTarget >= Aref" gilt.
AIN und ADC haben nichts miteinander zu tun.
Beim Comparator kann man noch die interne Referenz-Spannung benutzen...

von Mario Schrenk (Gast)


Lesenswert?

> Beim Comparator kann man noch die interne Referenz-Spannung
benutzen...

In der Tat, aber nur anstelle von AIN0 und hier schien ANI1 nicht zu
funktionieren...

von Zmarzly Daria (Gast)


Lesenswert?

"Im AVRStudio kann man doch im "Board"-Menu die Aref und die VTarget
ändern, wobei immer "VTarget >= Aref" gilt."

das eben funktioniert auch nicht :(,
D.

von Rahul (Gast)


Lesenswert?

dass Atmel das whahlfrei gestaltet hat, kann ich mir auch nicht
vorstellen. Es geht ja darum, festzustellen, welche der beiden
Spannungen grösser oder kleiner ist. Je nachdem liefert der Komparator
ein digitales Signal (1Bit).
Wie man das nun auswertet, ist ja ein Software Problem...

von Zmarzly Daria (Gast)


Angehängte Dateien:

Lesenswert?

für die die mir nicht glauben, dass das ARef nicht modifizierbar ist ein
Snapshot vom AVR Studio.
Und ich weiß nicht was hir schief läuft, habe ich irgend etwas
triviales noch vergessen? Bitte um Tips, und Danke für Eure Hilfe :)
Daria

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.