Forum: Mikrocontroller und Digitale Elektronik ATtiny816 Peripheral Touch Controller(PTC) QTouch?


von Fabian G. (realghost)


Lesenswert?

Guten Tag

Ich arbeite zurzeit an einem Projekt, in dem ich einen ATtiny816 als 
Mikrocontroller verwende. Dort möchte ich gerne zwei Touch-Buttons in 
Verbindung mit dem PTC verwenden. Ich habe schon eine Leiterplatte mit 
den zwei Buttons darauf hergestellt. Ich verwende dabei "mutual 
capacitance sensing".

Nun habe ich Probleme mit dem Programmieren. Ich werde nicht schlau 
durch die User Guides. Die zwei Buttons sollten im Programm nur den 
Mikrocontroller vom Schlaf aufwecken und während der Laufzeit lesbar 
sein.

Atmel Start wollte ich eigentlich benutzen, da werde ich jedoch auch 
nicht schlauer.

Kennt sich jemand mit PTC bzw QTouch Library aus?

Mit freundlichen Grüssen
Fabian

von pegel (Gast)


Lesenswert?

Fabian G. schrieb:
> Die zwei Buttons sollten im Programm nur den
> Mikrocontroller vom Schlaf aufwecken

Können die das? Wie ich das verstanden habe, muss der µC Timer gesteuert 
aufwachen und die Buttons abfragen.

Du kannst in den Beispielen nach "Wake" suchen. Muss auch nicht direkt 
für deinen ATtiny816 sein.

von Fabian G. (realghost)


Lesenswert?

"Supports wake-up on touch from Sleep mode"

Laut Datenblatt sollte dies möglich sein.

von K. S. (the_yrr)


Lesenswert?

QTouch ist doch nur Software und nutzt nur den ADC. Da es keinen echten 
Hardware Touch Cotnroller gibt muss der Kern wohl wenigstens kurz laufen 
um einen Tastendruck zu erkennen.

in der AVR3005 steht mehr oder weniger explizit dass wakeup über touch 
nicht funktioniert. Ob man die QTouch library so konfigurieren kann dass 
der µC periodisch aufwacht weiß ich leider nicht.

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

Fabian G. schrieb:
> "Supports wake-up on touch from Sleep mode"
>
> Laut Datenblatt sollte dies möglich sein.

Der Schlafmodus wird unterschieden in "Idle, Standby, Power Down". Der 
PTC arbeitet noch im Standby-Modus, wozu allerdings (mindestens) der ADC 
aktiv sein muß. Die Stromaufnahme ist daher >= 0,3 mA. Ferner ist der 
ADC durch PTC nicht für andere Aufgaben verwendbar.

Für stromsparenden Batteriebetrieb ist der PTC wohl nicht brauchbar.

von Peter D. (peda)


Lesenswert?

m.n. schrieb:
> Ferner ist der
> ADC durch PTC nicht für andere Aufgaben verwendbar.

Sicher?

Ich habe hier mal Touchtasten ohne die Lib implementiert.
Da kann man natürlich auch alle anderen ADC-Eingänge im ADC-Interrupt 
mit auslesen:
Beitrag "QTOUCH ohne ASF (C Sourcecode)"

Zur Auswertung der Touchtasten muß man den AVR zyklisch aufwecken 
(WDT-Interrupt oder 32kHz Timer).

von Fabian G. (realghost)


Lesenswert?

K. S. schrieb:
> QTouch ist doch nur Software und nutzt nur den ADC. Da es keinen echten
> Hardware Touch Cotnroller gibt muss der Kern wohl wenigstens kurz laufen
> um einen Tastendruck zu erkennen.

Der ATtiny816 besitzt einen Hardware Touch Controller.

m.n. schrieb:
> Für stromsparenden Batteriebetrieb ist der PTC wohl nicht brauchbar.

Habe ich jetzt auch gerade bemerkt.

Kennst du oder jemand anderes eine einfache externe Schaltung, welche 
einen Mikrocontroller via Interrupt vom Power-Down Mode wecken kann? Sie 
sollte eine Stromaufnahme von <10uA besitzen.

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

Peter D. schrieb:
> m.n. schrieb:
>> Ferner ist der
>> ADC durch PTC nicht für andere Aufgaben verwendbar.
>
> Sicher?

Das hatte ich vorhin im Datenblatt gelesen und fand es enttäuschend. Im 
Datenblatt findet sich zudem eine Tabelle 1.1.1 dazu die Fußnote 1:
"The PTC takes control over the ADC while the PTC is used."

Wenn überhaupt, würde ich das auch eher über den WDT steuern.

