Forum: Mikrocontroller und Digitale Elektronik versch. Werte vom ADC trotz gleicher Schaltung (mega 8)


von Joachim (Gast)


Lesenswert?

Hallo,

ich hätte da folgendes Problem:

Auf meinem Evaluationboard habe ich mit dem Mega8 einen Sensorwert über 
den ADC1 eingelesen. EWs handelt sich dabei um einen Temperatursensor, 
der im Spannungsteiler an R1 hängt. R2 hat einen etwas kleineren Wert, 
damit ich sicher sein kann, dass ich nie über meine Referenzspannung 
(interne 2,56V) komme (der Spannungsteiler hängt an 5V).

Der ADC hat dabei gut akzeptable Werte einegelesen, die man dann leicht 
verarbeiten konnte.

Ich habe dann die Schaltung mal ordentlich auf eine Platine aufgebaut. 
Einziger Unterschied ist, dass ich den kleinen Mega8 (SMD) genommen habe 
und dass der ADC nicht meht ADC1, sondern ADC0 ist. Ziemlich irrelevant, 
denke ich.

Nur habe ich jetzt das Problem, bei dem selben Programmcode liest mir 
der ADC kaum noch Differenzwerte vom Sensor ein.
Um Zahlenwerte zu nennen:
Vorher hatte der 10bit AD-Spannungs-Wert bei 20...35°C eine Differenz 
von 70 und jetzt gerade von 5.

Bin da sehr ratlos, kann auch keine weiteren Informationen geben, da die 
Schaltungen sonst identisch sind.

von Joachim (Gast)


Angehängte Dateien:

Lesenswert?

Habe hier mal den Schaltplan.

Der Tempsensor befindet sich an JP2 zwischen 3 und 4.
(Und VCC habe ich nachträglich noch angeschlossen.)

von vorbeigeschlendert (Gast)


Lesenswert?

wo hängt AVcc?

von Andreas Haimberger (Gast)


Lesenswert?

AVCC hängt in der Luft. Da gehört noch eine 10 uH-Drossel zwischen AVCC 
und VCC, siehe Datenblatt Seite 200.

von vorbeigeschlendert (Gast)


Lesenswert?

ich wollte ihn eigentlich noch ein bisschen zappeln lassen... ;-)

von Joachim (Gast)


Lesenswert?

Mein Plan hat das unterschlagen. Habe eben auf der Schaltung 
nachgemessen und AVCC ist an 5V verbunden.

von Pascal Möller (Gast)


Lesenswert?

Was für eine Drossel muss den da ran? Bei reichelt gibt es ja ne Menge 
und ich hab noch nicht so wirklich die Ahnung davon.

von Joachim (Gast)


Lesenswert?

Habe jetzt das Problem doch im Programmcode gefunden.
Ich hatte das Port daneben auf Ausgang definiert und dort 5V ausgeben 
lassen. Diese haben scheinbar den ADC-Eingang kapazitiv beeinflusst. Bei 
meinen Entwicklerboard betreibe ich den MEGA8 im DIP Format. Da sind die 
Beinchen weiter auseinander, desswegen war hier der Einfluss scheinbar 
nicht so groß.

Eine Drossel zwischen VCC und AVCC habe ich nicht verschalten.
Habe auch im Moment den 100müF Kondensator von AREV nach GND noch nicht 
drin und alles funktioniert bestens.

von Werbungverschmäher (Gast)


Lesenswert?

> Eine Drossel zwischen VCC und AVCC habe ich nicht verschalten.

besser wär's aber

> Habe auch im Moment den 100müF Kondensator von AREV nach GND noch nicht
> drin und alles funktioniert bestens.

Da gehören 10nF bis 100nF Keramik rein, keine 100 Mikrofarad Elko

von Joachim (Gast)


Lesenswert?

Habe mich verschrieben...ein 0.1 Mikrofarad SMD Kondensator ist 
bestellt.

von Werbungverschmäher (Gast)


Lesenswert?

> Habe mich verschrieben...ein 0.1 Mikrofarad SMD Kondensator ist
> bestellt.

