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.
Habe hier mal den Schaltplan. Der Tempsensor befindet sich an JP2 zwischen 3 und 4. (Und VCC habe ich nachträglich noch angeschlossen.)
AVCC hängt in der Luft. Da gehört noch eine 10 uH-Drossel zwischen AVCC und VCC, siehe Datenblatt Seite 200.
ich wollte ihn eigentlich noch ein bisschen zappeln lassen... ;-)
Mein Plan hat das unterschlagen. Habe eben auf der Schaltung nachgemessen und AVCC ist an 5V verbunden.
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.
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.
> 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
Habe mich verschrieben...ein 0.1 Mikrofarad SMD Kondensator ist bestellt.
> Habe mich verschrieben...ein 0.1 Mikrofarad SMD Kondensator ist > bestellt. Die nehme ich auch immer
Ist meine Erklärung für das Problem eigentlich plausibel ? Was anderes als die kapazitive Auswirkung des nebenliegenden Pins ist mir nicht eingefallen.
Eigentlich nicht, denn statische Gleichspannung koppelt nicht kapazitiv. Da müsste schon eine ohmsche Verbindung bestehen. MFG
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.
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.
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
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!
Joooaaaahhhhh....... - Passiert im Gedränge auf'm Frauenklo..... ;-) MfG
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.
Ok...werde dann meine geheime Patentsoftware doch mal preisgeben...
und nochmal den überarbeiteten Schaltplan...
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 ;-))
Hier der Schaltplan... Das mit den Pullups klingt logisch. Werd die Ursache die Tage mal genauer erforschen. Danke für die Hilfe !
>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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.