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
Hallo Andre hast du was passendes gefunden zum AT42QT1070? Leider ist im Nez nicht viel zu finden. achim
Ich han jetzt erst mal welche bestellt.... Dann heisst es eben...learning by doing...... Naja.... jetzt über Ostern plane ich erst mal die Platine...
Platine ist fertig und bestückt Das mit leaning by doing klappt nicht so richtig. Finde kein Punkt um zu beginnen achim
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.