Forum: Mikrocontroller und Digitale Elektronik Probleme beim Poti über ADC auslesen


von Thgomas T. (helyxc)


Angehängte Dateien:

Lesenswert?

Hallo zusammen. Ich möchte einen Poti auslesen und auf dem Terminal 
ausgeben.
Das Terminal geht, der Poti geht Hardware-mäßig auch. Die LED auf dem 
Bild Lässt sich mit dem Fader dimmen.

GND ist mit AREF Verbunden.
Der Abgriff vom Poti geht auf den Eingang 0.
Anscheinend hab ich ein Programmier bzw Verkabelungsproblem.
Sieht jemand den Fehler?

Hier der Code:
1
#include <avr/interrupt.h>
2
#include <avr/io.h>
3
#include <stdio.h>
4
5
#define F_CPU 16000000
6
#include <util/delay.h>
7
8
#define BAUD 250000
9
10
11
 #define BAUD_PRESCALLER (((F_CPU / (BAUD * 16UL))) - 1) // Für Terminal
12
13
volatile unsigned char adc_wert;
14
15
16
 //############################################################################
17
 //Terminal Zeug
18
void USART_printS(char* StringPtr){
19
 
20
while(*StringPtr != 0x00){
21
  while(!(UCSR0A & (1<<UDRE0)));
22
    UDR0 = *StringPtr;
23
  StringPtr++;}
24
 
25
}
26
27
void USART_printI(int wert){
28
 
29
 char x[]="\n";
30
 char Ausgabe[5]={0,0,0,0,0};
31
 
32
 itoa(wert,Ausgabe,10);
33
 strcat(Ausgabe,x);
34
 USART_printS(Ausgabe);
35
  
36
}
37
//############################################################################
38
39
40
//############################################################################
41
//AD Werte einlesen
42
ISR (ADC_vect)
43
//############################################################################
44
{
45
46
 
47
  ADCSRA = 0; 
48
  
49
  adc_wert =(unsigned char)(ADC);
50
   
51
  ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE);
52
}
53
54
55
void setup() {
56
57
//ADC initialisieren
58
  ADMUX = (1<<REFS0);
59
  //Free Running Mode, Division Factor 128, Interrupt on
60
  ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE); 
61
62
63
      // UART TERMINAL
64
65
 UBRR0H = (uint8_t)(BAUD_PRESCALLER>>8);
66
 UBRR0L = (uint8_t)(BAUD_PRESCALLER);
67
 UCSR0B = (1<<RXEN0)|(1<<TXEN0);
68
 UCSR0C = (3<<UCSZ00);
69
}
70
71
void loop() {
72
  // put your main code here, to run repeatedly:
73
   
74
    
75
     USART_printI(adc_wert);
76
     _delay_ms(100); 
77
   
78
   
79
 
80
}

von Ratefuchs (Gast)


Lesenswert?

Thgomas T. schrieb:
> Sieht jemand den Fehler?

Welchen Fehler? Wo ist Dein Problem?

von Arduinomann (Gast)


Lesenswert?

Thgomas T. schrieb:
> GND ist mit AREF Verbunden.

Was soll das bewirken bzw was hast du dir dabei gedacht?

Vielleicht malst du lieber mal einen anständigen Schaltplan damit
man dein Chaos verstehen kann.

von Timmo H. (masterfx)


Lesenswert?

Stefan gehört entweder auf deine Referenzspannung oder einfach nur über 
einen Kondensator mit gnd verbunden,aber nicht direkt an gnd

von Thgomas T. (helyxc)


Lesenswert?

Arduinomann schrieb:
> Thgomas T. schrieb:
>> GND ist mit AREF Verbunden.
>
> Was soll das bewirken bzw was hast du dir dabei gedacht?
>
> Vielleicht malst du lieber mal einen anständigen Schaltplan damit
> man dein Chaos verstehen kann.

Habe bewusst ein Foto vom realen aufbau gemacht damit potentielle 
Verdrahtungsfehler enddeckt werden können.

