Forum: Mikrocontroller und Digitale Elektronik ATMega128A ADC misst falsch


von Frank X. (matrixx200x)


Lesenswert?

Hallo,

ich habe ein Problem mit meinem ATMega128A.

Folgendes Problem der ADC misst nicht richtig b.z.w. wandelt die 
Eingangsspannung nicht richtig um.

Fakten:

Es wird die interne RefSpg verwendet die ist auch da gemessen am vref.
je kleiner die Spannung am adc ist desto genauer ist er aber die 
Abweichungen beginnen ab 10mv und der adc zeigt bei 4.2V schon 1023 an 
obwohl 5V als refspg vorhanden ist und er dieses erst bei vrefmax tun 
sollte.

Beispiel 2.5V müssten ca 512 sein die der ADC als wert liefert in meinem 
Fall liefert der ADC den wert von 690.
und das auf jedem ADC Eingang ob nun beschaltet oder nicht.

Beschaltet sind die ADC Eingänge mit einem 10K und dahinter ein 39K auf 
Masse und einem 100nF vom ADC Eingang auf Masse.

Die ganze Beschaltung und auch das Programm läuft auf einem ATMega32A 
ohne Probleme ( natürlich mit den entsprechenden Anpassungen der Ports )

Jetzt habe ich halt nur meine Schaltung geändert auf einen ATMega128A 
und der ADC misst nicht linear.
Im Datenblatt wir das als GAIN ERROR bezeichnet, aber es wir keine 
Lösung für das Problem genannt.

Daher meine Frage an euch wisst ihr eine Lösung oder ist es einfach nur 
ein fehlerhafter ATMega128A Chip.

Die ADC Routine ( siehe unten )ist die vom ADC Tutorial aber daran kann 
es nicht liegen dann der ATMega32A misst mit der Routine alles richtig.


Vielleicht fällt euch ja was ein mir fällt nix mehr ein ausser den Chip 
mal zu tauschen oder wieder zurück auf den ATMega32A zu gehen.

Danke im voraus.
1
#define ADCDDR DDRF
2
#define ADCPIN PINF
3
4
5
void ADC_Init(void)
6
{
7
  ADMUX |= (1<<REFS0);                // Set reference to AVcc
8
  ADCSRA |= (1<<ADPS0)|(1<<ADPS1)|(1<<ADPS2);     // Set prescaler to 128
9
                            
10
  ADCSRA |= (1<<ADEN);              // ADC aktivieren
11
  
12
  
13
  /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
14
     also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
15
 
16
  ADCSRA |= (1<<ADSC);                  // eine ADC-Wandlung 
17
  while (ADCSRA & (1<<ADSC) ) {         // auf Abschluss der Konvertierung warten
18
  }
19
  /* ADCW muss einmal gelesen werden, sonst wird Ergebnis der nächsten
20
     Wandlung nicht übernommen. */
21
  (void) ADCW;
22
}
23
24
25
26
27
/* ADC Einzelmessung */
28
uint16_t ADC_Read( uint16_t channel )
29
{
30
  //setinput(channel);
31
  // Kanal waehlen, ohne andere Bits zu beeinflußen
32
  ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
33
  ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
34
  while (ADCSRA & (1<<ADSC) ) {   // auf Abschluss der Konvertierung warten
35
  }
36
  return ADCW;                    // ADC auslesen und zurückgeben
37
}

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Florian W. schrieb:
> Die ADC Routine ( siehe unten )ist die vom ADC Tutorial aber daran kann
> es nicht liegen dann der ATMega32A misst mit der Routine alles richtig.
Dann liegt der Fehler evtl. im nicht geposteten Code...
Wird bei diesem Test immer nur der selbe Kanal gewandelt? Oder wird da 
zwischendurch noch ein anderer Kanal z.B. mit 0V gewandelt?

> Es wird die interne RefSpg verwendet die ist auch da gemessen am vref.
Hast du einfach mal andere Modi für die Referenzspannung ausprobiert?
Hast du das ADMUX-Register ausgelesen, ob da wirklich die Werte drin 
sind, die du möchtest?

