Verständnisfrage qt1070

OP #4493379
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
Ich han jetzt erst mal welche bestellt....

Dann heisst es eben...learning by doing......

Naja.... jetzt über Ostern plane ich erst mal die Platine...
(Firma: Ucore Fotografie www.ucore.de) Persönliche Seite
Hallo,
schau dir mal Kapitel 4.2 aus diesem Dokument an, vielleicht wird es 
dann klarer:
www.atmel.com/images/qtan0062.pdf

Es ist die Application Note QTAN0062 von Atmel zum Thema Q-Touch:
"QTouch and QMatrix Sensitivity Tuning for Keys, Slider and Wheels"

Gruß,
Alex
Gast
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.
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.