Aber im Endeffekt ist das Poti Zwischen 5V und GND und der Abgriff geht 
auf ADC0 bzw A0 beim Arduino Mega.

Die LED ist ja nur zur Kontrolle da

AREF soll GND als Bezugspotential haben, AVCC ist auf 5V oder ist das so 
nicht richtig.


Mein Fehler ist dass sich nichts tut. Auf auf dem Terminal ist ein 
konstanter Wert von 255

: Bearbeitet durch User
von Hp M. (nachtmix)


Lesenswert?

Thgomas T. schrieb:
> AREF soll GND als Bezugspotential haben,

Aber das heisst nicht, dass du die Referenzspannung kurzschliessen 
sollst.

von Thgomas T. (helyxc)


Lesenswert?

Timmo H. schrieb:
> Stefan gehört entweder auf deine Referenzspannung oder einfach nur über
> einen Kondensator mit gnd verbunden,aber nicht direkt an gnd

Hab jetzt 100nF zwischen AREF und GND. Jetzt ist der Wert vom ADC 
zwischen 67 und 225, je nach Faderposition. Allerdings ist es kein 
lineares faden. Der Wert springt zwischendurch hin und her.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Thgomas T. schrieb:
> Jetzt ist der Wert vom ADC
> zwischen 67 und 225, je nach Faderposition.

ADC ist auch ein 10-bit wert, kein 'unsigned char'. D.h. entweder setzt 
du den ADC auf linksbündig (ADLAR = 1) und liest nur ADCH, oder du lässt 
ADLAR auf 0 und liest ADC als ein uint16_t und arbeitest weiter mit dem 
10-bit Wert.

Wenn du AREF auf externe Referenz stellst, dann kannst du es aufs 
'obere' Ende des Faders stecken, also bei dir auf vermutlich +5V. Oder 
du stellst es per REFS auf VCC intern, dann bleibt nur den 100nF an AREF 
und es wird als Referenz die Versorgungsspannung des MC benutzt.
Nur zum Verständnis: AREF bestimmt das obere Ende des ADC Bereichs - das 
untere Ende ist immer GND.

: Bearbeitet durch User
von Thgomas T. (helyxc)


Angehängte Dateien:

Lesenswert?

Matthias S. schrieb:
> Thgomas T. schrieb:
>> Jetzt ist der Wert vom ADC
>> zwischen 67 und 225, je nach Faderposition.
>
> ADC ist auch ein 10-bit wert, kein 'unsigned char'. D.h. entweder setzt
> du den ADC auf linksbündig (ADLAR = 1) und liest nur ADCH, oder du lässt
> ADLAR auf 0 und liest ADC als ein uint16_t und arbeitest weiter mit dem
> 10-bit Wert.
>
> Wenn du AREF auf externe Referenz stellst, dann kannst du es aufs
> 'obere' Ende des Faders stecken, also bei dir auf vermutlich +5V. Oder
> du stellst es per REFS auf VCC intern, dann bleibt nur den 100nF an AREF
> und es wird als Referenz die Versorgungsspannung des MC benutzt.
> Nur zum Verständnis: AREF bestimmt das obere Ende des ADC Bereichs - das
> untere Ende ist immer GND.

Super danke! Das mit dem 10 Bit Wert war das Problem.

Wenn ich jetzt die Werte über den Fader plotte dann fallen mir 2 Sachen 
auf.

1. Der ganz unterste Wert ist 65, ganz oben ist 996. Gibt es 
schaltungstechnisch eine Möglichkeit das zu "kalibrieren sodass ganz 
unten = 0 und ganz oben = 1023 ist?

2.
Wie im Plot zu sehen ist der Anstieg bei weitem nicht linear. Gerade am 
Anfang und am Ende sind es riesen Sprünge. Wie behebt man das am besten?
Als Fader benutze ich natürliche Lineare. Siehe hier:

https://www.reichelt.de/Schiebepotis/RS60112-LIN10K/3/index.html?&ACTION=3&LA=5000&GROUP=B28&GROUPID=3713&ARTICLE=73865&START=0&SORT=artnr&OFFSET=16

