1
\$\begingroup\$

I am trying to do i2c communication between TI's cc3200 and atmel's touch IC AT42QT2120. I am able to read and write to different memory locations of the touch IC, but i am unable to get it's change line high. The datasheet of at42qt2120 says that after power up you need to read status bytes of the touch IC and after that the change line will go high. The change line is not going high even after repeated reads of status bytes.

I have done the same communication using atmega2560(arduino mega) as host, in that case that change line was going high after the status bytes read. The only difference between the two systems is of voltage level; atmega2560 arrangement working at 5v and cc3200 system working at 3.3v, but the Atmel chip can work in volatge range of 1.8v to 5.5v. I have pulled up the SDA SCL line by 4.7k resistances and CHANGE line by 47k resistance. Is there any point which i am missing here. Do i need to change the pullup resistances for a 3.3v system, even though i am able to do read/writes with present values.

\$\endgroup\$
1
\$\begingroup\$

There is a very good chance that the problem that you are encountering is due to the chip thinking that one of the touch inputs is being continually activated over and over again. That would result in the CHANGE output getting set active no matter how many times you try to read status to clear it.

You could verify this by reading out the status bits for each touch switch input and seeing what data the chip presents about each one.

As an additional test you could start by setting all keys to disabled state by setting bit 0 of each of their control bytes to 1. With all inputs disabled the CHANGE output should go inactive. Then enable each touch input individually one by one. That should allow you to locate which input(s) are causing the continual detection problem.

Once you know which inputs are causing the problem you can start the specific job of trying to understand why. It could be improper layout or bad connections. With touch type inputs it could also be coupling from other adjacent circuits.

\$\endgroup\$
  • \$\begingroup\$ i will try the above solution but the same touch circuit is working totally fine with a atmega2560 as host, no false detections, CHANGE active only when touch is detected. \$\endgroup\$ – Nirmala Feb 19 '15 at 5:06
  • \$\begingroup\$ checked the status bit , it is changing between 0 (no detection), 1(touch detected) and 128 (calibration). But the change line is not high even when status byte is zero. Tried disabling all inputs but change line is still low, probably because it is pulled low during power up/reset and released when status byte is read. I am reading the status byte continuously. \$\endgroup\$ – Nirmala Feb 19 '15 at 6:07
  • \$\begingroup\$ Changing the pull-up to 3.3k got it working. Thanks Michael for the help. \$\endgroup\$ – Nirmala Feb 19 '15 at 13:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.