Hi zusammen,
ich möchte mit einem Arduino Mega einen Schiebepoti auslesen und auf
einem Terminal ausgeben.
Das Terminal funktioniert bereits, allerdings klappt das auslesen nicht,
da nur 0 ankommen.
Ich möchte ausserdem keine Arduino Funktionen verwenden sondern
"normales" C.
Hier mein Quellcode:
Beim Auslesen mit einem Multimeter kann ich eine Spannung zwischen 0 und
4.05V Messen. (Wieso eigentlich nur 4.05 und nicht 5?), dem entsprechend
ist der Poti richtig verschaltet.
Anbei noch ein Bild vom Aufbau. Hat jemand eine Idee warum da nichts
kommt?
Gruß
Thgomas T. schrieb:> Ich möchte ausserdem keine Arduino Funktionen verwenden sondern> "normales" C.
Das würde auch den Verzicht auf "setup()" und "loop()" bedeuten :-)
Thgomas T. schrieb:> ADCSRA = 0;
Was bezweckst Du damit? Free Running Mode mit single shot? :-)
Thgomas T. schrieb:> ADCSRA |= (1<<ADEN); // ADC Aktivieren
Prima, und wann willst Du ihn starten?
ADSC: ADC Start Conversion
Praktisch wäre es auch, die Interrupts mit SEI(); zu aktivieren. Ggf.
macht das ja der Arduino-Unterbau sowieso - aber "sicher ist sicher".
Dieter F. schrieb:> Praktisch wäre es auch, die Interrupts mit SEI(); zu aktivieren. Ggf.> macht das ja der Arduino-Unterbau sowieso - aber "sicher ist sicher".
Ja, Interrupts sind im Arduino-Framework aktiviert, wenn sie nicht
explizit deaktiviert wurden.
Dieter F. schrieb:> Thgomas T. schrieb:>> ADCSRA = 0;>> Was bezweckst Du damit? Free Running Mode mit single shot? :-)>> Thgomas T. schrieb:>> ADCSRA |= (1<<ADEN); // ADC Aktivieren>> Prima, und wann willst Du ihn starten?> ADSC: ADC Start Conversion>
Ahh super danke schön :) Das waren die Fehler.
Jetzt Funktioniert es ganz gut. Allerdings schwankt der Wert noch etwas.
Ich nehme schon nur die 8 obersten Bits, aber dennoch schwankt der Wert
um +-1, selbst wenn ich nichts am Poti mache. Gibt da noch eine
Möglichkeit das zu "glätten" oder so?
Matthias S. schrieb:> Was für einen Wert hat denn das Poti? Wenn es mehr als etwa 5k - 10k> hat, solltest du dem ADC Eingang noch einen 3,3nF - 22nF nach Masse> spendieren.
Er hat 10k, ich habe 100nF nahc masse verbaut.
Jim M. schrieb:> Thgomas T. schrieb:>> Er hat 10k, ich habe 100nF nahc masse verbaut.>> Davon ist auf dem Foto aber nix zu sehen.
Kam im Nachhinein dazu ;) Aber ändert leider nichts am Problem.
Thgomas T. schrieb:> Ich nehme schon nur die 8 obersten Bits,
Hmm, ich habe nicht gesehen, dass Du
ADLAR: ADC Left Adjust Result
nutzt und nur ADCH liest :-)
Diese Schiebe-Potis "kratzen" oft. Wahrscheinlich musst Du wirklich
gleitende Mittelwerte bilden (z.B. aus 3 ... Messungen), damit das noch
stabiler wird.
Also wenn ich einen MW über 100 Messungen bilde ist der Wert ziemlich
stabil.
Die Frage ist klappt das auch noch so gut wenn ich da zb 16 Potis dran
habe? Kann man das nicht irgendwie schaltungstechnisch optimieren mit
nem dicken Kondensator irgendwo, sodass sich die Werte garnicht mehr so
schnell ändern können?
Die Sache mit den obersten 8 MSB habe ich mit einem >> 2 gelöst. Das ist
doch äquivalent oder?
Thgomas T. schrieb:> Also wenn ich einen MW über 100 Messungen bilde ist der Wert ziemlich> stabil.
Du berechnest so keinen gleitenden Mittelwert sondern alle 100 Messungen
einen Durchschnittswert.
Schau mal da z.B.
Beitrag "Re: gleitender Mittelwert im Atmel"
das ist pfiffig.
Thgomas T. schrieb:> Die Sache mit den obersten 8 MSB habe ich mit einem >> 2 gelöst. Das ist> doch äquivalent oder?
Ja, ADLAR spart halt etwas Zeit :-)
Wenn Du den Kondensator zwischen Schleifer und GND hast sollte es
eigentlich O.K. sein. Du kannst ggf. noch mit dem Wert spielen - glaube
auber nicht, das das viel bringt.
Allerdings ist der Wert immernoch ziemlich am Spacken :/. Hab ich das
falsch übernommen?
>> Thgomas T. schrieb:>> Die Sache mit den obersten 8 MSB habe ich mit einem >> 2 gelöst. Das ist>> doch äquivalent oder?>> Ja, ADLAR spart halt etwas Zeit :-)
Ist umgerüstet ;)
>> Wenn Du den Kondensator zwischen Schleifer und GND hast sollte es> eigentlich O.K. sein. Du kannst ggf. noch mit dem Wert spielen - glaube> auber nicht, das das viel bringt.
Jap, grad gemerkt, der kann auch nichts reißen.
Thgomas T. schrieb:> Hm, also ich hab das jetzt so:
Du hast die Variablen auch als long deklariert?
Schon mal über ein neues Poti nachgedacht ? :-) Welchen Wert hat das
Poti eigentlich?
Fällt mir gerade noch so ein - hast Du mal ein leistungsfähiges
Steckernetzteil dran gehängt? Ggf. schwächelt die USB-Versorgung - was
Deinen Messwert von 4,05 V erklären würde (oder das Poti ist zu
"niederohmig").
Dieter F. schrieb:> Thgomas T. schrieb:>> Hm, also ich hab das jetzt so:>> Du hast die Variablen auch als long deklariert?>> Schon mal über ein neues Poti nachgedacht ? :-)>> Fällt mir gerade noch so ein - hast Du mal ein leistungsfähiges> Steckernetzteil dran gehängt? Ggf. schwächelt die USB-Versorgung - was> Deinen Messwert von 4,05 V erklären würde.
Wow. Das hats echt gelöst. Und schon ist der Wert auch stabil. Bis ich
darauf gekommen wär hätts glaub ich ein Weilchen gedauert. Danke
schonmal!
Jetzt fehlt noch ein Schritt zum Ziel.
Ich möchte einen Taster einbauen, der, wenn ich ihn drücke, den ADC Wert
aufs Maximum (also 255) Springen lässt.
Ich hab in den Anhang die Schaltung gepackt ich die grad dafür benutze.
Ohne den Widerstand klappts nicht. Wenn der Poti auf dem geringsten Wert
ist und ich dann auf den Knopf drück machts puff. Ich habe extra einen
kleinen genommen, da sonst wenn ich auf den Knopf drücke, nichtmehr 255
erreicht wird (Mit diesem Widerstand 253). Das klappt ans ich ganz gut,
nur wenn ich den Poti in in den unteren 10% habe, dann komme ich mit dem
Knopf nichtmehr auf 253 und der Maximalwert sinkt immer weiter mit
sinkender Schleiferstellung, aber eben nur wenn der Schleifer fast ganz
unten ist. Ich denke mal da fehlt noch was, oder?
Danke
Dieter F. schrieb:> Thgomas T. schrieb:>> Ich denke mal da fehlt noch was, oder?>> Eine Diode?
Hmm schon versucht. Dann komm ich überhaupt garnicht auf den Wert 255 (
denke mal das liegt an den 0,7V Spannungsabfall an der Diode) und der
Abfall bei niedriger Schleiferstellung ist ebenfalls da
Geht das Evtl indem ich mit einem Widerstand einen Spannungshub mache,
sodass es zb von 5 bis 2V misst?
Dann muss ich ja dem ADC auch irgendwie sagen dass der max. Ausschlag 3V
ist anstatt 5V. geht das über AREF?
Thgomas T. schrieb:> tolle_idee.png
Da bin ich mir nicht so sicher. Wenn der Fader auf 0 steht und du den
Taster drückst, fliessen etwa 250mA durch Taster, Widerstand und Fader -
das stinkt mit Sicherheit und zerstört die Kohlebahn.
Also erstmal:
avr schrieb:> Besser mit einem Widerstand das Poti entkoppeln. Z.B. 10k zwischen> Abgriff und Kondensator+Taster.
Oder auch 1k. Irgendwas muss den Strom durch den Fader begrenzen.
Thgomas T. schrieb:> Dann muss ich ja dem ADC auch irgendwie sagen dass der max. Ausschlag 3V> ist anstatt 5V. geht das über AREF?
Da kannst über die Spannung an AREF innerhalb der Grenzen des
Datenblatts den Vollausschlag des ADC einstellen (min. 2V). Aber die
Entkopplung mit Widerstand ist einfacher, wie von avr vorgeschlagen.
avr schrieb:> Besser mit einem Widerstand das Poti entkoppeln. Z.B. 10k zwischen> Abgriff und Kondensator+Taster.
Dann macht es zwar trotzdem "puff", weil beim Drücken des Tasters der
Kondensator kurz geschlossen wird, aber nicht mehr so doll ;-)
Es gibt nur Brandspuren auf den Tasterkontakten.
Matthias S. schrieb:> Wenn der Fader auf 0 steht und du den> Taster drückst, fliessen etwa 250mA durch Taster, Widerstand und Fader -> das stinkt mit Sicherheit und zerstört die Kohlebahn.Matthias S. schrieb:> Oder auch 1k. Irgendwas muss den Strom durch den Fader begrenzen.
genau 1k zwischen Schleifer und ADC Eingang, Taster mit 470 Ohm nach
+VCC am ADC sollte auch besser sein.
Joachim B. schrieb:> Taster mit 470 Ohm nach> +VCC am ADC sollte auch besser sein.
Haben wir dann nicht einen schönen Spannungsteiler in Verbindung mit den
1KOhm gegen Masse (wenn der Schleifer auf der GND-Seite ist)?
Ja das gäbe einen schönen Spannungsteiler ;)
Was mir so einfällt:
1. Einen Taster nehmen der einen Wechselkontakt hat, damit schalten ob
GND oder VCC unten an das Poti geht, dann bekommst du auch 255 weil dann
egal in welcher Position das Poti ist 5V anliegen wenn der Taster
gedrückt ist.
oder
2. Den Taster an einen zweiten Pin vom AVR anschließen und den Wert
einlesen. Wenn Taster gedrückt dann einfach den Wert des Potis
"überschreiben*
Hmm also ich habe jetzt vom Schleifer zum ADC und vom Taster zu VCC
jeweils 1k dazwischen gehängt. (Hab keine 470er da). Jetzt ist der
Maximalwert nichtmehr 255 und der Taster hängt immernoch von der
Faderstellung ab.
Thgomas T. schrieb:> Ich hab in den Anhang die Schaltung gepackt ich die grad dafür benutze.
Warum ist da Avcc als Versorgung für den ADC/PortC nicht beschaltet?
mork schrieb:> Thgomas T. schrieb:>> Ich hab in den Anhang die Schaltung gepackt ich die grad dafür benutze.>> Warum ist da Avcc als Versorgung für den ADC/PortC nicht beschaltet?
Ist es. Ich benutze (noch) einen Arduino Mega. Habs nur nicht da
eingezeichnet.
Also ich habs jetzt so gelöst wie im Anhang zu sehen ist. So scheint
alles zu gehen. Nichts scheint warum zu werden und die Frische Bergluft
in meinem Zimmer wird durch keinen verschmorten Kohlegestank gestört. :)
Ich komme auf den Wert 255 und der Knopf ist unabhängig von der
Faderposition.
Jetzt ist nur noch eine Sache. Wenn den Knopf wieder loslas braucht der
Kondensator zu lange um sich zu entladen. Dh der Wert spring nicht mehr
schnell genug auf den alten zurück. Nehme ich einen kleineren C, so
kommt das zittern wieder. Ich benutze 10nF.
Spricht vll sonst noch was anderes was ich jetzt nicht sehe dagegen das
so zu betreiben?
Gruß
Thgomas T. schrieb:> Also ich habs jetzt so gelöst wie im Anhang zu sehen ist. So scheint> alles zu gehen.
Ich hoffe, das es sich um einen Zeichenfehler handelt. Wenn der Fader
auf 0 steht und du den Taster drückst, schliesst du die Betriebsspannung
kurz.
Der Taster muss ans ADC-seitige Ende des 10k Widerstandes.
Allerdings hast du noch so viele Ports frei, das ich den Taster an einen
freien Pin anschliessen und den Rest per Software lösen würde.
Thgomas T. schrieb:> Nehme ich einen kleineren C, so> kommt das zittern wieder. Ich benutze 10nF.
Beachte bitte auch die Siebung von AVCC nach Datenblatt. Atmel empfiehlt
eine Drossel (10µH-100µH, aber 470µH gehen auch) zwischen VCC und AVCC
und einen extra 100nF an AVCC gegen Masse.
Dieter F. schrieb:> Haben wir dann nicht einen schönen Spannungsteiler in Verbindung mit den> 1KOhm gegen Masse
ja und wenn der Taster nicht gedrückt ist hängt der 470 Ohm in der Luft
und spiel Hündchen "der tut nix"
wenn er gedrückt wird teilt er zwar auf 2/3 sollte aber für einen Atmel
als high reichen, äh wie war die Frage?
Thgomas T. schrieb:> Jetzt ist nur noch eine Sache.Matthias S. schrieb:> Ich hoffe, das es sich um einen Zeichenfehler handelt. Wenn der Fader> auf 0 steht und du den Taster drückst, schliesst du die Betriebsspannung> kurz.
wollte ich auch gerade schreiben!
Matthias S. schrieb:> Der Taster muss ans ADC-seitige Ende des 10k Widerstandes.
Ja, sonst riecht's elektronisch :-)
Thgomas T. schrieb:> Jetzt ist nur noch eine Sache. Wenn den Knopf wieder loslas braucht der> Kondensator zu lange um sich zu entladen.
Nicht, wenn Du richtig verbindest - aber schon ein wenig :-) so ist es
halt - außer Du nimmst (wie viele andere auch) einen extra
Taster-Eingangs-Pin.
Hm okay. Es war kein Zeichenfehler, aber selbst wenn ich den Taster ans
andere Ende des Widerstands packe verändert sich nichts. Ich denke mal
irgendwas im Arudio hat das Abfackeln verhindert. Jedenfalls lief alles.
Ich denke ich werde es nun doch Softwareseitig lösen, sprich mit nem
extra Pin für den Knopf.
Danke an alle die geholfen haben.
Thgomas T. schrieb:> Ich denke ich werde es nun doch Softwareseitig lösen, sprich mit nem> extra Pin für den Knopf.
Dann schau Dir bitte Peter Danneggers Entprellroutine an ->
Tastenentprellung bei den Artikeln. Ist nicht leicht zu verstehen, aber
wirklich gut - ich verwende die immer, wenn ich Tasten oder
Drehimpulsgeber abfrage.
Dieter F. schrieb:> Thgomas T. schrieb:>> Ich denke ich werde es nun doch Softwareseitig lösen, sprich mit nem>> extra Pin für den Knopf.>> Dann schau Dir bitte Peter Danneggers Entprellroutine an
und dann Software, wird der Taster gedrückt liefert eben nicht der ADC
sondern deine Software 255 oder 1023 egal wo der Potischieber steht.
Joachim B. schrieb:> und dann Software, wird der Taster gedrückt liefert eben nicht der ADC> sondern deine Software 255 oder 1023 egal wo der Potischieber steht
Häh?
Dieter F. schrieb:> Häh?
wie bitte?
ist Häh jetzt eine qualifizierte Frage oder nur ein Ausdruck von Lese
und Verständnisschwäche?
Thgomas T. schrieb:> Jetzt fehlt noch ein Schritt zum Ziel.>> Ich möchte einen Taster einbauen, der, wenn ich ihn drücke, den ADC Wert> aufs Maximum (also 255) Springen lässt.
OK, noch mal langsam für die mit der längeren Laufzeit:
Er möchte einen Taster der den ADC Wert auf 255 springen lässt.
Warum er das möchte ist mir unklar, der ADC Wert ist zu keiner Zeit
sichtbar!
Er ist auch nicht 255 beim Maximum sondern 1023, aber nun gut,
angenommen er verwirft 2 Bit, dann ist 255 das maximum von ADC, das wird
aber niemand sehen der es nicht sehen soll, will sagen es wird irgendwo
ausgegeben.
Nun kann man auch 255 ausgeben wenn der Taster gedrückt wird, das ist
keine Magie sondern nur Software, wo der ADC dann zur Zeit aktuell steht
ist doch Schnuppe oder sowas von egal denn er will eine Ausgabe von 255
bekommen auf Tasterdruck.
Es wäre auch möglich das ein Servo auf Tasterdruck das Poti an den
oberen Anschlag zu 255 fährt, aber das wurde nicht verlangt, jedenfalls
lese ich das nicht.
Joachim B. schrieb:> ein Ausdruck von Lese und Verständnisschwäche?
Ja, ich bin es nicht gewohnt unvollständige Sätze zu Lesen.
Joachim B. schrieb:> Er ist auch nicht 255 beim Maximum sondern 1023
Da er ADLAR gesetzt hat und nur ADCH liest schon.