mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Analog-Komparator Schaltschwelle


Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stephan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
oh habe wohl vergessen,den COde hoch zu laden

Also hier ist er....

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
 mov      adlow, temp2         ; immer zuerst LOW Byte lesen
 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...

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.