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:
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.
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
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.
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.
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?
@ 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?
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
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.
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
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.
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.
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
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.
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.
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.
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
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.
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.
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.
@ 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.
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.
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.
@ 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.
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.
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.
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
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.
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.
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.
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.