Hallo zusammen,
ich habe mir einen Taster mit der QTouch Library von Atmel aufgebaut.
Das funktioniert erst einmal auch soweit.
Ich habe jetzt nur ein Phänomen bemerkt, welches ich mir nicht erklären
kann.
Die Sensorfläche/der Schalter funktioniert erst einmal einwandfrei. Wenn
ich nun für einige Sekunden in schneller Abfolge auf die Sensorfläche
tippe, wird das System immer sensitiver, d.h. nach einiger Zeit (einige
Sekunden) pausenlosen, schnellen Tippens auf die Sensorfläche, reicht es
dann schon aus, wenn man den Finger über die Sensorfläche bringt, damit
der Sensor eine Betätigung erkennt. Wenn man dann mit dem Tippen
aufhört, ein paar Sekunden wartet und ein, zwei mal auf die Sensorfläche
tippt, "normalisiert" sich die Sensitivität wieder und es wird ein
Fingerdruck wie gewünscht erkannt.
Hat jemand Erfahrungen mit der Library und hat eventuell eine Idee,
warum das System sensitiver wird, wenn man eine Zeit lang schnell auf
die Sensorfläche tippt?
Freue mich über Anregungen.
Grüße
Du mußt die Drift compensation etwas verlängern. Ist sie zu kurz
eingestellt, dann geht das Referenzsignal Richtung der "neuen"
Kapazität.
Das ist dafür gut wenn sich z.b. im Laufe der Zeit die Sensorfläche
verdreckt (Kapazität ändert sich) und wenn der Drift compensation z.b.
auf 10Sekunden eingestellt ist, dann wird jede 10Sekunden geprüft wie
das neue Signal aussieht und dann geht die Referenz immer in 1Count
Schritten entweder mit hoch oder runter.
Hast Du die Drift compensation auf viel kürzeren Abstand eingestellt,
z.b. jede Sekunde, dann ist "im Schnitt" der Pegel viel höher und die
Referenz geht dann solange du permanent drauf klopfst mit. Wenn Du dann
loslässt, geht ja das Signal runter und das Referenzsignal folgt dem
neuen Signal und dann ist wieder alles gut.
Hallo,
vielen Dank für die schnelle Antwort!
Wenn ich das richtig verstanden habe, wäre das der Wert "neg_drift_rate"
und "pos_drift_rate"!?
Ich werde dann mal ein wenig damit rumspielen.
Das würde doch aber heißen, wenn ich den Wert z.B. auf 10s einstelle und
dann 20s oder so schnell tippe, würde ich dann auch wieder das
entsprechende Phänomen erhalten?
Sollte man diesen Wert dann also möglichst hoch einstellen!?
Vielen Dank!
Grüße
ja so kann mans betrachten, je schneller gedriftet werden soll desto
öfter passt sich der Algorithmus an die Umgebung an. Du wirst ein wenig
ausprobieren müssen welche Einstellungen für die Applikation Sinn machen
GGf. kannst Du auch versuchen die Abtastrate zu ändern, z.b. alle 250ms
sampeln damit kriegt der Algorithmus nicht so häufig die Änderungen mit,
das geht aber zu Lasten der Response Zeit.
Alternativ kannst Du auch den Parameter Detect Integration erhöhen, dann
wird x-mal gesampelt und erst wenn alle Samples über dem Detect
Threshold liegen, dann wird der Wert als Touch reported.
Mußt mal ein wenig ausprobieren, Touch ist Rocket Science :)
Am besten wenn Du das QDebug Interface nutzt und mit Hilfe von Atmel
Studio / QTouch Analyser kannst Du Dir dann anschauen wie sich der
Verlauf des Signals und des REferenzsignals ändert. Dann siehst Du genau
wie das Verhalten ist. Du kannst Dir ggf. auch ein günstiges SAMD20
Xplain Pro kit zum Experimentieren nehmen dort ist der EDBG Chip verbaut
der auch als Gateway zum QTouch Analyser dient. Um das Prinzip zu
verstehen und mal alle Parameter zu testen hilft das auch schon weil Du
dann direkt im Analyser siehst was vor sich geht.
Hallo,
vielen Dank!
Ich werde mal ein wenig mit den Werten rumexperimentieren und mal
schauen, was sich für Änderungen ergeben.
Das mit dem QDebug Interface und dem Analyser werde ich mir einmal
anschauen.
Wenn ich etwas weiter gekommen bin, werde ich hier nochmal berichten.
Hilft dann vielleicht auch anderen weiter.
Besten Dank!!
Grüße
Frank schrieb:> Das würde doch aber heißen, wenn ich den Wert z.B. auf 10s einstelle und> dann 20s oder so schnell tippe, würde ich dann auch wieder das> entsprechende Phänomen erhalten?
Stell den Wert einfach so ein, dass der Schwellwert nicht nennenswert
wegdriftet, bevor dein Finger lahm ist ;-)
Hat eigentlich schonmal jemand probiert, die Touch-Fläche eines
"self-capacitance Buttons" möglichst groß zu machen? Funktioniert das
Prinzip dann auch noch oder ist es gar nicht mehr zu gebrauchen wegen zu
schlechter Sensitivität bzw. wo in etwa liegt die Grenze?
@Kurt
klar geht das, je größer desto mehr Sensitivität = Proximity.
Mit ca. 5x5cm Fläche hatte ich ungefähr 10cm Proximity
Wenn man einfach nur einen großen Button haben will und keine Proximity,
muß dann der Detect Threshold einfach groß genug gewählt werden so dass
man immer noch die Elektrode berühren muß bevor ein Touch entsteht.
Man muß sich das so vorstellen. Man hat einen Sampling Kondensator im nF
Bereich, die Elektrode ist beinahe egal wie groß man sie macht im pF
Bereich. Beim Charge Transfer wird ja nun die Ladung von der Elektrode
in den Cs transferiert und gezählt bis Cs ansetzt. Vergrößerst Du die
Elektrode dann werden halt weniger Ladungen fällig. Ob so eine Fläche
auch riesig werden kann hab ich auch nicht probiert
Hallo,
also mit dem selben Algorithmus wie bei Bernd hab ich Tasten in einen
Bilderrahmen eingebaut. 3mm Pressspan + 2mm Glas, als Elektrode eine
2032, sind kein Problem. Noch 2mm PVC drauf geht immer noch.
Sascha
Mathias O. schrieb:> @Bernd: Ist die Variante besser als die ADC-Variante? Wie siehts bei der> aus mit 2-3mm Kunststoff dazwischen?
Die ADC-Variante hab ich noch nicht ausprobiert aber ich denke mal die
dürften beide ähnlich empfindlich sein. ADC verwendet ebenfalls
Ladungstransfer, aber nur einen einzugen Zyklus und verwendet den
internen Sample-Kondensator des ADC (der zum Glück in der selben
Größenordnung liegt wie ein Finger auf dem Touch-Pad). Nur ein einziger
Pumpvorgang und anschließende genaue Spannungsmessung geht dann
natürlich schneller als Pumpen bis zum Triggerpunkt, sollte aber
grundsätzlich in etwa die selben Eigenschaften haben.
*
Übrigens: eine hab ich noch: Die verwendet nur einen einzigen Port-Pin
(keinen ADC!) und mißt die Kapazität direkt indem sie ein RC-Glied
bildet und die Ladezeit misst wobei R der interne Pullup ist und Cx die
Kapazität gegen Masse, allerdings ist die nicht so empfindlich und im
Gegensatz zu den anderen Varianten mit Ladungstransfer ist sie
wahrscheinlich auch störanfälliger, also wenn möglich würd ich lieber
die Ladungspumpe nehmen anstatt die Ladezeit von Cx direkt zu messen:
Hallo,
ich bins nochmal.
Ich habe jetzt mal ein wenig mit der neg_drift_rate rumgespielt. Ich
habe den Wert mal auf Maximum eingestellt. Es ist schon merklich besser
geworden. Die Sensitivität steigt noch an, aber wesentlich langsamer
habe ich das Gefühl. Ich werde jetzt noch ein wenig mit dem Parameter
und dem Parameter Detect Integration herumspielen. Da werde ich noch ein
wenig was zu tun haben. :-)
Ich habe dann aber noch eine Frage zu einer weiteren Überlegung. Ich
würde den Taster später gerne in ein Metallgehäuse integrieren. Der
Taster soll draußen zum Einsatz kommen. Ich dachte mir, ich nehme ein
kleines Rohr, verschließe dieses an dem einen Ende mit einer
Kunststoffscheibe, lege darunter die Sensorfläche und bringe darunter
die restliche Schaltung unter und verschließe das andere Ende mit Kleber
oder so und lasse nur die Kabel rausschauen. In einem Luftversuch
funktioniert das schon mit dem Sensor unter der Plastikscheibe. Ich habe
aber Bedenken bei dem gedachten Metallgehäuse. Das dürfte doch die ganze
Kapazität durcheinander bringen?
Grüße
Im Atmel Touch Sensor Design Guide steht etwas drüber (suche nach
floating conductive items). wenn ich das richtig deute sollte das
Gehäuse somit geerdet werden.
Ich glaub das ist schon machbar, immerhin funktioniert das in Systemen
wie settop boxen, Waschmaschienen ja auch...
Hallo,
alles klar, vielen Dank. Ich habe den Abschnitt schon gefunden. Ich
werde es mal testen, wenn ich mal probeweise was verbauen kann!
Vielen Dank!
Grüße
Frank schrieb:> Ich habe> aber Bedenken bei dem gedachten Metallgehäuse. Das dürfte doch die ganze> Kapazität durcheinander bringen?
Stichworte zum Googlen: "driven shielding", "driven guarding", "aktive
Schirmung". Du brauchst nen OP dazu.
So ungefähr:
Aber probiers erst mal ohne wenns so auch geht, in dem Falle legst Du
das Gehäuse einfach auf Ground (jedoch nicht floaten lassen!). Erst wenn
Du mehrere Meter bis zur touch-Fläche mit Koax-Kabel überbrücken musst
wird ein getriebener Schirm wirklich notwendig werden.
Hallo zusammen,
ich bin ein wenig weiter gekommen. Mein Taster läuft jetz soweit recht
gut. Ich habe nun mal erste Versuche gemacht, das Ding in ein Gehäuse
einzubauen, ein Metallgehäuse.
Wie zu erwarten, gibt es da neue Probleme.
Wenn ich wieder schalte, bis mir der Finger bald abfällt, wird der
Schalter wieder sensitiver, was jetzt nicht mehr so das Problem ist,
aber ab einem gewissen Zeitpunkt, bleibt er immer geschaltet, egal ob
ich den Finger weg nehme oder auf die Sensorfläche taste. Er bleibt also
im getouchten Zustand hängen. Ich gehe mal davon aus, dass mir das
Gehäuse da ein wenig ins Handwerk pfuscht!?
Dann habe ich nochmal eine Frage zur Drift Kompensation. Wenn ich das
richtig verstanden habe, führt diese Funktion den Referenzlevel nach?
Ich habe mal eine Zeichnung aus der AppNote "QTouch und QMatrix
Sensitivity Tuning" eingefügt.
D.h. das Delta zwichen Referenz und Level zum Detektieren wird immer
kleiner!? Hab ich das so richtig verstanden?
Grüße
nein das soll eben nicht kleiner werden. Das Ziel von der Drift
Compensation ist dass das Delta immer gleich bleibt sonst passiert es
ja genau so wie du beschreibst dass der Delta Bereich immer kleiner wird
(ohne Compensation) und irgendwann reicht der Delta Wert nicht mehr aus
um Touch/No Touch zu erkennen.
Hast Du denn auch den Drift Hold time gesetzt?
@Bernd: Kann ich eigentlich einen gemeinsamen SAMPL nehmen für 6 Tasten
oder braucht jeder einen eigenen. Den Abfrageablauf mach ich auch immer
nur bei einem. Erst wenn der zu Ende ist, kommt die nächste Taste ran
(for-Schleife).
Mathias O. schrieb:> @Bernd: Kann ich eigentlich einen gemeinsamen SAMPL nehmen für 6 Tasten> oder braucht jeder einen eigenen.
Das ist leider nicht so einfach. Würdest Du die Sample-Kondensatoren
einfach alle an einem Ende zusammenschalten dann wären alle
Touch-Elektroden kapazitiv miteinander verbunden (es reagiert nämlich
auch wenn Du den Finger auf SAMPL legst, dann wird Cs geladen wenn der
TOUCH-Pin auf high geht).
Du müsstest einem Weg finden mit zusätzlicher externer Beschaltung die
unbenutzten Elektroden komplett wegzuschalten. Zum Beispiel mit
Analogschaltern oder Analogmultiplexern wie dem hier:
http://www.nxp.com/documents/data_sheet/74HC_HCT4051.pdf dann bräuchtest
Du nur einen einzigen Samplekondensator und würdest einfach die
Touchflächen umschalten.
Ich hab nochmal geschaut, es sind 7 Tasten. 6 gleich große und eine die
so groß ist wie alle 6 kleine hintereinander. Sollte man dann einen
anderen Samplekondensator für die große nehmen oder muss man das nicht
der Größe der Touchfläche angleichen?
@Peter
Hallo,
ok, das Delta soll gleich bleiben, wenn sich also der Signal-Level nach
und nach ändert, wird die Referenz nachgeführt, damit das Delta etwa
gleich bleibt, damit noch zwischen getoucht und nicht getoucht
unterschieden werden kann, da sonst das Delta zu klein würde und nicht
mehr zwischen betätigt und nicht betätigt unterschieden werden könnte.
!?
Irgendwie fällt der Groschen nur langsam ;-)
Die Drift Hold time habe ich gesetzt. Die steht auf 10, also 2 Sekunden.
Grüße
Mathias O. schrieb:> Sollte man dann einen> anderen Samplekondensator für die große nehmen oder muss man das nicht> der Größe der Touchfläche angleichen?
Nimm einen mit dem auch die kleinste Taste noch funktioniert und
ausreichend Auflösung und Empfindlichkeit bringt, dann kalibrier alle
Tasten softwaremäßig individuell. Zum Beispiel beim Einschalten machst
Du 64 Messungen mit jeder Taste (unter der Annahme daß die nicht
gedrückt sind) und dann hat jede Taste ihren eigenen Nullwert (und
vielleicht musst Du auch andere Schaltschwellen für die grosse Taste
empirisch ermitteln).
Der Wert wird ja kleiner beim Annähern des Fingers, im obigen Beispiel
hab ich einen uint8_t genommen, also sollte Cs so bemessen sein daß der
Wert bei nicht gedrücktem Taster irgendwo bei 200 zu liegen kommt, so
hast Du einigermaßen gute Auflösung und Empfindlichkeit. Natürlich
kannst Du auch einen uint16_t nehmen und einen viel größeren Cs, dann
kannst Du die Empfindlichkeit noch stark in die Höhe treiben aber dann
dauert die Messung entsprechend (viel) länger.
Noch ein Tip: Nimm keinen billigen Keramikkondensator für Cs (die
Temperaturdrift ist extrem, damit kannst Du ein Thermometer bauen), nimm
einen der explizit als NP0 (oder C0G) spezifiziert ist (oder notfalls
einen Folienkondensator aus der Bastelkiste, die sind zumindest nicht
ganz so temperaturanfällig).
Das Problem des ursprünglichen Fragestellers im Thread mit der
anscheinend fehlerhaften/halbherzig implementiuerten QTouch library
(deshalb riet ich ja bereits zu Beginn die einzig benötigten 10 Zeilen
Code lieber selbst hinzuschreiben und die 990 Fehlerhaften die sonst
noch da drin stecken und nur der Featuritis geschuldet sind ganz
wegzulassen), dass beim automatischen langsamen Nachkalibrieren der Wert
wegläuft (noch dazu in die falsche Richtung) vermeidest Du indem Du:
* den Nullwert für jede Taste nur extrem langsam nachführst (wenn
überhaupt!) wenn er kleiner wird
* den Nullwert schnell nachführst wenn er größer wird (weniger Finger
auf der Taste als null Finger geht nicht, die Taste muss im
Einschaltmoment bereits gedrückt gewesen sein und jetzt wurde sie
losgelassen)
* den Wert nur nachführst wenn die Taste nicht als gedrückt erkannt
worden ist
* einen NP0 Kondensator für Cs verwendest
Danke für die Tipps. Bei meinem Testkupferplättchen hab ich um die 106
und gedrückt 90-100.
Nur was meinst du genau mit nachführen. Wie muss das aussehen? Die
Schaltschwelle nachführen oder was?
@Bernd: Deine Lösung in aller Ehren und für private Zwecke vielleicht ok
aber ich würde von der Verwendung dieser Algorithmen in kommerziellen
Projekten abraten ohne sich mit Hilfe eines Patentanwalts abzusichern.
Nur meine Meinung dazu. Du kannst gerne einen eigenen Thread aufmachen
wenn Du Deine Lösung vorstellen willst dann stört es nicht den Lesefluss
Frank, 2Sekunden können zu wenig sein, erhöhe das mal. Zur Not kannst Du
auch mal Atmels hotline befragen, die haben mir sogar beim PCB Review
geholfen.
Dazu fällt mir nur das ein: "GIF-Grafiken verwenden zur Kompression den
patentierten Lempel-Ziv-Welch Algorithmus (LZW), um die Datenmengen zu
verkleinern. Das letzte nationale LZW-Patent des Unternehmens Unisys ist
am 7. Juli 2004 in Kanada ausgelaufen, jedoch hielt auch IBM bis zum 11.
August 2006 ein Patent für die gleiche Technologie." Quelle:
Wikipedia.org
Also einfach abwarten bis es ausläuft ;)
Peter schrieb:> 2Sekunden können zu wenig sein, erhöhe das mal.
Ich habe das jetzt mal auf 4Sekunden erhöt, das brachte leider bisher
noch keine Besserung. Ich werde da mal noch ein wenig mit rumspielen
oder schaue wirklich mal, dass ich mich mal mit dem Support von ATMEL in
Verbindung setze.
Grüße