BTW:
Der erste Zugriff in der Initialisierung sollte eine direkte Zuweisung 
sein. Kein Read-Modify-Write. Oder andersrum: welchen Wert hatte ADMUX 
vorher?
1
void ADC_Init(void)
2
{
3
  ADMUX |= (1<<REFS0);                // Set reference to AVcc
4
  :
5
  :

von holger (Gast)


Lesenswert?

AVCC angeschlossen?

von Michael K. (aemkai)


Lesenswert?

> Es wird die interne RefSpg verwendet die ist auch da gemessen am vref.
vs.
> obwohl 5V als refspg vorhanden ist

Die interne Ref ist 2,56 V, laut Code nimmst du AVCC (je nachdem 5V), wo 
kommen die 5V her bzw. wie sauber sind diese?
Ist ein C am VREF-Pin?

von Frank X. (matrixx200x)


Lesenswert?

@ Lothar Miller

Im eigentlich gesammt Programm werden 5 ADC Eingänge abgefragt.

Ich habe aber nachdem der Fehler von mir festgestellt wurde alle 
auskommentiert so das nur noch ein ADC abgefragt wird und das Ergebnis 
ohne irgendeine Berechnung direkt ausgegeben wird.


Bezüglich der ersten zugriff.

Ich habe mich an das Tutorial
AVR-GCC-Tutorial/Analoge Ein- und Ausgabe 
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Analoge_Ein-_und_Ausgabe
gehalten.

Nein habe das ADMUX-Register nicht ausgelesen.

Und wie schon geschrieben alles funktioniert auf einem ATMega32A mit der 
selben Schaltung mit dem selben Programm.


@ Holger
Ja AVCC = Versorgungsspannung( wie im Datasheet beschrieben mit 
Kondensator gegen Masse und 10µH gegen VCC = 5V


@ Michael K.

Du hast natürlich recht das war mein Fehler.

Ich meine natürlich Referenz = AVCC with external capacitor at AREF pin

Bezüglich sauber 5V also sauber genug das es mit dem ATMega32A läuft und 
mit dem ATMega128A nicht.
Hatte bis jetzt mit den erzeugten 5V noch kein Probleme aber der Fehler 
tritt auch auf wenn die 5V vom Programmer kommen.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Miss mal die Spannung am ARef Pin mit einem Voltmeter. Der ADC liefert 
als Zahlenwert das Verhaeltnis der Eingangsspannung zu ARef. Wenn der 
Zahlenwert daher deiner Meinung nach zu hoch ist fuer die 
Eingangsspannung, dann bleibt als Schlussfolgerung nur noch, dass dein 
Aref nicht so hoch ist wie du glaubst. Ergo: nachmessen!

von Michael K. (aemkai)


Lesenswert?

also hast du auch extern einen Stütz-C (z.B. 100nF) am AREF?
(Ich hab's noch nie ohne versucht und weiß nicht wie kritisch die ADCs 
diesbezüglich sind, aber beim samplen wird die Referenz mit belastet, 
bricht diese kurz ein, kann das theoretisch auch zu größeren Werten 
führen)

: Bearbeitet durch User
von Frank X. (matrixx200x)


Lesenswert?

Michael K. schrieb:
> also hast du auch extern einen Stütz-C (z.B. 100nF) am AREF?
> (Ich hab's noch nie ohne versucht und weiß nicht wie kritisch die ADCs
> diesbezüglich sind, aber beim samplen wird die Referenz mit belastet,
> bricht diese kurz ein, kann das theoretisch auch zu größeren Werten
> führen)

Was habe ich oben geschrieben ( 3 Beiträge vorher) ?

Ja AVCC = Versorgungsspannung( wie im Datasheet beschrieben mit 
Kondensator gegen Masse und 10µH gegen VCC = 5V

@Karl Heinz

Habe ich im anfangs  Beitrag auch geschrieben habe halt nur verwechsel 
interne referenz mit Referenz = vcc
Habe den ARef Pin gemessen liegen genau 5v an wie auch die vcc Spannung 
ist.

Und nochmals diese Schaltung funktioniert mit einem ATMega32A ohne 
Probleme.
Ergo kann es an der Schaltung nicht liegen.
Sonst würde es mit einem 32iger auch nicht funktionieren oder??

: Bearbeitet durch User
von Klugscheiß (Gast)


Lesenswert?

Frank äußerte um 15:57:
> Was habe ich oben geschrieben ( 3 Beiträge vorher) ?
> Ja AVCC = Versorgungsspannung( wie im Datasheet beschrieben mit
> Kondensator gegen Masse und 10µH gegen VCC = 5V

Wenn ich richtig lese steht da nur ein Zitat aus dem Datenblatt
"AVCC with external capacitor at AREF pin",
nichts von "Kondensator gegen Masse" und 10µH

Ebenso bzgl. nachmessen:
Im ersten Beitrag stand "Es wird die interne RefSpg verwendet die ist 
auch da gemessen am vref.", aber nicht was und wieviel du gemessen hast 
(schon garnicht "genau 5v" und das ist nämlich das, was Karl-Heinz 
meinte.

Aber wenn du so intelligent bist und es dir leisten kanns auf Hilfe so 
altklug zu reagieren dann hilf dir auch selbst :-)

von Felix P. (fixxl)


Lesenswert?

Kann es vielleicht sein, dass die nicht funktionierende Schaltung mit 
einem anderen Takt läuft als die funktionierende? Wurde bei der 
Umstellung eventuell vergessen, die Fuses des neuen Controllers 
anzupassen? Der ADC will ja mit einer Taktrate zwischen 50 kHz und 200 
kHz laufen.

Von deinen ADC-Prescaler-Einstellungen ausgehend würde ich auf einen 16 
MHz-Takt tippen, aber sagen das auch die Fuses?

von Karl H. (kbuchegg)


Lesenswert?

Frank W. schrieb:

> Und nochmals diese Schaltung funktioniert mit einem ATMega32A ohne
> Probleme.
> Ergo kann es an der Schaltung nicht liegen.
> Sonst würde es mit einem 32iger auch nicht funktionieren oder??


Aber an irgendwas muss es liegen.

Gain Error in allen Ehren. Aber bei erwarteten 512 ist ein Ergebnis von 
690 kein Gain Error sondern irgendein handfestes Problem. Über eines bin 
ich mir allerdings ziemlich sicher: das Problem liegt nicht in der 
internen Hardware des Mega128. Wenn du anstelle von erwarteten 512 ein 
Ergebnis von 510 hast oder 514, ok. Aber nicht 690.


Mega128. Die M103 Kompatibilitätsfuse hast du abgeschaltet?

: Bearbeitet durch User
von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Frank W. schrieb:
> Ich meine natürlich Referenz = AVCC with external capacitor at AREF pin
                                 ^^^^                         ^^^^^^^

Du hast also AREF an AVCC angeschlossen? Habe ich das richtig 
verstanden?

von Frank X. (matrixx200x)


Lesenswert?

Klugscheiß schrieb:
> Frank äußerte um 15:57:
>> Was habe ich oben geschrieben ( 3 Beiträge vorher) ?
>> Ja AVCC = Versorgungsspannung( wie im Datasheet beschrieben mit
>> Kondensator gegen Masse und 10µH gegen VCC = 5V
>
> Wenn ich richtig lese steht da nur ein Zitat aus dem Datenblatt
> "AVCC with external capacitor at AREF pin",
> nichts von "Kondensator gegen Masse" und 10µH
>
> Ebenso bzgl. nachmessen:
> Im ersten Beitrag stand "Es wird die interne RefSpg verwendet die ist
> auch da gemessen am vref.", aber nicht was und wieviel du gemessen hast
> (schon garnicht "genau 5v" und das ist nämlich das, was Karl-Heinz
> meinte.
>
> Aber wenn du so intelligent bist und es dir leisten kanns auf Hilfe so
> altklug zu reagieren dann hilf dir auch selbst :-)


Bei dem Namen ..... Ist jeder Kommentar überflüssig.

Den Rest beantworte ich wenn ich zu Hause bin.!

von Frank X. (matrixx200x)


Lesenswert?

Frank M. schrieb:
> Frank W. schrieb:
>> Ich meine natürlich Referenz = AVCC with external capacitor at AREF pin
>                                  ^^^^                         ^^^^^^^
>
> Du hast also AREF an AVCC angeschlossen? Habe ich das richtig
> verstanden?

----------------->
Ja AVCC = Versorgungsspannung( wie im Datasheet beschrieben mit 
Kondensator gegen Masse und 10µH gegen VCC = 5V

von spess53 (Gast)


Lesenswert?

Hi

Du hast die letzte Frage vom Karl-Heinz:

>Mega128. Die M103 Kompatibilitätsfuse hast du abgeschaltet?

nicht beantwortet. Die M103-Fuse gibt es auch beim ATMega128A und ist im 
Lieferzustand eingeschaltet.

MfG Spess

von Frank X. (matrixx200x)


Lesenswert?

Felix P. schrieb:
> Kann es vielleicht sein, dass die nicht funktionierende Schaltung mit
> einem anderen Takt läuft als die funktionierende? Wurde bei der
> Umstellung eventuell vergessen, die Fuses des neuen Controllers
> anzupassen? Der ADC will ja mit einer Taktrate zwischen 50 kHz und 200
> kHz laufen.
>
> Von deinen ADC-Prescaler-Einstellungen ausgehend würde ich auf einen 16
> MHz-Takt tippen, aber sagen das auch die Fuses?


Nein die Schaltung mit dem ATMega32A läuft mit der selben Frequenz ( 
richtig 16MHz )
Fuse sind eingestellt auf ext Quarz
Oder meinst du andere Fußes.
Die M103 Kompatibilität ist ausgeschaltet mit läuft die ganze Schaltung 
nicht b.z.w. das Display zeigt nix an.

@ Karl Heinz
Auf den Rest gehe ich ein wenn ich zu Hause bin.
Auf dem Handy schreiben ist mist.

: Bearbeitet durch User
von Michael K. (aemkai)


Lesenswert?

@ Frank W.
Du hast die Frage nicht ganz verstanden, Frank M. meinte, ob du AVCC von 
außen auf den AREF Pin gelegt hast?
> Frank M. schrieb:
>> Du hast also AREF an AVCC angeschlossen? Habe ich das richtig
>> verstanden?

Sollte aber auch nciht das Problem sein, wenn intern korrekt auf AVCC 
geschaltet ist.

Was steht eigentlich in der Variable "channel"? Ist ausgeschlossen, dass 
du differentiell misst?

von Joachim B. (jar)


Lesenswert?

Frank W. schrieb:
> Nein habe das ADMUX-Register nicht ausgelesen.

Das hier sagt was anderes:

Frank W. schrieb:
> void ADC_Init(void)
> {
>   ADMUX |= (1<<REFS0);

|= ist read modify also vorher Auslesen und danach Schreiben

wolltest du das?

void ADC_Init(void)
{
  ADMUX = (1<<REFS0);

das wäre echte Zuweisung ohne voriges Auslesen

Frank W. schrieb:
> Und nochmals diese Schaltung funktioniert mit einem ATMega32A ohne
> Probleme.

bevor wir weiter rumrätseln wäre ein Plan deines Aufbaus hilfreich, 
nicht irgendeiner aus dem Netz sondern ein echter von dir aufgebauter.

Frank W. schrieb:
> Es wird die interne RefSpg verwendet die ist auch da gemessen am vref.
> je kleiner die Spannung am adc ist desto genauer ist er aber die
> Abweichungen beginnen ab 10mv und der adc zeigt bei 4.2V schon 1023 an
> obwohl 5V als refspg vorhanden ist

das wäre technisch unmöglich, da ist ein dicker Bug drin, die 1023 
können bei 4,2V nur dann angezeigt werden wenn AREF 4,2V hat, du 
schreibst aber:

Frank W. schrieb:
> Es wird die interne RefSpg verwendet die ist auch da gemessen am vref

welche?

ich kenne keine 4,2V Ref

Entweder ist AREF = AVCC = VCC oder AREF ist 1,1V 2,56V gibt es noch 
andere interne?

Frank W. schrieb:
> ATMega128A

hier finde ich nur
Internal reference voltages of nominally 2.56V or AVCC are provided 
On-chip. The voltage reference may be
externally decoupled at the AREF pin by
a capacitor for better noise performance.

wenn also intern 2,56V gewählt ist wundert mich 1023 nicht bei 4,2V

die 1023 dürften aber auch schon bei 2,6V gezeigt werden.

Lothar M. schrieb:
> Der erste Zugriff in der Initialisierung sollte eine direkte Zuweisung
> sein.

mal ne Frage sollte der erste ADC read nicht ein Dummy Read sein?

Ich erinnere mich an ältere ADC die erst nach einem Dummy Read beim 
nächsten Mal richtig lieferten.
Ich erinnere mich auch an Einschwingen also ich mache immer zuerst ein 
Dummyread, wenn er überflüssig sein sollte, schaden tut er nur selten im 
setup, ausser es muss nach dem Start sofort losgehen, aber das ist 
selten, meist hat der µC ja genügend Zeit nach dem power ON. Ob das 
power ON 1 10 oder 100ms dauert ist ja oft nicht entscheidend und wenn 
doch darf ich noch mal darüber nachdenken.

von Karl M. (Gast)


Lesenswert?

Hallo,

ich denke es ist auch wichtig zu Fragen, wie hoch die Eingangsimpedanz 
der Spannungsquelle ist.
Und wie gut die Versorgungsspannung.
Iet evtl. Vcc = USB +5V ?

von Joachim B. (jar)


Lesenswert?

Karl M. schrieb:
> ich denke es ist auch wichtig zu Fragen, wie hoch die Eingangsimpedanz
> der Spannungsquelle ist.
> Und wie gut die Versorgungsspannung.
> Iet evtl. Vcc = USB +5V ?

guter Hinweis,ist VCC nur angenommen 5V und in Wirklichkeit aus dem USB 
mit nur 4,2V?

Das würde einiges erklären, die Infos vom TO sind dünne.

Frank W. schrieb:
> Ja AVCC = Versorgungsspannung( wie im Datasheet beschrieben mit
> Kondensator gegen Masse und 10µH gegen VCC = 5V

gemessen oder vermutet?
ich kenne sehr selten nur 5,00V da ist entweder 5,1V oder 4,99V oder 
4,85V

bei derlei Worten

Frank W. schrieb:
> Ja AVCC = Versorgungsspannung( wie im Datasheet beschrieben mit
> Kondensator gegen Masse und 10µH gegen VCC = 5V

denke ich nicht an Messung sondern die 5V nur vermutet.

Frank W. schrieb:
> Ich meine natürlich Referenz = AVCC

aha und wenn AVCC 4,2V hat?

: Bearbeitet durch User
von spess53 (Gast)


Lesenswert?

Hi

>mal ne Frage sollte der erste ADC read nicht ein Dummy Read sein?

>Ich erinnere mich an ältere ADC die erst nach einem Dummy Read beim
>nächsten Mal richtig lieferten.

Das interessiert den Gasmann.

Ich bin seit über 15 Jahren mit ATMega103/ATMega128 und ATMega1281 
unterwegs. Und die tun alle was sie sollen.

MfG Spess

von Frank K. (fchk)


Lesenswert?

Wenn es Dir an einer Referenz mangelt, nimm doch einfach einen MCP1541, 
dessen Ausgang Du an AREF anschließt. Der gibt genau 4.096V aus, d.h. 
bei Deinem AVR entspricht dann eine Einheit genau 0.004V. Wegen der 
einfachen Umrechnung nimmt man solche Referenzen.

http://ww1.microchip.com/downloads/en/DeviceDoc/21653C.pdf

Den Dummy-Read am Anfang haben andere Leute schon erwähnt.

fchk

von Frank X. (matrixx200x)


Lesenswert?

So @ home

jetzt will ich mal versuchen alles auf zu arbeiten. :-)

@ Karl Heinz

M103 Kompatibilitätsfuse ist ausgeschaltet ja.

Ich habe die aufgebaute schalten mehrfach kontrolliert.
Daher ja auch die Vermutung in meinem eingangs Post das der ATMega einen 
weg hat.

@ Michael K.

ja da habe ich mich verlesen sorry

also
AVCC = Versorgungsspannung( wie im Datasheet beschrieben ) mit
Kondensator gegen Masse und 10µH gegen VCC = 5V

http://www.atmel.com/Images/Atmel-8151-8-bit-AVR-ATmega128A_Datasheet.pdf
Seite 228.

Und AREF ist mit einem 100nF gegen masse geschaltet.

Die Variable Channel ist das was das Wort sagt sie enthält die Nummer 
welcher ADC 0-5 in meinem Fall ausgelesen wird.


@ Joachim B.

Es findet doch eine Dummy Messung statt im ADC_Init !!
Zu den anderen Anmerkungen von dir ich habe meinen Fehler aus dem ersten 
Post richtig gestellt und gesagt ich benutze AVCC with external 
capacitor at AREF pin. :-)

VCC ist 5V ziemlich genau GEMESSEN mit mehreren Multimeter und auch mit 
dem Oszilloskop.
wobei der der Fehler der auftritt nicht damit zusammenhängen kann ob nun 
4.95V oder 5.1V anliegen weil der Referenzpunkt sich mit ändert und 
zwischen 4.2V und 4.95V oder 5.1V doch ein Riesen unterschied ist.
Und wenn nicht ganz auf den kopp gefallen bin sollte der ADC erst dann 
1023 anzeigen wenn am Eingang des zu messenden ADC die selbe Spg anliegt 
wie auch die Referenzspannung ist.

Achso und noch was bitte unterlasse Unterstellungen wie
" denke ich nicht an Messung sondern die 5V nur vermutet"

Wenn ich schreibe gemessen dann meine ich das auch.
Ich muss so was nicht vermuten den dafür gibt es Messgeräte.
AVCC hat keine 4.2V ( siehe 2 Absätze vorher !!! )


@  Karl M

Zur Eingangsimpedanz:

Beschaltet sind die ADC Eingänge mit einem 10K und dahinter ein 39K auf
Masse und einem 100nF vom ADC Eingang auf Masse. ( hatte ich auch 
geschrieben im ersten Post :-P )


@ Frank K.

Nein es mangelt mir nicht an der Referenz. :-)
Aber trotzdem danke für den tip.

Wie schon mehrfach erwähnt die selbe Schaltung läuft mit einem ATMega32A 
ohne Problem nur mit diesem ATMega128A nicht.
Da ich die Schaltung schon mehrfach kontrolliert und gemessen habe bevor 
ich hier meine frage gestellt habe.
Sollte ich auf der Seite eigentlich ( kann natürlich durch Blindheit der 
Schaltung immer mal was übersehen )kein Fehler vorliegen.

Daher ja auch die Vermutung das der ATMega einen weg hat.
Und ich fragte halt bevor ich mir die Arbeit mache und ihn austausche.
Hätte ja sein können das jemand so was schon mal hatte und mir dazu 
hätte was sagen können.

Und natürlich danke ich auch allen die sich daran beteiligen.

von Joachim B. (jar)


Lesenswert?

Frank W. schrieb:
> Achso und noch was bitte unterlasse Unterstellungen wie
> " denke ich nicht an Messung sondern die 5V nur vermutet"
>
> Wenn ich schreibe gemessen dann meine ich das auch.

hier wird soviel geschrieben, noch mehr gemeint und 5V habe ich bei mir 
noch auf keinen meiner Messgeräte (ca. 15 Stück) gesehen, von daher darf 
ich alles vermuten und auch unterstellen.

wenn du 5V gemessen hast nenne doch 2 Nachkommastellen so du im 1% 
Bereich misst, vielleicht misst du auch mit einem 6,5-stelligen auch da 
würden 2 Nachkommastellen reichen, aber wie soll man 5V zu gemessen 
übersetzen?

: Bearbeitet durch User
von Karl M. (Gast)


Lesenswert?

Hallo Frank W.,

danke für die Zusammenstellung der Fragen - Antworten.

Hast Du schon mal eine 1,5V Batterie neben den 100nF direkt an einen 
ADC- Eingang angeschlossen.

Da sollte in etwas ADC-Wert 307 herauskommen.

Dann würde ich noch je eine Messung gegen
a) die 1,23V Bandgrap Referenz
MUX4:0 = [11110] 1.23V (V BG)

b) die 0V an AGND
MUX4:0 = [11111] 0V (GND)

machen.

Wie hoch war die ADC-Wandlergeschwingigkeit bzgl. der CPU-Taktfrequenz ?

von Frank X. (matrixx200x)


Angehängte Dateien:

Lesenswert?

Karl M. schrieb:
> Hallo Frank W.,
>
> danke für die Zusammenstellung der Fragen - Antworten.
>
> Hast Du schon mal eine 1,5V Batterie neben den 100nF direkt an einen
> ADC- Eingang angeschlossen.
>
> Da sollte in etwas ADC-Wert 307 herauskommen.

>
> Wie hoch war die ADC-Wandlergeschwingigkeit bzgl. der CPU-Taktfrequenz ?

Habe ich grad mal gemacht es kommen 383 als ADC-Wert

ADC-Wandlergeschwingigkeit sind 16MHz  128 prescaler  125kHz.


Ich habe mal die Beschaltung der ATMega im Anhang beigefügt.

Wie man sieht  ist da nicht viel angeschlossen.
Von daher sind Fehler die man machen kann überschaubar.
Und ich konnte wie gesagt keine entdecken.

von Frank X. (matrixx200x)


Lesenswert?

So Update...


Ich habe den Fehler gefunden.

Auf der Platine hatte der AREF immer die VCC Spannung um die 5V.

Habe jetzt aber festgestellt das irgendwie das Beinchen vom ATMEGA 
keinen richtigen Kontakt hatte weil am Beinchen lagen nur um die 4.2 V.
Bin auch nur durch Zufall drauf gestoßen als ich die spg messen wollte 
und plötzlich hatte ich richtige werte.. kam dadurch das ich das druck 
auf das Beinchen gegeben habe und es damit richtigen Kontakt hatte..

Dämlicher Fehler mit großer Wirkung aber steckt man manchmal nicht drin.

Was dann natürlich alles erklärt falsche Referenz falsche werte wenn man 
mit um die 5V rechnet.

Beinchen nach gelötet und siehe da alles löppt. freu..

Ich danke euch allen..

Ich gehe jetzt in bett

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Frank W. schrieb:
> Habe jetzt aber festgestellt das irgendwie das Beinchen vom ATMEGA
> keinen richtigen Kontakt hatte
Ja, ganz oft ist bei solchen zähen Fehlern die Ursache nicht in den 
gelieferten Informationen zu finden.
Es hat also ein brauchbares und scharfes Foto der Leiterplatte gefehlt. 
vermutlich hätte man darauf die schlechte Lötstelle gesehen...

> weil am Beinchen lagen nur um die 4.2 V.
Aus diesem Grund darf man Versorgungen nie "auf der Platine" 
nachkontrollieren, sondern es muss immer am Beinchen des ICs selbst 
gemessen werden (oder wenigstens so nah wie möglich daran). Denn mit 
dieser Fehlmessung sind natürlich auch die oben beharrlich gelieferten 
Informationen "Avcc=5V" bzw. "Vcc=5V" flasch und irreführend.

von wendelsberg (Gast)


Lesenswert?

Frank W. schrieb:
> Habe jetzt aber festgestellt das irgendwie das Beinchen vom ATMEGA
> keinen richtigen Kontakt hatte weil am Beinchen lagen nur um die 4.2 V.

Ach.

Frank W. schrieb:
> Achso und noch was bitte unterlasse Unterstellungen wie
> " denke ich nicht an Messung sondern die 5V nur vermutet"
>
> Wenn ich schreibe gemessen dann meine ich das auch.
> Ich muss so was nicht vermuten den dafür gibt es Messgeräte.
> AVCC hat keine 4.2V ( siehe 2 Absätze vorher !!! )

Also doch nicht ganz so.
Was lehrt uns das? Nie fragen: "Hast Du das nachgemessen?"
Immer fragen: "Welchen Wert hat ...?", und beim leisesten Zweifel 
nachfragen wo genau gemessen wurde und welcher Wert genau gemessen 
wurde.

wendelsberg

von Joachim B. (jar)


Lesenswert?

Frank W. schrieb:
> Ich habe den Fehler gefunden.
> Auf der Platine hatte der AREF immer die VCC Spannung um die 5V.
> Habe jetzt aber festgestellt das irgendwie das Beinchen vom ATMEGA
> keinen richtigen Kontakt hatte weil am Beinchen lagen nur um die 4.2 V.

und warum hast du mich hier angemault?

Frank W. schrieb:
> @ Joachim B.
> VCC ist 5V ziemlich genau GEMESSEN mit mehreren Multimeter und auch mit
> dem Oszilloskop.
>
> Achso und noch was bitte unterlasse Unterstellungen wie
> " denke ich nicht an Messung sondern die 5V nur vermutet"
>
> Wenn ich schreibe gemessen dann meine ich das auch.
> Ich muss so was nicht vermuten den dafür gibt es Messgeräte.
> AVCC hat keine 4.2V ( siehe 2 Absätze vorher !!! )

Q.E.D.

von Michael K. (aemkai)


Lesenswert?

Frank W. schrieb:
> Auf der Platine hatte der AREF immer die VCC Spannung um die 5V.
Also doch extern auf der Platine angeschlossen?!
Dann noch ADMUX auf externe Ref. umstellen oder die Verbindung auf der 
Platine zu den 5 V noch beseitigen falls du mal auf interne Referenz 
etc. umstellen willst oder wie hier einfach nur ADMUX falsch einstellst 
(was dir aber auch schon x-mal gesagt wurde.)
Das führt dann zu dem Effekt, dass
> am Beinchen lagen nur um die 4.2 V.

Ein Spannungswert, der eigentlich nicht vorkommen sollte und vmtl. eine 
Mischung aus der internen 2,56 V Referenz und den extern angelegten 5 V 
ist

: Bearbeitet durch User
von Frank X. (matrixx200x)


Lesenswert?

Michael K. schrieb:
> Frank W. schrieb:

> Also doch extern auf der Platine angeschlossen?!

Klar habe jedes mal geschrieben wie es beschaltet ist eine Induktivität 
und einen Kondensator kann ich schlecht intern anbauen :-P

> Dann noch ADMUX auf externe Ref. umstellen oder die Verbindung auf der
> Platine zu den 5 V noch beseitigen falls du mal auf interne Referenz
> etc. umstellen willst oder wie hier einfach nur ADMUX falsch einstellst
> (was dir aber auch schon x-mal gesagt wurde.)
> Das führt dann zu dem Effekt, dass
>> am Beinchen lagen nur um die 4.2 V.

Nein der ADMUX war nicht Falsch eingestellt.
Das Problem war wie schon beschrieben eine nicht korrekte Lötstelle vom 
AREF Beinchen was aber nicht zu ersehen war.

So für mich ist damit das Thema abgeschlossen.

Ich danke allen nochmal.

@ Mods

Thread kann gelöscht werden.

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

@Frank W
> Thread kann gelöscht werden.
Threads werden hier nur gelöscht, wenn sie insgesamt unsachlich sind. 
Alle anderen bleiben der Nachwelt erhalten...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

WasStimmtHierNicht? schrieb im Beitrag #4224079:
> WasStimmtHierNicht?
Hallo, ihr drei Einen: in den paar wenigen Forenregeln steht recht klar, 
dass man in 1 Thread nur mit 1 Namen teilnehmen darf.
https://www.mikrocontroller.net/articles/Hilfe:Forum_Nutzungsbedingungen

Dass die Aussagen sich teilweise widersprechen und stellenweise keinen 
Sinn ergeben, dürfte einfach einem etwas unkoordinierten Vorgehen bei 
der Fehlersuche geschuldet sein.

Natürlich können bei der Beschaltung entsprechend dem Datenblatt niemals 
am Aref Pin 5V anliegen, wenn sonst an keinem Pin des Controllers (und 
schon gar nicht an Avcc) 5V anliegen.

: Bearbeitet durch Moderator
von threads (Gast)


Lesenswert?

Das Threads erhalten bleiben ist auch sehr hilfreich.

Hab ihn komplett gelesen und gelernt, daß nur ein wahres Messen auch 
wahre Werte bringt.
Beteuerungen wie: ist so ... , hab ich ... , so ist es verschaltet ...

Eigentlich sehr oft für die Katz, weil sie nur den Wunsch und die 
Vorstellung des Bastlers wiedergeben. Die Realität ist oft anders. 
Danke.

von Frank X. (matrixx200x)


Lesenswert?

Um das nochmal klar zu stellen ich habe die angebenden Werte gemessen.
Nur ich habe am TQFP Package nicht direkt oben am Chip am Beinchen 
gemessen sonder direkt dort wo es gelötet war.

Und dort lagen am AREF um die 5V(für die ganz genauen hier) an nur kam 
das das nicht am Chip an wegen der nicht zu ersehenenden fehlerhaften 
Lötverbindung.

Von daher ja man sollte in Zukunft direkt am Chip messen.

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Frank W. schrieb:
> Und dort lagen am AREF um die 5V(für die ganz genauen hier) an nur kam
> das das nicht am Chip an wegen der nicht zu ersehenenden fehlerhaften
> Lötverbindung.
Das wäre dann für den geposteten Code ja sogar der korrekte Aufbau:
1
If no external voltage is applied to the AREF pin, the user may switch 
2
between AVCC and 2.56V as reference selection.
Und du hast ja AVCC ausgewählt:
Frank W. schrieb:
>>>> ADMUX |= (1<<REFS0);                // Set reference to AVcc
Wenn der AREF nicht angelötet ist, aber du die Referenz auf Avcc 
stellst, dann sollte das trotzdem funktionieren. Denn das wäre dann 
dieser Modus:
1
REFS1 REFS0 Voltage Reference Selection
2
0    1      AVCC with external capacitor at AREF pin
Der AVCC Pin war ja angelötet. Und ob der erwähnte Kondensator dran ist 
oder nicht, macht nur ein paar Zappler auf dem MSB aus...

Mich würde der Schaltplan und der Code dazu interessieren. Denn wenn 
eine Spannung am AREF angelegt wird, dann darf NUR der Aref-Pin als 
Quelle ausgewählt werden. Und das wäre dieser Modus:
1
REFS1 REFS0 Voltage Reference Selection
2
0     0     AREF, Internal Vref turned off


Sie es wie es will. Das Fazit ist: wenn man die Schaltung richtig 
aufbaut, dann funktioniert auch der uC. Und spätestens, wenn etwas nicht 
funktioniert, sollte man das Datenblatt genauer ansehen...

: Bearbeitet durch Moderator
von Bastler (Gast)


Lesenswert?

Aref wird aber vom AVR "versorgt" und sollte nur mit C 100n gegen Masse 
verschaltet sein. Es war also eine "schlechte" Lötstelle im Spiel, die 
0,8 V generiert hat. Da wundert man sich!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Bastler schrieb:
> Aref wird aber vom AVR "versorgt"
Wie war das mit dem Datenblatt?
1. Man darf AREF mit einer Referenzspannung im Bereich von 0V..Vcc 
"versorgen". Nur darf man dann nicht AVCC oder die internen 2,56V als 
Referenz auswählen.

2. Wäre nichts am AREF Pin angeschlossen (z.B. weil der nicht angelötet 
ist), dann könnte man AVCC als Referenz auswählen, und dann käme diese 
Spannung AVCC am AREF-Pin zum Vorschein.

Im 2. Fall wäre es besser, wenn ein Pufferkondensator am AREF-Pin 
angeschlossen wäre. Es muss dort aber keiner engschlossen sein. Es 
hätte auch so funktionieren müssen...

von WasstimmtHierNicht (Gast)


Lesenswert?

@Lothar:
Hallo du Einer, bitte bleib sachlich und lösch nicht einfach Beiträge 
mit abstrusen Behauptungen.
Und da ich es eine berechtigte und interessante Frage finde, wie die 4.2 
V jetzt Zustande gekommen sind trotz der "korrekten" Beschaltung durch 
den TE stell ich diese Frage einfach nochmal.

Ansonsten wäre es nett wenn du meinen Beitrag wiederherstellst, weil ich 
gegen keine Regeln verstoßen habe!

von Bastian (Gast)


Lesenswert?

Lothar M. schrieb:
>> Und dort lagen am AREF um die 5V(für die ganz genauen hier) an nur kam
>> das das nicht am Chip an wegen der nicht zu ersehenenden fehlerhaften
>> Lötverbindung.
> Das wäre dann für den geposteten Code ja sogar der korrekte Aufbau:

eben nicht, er hat AVCC intern gewählt aber extern 5 V 
angeschlossen. In dem Fall nicht schlimm, aber auch nicht korrekt, du 
zitierst es ja selbst:
> If no external voltage is applied to the AREF pin
und Frank hat 5V am Pin, die aber am ATMEGA nicht ankommen, also von 
extern anliegen!

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.