Autor Tema: teclado capacitivo ttp229 i2c mikroc  (Leído 655 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado yerolandin

  • PIC10
  • *
  • Mensajes: 3
teclado capacitivo ttp229 i2c mikroc
« en: 29 de Diciembre de 2016, 10:43:09 »
hola foreros, compre un teclado capacitivo i2c ttp229 , para usarlo con un pic18f4550 por i2c, pero les confieso que no doy una con este teclado por i2c  :5], por favor alguin me puede dar algun ejemplo por i2c en mikroc , graciaaaaaaaaas

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 6708
Re:teclado capacitivo ttp229 i2c mikroc
« Respuesta #1 en: 29 de Diciembre de 2016, 11:00:03 »
Acabo de ver el datasheet y no es I2C, es un SPI. El cual lo mas seguro es que tengas que realizarlo por software por la cantidad de bits. Pero se podria hacer por hardware.

Ademas no se como estan las entradas que determinan si se usa 8 o 16 bits y si esta invertido o no. Esto se realiza con las entradas TP0 y TP1.
Luego la forma de envio y los tiempos de TODOS los casos estan explicados claramente en el datasheet, y los cuales tenes que respetar.

http://www.tontek.com.tw/download.asp?sn=726

Pagina 8.

Desconectado yerolandin

  • PIC10
  • *
  • Mensajes: 3
Re:teclado capacitivo ttp229 i2c mikroc
« Respuesta #2 en: 29 de Diciembre de 2016, 11:25:11 »
hola, gracias por su pronta respuesta,  en el datasheet dice que los pines 12 y 13 son SDO y SCL, parece que confundi SDO con SDA, gracias :(

Desconectado mastercel

  • PIC10
  • *
  • Mensajes: 8
Re:teclado capacitivo ttp229 i2c mikroc
« Respuesta #3 en: 04 de Julio de 2017, 22:12:21 »
pues creo creer que este intergado es muy parecido al pcb8574 y el protocolo si es i2c , el problema alomejor es la testeada de cada tecla pulsada

Desconectado mastercel

  • PIC10
  • *
  • Mensajes: 8
Re:teclado capacitivo ttp229 i2c mikroc
« Respuesta #4 en: 10 de Enero de 2018, 01:40:10 »
Cabe mencionar que el dstasheet si menciona que es i2c, https://www.openimpulse.com/blog/wp-content/uploads/wpsc/downloadables/TTP229-Capacitive-Touch-Sensor-Module-16-channels-Datasheet.pdf  lo que pasa es que en las placas que venden no viene habilitado el pin 14 y ese es el sda , por lo que se tiene que eliminar un pin para poder hacer un puente hacia los conectores de la pcb , asi el sda queda y el scl, y la interrupcion por tecla presionada quedaria en sdo , voy a hacer pruebas y posteare un video, por que lo estoy implementando en pic16f1827 .

Desconectado mastercel

  • PIC10
  • *
  • Mensajes: 8
Re:teclado capacitivo ttp229 i2c mikroc
« Respuesta #5 en: 12 de Enero de 2018, 00:01:15 »
me respondo a mi mismo, el integrado que tiene esta PCB , es ttp229-bsf y el que tiene i2c es ttp229-Lsf asi que el que estamos usando(ttp229-bsf) tiene protocolo 2wire serial , mas no i2c ni spi , por que el spi recordemos que tiene 4 o mas pines, ya sea pata reloj y para llamar a cada uno de los dispositivos. No he leido como funciona bien este modulo, pero creo que seria mejor cambiar de ic o  ver el protocolo i2c a ver si se puede implementar algo aqui.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 6708
Re:teclado capacitivo ttp229 i2c mikroc
« Respuesta #6 en: 12 de Enero de 2018, 09:54:16 »
Es un SPI, en el SPI tenes 2 lineas como minimo, CLK, salida serial ( MOSI ) , entrada serial (MISO) y seleccion de Chip (CS)

Lo minimo que podes tener es leer, que seria CLK y MISO en tu integrado o en como lo clasifica PIC es SDI (serial data input) y CLK. Lo feo es que la salida tambien quedaria sin utilizar en el PIC

El procedimiento para leer es leer el pin de datos de entrada hasta que exista un 0 y esperar un minimo de 100us, luego de alli usar el SPI , enviar cualquier cosa por ejemplo 0x00 y con eso el reloj empieza a correr lo cual te envia los datos que queres leer, lo repetis si es que configuraste el modulo en 16bits.

Desconectado elreypic2

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 824
Re:teclado capacitivo ttp229 i2c mikroc
« Respuesta #7 en: 12 de Enero de 2018, 16:54:51 »
Que tal yerolandin,

Si estas usando ese módulo en particular, al ver el esquemático te darás cuenta que los pines de TP0 al TP7 (K0-K7) tienen unas resistencias de pull down de alto valor (1Mohm). Esos pines son para configurar el modo de operación del TTP229. Por lo tanto el modo de operación configurado es:

TP7 (SKSRT): Maximum key-on time ---> 60 segundos
TP6 (SLWPTM): Wake-up sampling rate --->64Hz
TP5 (WPSCT) : Sampling length at sleep ---> 2ms
TP4 (SKMS0) y TP3 (SKMS1): All Muti-keys ---> one group (16keys)
TP2 (KYSEL): 16 input keys mode (Modo de 16 "teclas")
TP1 (SAHL) TP0(OPDEN): 2-wires serial interface===> CMOS output active-high

Por lo tanto el TTP229 esta configurado para reportar el estado de las 16 "teclas" en forma serial con protocolo 2-wire active high y/o I2C, pero el pin de SDA no está disponible en tu módulo, por lo que tienes que usar la interface serial de 2-wire active high, la cula usa el pin SDO y el pin SCL.

La forma del protocolo está descrito en el diagrama de la figura 3-4-1 de la página 9 de la hoja de datos. Y básicamente lo que tienes que hacer es tener el pin del SCL del microcontrolador en bajo, entonces tienes que esperar a que se genere el pulso DV en el pin SDO del módulo (el cual tiene una duración de 93us) luego esperas otros 10us (Tw) y comienzas en enviar los pulsos de clock por la line SCL y en cada flanco de bajada lees el estado del SDO y ese será el estado de la "tecla". El numero de pulsos en el SCL es de 16 uno por cada tecla. No veo mayor problema de implementarlo.

Ojalá esto te sirva.

elreypic.

Desconectado mastercel

  • PIC10
  • *
  • Mensajes: 8
Re:teclado capacitivo ttp229 i2c mikroc
« Respuesta #8 en: 23 de Enero de 2018, 02:02:50 »
ok, entiendo que debe haber un pulso de reloj, pero no seria mejor ver en que tiempo el estado cambia al recibir los 16 bits, algo así como el one wire, que en SDO al generar la interrupción lo conectemos a RB0, y  SCL lo pongamos en el RB1 y así estemos esperando a que exista una interrupción para  recibir el primer bit  conforme a un tiempo determinado , 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, , por que aun así si lo hacemos por i2c adaptado, tendríamos que saltarnos el START bit y ACK e ir directo a la recepción del dato ,y la verdad no creo que sean los mismos tiempos de ejecución , la otra seria crear toda una subrutina especial para este protocolo, alguien lo tiene información mas detallada de este protocolo para checarlo?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 6708
Re:teclado capacitivo ttp229 i2c mikroc
« Respuesta #9 en: 23 de Enero de 2018, 07:38:15 »
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)