Fabian G. schrieb:
> Kennst du oder jemand anderes eine einfache externe Schaltung, welche
> einen Mikrocontroller via Interrupt vom Power-Down Mode wecken kann? Sie
> sollte eine Stromaufnahme von <10uA besitzen.

Du brauchst nur R1, R2 und C1 von der Schaltung: 
Beitrag "EIN-AUS mit Taster per Interrupt, ATtiny25 o.ä."

von Bernd K. (prof7bit)


Lesenswert?

Peter D. schrieb:
> Ich habe hier mal Touchtasten ohne die Lib implementiert.

Man kann Touch zur Not sogar mit ganz normalen GPIO-Pins machen, es gibt 
sogar eine Variante die nur einen einzigen Pin und gar keine externe 
Beschaltung braucht, ist dann halt leider ziemlich CPU-Intensiv.

: Bearbeitet durch User
von pegel (Gast)


Lesenswert?

Fabian G. schrieb:
> Kennst du oder jemand anderes eine einfache externe Schaltung, welche
> einen Mikrocontroller via Interrupt vom Power-Down Mode wecken kann? Sie
> sollte eine Stromaufnahme von <10uA besitzen.

Ein Piezo mit Schutzschaltung für den INT Pin?
Braucht keinen Strom, anklopfen genügt.

von K. S. (the_yrr)


Lesenswert?

Fabian G. schrieb:
> K. S. schrieb:
>> QTouch ist doch nur Software und nutzt nur den ADC. Da es keinen echten
>> Hardware Touch Cotnroller gibt muss der Kern wohl wenigstens kurz laufen
>> um einen Tastendruck zu erkennen.
>
> Der ATtiny816 besitzt einen Hardware Touch Controller.
Hast du zufällig irgendeine Quelle zur wirklichen Funktionalität von 
dem? Da es keine Beschreibung der Register oder Hardware im Datenblatt 
gibt würde ich fast vermuten, dass das nur ein anders konfigurierter ADC 
mit Firmware ist. Müsste man aber wohl mal die QTouch lib lesen um das 
herauszufinden.



> Kennst du oder jemand anderes eine einfache externe Schaltung, welche
> einen Mikrocontroller via Interrupt vom Power-Down Mode wecken kann? Sie
> sollte eine Stromaufnahme von <10uA besitzen.

Taster geht nicht?

in der oben erwähnten AVR3005 wird ein Proximity Sensor erwähnt, 
spezifisch der AT42QT1010. Der hat zwar eine zu hohe Stromaufnahme, aber 
vllt. findest du noch was besseres.

es gibt mechanische Neigungsschalter/Vibrationsschalter, eventuell geht 
sowas.

wenns ganz experimentell werden soll Pin direkt auf Metallischen Kontakt 
führen (plus Schutzbeschaltung). Bei einem NE555 am Trigger Eingang hat 
das funktioniert, schön ist aber anders. ein Transistor/Darlington wird 
wohl notwendig sein, da so ein alter NE555 bipolare Eingänge hat.

von m.n. (Gast)


Lesenswert?

pegel schrieb:
> Ein Piezo mit Schutzschaltung für den INT Pin?
> Braucht keinen Strom, anklopfen genügt.

Das ist recht störempfindlich.
Eine offene "Leiterbahnschleife", die den Netzbrumm einfängt, könnte 
noch gehen.

von pegel (Gast)


Lesenswert?

m.n. schrieb:
> Das ist recht störempfindlich.

Das kommt natürlich auf die Umgebung an.

von Fabian G. (realghost)


Lesenswert?

m.n. schrieb:
> Du brauchst nur R1, R2 und C1 von der Schaltung:
> Beitrag "EIN-AUS mit Taster per Interrupt, ATtiny25 o.ä."

Meine eine ohne Taster sondern mit Touch.

Bernd K. schrieb:
> Man kann Touch zur Not sogar mit ganz normalen GPIO-Pins machen, es gibt
> sogar eine Variante die nur einen einzigen Pin und gar keine externe
> Beschaltung braucht, ist dann halt leider ziemlich CPU-Intensiv.

Wie sollte die denn aussehen?

K. S. schrieb:
> Hast du zufällig irgendeine Quelle zur wirklichen Funktionalität von
> dem? Da es keine Beschreibung der Register oder Hardware im Datenblatt
> gibt würde ich fast vermuten, dass das nur ein anders konfigurierter ADC
> mit Firmware ist. Müsste man aber wohl mal die QTouch lib lesen um das
> herauszufinden.

Das war ja auch mein Problem, dass ich nirgends etwas schlaues gefunden 
habe.

K. S. schrieb:
> Taster geht nicht?

