Verständnisfrage qt1070

OP #4493379
Lesenswert?

Hallo......

Ich habe demnächst vor in meinem nächsten Projekt den AT42QT1070
im Commsmode zu verwenden.

Bei den Register hatte ich dann ein paar Fragezeichen über dem Kopf 
schweben.

Adresse 3 - KeyStatus ist klar, und diesen werde ich wahrscheinlich auch 
nur verwenden (abgesehen von der initialisierung)

Aber was genau soll "KeySignal" und "ReferenceData" sein?
Und warum haben die pro Key 16bit?

Über I2C mach ich mir weniger Gedanken, da ich den Bus schon bei anderen 
Bauteilen erfolgreich verwende.

Obwohl ich im Forum schon gelesen habe daß die 400kHz, wie im Datenblatt 
beschrieben, nicht so richtig funktionieren.

btw.: Ich programmiere in Assembler und wäre froh wenn ich für den 
qt1070 Beispiele finden würde..... (die Kristallgoogle wirft nichts 
brauchbares raus)




Danke im Vorraus.


Andre
Gast #4521164
Lesenswert?

also ist schon was her wo ich damit rumgespielt habe.

In Adresse 3 kann man nur 1 oder 0, also ob das Pad berührt wird oder 
nicht, auslesen.
In dem Register Keysignal kann man noch die aktuelle "Kapazität" 
ablesen. Sprich man kann entweder den Fingerprint über Register 3 
auslesen oder man ließt das Keysignal aus und setzt selber Schwellen in 
dem Mikrokontroller-Programm.

In dem Register "Referencedate" wurde soweit ich weiß die gemessene 
Kapazität, die nach dem Reset/Start vorhanden war, abgelegt. Damit hat 
der QT ein Vergleichswert zum aktuellen Ergebnis und kann entscheiden 
wann die Schwelle von einer 0 zur 1 überschritten wird.
#4521266
Lesenswert?

Hallo Alex
habe mir das genannte Teil angesehen. Dabei geht es ja um das Prinzip, 
wie so ein Sensor funktioniert. Auf meinem Brett hatte ich aufgebaut und 
probiert. Selbsz bei diesen fliegenden Aufbau ging es ohne Probleme (mal 
mehr, mal weniger).
Mich interessiert aber besonders der AT42QT1070 mit I2C Bus. Der eignet 
sich besonders zum Einsatz in mein System. Habe mir auch Teile des 
Datenblatts durchgelesn und übersetzt und bin jetz am probiern wie es 
geht. Leider ohne jeden Erfolg bisher. Suche deshalb nach Info dazu
achim
#4521310
Lesenswert?

Würde sagen fast alles geht nicht.
Was für Register habe ich und welche Werte kann ich damit setzen?
kann ich die Empfindlichkeit durch andere Angaben im register verändern?
Wie lese ich sie aus?
Habe versucht wie bei den anderen über I2C start usw. es zu machen, 
klappt nicht.
In welchen Registern lese ich aus?
Da ich 7 Pads habe, habe ich 7 Werte auszulesen.
Kann ich diese so weiter verarbeiten wie bei den PCF .. ?
Sorry für die vielen Fragen. Lieber eine frage mehr als zu wenig
achim
#4521323
Lesenswert?

Habe es bei dem PCF 8591 so gemacht:
1
i2c_start(PCF8591w);
2
      i2c_write(0x44);   // Analog out enable, auto increment, channel 0 0x44
3
      i2c_stop();
4
      i2c_start(PCF8591r);
5
      i2c_readAck();            // first data is old
6
      for (i=0; i<4; i++)
7
        {
8
        results[i]=i2c_readAck();
9
        }

- Starte damit den Bus
- übertrage die Schreib Adresse
- Sop den Bus
- Starte den Bus
- Sende lesen
- lese die 4 Register aus und schreibe sie in results [..]
(Adresse muss geändert werden)
Damit kann ich die Werte weiter verarbeiten
achim
#4522231
Lesenswert?

Muss noch mal fragen.
Nach den Datenblatt vom AT42QT1070, Seite 15 Tabelle 5-1, in den Adresse 
4 bis 17, sind die  Werte von Key Signal 0 bis 6 drin. Jeder Wert 
besteht aus einem oberen und einem unteren Byte (msb/lsb)
1
msb_touch = i2c_readAck();    //...speichere oberes Bit
2
lsb_touch = i2c_readNak();    //...speichere unteres Bit
Beide Daten zusammen
1
touch_wrd = (msb_touch << 8 | lsb_touch);  // Zusammensetzung von o. & u. Byte
2
touch = msb_touch;                  // Umwandlung in ein Signed Char
Ist das so richtig?
achim
#4522251
Lesenswert?

Eine Kontrolle ob der IC QT da ist:
1
void touchfassung()
2
{
3
  ret = i2c_start(0x36);          // Start Lesen 
4
  if (ret == 0)
5
  {                         // Wenn QT ein OK sendet...
6
    msb_touch = i2c_readAck();    //...speichere oberes Bit
7
    lsb_touch = i2c_readNak();    //...speichere unteres Bit
8
  }
9
  else                                // Fehlererkennung
10
  {                              // Wenn QT kein OK sendet
11
    lcd_command(LCD_CLEAR);      // Leere Display
12
    lcd_printlc(1,13,"READ");    // "Lesevorgang"
13
    lcd_printlc(2,13,"NOK");    // "Nicht OK (NOK)"
14
  }
15
}
Im Datenblatt des QT wird die Adresse 0x1B angegeben. Von Spess stammt 
der Hinweis, das das falsch ist. Verwende ich 0x36, bekomme ich keine 
Fehlermeldung.
Wie kann ich die Adressen auslesen?
achim

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren