Moin,
ich hab ein Programm, welches bei einem Tastendruck (Hardwaremäßig
entprellt) den Spannungswert eines Potis wandeln soll und dann ADCH über
Usart an den PC (putty) senden soll.
Im Prinzip funktioniert die Schaltung, jedoch frage ich mich, warum nur
auf dem letzten Millimeter vom regelbaren Bereich des Potis ein Wert >0
erfasst wird.
Das Poti ist an Masse und AREF angeschlossen, der ADC hat seine 100nF
Kondensatoren, das übliche halt.
Es handelt sich um ein lineares Poti, mit Multimeter nachgemessen.
Weiß jemand Rat?
mfg,
Nils
Hier der Code:
Curby schrieb:> Das Poti ist an Masse und AREF angeschlossen, der ADC hat seine 100nF> Kondensatoren, das übliche halt.
Wenn es nicht funktioniert, immer genau angeben, was wo angeschlossen
ist (und nicht nur 'das übliche').
Aber an AREF soll doch nur ein Kondensator angeschlossen werden. Wenn Du
die Referenzspannung belastest, wird sie verändert und das ganze
funktioniert nicht. Also das Poti an Masse und VCC anschließen.
Volkmar
AREF mit Impedanzwandler puffern und erst dann an Poti. Aber da du
warscheilich kein so genaues Ergebnis brauchst gehts wohl auch wenn du
VCC an das Poti anschließt.
Ich hab gemeint, dass ich die genaue Beschaltung wie hier im Tutorial
verwendet habe. Statt der Spule einen 47Ohm Widerstand.
Genauso wurde da gesagt, dass wenn ich quasi die Stellung des Potis
ermitteln möchte, ich dieses an AVCC anschließen soll. Tut mir leid ich
hab es eben mit AREF in der Schnelle verwechselt.
Curby schrieb:> Ich hab gemeint, dass ich die genaue Beschaltung wie hier im Tutorial> verwendet habe.
Soso.
> Statt der Spule einen 47Ohm Widerstand.
Wenn das GENAU ist, dann will ich nicht wissern, was bei dir UNGEFÄHR
oder ANNÄHERND GLEICH bedeuten könnte...
Mach mal ein Foto von deinem Aufbau.
Du kannst z.B. auch einfach mal am Portpin messen, welche Spannung da
anliegt. Und dann mit den Formeln im Datenblatt zurückrechnen, ob das
passen kann.
"Die 10uH Spule L1 kann man meist auch durch einen 47 Ohm Widerstand
ersetzen."
Klingt für mich auch soweit in Ordnung. Ich baue ja keinen Kurzschluss
oder so.
Nochmal zusammenfassend:
Ich verwende den Aufbau wie im Tutorial mit beschriebenem 47Om
Widerstand, statt Spule. Dann habe ich einen entprellten Taster, bei dem
auf Druck eine Wandlung durchgeführt wird und über Usart an putty
gesendet wird. Dort lese ich dann auch tatsächlich einen Wert zwischen
00000000 und 11111111.
Nur eben ist dieser Wert nur größer 0, auf dem letzten Millimeter des
Potis. Das Poti ist linear und mit Multimeter durchgemessen.
Das Poti geht an AVCC, GND und mit dem Mittelpin an PortA0.
Die grundlegende Schaltung scheint zu funktionieren, Usart sendet, der
Taster entprellt und auf Tastendruck, wird die Aktion durchgeführt. Aber
warum ist die Wandlung so .. ungenau?
Ich kann jetzt nochmal meinen Aufbau durchgehen, dennoch erwarte ich,
dass bei dem Tutorialaufbau, eine halbwegs vernünftige Wandlung
durchgeführt wird.
Ich werde demnächst mal messen, ob die anliegenden Spannungen alle
messen, das habe ich tatsächlich noch nicht gemacht.
mfg
Nils
Curby schrieb:> "Die 10uH Spule L1 kann man meist auch durch einen 47 Ohm Widerstand> ersetzen.">> Klingt für mich auch soweit in Ordnung. Ich baue ja keinen Kurzschluss> oder so.
Ich weiß ja nicht welchen AVR Du verwendest, aber beim Mega8 z.B. ist
AVcc nicht nur die Stromversorgung für den ADC, sondern auch für den
gesamten Port C. Da würde ich nicht auf die Idee kommen, 47 Ohm in die
Plusleitung zu hängen. Dann lieber ein Stück Draht, einen Kurzschluss
baust Du damit nicht.
...
Ich benutze den Atmega16. Ich hatte das auch schonmal mit Drahtbrücke
aufgebaut, da war das Ergebnis das Gleiche, habe ich aber auch nicht
anders erwartet :(.
Na und?
Die Kennlinie eines Poti endet nicht bei Null am linken Anschlag,
sondern bei einem Restwert.
Auf den letzten mm des Schleiferweges ist immer noch ein Stück Kohlebahn
bis zur Anschlussniete des Poti. In diesem Bereich hat man einen
konstanten Widerstand. Auch der Widerstand des Schleifers, ein
Kohleinsatz in der Metallfeder, trägt eventuell zu diesem Restwert bei.
Außerdem: Wie groß ist "ungenau"? ein bit, zwanzig bit, hundert bit des
Wandlungsbereichs?
MWS schrieb:> Curby schrieb:>> DDRA = 0xFF;>> Korrektur, als Ausgang zu beschalten :D
Vielen dank, stimmt jetzt wo ich PORTA0 als Eingang aktiviert habe und
die Wandlergeschwindigkeit etwas heruntergesetzt habe, funktioniert der
ADC bestens :D.
Danke dafür.