AT42QT1070 den gedrückten Taster auslesen

Hallo zusammen,

ich beiße mir aktuell die Zähne an einem AT42QT1070 aus.

Die i2C Verbindung steht. Habe zwei Taster angeschlossen, welche ich mittels Pull-Up Wiederständen angeschlossen habe. Der Change pin erkennt nun auch wunderbar, wenn ich einen der beiden Taster drücke.

Ich bekomme aber nicht ausgelesen, welcher Knopf gedrückt wurde. Aus Verschiedenen Artikeln habe ich mit Folgendes zusammen gesucht:

#include <Wire.h>

#define registerFirmware 0x01
#define detectStatus 0x02
#define bttnStatus 0x03

int AT42QT1070Adress = 0x1B;
int firmware = 0;
byte bttnNum = 0;
byte readStatus = 0;
int readStatus_OLD = -1;
long counter = 0;

void setup() {

  Serial.begin(9600);
  Wire.begin();
  delay(1000);

  // IC resetten zur Sicherheit
  Wire.beginTransmission(AT42QT1070Adress);
  Wire.write(0x39); // Reset Register anwaehlen
  Wire.write(0xFF); // 255 rein schreiben um Reset auszuloesen
  Wire.endTransmission();

  Wire.beginTransmission(AT42QT1070Adress);   //
    Wire.write(0x37); //set to register 0x37, disable hold down auto calibration
    Wire.write(0);
    Wire.endTransmission();
    delay(100);

 Wire.beginTransmission(AT42QT1070Adress);
  Wire.write(0x27); // Key 0
  Wire.write(0x01); // aktivieren
  // Wire.write(0x00); // deaktivieren
  Wire.endTransmission();
  delay(100);

  Wire.beginTransmission(AT42QT1070Adress);
  Wire.write(0x28); // Key 1
  Wire.write(0x01); // aktivieren
  //Wire.write(0x00); // deaktivieren
  Wire.endTransmission();
  delay(100);

  Wire.beginTransmission(AT42QT1070Adress);
  Wire.write(0x29); // Key 2
  // Wire.write(0x01); // aktivieren
  Wire.write(0x00); // deaktivieren
  Wire.endTransmission();
  delay(100);

  Wire.beginTransmission(AT42QT1070Adress);
  Wire.write(0x2A); // Key 3
  // Wire.write(0x01); // aktivieren
  Wire.write(0x00); // deaktivieren
  Wire.endTransmission();
  delay(100);

  Wire.beginTransmission(AT42QT1070Adress);
  Wire.write(0x2B); // Key 4
  // Wire.write(0x01); // aktivieren
  Wire.write(0x00); // deaktivieren
  Wire.endTransmission();
  delay(100);

  Wire.beginTransmission(AT42QT1070Adress);
  Wire.write(0x2C); // Key 5
  // Wire.write(0x01); // aktivieren
  Wire.write(0x00); // deaktivieren
  Wire.endTransmission();
  delay(100);

  Wire.beginTransmission(AT42QT1070Adress);
  Wire.write(0x3D); // Key 6
  Wire.write(0x01); // aktivieren
  // Wire.write(0x00); // deaktivieren
  Wire.endTransmission();
  delay(100);
}

void loop() {
  bttnNum = 0;
  readStatus = 0;
  // Anfrage auf den Status, beide müssen abgefragt werden, um Change zurück zu setzen
  Wire.beginTransmission(AT42QT1070Adress);
  Wire.write(detectStatus);
  Wire.endTransmission();
  Wire.requestFrom(AT42QT1070Adress, 1);
  readStatus = Wire.read();
  delay(100);

  // Erfragen des Tasters, beide müssen abgefragt werden, um Change zurück zu setzen
  Wire.beginTransmission(AT42QT1070Adress);
  Wire.write(bttnStatus);
  Wire.endTransmission();
  Wire.requestFrom(AT42QT1070Adress, 1);
  bttnNum = Wire.read();
  delay(100);

  if (readStatus != readStatus_OLD && readStatus <= 10) {
    Serial.println("********************");
    Serial.print("Lauf: ");
    Serial.println(counter);
    Serial.print("Firmwaare: ");
    Serial.println(firmware);
    Serial.print("ReadStatus: ");
    Serial.println(readStatus);
    Serial.print("Buttom Signal: ");
    Serial.print(bttnNum);
    Serial.print(" ");
    Serial.print(bitRead(bttnNum, 0));
    Serial.print(bitRead(bttnNum, 1));
    Serial.print(bitRead(bttnNum, 2));
    Serial.print(bitRead(bttnNum, 3));
    Serial.print(bitRead(bttnNum, 4));
    Serial.print(bitRead(bttnNum, 5));
    Serial.print(bitRead(bttnNum, 6));
    Serial.println(bitRead(bttnNum, 7));
    Serial.println("********************");
    Serial.println();
    readStatus_OLD = readStatus;
  }
  counter += 1;
}