Ich lese auch nur einen Kanal aus, aber das sollte egal sein oder?

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

@  Thgomas Thomas (helyxc)


>Wenn ich jetzt die Werte über den Fader plotte dann fallen mir 2 Sachen
>auf.

Wo denn? WIR sehen nichts, siehe Netiquette

>1. Der ganz unterste Wert ist 65, ganz oben ist 996. Gibt es
>schaltungstechnisch eine Möglichkeit das zu "kalibrieren sodass ganz
>unten = 0 und ganz oben = 1023 ist?

Im Normalfall muss man da nichts machen. Aber es fehlt ein kleiner 
Kondensator, 10-100nF an deinem Analogeingang. Den braucht der ADC beim 
abtasten.

Dann miss mal die Eingangsspannung am ADC mit dem Multimeter bei 
min/max. Möglicherweise ist dein Fader der Übeltäter, der kann 
mechanisch/elektrisch nicht 0V und volle Spannung. Kann man leicht 
messen.

>Wie im Plot zu sehen ist

Ich seh nichts!

> der Anstieg bei weitem nicht linear. Gerade am
>Anfang und am Ende sind es riesen Sprünge.

Wie stellst du sicher, daß deine Eingangsgröße (Faderposition) sich 
gleichmäßig verändert?

: Bearbeitet durch User
von Thgomas T. (helyxc)


Lesenswert?

Falk B. schrieb:
>
>>Wie im Plot zu sehen ist
>
> Ich seh nichts!
>


Sorry Plot vergessen hochzuladen. Wurde nachgeholt. Das mit dem Fader 
check ich

von Falk B. (falk)


Lesenswert?

Was ist deine X-Achse? Hast du dort EXAKT die Position des Faders 
gemessen?

von Thgomas T. (helyxc)


Lesenswert?

Falk B. schrieb:
> Was ist deine X-Achse? Hast du dort EXAKT die Position des Faders
> gemessen?

X ist Zeit, ich hab den Fader gleichmäßig hochgezogen. Ich habe direkt 
den Wert des ADCs geplottet.

Aber es scheint wohl am Fader zu liegen auch die Spannung ist SEHR 
unlinear. Muss man den speziell beschalten?  Ich habs mit einem 2. 
Baugleichen auch getestet. Genauso unlinear
Nach vll 10% des weges ist er schon auf 2.1V das passt auch zum Plot

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Thgomas T. schrieb:
> Aber es scheint wohl am Fader zu liegen auch die Spannung ist SEHR
> unlinear. Muss man den speziell Beschalten oder hab ich vll nen
> schlechten Fader erwischt?

Was hast du denn für einen Widerstandswert gewählt? Das sollten nicht 
viel mehr als 5k sein, ansonsten musst du unbedingt den o.a. kleinen 
Kondensator zwischen ADC Eingang und GND schalten. Mit einem Ohmmeter 
kannst du auch mal sehen, ob der Schleifer des Faders in Mittelstellung 
gegen beide Enden den gleichen Wert hat. Nur, wenn das der Fall ist, 
hast du einen linearen erwischt.

: Bearbeitet durch User
von Thgomas T. (helyxc)


Lesenswert?

Matthias S. schrieb:
> Thgomas T. schrieb:
>> Aber es scheint wohl am Fader zu liegen auch die Spannung ist SEHR
>> unlinear. Muss man den speziell Beschalten oder hab ich vll nen
>> schlechten Fader erwischt?
>
> Was hast du denn für einen Widerstandswert gewählt? Das sollten nicht
> viel mehr als 5k sein, ansonsten musst du unbedingt den o.a. kleinen
> Kondensator zwischen ADC Eingang und GND schalten. Mit einem Ohmmeter
> kannst du auch mal sehen, ob der Schleifer des Faders in Mittelstellung
> gegen beide Enden den gleichen Wert hat. Nur, wenn das der Fall ist,
> hast du einen linearen erwischt.

