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.
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.
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)
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 ...
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.
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.
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.
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.
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.
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
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
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
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.
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.
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
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...
> 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...
"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.
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.