Aler ergbniss erhalte ich

********************
Lauf: 328
Firmwaare: 21
ReadStatus: 1
Button Signal: 1 10000000
********************

********************
Lauf: 331
Firmwaare: 21
ReadStatus: 0
Button Signal: 0 00000000
********************

und zwar egal, welchen Knopf ich drücke. Habe ich einen Fehler im Gedankengang, oder hat der IC einen schlag weg?

Danke schon mal für alles Infos

Steve

AT42QT1070-ATL.pdf (510 KB)

Mach mal ein Foto wie Du den AT42QT1070 an die Taster angeschlossen hast.

Mir scheint daß Das PRogramm funktioniert. Du hast verschiedenen Anzeigen:
Button Signal: 1 10000000
Button Signal: 0 00000000

Grüße Uwe

Hallo und danke für die schnelle Antwort.

Anbei mein Aufbau, nicht das das was generelles falsch dran ist und ich nur den Wald vor lauter Bäumen nicht sehe. Hoffe man kann etwas erkennen :roll_eyes:

Grüße

Steve

Chaos_Lord:
und ich nur den Wald vor lauter Bäumen nicht sehe. Hoffe man kann etwas erkennen :roll_eyes:

Ich sehe, dass du da einen echten Taster angeschlossen hast...
Dafür ist der AT42QT1070 doch nicht gedacht, oder?

Das ist ein Sensorchip für Touch Felder.

Habe auch einen Touchsensor dran. habe es mit beiden probiert, weil ich zunächst an den Touch-Schaltern gezweifelt habe. Das Bild ist von einem Kombi versuch, Gleiches passiert aber bei 2 Touch-Feldern .....

Grüsse

Steve

Auch ein Touch Sensor mit seinem Sensorchip (rote Platine) ist falsch für den AT42QT1070.
Du mußt ein Sensorfeld an den Eingang des AT42QT1070 anschließen. Zur Not tut es auch ein Stück Draht oder irgendwas Metallisches.

Grüße Uwe

Chaos_Lord:
Habe auch einen Touchsensor dran. habe es mit beiden probiert, weil ich zunächst an den Touch-Schaltern gezweifelt habe. Das Bild ist von einem Kombi versuch, Gleiches passiert aber bei 2 Touch-Feldern .....

Warum ließt du nicht das Datenblatt?
Bitte tue das!
Da drin steht, eindeutig:

Key Outline Sizes: 6 mm x 6 mm
Als Mindestmaß für deine Touchfläche.

Auch sind da Beispielschaltungen drin.
Einen Taster, oder deine roten Sensormodule, sind da weit und breit nicht zu sehen.
Aber Schutzwiderstände!
Auf die du offensichtlich großzügig verzichtet hast.
Leider....

vor lauter Bäumen

Ja, der Baum.

Das mit den Touchpads habe ich wohl falsch verstanden. Ich muß also direkt ein Touchfläche anschließen.... und kann keine fertigen verwenden... Das ist mir wirklich entgangen. Danke für den Hinweis.

Grüße

Steve

Chaos_Lord:
Das mit den Touchpads habe ich wohl falsch verstanden. Ich muß also direkt ein Touchfläche anschließen.... und kann keine fertigen verwenden... Das ist mir wirklich entgangen. Danke für den Hinweis.

Grüße Steve

So is es.
Grüße Uwe