10k hat er.
hier ist der Link. 
https://www.reichelt.de/Schiebepotis/RS60112-LIN10K/3/index.html?&ACTION=3&LA=5000&GROUP=B28&GROUPID=3713&ARTICLE=73865&START=0&SORT=artnr&OFFSET=16

ADC Eingang ist ADC0, und nicht AREF. richtig?
In der Mittelstellung hat er 2.3V. Wie meinst du gegen beide enden?

Ich hab einmal zwischen GND und Schieber gemessen und einmal zwischen 5V 
und Schieber. Beim letzterem sind es -2.3V

von c-hater (Gast)


Lesenswert?

Thgomas T. schrieb:

> Aber es scheint wohl am Fader zu liegen auch die Spannung ist SEHR
> unlinear.

Böser Verdacht: War eventuell die LED noch irgendwie angeschlossen?

Außerdem gibt es natürlich reichlich Schieberegler mit logarithmischer 
Kennlinie, welche tatsächlich gewollt nichtlinear sind.

von Sascha (Gast)


Lesenswert?

Thgomas T. schrieb:
> Falk B. schrieb:
>> Was ist deine X-Achse? Hast du dort EXAKT die Position des Faders
>> gemessen?
>
> X ist Zeit, ich hab den Fader gleichmäßig hochgezogen. Ich habe direkt
> den Wert des ADCs geplottet.
>
> Aber es scheint wohl am Fader zu liegen auch die Spannung ist SEHR
> unlinear. Muss man den speziell beschalten?  Ich habs mit einem 2.
> Baugleichen auch getestet. Genauso unlinear
> Nach vll 10% des weges ist er schon auf 2.1V das passt auch zum Plot

Audio-Potis sind gern mal logarithmisch.

von Thgomas T. (helyxc)


Lesenswert?

c-hater schrieb:
> Thgomas T. schrieb:
>
>> Aber es scheint wohl am Fader zu liegen auch die Spannung ist SEHR
>> unlinear.
>
> Böser Verdacht: War eventuell die LED noch irgendwie angeschlossen?
>
> Außerdem gibt es natürlich reichlich Schieberegler mit logarithmischer
> Kennlinie, welche tatsächlich gewollt nichtlinear sind.

Die LED ist angeschlossen, warum?

Ja, aber laut Bestellung sind es lineare. Selbst für log. wären die 
Dinger so wie sie jetzt funktionieren Müll da sie bei 10% sofort auf 2V 
springen  dann wieder langsamer machen und dann wieder abgehen. Siehe 
Plot

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Thgomas T. schrieb:
> Die LED ist angeschlossen, warum?

Die verbiegt dir durch ihren Strom natürlich völlig die Kennlinie des 
Faders. Musst du entfernen.

Thgomas T. schrieb:
> Wie meinst du gegen beide enden?

Thgomas T. schrieb:
> Mit einem Ohmmeter
>> kannst du auch mal sehen, ob der Schleifer des Faders in Mittelstellung
>> gegen beide Enden den gleichen Wert hat.

Ich meine, das du den Widerstand des Faders von Schleifer zu beiden 
Enden der Kohlebahn messen solltest (ein Schiebe- als auch ein Drehpoti 
haben sowohl Anfang als auch Ende der Kohlebahn). In Mittelstellung des 
Faders sollten das etwa gleiche Widerstände sein.

Zur Verkabelung: An einem Ende sollte der Fader auf Masse liegen. Das 
andere Ende liegt auf +5V und der Schleifer geht zum ADC0 Eingang.

: Bearbeitet durch User
von Thgomas T. (helyxc)


Lesenswert?

Matthias S. schrieb:
> Thgomas T. schrieb:
>> Die LED ist angeschlossen, warum?
>
> Die verbiegt dir durch ihren Strom natürlich völlig die Kennlinie des
> Faders. Musst du entfernen.
>
> Thgomas T. schrieb:
>> Wie meinst du gegen beide enden?
>
> Thgomas T. schrieb:
>> Mit einem Ohmmeter
>>> kannst du auch mal sehen, ob der Schleifer des Faders in Mittelstellung
>>> gegen beide Enden den gleichen Wert hat.
>
> Ich meine, das du den Widerstand des Faders von Schleifer zu beiden
> Enden der Kohlebahn messen solltest (ein Schiebe- als auch ein Drehpoti
> haben sowohl Anfang als auch Ende der Kohlebahn). In Mittelstellung des
> Faders sollten das etwa gleiche Widerstände sein.
>
> Zur Verkabelung: An einem Ende sollte der Fader auf Masse liegen. Das
> andere Ende liegt auf +5V und der Schleifer geht zum ADC0 Eingang.

