Forum: Mikrocontroller und Digitale Elektronik Analog-Komparator Schaltschwelle


von Stephan (Gast)


Lesenswert?

Hallo an alle Forumsteilnehmer,

ich habe mir eine kleine an den Analog-komparaktor gebaut. AM AIN1 hängt 
ein Poti, am AIN0 ein Kondesator,folgerndermaßen beschalten:

        ___
GND----|_____|----1kOhm-----PORTB1
               |
               |
              100kOhm
               |
               |
              AIN0

Dazu verwende ich den Code im Anhang bei einem Atmega8-16PU.
Diess Projekt soll die Kapazität des Kondensators über die Dauer der 
Aufladung berechnen. Also so lagne zählen bis der Analogkomparator den 
InputCapture am Counter1 auslöst.
Wenn ich das Poti an AIN0 jetzt in mittlerer Stellung habe. passiert 
ganichts. Erst wenn ich es ganz nach links drehe(der ADC zeigt bei einem 
Test 1023 an,wenn ich das Poti in diesr Stellung an ihn schließe) und 
dann wieder zurück drehe, tritt der gewünschte Effekt auf: Es werden je 
nach Ptoi Stellung unterschiedliche Zeiten ausgegen, die es dauert, bis 
die Aldung des Kondensators höher ist, als die am Poti engestellte. Bis 
zu einer Stelle, an der die Spannung so hoch ist, als das der 
Kondensator sie erreichen könnte.
Je größer der Kondensator, um so größer die Aufladezeit, was logisch 
ist.

Warum aber muss ich das Poti aber erst voll auf drehen?.

Ich freue mich auf viele gute Antworten

Gruß Stephan

von Ralli (Gast)


Lesenswert?

Hallo Stephan,

der Code ist nicht angekommen, aber nach deinen Beschreibungen
kann ich mir nur vorstellen, dass der programmierte Ablauf
zu Anfang nicht funktioniert.

Zu Beginn scheint der Kondensator schon so weit aufgeladen zu sein,
dass der Komparator-Interrupt nicht mehr ausgelöst wird.
Hat der Kondensator schon 4,9 Volt, hilft nur das das Aufdrehen der
Vergleichsspannung auf 5 Volt.

Vor der Messung muss für die Entladung des Kondensators gesorgt werden!
Mach dir mal ein Ablaufdiagramm!

Gruß Ralli

von Stephan (Gast)


Angehängte Dateien:

Lesenswert?

oh habe wohl vergessen,den COde hoch zu laden

Also hier ist er....

von Johannes M. (johnny-m)


Lesenswert?

1
 mov      adlow, temp2         ; immer zuerst LOW Byte lesen
2
 mov      adhigh, temp1       ; danach das mittlerweile gesperrte High Byte
Was bitteschön haben diese beiden Zeilen denn mit dem Einlesen des 
ADC-Wertes zu tun? Hier werden lediglich zwei Rechenregister kopiert, 
mehr nicht. Und dabei ist es völlig Schnuppe, in welcher Reihenfolge das 
gemacht wird. In Deinem ganzen Programm sehe ich nirgends eine Stelle, 
an der die Datenregister des ADC eingelesen werden oder gar auf das Ende 
der Wandlung gewartet wird...

von Stephan (Gast)


Lesenswert?

entschuldigung für das MIssverständins. Den ADC beutze ich in einem 
anderen Programm. Das war nur zum test, um zu sehen auf welchem Wert das 
Poti genau steht.

von Tim (Gast)


Lesenswert?

Hallo,

.. wenn Du die Kapazität eines Kondensators möglichst genau ermitteln 
willst, so solltest man den C über einen konstanten Strom aufladen, den 
nur so steigt die Spannung auch wirklich 100% linear mit der Zeit an, 
d.h. Dein Zählerstand entspricht wirklich der Kapazität. In der 
jetztigen Schaltung ist der Spannungsverlauf über die Zeit zumindest in 
der Endphase nicht mehr linear und Du müsstes Deinen Zählerstand noch 
zeitaufwendig mit dem LOG umrechnen.
Auch mußt Du sicherstellen dass der Kondensator wirklich leer bzw. auf 
einem definierten Startspannung steht, wenn die Messung beginnt.
Um diesen Startpegel sicherzustellen, könnte man A0 (die Referenz) beim 
Entladen auf den gewünschten Startwert setzen und beim Erreichen des 
Entladvorgang den Vorgang abbrechen und wieder auf Ladung umschalten.
Im Prinzip musst Du einen programmgesteuerten Multivibrator entwickeln, 
dessen Lade oder Entladezeit über einen Zähler erfasst wird.
Wenn der Lade/Endladevorgang Deinen Zahler zum Überlauf bringt erhöhst 
Du einfach programmgesteuert (durch weiter OutPorts) den Strom und 
erreichst somit einen Autorange-Funktion, die Kapazitäten in einem sehr 
großen Bereich vermessen kann.

Grüße

Tim

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.