Citar
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.

Citar
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.pdf

En 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
« Última modificación: 23 de Enero de 2018, 07:50:51 por KILLERJC »

Desconectado mastercel

  • PIC10
  • *
  • Mensajes: 8
Re:teclado capacitivo ttp229 i2c mikroc
« Respuesta #10 en: 25 de Enero de 2018, 01:24:13 »
ok, entiendo que puedes adaptar un SPI , la pregunta seria entonces, el pin de entrada seria al RB0 por interrupción de periferico de el pic (lo que en el caso de otro modulo SPI  seria SS),al ser en altoo bajo  deshabilito la interrupción , espero unos us segundos como indica  datasheet y  de allí  habilito SPI del pic  mandando  pulsos de reloj  por SCLK , en seguida habilito la recepción de mi dato por la linea SDI del pic  para esperar el dato completo, ya que este completo lo guardo , vuelvo a habilitar mi interrupción por RB0 y volver al ciclo , "o estoy mal" ?, los pines quedarían conectados de la siguiente forma : :oops: :)

modulo             pic
SCL                 SCLK (SCK)
SDO                SDI
SDO                RB0
« Última modificación: 25 de Enero de 2018, 01:32:46 por mastercel »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 6708
Re:teclado capacitivo ttp229 i2c mikroc
« Respuesta #11 en: 25 de Enero de 2018, 07:03:01 »
Pienso que lo podes hacer de 2 formas:

- Si no pensas detectar el DV, entonces aproximadamente en un tiempo mayor a 32ms podes leerlo, si queres podes leerlo cada 125ms.
  Aca no detectas nada, simplemente lo pones en SPI, y cada 125ms tomas el valor, digo cada 125ms ya que si esta con refresco de 8Hz no tiene sentido leerlo antes.
  Imagino que deberias poder leerlo sin problemas...

- La otra es como decis.
  SCL   al RB1/SCK del PIC
  SDO  al RB0/SDI del PIC

  Configuras la interrupcion por flanco ascendente. Luego del flanco ascendente son 10us minimo para enviar el clock, te podes tomar mas ya que no hay un maximo, entonces tu interrupcion puede habilitar una flag, y de alli en el programa principal, desactivar la interrupcion de RB0, cambiar al SPI, leer los 2 bytes (escribir 0x00 y leer lo que llego - 2 veces ), limpiar flag de RB0, activar la interrupcion nuevamente.


Este ultimo seria el caso mas complejo que se presente.
Solo deberias considerar que este correctamente configurado el modulo para que sea por SPI, o sino configurarlo para que sea I2C y comunicarte con eso.
La frecuencia del SPI va de 1KHz a 512Khz por las dudas


 

anything