Habe die LED entfernt jetzt wirds noch komischer. Nach 5% des Faderwegs 
ist er schon auf 4,5V.

Der Wert ist in der Mitte 4,7kOhm zu beiden seiten hin gemessen.

Irgendwie macht das keinen Sinn für mich.

von c-hater (Gast)


Lesenswert?

Thgomas T. schrieb:

>> Zur Verkabelung: An einem Ende sollte der Fader auf Masse liegen. Das
>> andere Ende liegt auf +5V und der Schleifer geht zum ADC0 Eingang.
>
> Habe die LED entfernt jetzt wirds noch komischer. Nach 5% des Faderwegs
> ist er schon auf 4,5V.
>
> Der Wert ist in der Mitte 4,7kOhm zu beiden seiten hin gemessen.
>
> Irgendwie macht das keinen Sinn für mich.

Für niemanden. Da aber sicher ist, dass die physikalischen Gesetze 
allgemein gültig sind, kann der Fehler nur in deinem Aufbau oder deiner 
Ansteuerung liegen.

Z.B. würde ein fälschlicherweise auf Ausgang mit H-Pegel programmierter 
PortA0 den Effekt recht gut erklären können.

Überprüfen kannst du die Sache sehr leicht mit Hilfe einer Messung der 
Stromaufnahme der Gesamtschaltung. Sehr wahrscheinlich ist die in der 
"unteren" (GND-seitigen) Endlage des Schiebereglers um ein mehrfaches 
höher als in der oberen.

von Minimalist (Gast)


Lesenswert?

Meine Güte, 1x1des Debuggens.
Erstmal die Komponenten isoliert testen. Divide and conquer.

Also. Poti raus und mit dem Multimeter eine Wiederstandskurve aufnehmen.
Dann 5V/0V ans Poti und Spannungskurve aufnehmen.
Passen die zusammen? Passen die zur Kurve am uC?

Wie ist die Spannung am offenen ADC Eingang? (Messen mit MM) wie ist die 
Spannung wenn der Ausgang belastet wird? ( z.b. mit 1k gegen GND)
Grüße
M

von Hannäs (Gast)


Lesenswert?

Für mich macht das sehr viel Sinn:

Dein Fader ist linear, aber da der Fader mit einer Seite auf 5V liegt, 
erreicht er Deine REF schon nach der Hälfte der Strecke.

von Hannäs (Gast)


Lesenswert?

Debug nicht lange, denke lieber. Schließ den Fader auf der 5V-Seite 
einfach statt dessen an REF an

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Hannäs schrieb:
> Schließ den Fader auf der 5V-Seite
> einfach statt dessen an REF an

Ohne Treiber ist AREF viel zu schwach, um eine 10 kOhm Last zu treiben. 
Das wird also nicht gehen. Stattdessem empfehle ich, einfach mal ein 
normales Multimeter mit an den Schleifer anzuschliessen und die Spannung 
beim Schieben zu verfolgen. Das muss ja in der Mitte des Faders etwa die 
Hälfte der Betriebsspannung sein.

Dann bitte noch zweimal überprüfen, ob der Schleifer auch wirklich auf 
ADC0 engeschlossen ist, und die Initialisierung immer noch die gleiche 
ist, die oben benutzt wurde. Bei 16MHz F_CPU ist der Vorteiler von 128 
gerade richtig, viel schneller sollte der ADC nicht getaktet werden.

von Dietrich L. (dietrichl)


Lesenswert?

