Forum: Analoge Elektronik und Schaltungstechnik Spannungsteiler - ADC - Schalter


von Nico (Gast)


Lesenswert?

Hallo,
ich bin gerade dabei mich in die Mikrokontroller einzuarbeiten und stehe 
schon vor einem größeren Problem.
Ich arbeite mit einem ATMega8.

+5V ----------+
              |
             ---
             | |  R(ref)
             | |
             ---
              |
              +------- PC0 (ADC0)
              |
             ---
             | |  R(poti)
             | |
             ---
              |
              .
               \-| (Taster)
              |
             ---
             | |  R(poti)
             | |
             ---
 GND ---------+

Von den 2 Potis nicht verwirren lassen, das spiegelt nur in etwa meine 
Anwendung wieder. R(ref) und beide R(poti) liegen bei mindestens 10k 
Ohm.
Ich möchte eigentlich nur das Verhältnis zwischen R(ref) und R(poti) 
über den ADC bestimmen. Dazu ist das ganze als Spannungsteiler 
aufgebaut. Ohne Taster funktioniert alles problemlos.
Jetzt soll aber eine Messung starten, wenn der Taster gedrückt ist und 
enden, wenn er wieder losgelassen wird.
Nachdem ich mir hier diverse Beispiele zu Tastern angeschaut habe, stehe 
ich aber auf dem Schlauch. Ich habe die Sachen natürlich versucht - 
einen 2. Pin beschaltet und den Pullup ein. Aber das funktioniert ja nur 
wenn keine/geringe Widerstände in meinem Aufbau sind (hab's auch mit 
entsprechend geringeren Widerständen getestet). Bei mehreren kOhm tut 
sich da nix mehr. Ich kann den Taster leider nicht direkt beschalten 
(anwendungsbedingt), sondern muß die Widerstände mitnehmen.

Bin für jeden Ansatz dankbar.

von Joerg W. (joergwolfram)


Lesenswert?

Vielleicht geht es ja mit regelmässigen Messungen. Wenn sich das 
ADC-Ergebnis am oberen Ende des Bereiches befindet (Taster Offen), 
einfach das Ergebnis verwerfen.

Gruß Jörg

von Michael U. (Gast)


Lesenswert?

Hallo,

wenn Deine Anordnung wirklich so ist (es gibt 2x Poti, das verwirrt mich 
doch etwas), geht evtl. eine Variante: wenn der Taster offen ist, dann 
ist der Weg gegen GND hochohmig, sagt zumindest Deine Schaltung. Der ADC 
mißt also 1023. Wenn sichergestellt ist, daß jeder denkbare Potiwert 
beim Drücken des Tasters einen ADC-Wert kleiner als 1023 ergibt 
(Meßbereich mit Rref eben passend einschränken) dann ist das Kriterium 
"Taster gedrückt" eben ADC < 1023 und Taster losgelassen ADC = 1023.

Gruß aus Berlin
Michael

von Nico (Gast)


Lesenswert?

Kurz zu den Poti - es handelt sich dabei im Prinzip um 2 hochohmige 
Leiterbahnen, die parallel zueinander verlaufen und die an bestimmten 
Stellen einfach kurzgeschlossen werden (entspricht dann dem 
Tastendruck). Hoffe damit ist das Rätsel geklärt ;)

Das mit der Abfrage des ADC-Wertes habe ich mir auch schon überlegt, 
erschien mir aber etwas "unelegant".
Ich würde eben gerne erst die Messung auslösen, wenn der Taster gedrückt 
ist und nicht permanent den ADC arbeiten lassen und dann vergleichen.

von ADCler (Gast)


Lesenswert?

@Nico:
Warum muß denn der auslösende Taster am gleichen ADC Port hängen ?
Mach doch folgendes:

Messanordnung:

+5V ----------+
              |
             ---
             | |  R(ref)
             | |
             ---
              |
              +------- PC0 (ADC0)
              |
             ---
             | |  R(poti)
             | |
             ---
              |
              |
             ---
             | |  R(poti)
             | |
             ---
 GND ---------+

Messauslöser:

GND----------+
             |
             .
              \-| (Taster)
             |
             +------ PC1

Pin PC als Eingang mit internem Pullup definieren und dann in einer 
Schleife pollen.
Sobald der Taster gedrückt ist, die ADC Messung starten.
Zu Tastenentprellung usw. gibt es eine Menge in der Codesammlung, schau 
da einfach mal nach.
Theoretisch könntest Du den Taster auch zwischen dem Messaufbau und PC0 
hängen, am besten als Umschalter gegen GND oder Vcc und dann in der 
Messschleife auswerten, ob GND/Vcc oder ein anderer Wert anliegen.
Mit extra Pin ist es aber sinnvoller.

von Michael U. (Gast)


Lesenswert?

Hallo,

@ADCler: geht nach seiner Beschreibung vom Aufbau ja leider nicht.

@Nico: meinst Du, der ADC nutzt sich zu sehr ab? ;)

Keine Ahnung, mit wie schnellen Änderungen Du rechnen mußt, nur als 
Beispiel: ADC im Free Running Mode. Timer IRQ alle 1ms. Wert vom ADC 
holen, Test auf 1023, wenn ja, wieder raus, wenn nein Wert merken und 
Tastenflag "gedrückt" setzen. Oder generell 8 oder 16 Messungen holen, 
Mittelwert bilden, dann Test, "entprellt" gleich und unterdrückt 
Störungen.

Das Hauptprogramm wartet nur auf auf das Tastenflag, greift sich dann 
den Messwert und fertig. Von der ADC-Geschichte bekommt es nichts mit 
und die paar Zyklen in der Timer-IRQ stören auch nicht.

Gruß aus Berlin
Michael

von Nico (Gast)


Lesenswert?

@Michael U.
So hab ich das jetzt auch erstmal gelöst. Funktioniert auch einwandfrei.

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.