mikrocontroller.net

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


Autor: Tom (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
noch schnell die beschaltung

CU

Tom

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aber jetzt

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tut mir leid aber er frisst auch keine GIF Dateien :(

Grüße

Tom

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: A.K. (Gast)
Datum:

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

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, weiter unten isses tatsächlich verkehrt!

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.