Thgomas T. schrieb:
> Habe die LED entfernt jetzt wirds noch komischer. Nach 5% des Faderwegs
> ist er schon auf 4,5V.
>
> Der Wert ist in der Mitte 4,7kOhm zu beiden seiten hin gemessen.
>
> Irgendwie macht das keinen Sinn für mich.

Dann zeichne mal einen richtigen Schaltplan, damit man sehen kann, was 
Du da machst.

von Falk B. (falk)


Lesenswert?

@  Thgomas Thomas (helyxc)

>X ist Zeit, ich hab den Fader gleichmäßig hochgezogen. Ich habe direkt
>den Wert des ADCs geplottet.

Naja, ob das wirklich sooo gleichmäßig war?

>Aber es scheint wohl am Fader zu liegen auch die Spannung ist SEHR
>unlinear. Muss man den speziell beschalten?

Nein.

>  Ich habs mit einem 2.
>Baugleichen auch getestet. Genauso unlinear

Wenn schon, dann nichtlinear. Aber ich vermute einen Fehler im Aufbau 
oder der Messung. So schlecht sind die Dinger keinesfalls.

von Hannäs (Gast)


Lesenswert?

Matthias S. schrieb:
> Hannäs schrieb:
>> Schließ den Fader auf der 5V-Seite
>> einfach statt dessen an REF an
>
> Ohne Treiber ist AREF viel zu schwach, um eine 10 kOhm Last zu treiben.
> Das wird also nicht gehen.

Natürlich geht das. Die 0.25mA schafft AREF locker. Aber wenn Du später 
vorhast, da 8 oder 16 Silder parallel anzuschließen, dann brauchst Du 
natürlich einen Treiber.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Hannäs schrieb:
> Natürlich geht das. Die 0.25mA schafft AREF locker.

5V an 10k sind bei mir allerdings schon 0,5mA. Da es im Datenblatt des 
Mega 1280/2560 nicht erwähnt wird, gehe ich davon aus, das AREF 
überhaupt nicht dazu gedacht, Strom zu liefern und bin damit auf der 
sicheren Seite.

von Falk B. (falk)


Lesenswert?

@  Hannäs (Gast)


>>> Schließ den Fader auf der 5V-Seite
>>> einfach statt dessen an REF an
>
> Ohne Treiber ist AREF viel zu schwach, um eine 10 kOhm Last zu treiben.
> Das wird also nicht gehen.

>Natürlich geht das. Die 0.25mA schafft AREF locker.

Ist trotzdem sinnlos, weil der Arduino im Normalzustand VCC als VREF 
nutzt.

von uwe (Gast)


Lesenswert?

Ist an deinem ADC Eingang der Pullup aktiviert?!

von Joel (Gast)


Lesenswert?

Thgomas T. schrieb:
> //AD Werte einlesen
> ISR (ADC_vect)
> //###################################################################### ######
> {
>
>
>   ADCSRA = 0;
>
>   adc_wert =(unsigned char)(ADC);
>
>   ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE);
> }

ADCSRA auf Null und dann ADPS Bits für 2MHz statt für 125kHz? Villeicht 
die ADPS auch so wie im ADC Setup stzen.

von Falk B. (falk)


Lesenswert?

Oder einfach die Arduino-Funktionen nutzen, die sind für diese Anwendung 
allemal ausreichend!

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Joel schrieb:
>>
>>   ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE);
>> }
>
> ADCSRA auf Null und dann ADPS Bits für 2MHz statt für 125kHz? Villeicht
> die ADPS auch so wie im ADC Setup stzen.

Ahh, siehste, hatte ich völlig übersehen. Nee, 2MHz gehen natürlich 
nicht, da kommt nur Müll aus dem ADC.

von Thgomas T. (helyxc)


Lesenswert?

Matthias S. schrieb:
> Joel schrieb:
>>>
>>>   ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE);
>>> }
>>
>> ADCSRA auf Null und dann ADPS Bits für 2MHz statt für 125kHz? Villeicht
>> die ADPS auch so wie im ADC Setup stzen.
>
> Ahh, siehste, hatte ich völlig übersehen. Nee, 2MHz gehen natürlich
> nicht, da kommt nur Müll aus dem ADC.

