Forum: Mikrocontroller und Digitale Elektronik Mega 16 ADC 2,56V


von Tom (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

vielleicht kann mir einer von euch helfen.
Ich bekomme den ADC mit Interner 2,56V Referenz einfach nicht zum
Laufen.
Ich weiß nicht ob ich einen Fehler im Code oder in der Beschaltung
habe.
Ich habe den AREF offen gelassen (unbeschaltet) und die VACC mit einer
Spule und einem Kondensator beschalten.
Braucht AREF einen Kondensator? Im Datenbaltt auf Seite 215 steht da so
was in der Richtung. Wobei ich auch schon einen 100uF gegen Masse
eingebaut habe mit keinem Erfolg.
Wenn ja wogegen gegen 5V oder gegen Masse?

Vielleicht habe ich ja auch  einen Fehler im Code?

Er tut nämlich mit dem 5V interne Referenz
ADMUX |=   _BV(REFS0);  //=> Anzeige 304


nur mit
ADMUX |=   _BV(REFS1) | _BV(REFS0);   // => Anzeige 1023
gibt er immer 1023 aus

Danke an alle die mir helfen wollen

Grüße

Tom

von Tom (Gast)


Lesenswert?

noch schnell die beschaltung

CU

Tom

von Tom (Gast)


Lesenswert?

aber jetzt

von Tom (Gast)


Lesenswert?

tut mir leid aber er frisst auch keine GIF Dateien :(

Grüße

Tom

von johnny.m (Gast)


Lesenswert?

100µF sind ein bisschen happig. 100nF (gegen AGND natürlich) sollten
dicke ausreichen.

Interrupts sollte man nicht mit INTERRUPT einleiten, es sei denn, man
ist aus irgendwelchen Gründen drauf angewiesen, dass die ISR
unterbrochen werden kann. SIGNAL(SIG_ADC) ist die bessere Lösung (oder
die neue Version von WINAVR mit ISR(ADC_vect)).

Warum liest Du Low- und High-Byte getrennt aus? Dafür gibts extra das
16-Bit-Register ADC oder ADCW.

Zum eigentlichen Problem: Was für einen Wert legst Du überhaupt an den
Eingang an? Wenn der größer als 2,56 V ist, kriegste natürlich immer
1023...

von A.K. (Gast)


Lesenswert?

Eine Kleinigkeit, die mit dem Problem eher nicht zu tun hat: Beim
ADC-Start wird verkehrt versucht, das IF zu löschen.

von johnny.m (Gast)


Lesenswert?

So wie ich das sehe ist das Löschen von ADIF korrekt! Interrupt Flags
werden bei AVR gelöscht, indem man eine '1' hineinschreibt!

von johnny.m (Gast)


Lesenswert?

OK, weiter unten isses tatsächlich verkehrt!

von johnny.m (Gast)


Lesenswert?

Daran könnte es auch liegen... Wenn das IF nicht gelöscht ist, gibts
keinen neuen Interrupt und damit immer nur den ersten Wert. Also ändern
und neu versuchen!

von Tom (Gast)


Lesenswert?

Hallo,
danke erst mal für eure Antworten
@johnny.m
ADMUX |=   _BV(REFS0);  //=> Anzeige 304
es liegen also 1,48v am Eingang

@ A.K.
Beim ersten test lesen soll noch kein IRQ ausgelöst werden. Das ist nur
zum Initialisieren des ADC (aus dem Tut)
anschließend schon also auf 0 setztnen.

Angeschlossen ist ein Temperatursensor der auch sauber unter 5 V auf
Wärme reagiert nur eben nicht genau genug.

Danke trotzdem

Grüße

Tom

von A.K. (Gast)


Lesenswert?

ADCSRA &= _BV(ADIF);

Nochmal: Das ergibt keinen Sinn. Das setzt zwar ein gesetztes IF auch
schön zurück, aber löscht so nebenbei auch alle anderen Bits. Schaltet
also den ADC gleich ganz aus.

von Tom (Gast)


Lesenswert?

Hallo,

ups ja Du hast recht es muss natürlich lauten:
ADCSRA &= ~(_BV(ADIF));  // ADIF löschen um Interrupt zu sehen

Komisch ist nur dass seit ich den Bug korregiert habe die Konvertierung
schneller abläuft.

Der Fehler hatte aber trotzdem keinen Einfluss weil im Code eine Zeile
darunter alle Bits wieder gesetzt werden.

Wenn ich AREFF mit AVCC brücke dann bekomme ich wieder die Werte der 5V
Konvertierung

Ist der Kondensator AREF <-> GND wirklich nötig ?

Ist vielleicht der ATMEL hinüber ? Wie gesagt alles geht wenn ich mit
5V Referenz arbeite.

Danke

Tom

von A.K. (Gast)


Lesenswert?

ADCSRA &= ~(_BV(ADIF));  // ADIF löschen
ADCSRA |= _BV(ADIF);     // ADIF löschen

Meinst du nicht, dass nur eine der beiden Varianten stimmen kann?

Ist aber nicht wirklich wichtig, weil das ADIF schon durch den
Interrupt selbst gelöscht wird.

"Komisch ist nur dass seit ich den Bug korregiert habe die
Konvertierung schneller abläuft."

Nicht wirklich komisch. Der ADC taktet sonst nämlich nicht mehr mit
/128 sondern mit /2. Wasweissich was da passiert.

"Ist der Kondensator AREF <-> GND wirklich nötig ?"

Nö. Atmel schreibt das aus reiner Bosheit ins Datasheet. Sollte aber
tatsächlich nur wenig am Ergebis ändern.

von A.K. (Gast)


Lesenswert?

"AREFF mit AVCC brücke"

Bei auf AREF geschalteter interner Referenz? Ich würde nicht drauf
wetten wollen, dass die sowas überlebt.

Übrigens kann man die Referenzspannung nachmessen. An AREF.

von Tom (Gast)


Lesenswert?

Hallo,

ich habe mir gerade nochmals das Datenblatt durchgelesen.
Ja ich muss Dir recht geben. Da hatte ich einen Denkfehler. Leider
ändert der nichts am Ergebnis ich kann immer noch nicht die 2,56V
Reverenz benutzen
Ach so warum ich so ungläubig war, was soll ich sagen mit 5V tut´s!!
nur eben nicht mit 2,5 und ich habe jetzt wirklich alles durch alle
Variationen des ADIF Bit und alle Variationen des REFS1 REFS0

Immer mit dem gleichen Ergebnis 5v tut 2,56 tut nicht nur wenn ich 5V
auf die Referenz AVREF brücke liest er wieder Die 5V Typischen 279
Nach meiner Rechnung 5V / 1024 * 279 = 1,3V also sollte es auch nicht
zu viel sein.

so für Heute ist Feierabend.
 Danke nochmals für Deine Hilfe

ein gute Nacht

Tom

von Tom (Gast)


Lesenswert?

Hallo,

hat mir die ganze nacht keine Ruhe gelassen. habe gerade den Mega
getauscht und siehe da es tut.
Nochmals Danke an alle die mir geholfen haben

Grüße

Tom

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.