Ahora veo que tiene I2C y SPI modificado ( 2-wire le llama y que es el default), seleccionable por el pad/pin del IC. El 2-wire se diferencia del SPI, en que usa el pin de datos para indicar que el dato esta listo, nada mas, es la unica diferencia que tiene con el SPI original.
Sigo sin entender porque te estas complicando la vida.
Si el dispositivo esta realizado para SPI, entonces usas SPI.
Si el dispositivo ofrece I2C, usa I2C.
Si queres One-Wire, entonces buscas un integrado con esa interfaz, o creas un convertidor One-wire - SPI/I2C/UART a la salida de ese integrado. Y esto te permite hacer lo que quieras, por ejemplo podrias usar la UART, solo enviar cuando se detecta algun cambio en el teclado unicamente. Asi la interrupcion de la UART es la deteccion de una tecla y ademas usas un solo hilo ( sin contar el GND)
pero no seria mejor ver en que tiempo el estado cambia al recibir los 16 bits
Para que? Si tenes modulos que lo hacen por vos, para que queres tener ocupado al micro esperando un tiempo, o para que complicarte trabajando con tiempos cuando podes hacerlo con el modulo?. Encuentro la situacion igual que cuando usas un I2C por software, teniendo un modulo I2C por hardware.
según el datasheet dice que después de la interrupción se genera un pulso en un tiempo determinado dependiendo de la tecla presionada
De donde sacaste eso?
Segun el datasheet te muestra exactamente que tenes que enviar en ambas configuraciones 2-wire o I2C, todos con tiempos definidos por la frecuencia de reloj de ambos protocolos.
En el 2 wire, vos tenes una entrada, cuando esta se pone en 1 el integrado te avisa que hay un dato, vos solo debes leer. Esto te obliga a tener si o si que estar "polleando" el pin de entrada. Yo dije de combinarlo con un SPI porque es lo mas simple, lo pones como entrada, detectas el 1, y luego de alli cambias a SPI y envias el CLK. Terminada la lectura volves a lo anterior. La otra es omitir totalmente el bit este, y solo enviar pulsos de clock en una frecuencia menor a la de sampleo del micro y LISTO, necesitas de 1 timer y la UART. O lo polleas cuando quieras.
Con I2C tenes que enviar el START, 1010+address+R y de alli recibis 1 o 2 bytes segun el modo, al terminar de recibir cada byte enviar un ACK para el primero y un NACK para el segundo byte para los 16bits o si trabajas con 8 bits, solo debes enviar un NACK luego de recibido.
No hay ningun tiempo por tecla presionada, no hay ninguna magia, ambos son: Configurar el modulo, enviar y recibir. Y listo..
Lo que si tenes es una frecuencia de muestreo de teclas, la cual la definis por una resistencia en uno de los pines, que es de 8 o 64Hz, Y tambien una especie de "proteccion" en caso de que alguna o varias teclas se mantengan presionado por mucho tiempo (algun objeto que obstruya y afecte al teclado )
PD: Este datasheet tiene mas hojas y parece mas completo:
http://www.robotpark.com/image/data/PRO/91409/TTP229.pdfEn el datasheet muestra tambien el estado por "default" de la placa que es sin conectar ningun jumper de los que posee, aca una info mas grafica en caso de que lo omitas en el datasheet:
http://hobbycomponents.com/images/forum/HCMODU0079_Options.png