Die nehme ich auch immer

von Joachim (Gast)


Lesenswert?

Ist meine Erklärung für das Problem eigentlich plausibel ? Was anderes 
als die kapazitive Auswirkung des nebenliegenden Pins ist mir nicht 
eingefallen.

von Werbungverschmäher (Gast)


Lesenswert?

Eigentlich nicht, denn statische Gleichspannung koppelt nicht kapazitiv. 
Da müsste schon eine ohmsche Verbindung bestehen.

MFG

von Joachim (Gast)


Lesenswert?

Naja...wenn ich z.b. einen bestimmten AD Wandler kontaktiert habe und 
dort Spannung messe, in der Software aber den AD Wandler am Pin daneben 
angebe und dieser in der Luft hängt, dann kann ich da durchaus auch 
Spannugswerte an diesem messen.

von Sonic (Gast)


Lesenswert?

Das Übersprechen findet im MUX statt, da dieser sehr kleine Abstände der 
Eingänge hat. Wenn man alle acht Kanäle der Reihe nach abfragt und an 
ADC0 meinetwegen 2V legt, dann werden sich die folgenden Kanäle auf fast 
dieses Niveau hochschaukeln.

von Werbungverschmäher (Gast)


Lesenswert?

Schon richtig, wenn ADC-Eingänge offen sind, kann das passieren.

Hier soll aber ein benachbarter Ausgang (mit statischem Pegel!) einen 
korrekt beschalteten (also nicht offenen!) Eingang beeinflusst haben, 
und das halte ich für sehr sehr unwahrscheinlich.

MfG

von Sonic (Gast)


Lesenswert?

Da er geschrieben hat dass jetzt ADC0 und nicht mehr ADC1 abgefragt 
wird, schätze ich mal dass er immernoch ADC1 im Code abfragt und nur das 
Übersprechen vom ADC0 misst. Ist mir auch schon passiert, kann man graue 
Haare kriegen!

von Werbungverschmäher (Gast)


Lesenswert?

Joooaaaahhhhh....... - Passiert im Gedränge auf'm Frauenklo.....

;-)

MfG

von crazy horse (Gast)


Lesenswert?

ich denke eher, dass es mit dem internen pullup zu tun hat, der war 
vorher für PortA.1 eingeschaltet, und jetzt nicht ausgeschaltet.
Nur ne Vermutung, aber da ja Software i.a. hoch geheim ist, bleibt uns 
ja nichts als Rätselraten.

von Joachim (Gast)


Angehängte Dateien:

Lesenswert?

Ok...werde dann meine geheime Patentsoftware doch mal preisgeben...

von Joachim (Gast)


Angehängte Dateien:

Lesenswert?

und nochmal den überarbeiteten Schaltplan...

von Axel R. (Gast)


Lesenswert?

1
PORTC=0xff;
2
3
ADMUX|=(0<<MUX0);
4
ADMUX|=(1<<REFS1)|(1<<REFS0);
NEU
1
PORTC=0x00
2
3
ADMUX=0;
4
ADMUX|=(1<<REFS1)|(1<<REFS0);

Es sind die aktivierten Pullups am ADC, würde ich sagen.

Schaltplan? falsches File ;-))

von crazy horse (Gast)


Lesenswert?

sag ich doch :-)

von Joachim (Gast)


Angehängte Dateien:

Lesenswert?

Hier der Schaltplan...

Das mit den Pullups klingt logisch. Werd die Ursache die Tage mal 
genauer erforschen.

Danke für die Hilfe !

von Sonic (Gast)


Lesenswert?

>ADMUX|=(0<<MUX0);
         ^
Das wird wohl nicht funktionieren! ADMUX|=(1<<MUX0); wenn du das bit 
MUX0 setzen willst, ADMIX = 0; wenn du den MUX auf 0 (ADC0) setzen 
willst.

von Sonic (Gast)


Lesenswert?

Ups, meinte natürlich ADMUX, nicht ADMIX!
Löschen eines bits: ADMUX &= ~(1<<MUX0);

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.