Raspberry Pi 4 TTP223 Kapazitiver Touch Sensor / Taster

  • Halle ersteinmal.


    Habe schon etwas im Forum gestöbert aber nicht das richtige gefunden.

    Ich habe einen Raspberry Pi4 und wollte einen TTP223 Sensor, als Ein/Ausschalter, verbauen. Ich habe überall gesehen das es mit einem normalen Taster umgesetzt wurde.

    Ich finde dieses aber nicht elegant genug.

    Der Sinn dahinter: Habe schon mehrmals den Pi (Octoprint) heruntergefahren und dann am Computer weiter gearbeitet (3D Zeichnungen). Dann dachte ich mir "jetzt schickst du es einfach noch schnell auf den PI"


    Pustekuchen. der Pi war ja heruntergefahrten. Also Netzkabel gezogen und wieder eingesteckt. Also musste ein Taster her der den Pi ganz einfach neu startet. Wie gesagt Idee war dann ein Touchsenor und kein Standard Taster.


    Habe diesen Sensor bestellt und folgendermaßen angeschlossen:


    GND - Pin 9 (GND)

    VCC - Pin 1 (3,3V PWR)

    I/O - Pin 5 (I2C1 SCL bzw. GPIO 3)


    Über Pin 4 und 6 habe ich einen Lüfter angeschlossen.


    Dann habe ich in der Config.txt folgende Zeilen eingefügt:


    #Ansteuerung An/Ausschalter

    dtoverlay=gpio-shutdown,gpio_pin=3, active_low=1,gpio_pull=up


    Das funktioniert auch so weit (Test mehrmals ein und wieder ausgeschaltet). Aber in unterschliedlichen abständen (sporadisch) schaltet sich der PI aus. Ich dachte zuerst das es mit dem "Power Save" zu tuhen hat. Dieser ist deaktiviert und trotzdem schaltet er ab. Habe dann den Sensor abgeklemmt und 48 Stunden später läuft der PI immer noch normal. Ich habe jetzt auch noch zusätzlich getestet mit einem normalen Taster. Bis jetzt über 2 Stunden läuft der Pi ohne Probleme. Liegt es an dem Script oder am verbauten Wiederstand (auf der Touchplatine). Ich würde mich sehr freuen wenn mir jemand helfen würde das Problem zu lösen.

  • Moin lord114nikon,


    erstmal: Herzlich Willkommen im Forum!


    Du hast zwar alles richtig gemacht, aber nun kommt das Aber.


    Interne Pullup-Widerstände sind relativ hochohmig.

    Schalte den internen Widerstand aus und nimm einen externen Widerstand. Fang bei 10KOhm an. Wenn es nicht besser wird werde kleiner im Widerstand.

    Bis 4,7K sollte es gehen.


    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Touchsensoren sind schwierig, da sie Kapazität messen ohne eine zweite Elektrode zu haben. Im Prinzip wird nur die Veränderung des Dielektrikiums gemessen, wenn du einen Finger in die Nähe des Tastfeldes bringst.


    Aus dem Datenblatt:

    Quote

    The power supply must be stable. If the supply voltage drift or shift quickly, maybe causing sensitivity anomalies or false detections.


    Hinzu kommt, dass die Messung auch empfindlich auf Störungen durch Funk reagiert, z:B. Ausschalten vom Motor des Staubsauges.


    Da der RPi mit einem einzelnen Ereignis startet, ist Abhilfe schwierig. Gut wäre, wenn der RPi erst nach 0,5 Sekunden einschalten würde. Das gibt der Chip aber nicht her. Auf Seite 5 des Datenblatts siehst du ein Timing Diagramm

    Glaube ersetzt kein Wissen

  • Interne Pullup-Widerstände sind relativ hochohmig.

    Schalte den internen Widerstand aus und nimm einen externen Widerstand. Fang bei 10KOhm an.

    Eventuell hast du Wissen über den RPi, das ich nicht habe. Was soll das Ändern eines Pullup-Widerstands bringen wenn der Ausgangsstrom des Chips 4mA bzw 8mA betragen kann.

    Glaube ersetzt kein Wissen

  • Moin bombom,


    ein GPIO-Pin als Eingang mit einem Draht dran wirkt als Antenne.

    Durch einen hochohmigen Pull-up fließt zuwenig Strom um den Pin sicher auf Plus-Spannung zuhalten.

    Darum nimmt man ihn etwas kleiner.


    Diese Ausführung ist sehr kurz und lückenhaft. Sollte aber den Sinn erklären.


    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Danke ersteinmal für die Infos "Bernd666 & bombom"


    Wie setze ich es aber um das ich den internen Widerstand abschalte?

    Und den externen Widerstand löte ich dann einfach an VCC oder I/O an?


    Bin Elektrotechnisch nicht so versiert, darum bräuchte ich Hilfe.


    Grüsse

  • ein GPIO-Pin als Eingang mit einem Draht dran wirkt als Antenne.

    OK, jeder Draht der einer Wechslspannung ausgesetzt ist, wirkt als Antenne, vereinfacht dargestellt. Damit nun wirksam Energie abgegeben oder aufgenommen werden kann, sollte die Antenne ein ungeradzahliges Vielfaches von Lambda/4 betragen. Als längste Strecke vom BCMxxxx bis zum TTP223 schätze ich grob auf 10cm, eigentlich weniger. Die daraus resultierende Frequenz darf du dir selbst ausrechnen.


    Hinzu kommt, dass es kein Draht mit offenem Ende (aka Antenne) ist, sondern die andere Seite des "Drahts" im Chip des TTP223 endet.


    Und was ein Pullup-Widerstand ist und bewirkt ist mir durchaus bekannt. Die Frage war eher was die Verringerung bewirken soll, wenn am anderen Ende ein "CMOS outout" sitzt.

    Glaube ersetzt kein Wissen

  • Wie setze ich es aber um das ich den internen Widerstand abschalte?

    Und den externen Widerstand löte ich dann einfach an VCC oder I/O an?

    Du musst die internen Pullup-Widerstände nicht abschalten. Es würde reichen die zusätzlichen Widerstände parallel zu den internen von GPIO nach Vcc anzuschliessen. Die internen Pullups haben zwischen 50 kOhm und 65 kOhm, wenn extern noch 10 kOhm parallel dazukommen beträgt der gesamte Pullup-Widerstand 8,3 kOhm bis 8,7 kOhm

    Glaube ersetzt kein Wissen

  • Moin lord114nikon,


    in dem du folgendes in die /boot/config.txt schreibst.


    dtoverlay=gpio-shutdown,gpio_pin=3, active_low=1,gpio_pull=off Siehe /boot/overlays/README. Damit wird der interne Pull-up ausgeschaltet.


    Dann nimmst du den Widerstand und verbindest den Pin3 mit +5Volt +3,3Volt. Dadurch wird der Pin permanent nach 53,3Volt gezogen. Wenn nun der Taster nach Masse/GND schaltet, wird ein Impuls ausgelöst.


    Aber, immer diese aber, es kann auch sein das bombom recht hat und der Schalter reagiert. Sprich er erkennt einen Tastendruck.

    Ich weiß nicht ob, wie im Datenblatt dargestellt, du an deinem Taster einen Drehkondensator hast, mit dem man die Empfindlichkeit verstellen kann.

    Aber man kann ja einen Versuch unternehmen. Nur nicht beides gleichzeitig!!


    bombom : Dies ist nicht dein Thread!

    Ich werde ihn nicht zerstören um elektronische Grundsatzfragen zu klären. Du kannst gerne eine Offtopic-Thread aufmachen.


    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

    Edited 2 times, last by Bernd666: Aus 5V 3,3V gemacht ().

  • Oh man das ich ja doch nicht so einfach wie ich dachte.


    Aber wie "fred0815" schrieb. Wieso kommt jetzt der 5 Volt Pin zum Einsatz?


    Ich will mich jetzt nicht zu Aalglatt anstellen aber jetzt sehe ich Fragenzeichen.

    Ich werde mir erstmal Widerstände besorgen von 4,7kOhm bis 10kOhm. Dann werde ich mal eine Zeichnung erstellen wie ich es verstanden habe.


    Danke ersteinmal bis hier hin.

  • Wieso 5 Volt, wenn der GPIO nur 3,3 Volt verträgt ? :conf:

    1. Es war spät

    2. Es spielt in diesem Fall (wenn interne Pullup aktiv) keine Rolle, ob 3,3 V oder 5V. Wichtig ist, dass der Pullup-Widerstand auf ein festes Potential gelegt wird.

    Glaube ersetzt kein Wissen

    Edited once, last by bombom ().

  • Oh man das ich ja doch nicht so einfach wie ich dachte.

    Nein eigentlich ist es nicht schwierig. Deine Schaltung läuft ja, nur leider nicht zu 100%.


    Fehlersuche bei sporadisch auftretenden Ereignissen ist schwer. Geh am Besten systematisch vor:

    1. Was ist passiert?

    Der RPi ist heruntergefahren. Nur herunter? Nie gestartet?

    2. Warum ist es passiert?

    Weil der RPi einen Impuls erhalten hat.

    3. Wer hat den Impuls erzeugt

    a) Entweder hat sich der GPIO-Pin direkt etwas eingefangen, was durch den Pullup entschärft sein sollte oder

    b) der TTP223 hat geschaltet

    4. Warum hat der TTP223 geschaltet?

    a) Es hat sich die Kapazität geändert. Ich habe keine Ahnung, ob da eine Fliege auf der Sensor-Fläche ausreichen würde.

    b) Der Sensor ist empfindlich gegen Spannungsschwankungen. Würde ein Kondensator beim Chip helfen?

    c) Gab es elektromagnetische Störeinflüsse von aussen? Hat Jemand z.B. einen Motor an- oder ausgeschaltet?



    Wenn es nur das Herunterfahren ist, dann kannst du das doch im Programm, das für das Herunterfahren zuständig ist abfangen. Der GPIO-Pin sollte mindestens eine Sekunde gedrückt sein, oder so ähnlich.

    Glaube ersetzt kein Wissen

  • Um die Empfindlichkeit des Touchsensors etwas zu verringern, könntest Du einen zusätzlichen Keramikkondensator parallel zwischen Antenne und GND schalten. Den Sensor ( auch evtl. extern verbaute Pullupwiderstände ) solltest Du nur mit 3,3V betreiben.


    Edit:

    Das mit den externen Pullupwiderstand ist mit ziemlicher Sicherheit Blödsinn, da Pin 5 bestimmt schon als I2C Bus Pin per 2,2K Widerstand mit 3,3V verbunden ist. Zumindest war dies bei den vorherigen RPI Modellen so. Ob es beim RPi 4 auch so ist, kann ich leider nicht zu 100% bestätigen, da dies in dem Schaltplan Auszug des RPi 4 , nicht ersichtlich ist.

  • Das Problem wird ein unzeitiges Signal vom Touch Sensor sein. Eine Beeinflussung durch die Verkabelung des Sensors kann man durch die auf dem RPi 4 vermutl, fest verbauten externen Pullupwiderstände ausschließen. Da bringt es dann auch nichts, wenn man weitere Pullupwiderstände parallel schaltet, ausserdem wird ja am RPi Eingang ein Low Signal zum Starten bzw. Schutdown erwartet.