Hallo zusammen, nach vielen Experimenten mit diversen Ansteuertechniken für kapazitive Touchbuttons habe ich eine kleine Library geschrieben, welche die Auswertung eines Touchbuttons auf ATtiny MCUs unterstützt. Dabei habe ich eine Methode implementiert, welche einen Spannungsteiler mit dem internen S&H Kondensator zur Auswertung der Padkapazität nutzt und dadurch ohne externe Komponenten auskommt (Analog Qtouch ADC von Atmel). Im Gegensatz zur Lib von Atmel funktioniert diese Library auch auf den kleinen ATtinys wie ATtiny 5 und 10. Vielleicht ist es ja für jemanden von Nutzen. Über Bugreports und Feedback würde ich mich freuen. https://github.com/cpldcpu/TinyTouchLib
sehr schön! wenn du eventuell noch eine schaltung als pdf oder jpg dazugeben könntest wäre das ganz toll!
Gerne. Der Trick ist eigentlich, dass man gar keine Schaltung braucht, sondern das Pad einfach an einen Pin angeschlossen werden kann. Ich habe aber eine Testapplikation, welche ich auch online stellen werde.
So, hier ist ein kleines Projekt, welches die Library auf einem ATtiny10 nutzt, um 4 WS2812 LEDs zu kontrollieren. Der Witz an der Sache ist, dass nur zwei Pins des Controllers benötigt werden. https://github.com/cpldcpu/TinyTouchButton
Sehr interessant, Danke! Sag mal siehst Du eine Möglichkeit an denselben Touch pin auch eine LED dranzuhängen so wie Semtech das macht? Ich hab keine Ahnung wie stabil Semtech's Lösung ist, aber ich hab das sonst bei keinem anderen Hersteller gesehen. http://www.semtech.com/touch-interface/capacitive-touch-controllers/sx9513/ unter Diagrams/Specs
> Sehr interessant, Danke! > Sag mal siehst Du eine Möglichkeit an denselben Touch pin auch eine LED > dranzuhängen so wie Semtech das macht? Ich hab keine Ahnung wie stabil > Semtech's Lösung ist, aber ich hab das sonst bei keinem anderen > Hersteller gesehen. Das sollte eigentlich kein Problem sein. Allerdings muss die Kathode der LED dann auch an einen MCU-Pins angeschlossen werden, den man floaten lässt während das Touchpad ausgelesen wird.
Lustig, außer hier habe ich von dem TinyTouchButton nirgendwo etwas erwähnt. Irgendwie hat sich da etwas verselbstständigt? http://www.adafruit.com/blog/2013/06/17/tiny-touch-button/ uvm...
Bild der V2. Die V2 Platine kam von OSH-Park. Die V1 ist von der Sammelbestellung von Jakob aus dem "Markt"-Brett.
Tim . schrieb: > Vielleicht ist es ja für jemanden von Nutzen. Über Bugreports und > Feedback würde ich mich freuen. Ja, ist von Nutzen. Und hier auch gleich ein Bugreport:
1 | uint8_t tinytouch_adc(void) { |
2 | |
3 | uint8_t dat1,dat2; |
4 | ...
|
5 | return dat2 - dat1; |
6 | }
|
Bei der Subtraktion kann es zu einem Überlauf kommen. Dann spinnt die ganze Logik dahinter. Nicht gut :( Im Detail: Das Prinzip besteht darin, den S/H Kondenstaor im ADC einmal auf Vcc vorzuladen und die Touchfläche auf GND. Dann werden beide zusammen- geschaltet, die resultierende Spannung gemessen und in dat1 abgelegt. Dann nochmal anders herum; Touchfläche auf Vcc, S/H auf GND und das Meßergebnis in dat2 ablegen. Wäre die Kapazität der Sensorfläche 0 und gäbe es auch sonst keine parasitären Kapazitäten, dann würde die erste Messung 0xFF liefern und die zweite 0. Je größer die Kapazität der Sensorfläche, desto niedrigere Werte liefert die erste Messung und desto höhere die zweite. Wenn man nun eine recht große Sensorfläche hat, dann kann es sein, daß der erste Meßwert absolut kleiner wird als der zweite und die Subtraktion läuft über. Die Abhilfe ist einfach: für die erste Messung ist (255-dat1) ein Maß für die Kapazität der Sensorfläche. Für die zweite ist dat2 direkt dieses Maß. Das Ergebnis muß also nicht (dat2-dat1) sein, sondern (255-dat1 + dat2). Genau so setzt mein angehängter Patch das um. Da tinytouch_adc() nun auch Werte über 255 zurückliefern kann, muß uint16_t verwendet werden. Und in tinytouch_sense() kann man nicht mehr mit um 8 nach links geshifteten Meßwerten in bias & Co rechnen, sondern darf nur noch 7 Bits nach links schieben. Die zweite Änderung betrifft die Wartezeit für das Vorladen der Sensorfläche. Die hast du fest mit 32µs in den Code geschrieben. Ich habe dafür ein neues #define in TinyTouchLib.h eingefügt. Die derart geänderte Version von TinyTouchlib tut sehr gut in meinem jüngsten Projekt. Siehe Beitrag "Touchdimmer mit ATtiny13"
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.