Nein, muss Touch sein. Kostengünstig wäre von Vorteil, habe da auch 
schon an einen TTP223 gedachte, welcher sehr wenig Strom baucht und auch 
nicht teuer ist.

Am besten wäre eine Analoge Schaltung mit wenigen Bauteilen.


Ich entwickle einen kleinen Würfel, der Batterie betrieben ist und durch 
zwei Touch Knöpfe bedient wird. Dieser wird dann auch in einer grossen 
Serie produziert, deshalb auch kostengünstig.

von Bernd K. (prof7bit)


Lesenswert?

Fabian G. schrieb:
> Bernd K. schrieb:
>> Man kann Touch zur Not sogar mit ganz normalen GPIO-Pins machen, es gibt
>> sogar eine Variante die nur einen einzigen Pin und gar keine externe
>> Beschaltung braucht, ist dann halt leider ziemlich CPU-Intensiv.
>
> Wie sollte die denn aussehen?

Du misst mit ner engen Zählschleife die Zeit die vergeht zwischen 
Einschalten des Pullup und Erkennung von High. Zwischen zwei Messungen 
schaltest Du auf Ausgang-Low. Rechne etwa mit nem Dutzend 
Schleifendurchläufen bei unberührter Sensorfläche und deutlich mehr wenn 
der Finger in die Nähe kommt.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Fabian G. schrieb:
> Kennst du oder jemand anderes eine einfache externe Schaltung, welche
> einen Mikrocontroller via Interrupt vom Power-Down Mode wecken kann? Sie
> sollte eine Stromaufnahme von <10uA besitzen.

Der Watchdog ist mit ~0,7µA angegeben.
Für das Feststellen, ob gedrückt reicht erstmal nur eine AD-Wandlung und 
die dauert 120µs (200kHz / 25).
Läßt man dem MC etwa alle 200ms aufwachen, ist der AVR nur zu 0,06% 
aktiv und der mittlere Verbrauch ist bequem <10µA.
Eine externe Schaltung ist daher überflüssig.

von Fabian G. (realghost)


Lesenswert?

Peter D. schrieb:
> Der Watchdog ist mit ~0,7µA angegeben.
> Für das Feststellen, ob gedrückt reicht erstmal nur eine AD-Wandlung und
> die dauert 120µs (200kHz / 25).
> Läßt man dem MC etwa alle 200ms aufwachen, ist der AVR nur zu 0,06%
> aktiv und der mittlere Verbrauch ist bequem <10µA.
> Eine externe Schaltung ist daher überflüssig.

Das funktioniert also auch, wenn ich ein TouchPad auf einer Leiterplatte 
habe, welches mit Lötstoplack bedeckt ist?

Bernd K. schrieb:
> Du misst mit ner engen Zählschleife die Zeit die vergeht zwischen
> Einschalten des Pullup und Erkennung von High. Zwischen zwei Messungen
> schaltest Du auf Ausgang-Low. Rechne etwa mit nem Dutzend
> Schleifendurchläufen bei unberührter Sensorfläche und deutlich mehr wenn
> der Finger in die Nähe kommt.

Macht sinn Ja, aber dann habe ich sicher eine etwas höhere Stromaufnahme

von Bernd K. (prof7bit)


Lesenswert?

Fabian G. schrieb:
> Macht sinn Ja, aber dann habe ich sicher eine etwas höhere Stromaufnahme

Sicher, das ist der Nachteil davon. Es ist halt ein Notbehelf, aber 
immerhin ist es überhaupt möglich. Die nächstbessere Variante erfordert 
2 Pins und einen Kondensator, die wäre erheblich empfindlicher und 
präziser, aber mindestens genauso CPU-Intensiv. Besser wirds erst mit 
Analogschalter, Kondensator und zwei Timern, dann enfällt schonmal die 
CPU-Last.

Aber ein Controller der Touchsensing in Hardware schon eingebaut hat ist 
natürlich in jeder Hinsicht die bessere Lösung.

von Peter D. (peda)


Lesenswert?

Fabian G. schrieb:
> Das funktioniert also auch, wenn ich ein TouchPad auf einer Leiterplatte
> habe, welches mit Lötstoplack bedeckt ist?

Für meine Versuche haben ich eine Rasterplatine genommen und 3*5 
Lötaugen gebrückt. Gedrückt wird auf die B-Seite.

Die Variante mit dem ADC hat den Vorteil, daß sie ratiometisch mißt (VCC 
unabhängig) und weitgehend temperaturstabil ist. Die Ruhekapazität hängt 
hauptsächlich vom Aufbau ab, man könnte den Wert auch im EEPROM 
speichern.
Für die Methode mit Digitalpins muß das nicht zutreffen.

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.