PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit ADC



rub
15.01.2007, 08:37
Hallo,

Ich habe bereits im Forum gesucht, jedoch nichts gefunden, was mein Problem beschreiben würde.

Also das Problem ist, das ich auf allen Port-Pinns eine Spannung von c.A. 0,2 V habe.

Vor allem beim Port A stört mich das.
An die Pinns des Port A will ich Themperatursensoren anschließen und diese über den Analogwandler auslesen.

Habe mich erst gewundert, wiso ich bei diesen einen Wert von 1021 - 1023 heraus bekomme und dann festgestellt, dass ich auf den nicht angeschlossenen Pinns Werte von 150 bis 300 erhalte.

Abblockkondensatoren habe ich mehr als genügend (2 * 100 uf) angeschlossen. Meine Eingangsspannung wurde auch geglättet.

Die drei Spannungsanschlüsse meines ATMEGA16 (Dil 40) sind alle miteinander verbunden, genau wie die Masse auch überall miteinander verbunden ist.

Die Platine ist auch absolut ok. Ich kann die Spannung auch messen, wenn ich die Pinns von den Ports nach oben biege und diese dann keine Verbindung mehr mit dem Bord haben.

Ach ja, habe es auch mit einem zweiten Atmega16 probiert, ändert aber nichts.

Ich hoffe Ihr könnt mir helfen.

Hubert.G
15.01.2007, 11:57
Wie hast du die Ports programmiert, wie sieht deine Beschaltung sonst aus. Vielleicht kannst du Schaltung und Code hier posten, dann kann man eher was sagen.

Hubert

ogni42
15.01.2007, 12:00
Portpins müssen für ADC auf Eingang programmiert sein. AVcc muss von Vcc über LC Glied entkoppelt werden.

rub
15.01.2007, 12:32
<- AVcc muss von Vcc über LC Glied entkoppelt werden.

Was meinst Du damit ?

Habe hier gerade keinen Quellcode etc. vorliegen, aber der ist eigentlich das Bsp. aus der Bascom-Hilfe.

Schaltung ist hier aus dem Tutorial AVR-Einstieg leicht gemacht.

SprinterSB
15.01.2007, 12:36
Wie treibst du die Ports denn?

Nicht angeschlossene Ports sollte man entweder aktiv als Ausgang oder als Eingang mit Pullup betreiben, um floatende Eingänge zu vermeiden.

An einem Ausgang, der auf LOW treibt, wird man keine 0V messen, das ist durch die Hardware bedingt.

Um das Potential eines high-Z Eingangs zu messen, brauchst du ein V-Meter mit einem Eingangswiderstand ab dem G&Omega;-Bereich.

rub
16.01.2007, 08:15
Habs hinbekommen, indem ich mal alle Ports auf Eingang gesetzt habe und an dem Pin, an dem der Sensor hängt, habe ich einen 1,5k Wiederstand als Pullup gesetzt.

ogni42
16.01.2007, 08:26
Die Schaltung aus dem "AVR Einstieg leicht gemacht" ist OK um ein bisschen herum zu spielen. Du wirst damit aber keine stabilen ADC Messungen bekommen. Insbesondere nicht, wenn Du noch Timer, PWM etc. benutzt.

Die LC Entkopplung steht im Datenblatt zum jeweiligen AVR Chip und hier in etlichen Threads.

niedon
01.05.2007, 19:12
Hi!

Ist ja schon etwas älter der Thread, aber ich les mich grad hier im Forum etwas zur AD-Wandlung schlau und da hab ich grad mal eine Frage:


Portpins müssen für ADC auf Eingang programmiert sein. AVcc muss von Vcc über LC Glied entkoppelt werden.

Wie genau ist denn das mit den Portpins gemeint?

Mal zu meinem derzeitgen Projekt:

Ich muss für ein Projekt ebenfalls eine Temperaturmessung durchführen, läuft über ein Thermoelement mit AD595 (Kaltstellenkompensation). Jedenfalls hab ich das Signal am Mega16 am PA0.
Die anderen 3 Ports benutze ich als Ausgänge für LCD etc.. Das LC-Glied habe ich auch an AVCC.
Ich kann leider nur alle 2 Wochen ins Labor und habe mir zu Hause eine Testschaltung aufgebaut. Da mir der AD595 aber zu teuer ist, hab ich lediglich ein 10k Poti am PA0. Damit funktioniert die Messung und Anzeige zumindest wunderbar.
Nun ist es mit dem analogen Temperatursignal aber sicherlich kritischer !? Soll der Satz oben heißen, dass ich den PORTA vorher noch als Eingang definieren sollte? Ich dachte das geschieht automatisch wenn man den ADC freigibt.

Hier mal meine bisherigen Maßnahmen:

- LC-Glied
- 100nF zwischen AREF und GND
- Mittelwert aus 256 Messwerten nehmen (im Programm)

Reicht das aus, um eventuelle Störungen zu minimieren oder habe ich etwas entscheidendes vergessen / falsch gemacht?

Danke schonmal

linux_80
01.05.2007, 19:43
Hallo niedon,

es muss nur der Pin auf Eingang, mit dem gemessen wird, also hier PA0, nicht der ganze Port. Die anderen, nicht für ADC genutzten Pins, können für was andres auch Ausgänge genutzt werden.

Man muss den Pin selber auf Eingang stellen, der ADC verbindet nur intern den Pin mit dem ADC, egal ob dieser evtl. auch auf Ausgang steht !
In diesem Fall kommt dann entweder 0 oder 1023 raus, je nach dem wie der Ausgang geschaltet ist.

Warum es trotzdem geht, nach dem Reset des AVR sind immer alle Pins auf Eingang. Sicherheitshalber sollte man trotzdem den Pin per Programm auf Eingang stellen, damit keine unvorhergesehenen Fehler auftreten.