Ahhh. Ja guter Punkt. Ist behoben.

So ich habe jetzt meinen Aufbau minimiert, Dh alles weggemacht was nicht 
dafür gebraucht wird. Jetzt geht es wunderbar. Keine Ahnung wo der 
Fehler war.

Vielen Dank an alle.

Noch ein paar abschließende Fragen.

Ich habe als Referenz ja die Interne genommen. Muss trotzdem ein 
Kondensator zwischen den Pins AREF und GND?

Und muss jetzt bzw sollte auch ein Kondensator zwischen ADC0 und GND?

Danke

von Sascha (Gast)


Lesenswert?

Matthias S. schrieb:
> nicht, da kommt nur Müll aus dem ADC.

Die internen ADCs sind erstaunlich gut und liefern bei 2Mhz noch 9 Bit 
und bei 4 Mhz noch 7-8.

Die Eingangsimpedanz muss natürlich niedrig sein.

von Sascha (Gast)


Lesenswert?

Ja, an den ADC-Pin einen Kondensator wegen Sample and Hold Schaltung.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Thgomas T. schrieb:
> Muss trotzdem ein
> Kondensator zwischen den Pins AREF und GND?
Ja. Wenn du richtig stabile Werte haben willst, sollte man AVcc sogar 
über ein LC Glied (10µH / 100nF) ziehen, wie in den AVR Grundlagen bei 
Atmel beschrieben.
>
> Und muss jetzt bzw sollte auch ein Kondensator zwischen ADC0 und GND?

Ein kleiner 10nF hilft bei der schnellen Ladung des internen S&H 
Kondensators und filtert auch ein wenig. Er wirkt zwar auch als 
Tiefpass, aber du willst ja Potis abfragen und keinen Ultraschallsensor. 
Also bau ihn ein.

Sascha schrieb:
> Die internen ADCs sind erstaunlich gut und liefern bei 2Mhz noch 9 Bit
> und bei 4 Mhz noch 7-8.

Wir haben aber gerade gesehen, das es nicht geht - das sagen auch die 
Specs des ADC im Datenblatt. Ausserdem schwankt das auch noch von Fab zu 
Fab.

von Sascha (Gast)


Lesenswert?

Das Datenblatt sagt imho nur, dass man für volle Auflösung nicht über 
500kHz gehen sollte.

von c-hater (Gast)


Lesenswert?

Thgomas T. schrieb:

> So ich habe jetzt meinen Aufbau minimiert, Dh alles weggemacht was nicht
> dafür gebraucht wird. Jetzt geht es wunderbar. Keine Ahnung wo der
> Fehler war.

Das ist schlecht. Das Minimum, was man als homo sapiens (= "denkender" 
(!!!) Mensch) aus sowas mitnehmen sollte, ist eine stimmige Erklärung 
für das beobachtete Verhalten.

Und das Kriterium für "stimmig" ist: man muss das "Fehlverhalten" auf 
Wunsch reproduzieren können. Erst das zeigt, dass man den (eigenen?) 
Fehler wirklich begriffen hat.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Sascha schrieb:
> Das Datenblatt sagt imho nur, dass man für volle Auflösung nicht über
> 500kHz gehen sollte.

imho reicht eben nicht, da hilft nur nachlesen:

> By default, the successive approximation circuitry requires an input clock
> frequency between 50kHz and 200kHz. If a lower resolution than 10 bits is
> needed, the input clock frequency to the ADC can be as high as 1000kHz to
> get a higher sample rate.

Also, es sind max. 200kHz für volle Auflösung und bis zu 1Mhz für 
geringere. Immer noch sehr weit weg von 2MHz.
Wenn sowas bei dir geht, heisst es nämlich noch nicht, das man die Specs 
für immer und vor allem für Anfänger ignorieren sollte. Die sind ja bei 
Atmel auch keine Trottel, die keine Ahnung von ihrer Hardware haben.

: Bearbeitet durch User
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.