- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Ad-Wandler eines ATmega 8

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.04.2004
    Alter
    35
    Beiträge
    119

    Ad-Wandler eines ATmega 8

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo!
    Ich möchte den Wasserstand eines Brunnens mit LED's anzeigen lassen.
    Den Sensor habe ich mir so vorgestellt (Bild im Attachment):
    In den Brunnen führen 2 Leitungen. Auf dem Weg in die Tiefe befinden sich in bestimmten abständen Elektroden (Alufolie oder so). An ihnen befinden sich unterschiedliche Widerstände (R5 ist der größte und R1 der kleinste). Wenn der Wasserstand steigt und die erste Elektrode berührt, dann kann man einen Widerstand etwas kleiner als unendlich messen. Steigt der Wasserstand weiter und erreicht die nächste Elektrode, dann nimmt der Widerstand nochmals ab. Das geht dann so weiter bis zur letzten Elektrode. Soweit die Theorie. Kann das gehen?

    Den Widerstand möchte ich von einem ATmega8, den ich mit C programmiere, messen lassen (nach R=U/I), der dann den Wasserstand mit Hilfe von LED's anzeigt.
    Mein wesentliches Problem ist aber, wie ich Spannungen und Ströme mit dem ATmgea8 messen kann.

    Ich hab schon etwas gegoolged und fast etwas gefunden:
    Auf http://www.mikrocontroller.net/tutorial/equipment.htm heißt es:
    "Der Port C (PC0-PC5) spielt beim AT90S4433/Atmega8 eine Sonderrolle: mit diesem Port können Analog-Spannungen gemessen werden. Aber dazu später mehr!"

    Es gibt aber später nicht mehr dazu. Auf anderen Seiten wird immer wieder gesagt, dass ich PORTA verwenden soll. Ich habe aber keinen Port A!
    Was muss ich machen, um Spannungen an diesen Ports messen zu können????
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken sensor_131.jpg  

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470
    Hallo Mercator ,
    es geht doch einfacher:

    Die 2 Drähte sind aus widerstandsdraht, je höher das Wasser umso kleiner der Wid.,je tiefer das Wasser umso größer der Wid.

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Also ich finde diese Messung schwierig, weil Salzgehalt etc. den Wert des Wasserwiderstands verändern. Ich würde es einfach so machen, dass ich einen Transistor hinter einen Kontakt hänge, und den Transistor dann an den Mega8. Es wird also Digital gemessen. Jeder Kontakt ist dann unabhängig vom anderen. Dann ist es fast Egal wie hoch der Wasserwiederstand ist.

    MFG Moritz

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    38
    Beiträge
    4.255
    Auf anderen Seiten wird immer wieder gesagt, dass ich PORTA verwenden soll. Ich habe aber keinen Port A!
    bei einem mega8 liegt der ad-wandler, wie deine erste quelle richtig angibt, auf port C, und es gibt (aufgrund pinmangel) keinen port A.
    bei den größerern avrs (m16, m32) ist jedoch der Port A vorhanden und beinhaltete den ad-wandler....


    ansosnten würd ich auch raten die signale digtial auszuwerten und an jede elektrode nen kleinen transsitor zu hängen... ist zuverlässiger und auch einfacher zu programmieren...

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.08.2004
    Ort
    Stuttgart
    Alter
    49
    Beiträge
    851
    Ich würde deinen Ansatz mit der Wasserleitfähigkeit nochmals überdenken. Es gibt eine wesentlich bessere Methode um einen Wasserstand zu ermitteln. Im Prinzip baut man sich einen langen rohrförmigen und nach außen isoierten Messfühler auf. Deiser hat innen eine Elektrode und außen das Rohr als zweite Elektrode. Die beiden Fühler die koaxial innenander sind haben eine Isolierschicht und es kann der Wasserstand ermittelt werden. Diei Isolierschicht verhindert eine leitfähige Verbindung über das Wasser. Somit ist die Wassersäule im Rohr das Dielektrikum das diesen im Prinzip gesehenen Kondensator in seiner kapazitiven Eigenschaft verändert. Wenn man nun diesen Kondensator an einem Schwingkreis betreibt stellt sich eine Frequenz ein die je nach Wasserstand anders sein wird weil sich der C-Anteil verändert. Durch Frequenz oder Periodendauermessung kann man nun den Füllstand genau messen.

    Grüße Wolfgang

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.04.2004
    Alter
    35
    Beiträge
    119
    Ich würde es einfach so machen, dass ich einen Transistor hinter einen Kontakt hänge, und den Transistor dann an den Mega8.
    Das Problem dabei ist, dass das Kabel, das in den Brunnen führt leider nur 2 Adern hat. Wäre es anders, dann wäre deine Idee natürlich die bessere Lösung.

    Somit ist die Wassersäule im Rohr das Dielektrikum das diesen im Prinzip gesehenen Kondensator in seiner kapazitiven Eigenschaft verändert. Wenn man nun diesen Kondensator an einem Schwingkreis betreibt stellt sich eine Frequenz ein die je nach Wasserstand anders sein wird weil sich der C-Anteil verändert. Durch Frequenz oder Periodendauermessung kann man nun den Füllstand genau messen.
    Klingt toll, ist mir aber zu kompliziert.


    Mein eigentliches Problem ist aber noch, wie ich das analoge Signal am Port C mit C (also Port C mit der Sprache C) abrufen kann. Vielleicht kennt ihr ein paar gute Quellen dafür.

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.08.2004
    Ort
    Stuttgart
    Alter
    49
    Beiträge
    851
    Wenn es dir zu komplex ist, warum machst du es dann nicht mit einen mehrgang-Poti an das du eine Schnurrolle schraubst udn eine Schnur die an einen Schwimmer im Brunnen geht. Dann kannst es mit einem Spannungsteiler Schalten udn bekommst meinetwegen eine analoge Spannung von 0-5V udn fertig

    Grüße Wolfgang

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.04.2004
    Alter
    35
    Beiträge
    119
    Jaja. Kann man alles machen, doch es geht mir hier weniger um den Sensor, sondern eher darum, wie man Spannungen mit C vom Port C ausliest.

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.08.2004
    Ort
    Stuttgart
    Alter
    49
    Beiträge
    851
    Zitat Zitat von Mercator
    Jaja. Kann man alles machen, doch es geht mir hier weniger um den Sensor, sondern eher darum, wie man Spannungen mit C vom Port C ausliest.
    Mit C kann ich dir momentan auch nicht sonderlich weiterhelfen da ich nur Assembler und Bascom benutze. Ich kann dir nur die prinzipielle Nutzung eines AD-Converters im ATMEGA sagen. Zum einen muß AREF beispilesweise auf +5V liegen genauso wie auch die AVCC auf +5V liegen muß. Wenn das passt kann der 10-Bit ADC schonmal 0-5V messen. Da es natürlich nur einen ADC gibt der gemultiplext ist mit einer Art Wahlschalter auf acht Messeingänge muß zuerst der Port an dem gemessen werden soll definiert sein im Register. Genauso muß zuerst die Referenzspannungsquelle definiert werden. Also im Normalfall AREF. Dazu mußt du im Register ADMUX &B00xxxxxx schreiben. Um z.B. Den ADC1 an PortC zu lesen eben noch die Adresse (binär) im Register ADMUX setzen. Wenn Kanal 1 gemessen werden soll ist das eben &Bxxxx0001.
    Da der ADC normal defaultmäßig erst mal abgeschaltet ist muß man den natürlich einschalten. Das geschieht über Register ADCSRA und den Wert &B1xxxxxxx. Jetzt ist der ADC mal soweit vorbereitet und du kannst im selben Register mit &Bx1xxxxxx die AD-Wandlung anstoßen. die braucht dann eben je nach Bitbreite der AD-Wandlung (8- oder 10-Bit) verschieden lang. 10-Bit braucht eben 4 mal länger wie 8-Bit udn normal bei 4-Bit eben so 60µs. Das Bit bleibt nun auf 1 bis er fertig ist. Wenn dann eben das Bit auf 0 ist kann man die Werte vom ADC abholen. Der ADC hat ein 16-Bit Register, also mußt du zweimal 8-Bit abholen. Wenn du das nicht machst startet der ADC nicht mehr. Das High-Register ist das Register ADCH und entsprechend das Low-Register (das bei 8-Bit benötigt wird) ADCL. Diese beiden Register müssen dann nacheinander eben zuerst ADCL und dann ADCH gelesen werden. Erst wenn ADCH gelesen wurde geht der AD-Wandler wieder in Bereitschaft für eine neue Messung. Mehr Infos findest du aber im Datenblatt des ATMEGA mit allen Registerfunktionen.

    Grüße Wolfgang

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von Andree-HB
    Registriert seit
    10.12.2004
    Ort
    Bremen
    Alter
    54
    Beiträge
    2.806
    In meinem Wohnmobil ist es im Frischwassertank so gelöst, indem in einem Rohr mehrerere ReedKontakte mit Widerständen geschaltet sind, die durch einen äusseren Magnetschwimmerring je nach Wasserstand geschaltet und ausgewertet werden. Diese Lösung lässt zwar nur eine stufige Anzeige zu, ist aber völlig ausreichend und vor Allem absolut alterungsbeständig.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen