sábado, 25 de outubro de 2014

Telas Touchscreen Resistivas


Recentemente adquiri no Mercado Livre uma tela touchscreen resistiva dessas usadas em tablets chineses de primeira geração. Estas telas são muito baratas, a minha custou algo em torno de R$23,00.

O funcionamento destas telas é muito simples. Elas são compostas de duas camadas de material resistivo sobrepostas e isoladas uma da outra por minúsculos pontos.
Eletricamente, o equivalente é o seguinte.


Quando a tela é tocada a resistência entre o ponto do toque e os eletrodos é proporcional à distância entre o ponto e o eletrodo.



Uma das maneiras de se medir o ponto de toque é alimentando-se um dos eixos com uma tensão conhecida e medir a tensão resultante em um dos eletrodos do outro eixo.

Se a resistência interna do medidor (RM) for muito grande em relação à resistência dos eixos podemos considerar que a posição do ponto de toque no eixo X é proporcional à tensão medida no eletrodo Y+.



Para medir o outro eixo, no exemplo o eixo Y, aplica-se a tensão sobre os eletrodos Y+ e Y- e mede-se a tensão resultante no eletrodo X+.
Analogamente, para o eixo Y.

Para se medir uma tela touchscreen com um microcontrolador, é necessário que o mesmo possua portas de entrada e saída e conversores A/D.

Para se medir o eixo Y, Ativam-se como saídas os pinos conectados aos eletrodos Y+ (nível alto) e Y-(nível baixo) e configura-se o pino conectado ao pino X+ como entrada do ADC.
Considerando-se a resolução do ADC como o valor de ESCALA e a tensão de alimentação VCC como referência do ADC, basta-se fazer a leitura do ADC para se ter o valor de posição. Simples assim!!!

POSICAO=ADC_READ( );


Bom... nem tanto!!! Na prática é preciso levar outras coisas em consideração:

A resistência típica de uma eixo de tela de toque costuma estar entre 100 Ohms e 900 Ohms. Isso significa que, se alimentado com 5Volts, a corrente que atravessa a tela pode chegar a 50mA, o que é bem maior do que a maioria dos microcontroladores consegue fornecer, que é algo em torno dos 25mA. Mesmo que a corrente fique abaixo desse valor, é preciso considerar-se as quedas de tensão nos elementos de chaveamento do microcontrolador, que aparecem em nosso circuito como as resistências R-HI e R-LO.


Para resolver o problema da queda de tensão nos elementos de chaveamento alguns chips dedicados à leitura de telas resistivas, como o AD7843 da Analog Devices, possuem um modo de leitura diferencial, onde as referências para o ADC são retiradas diretamente dos terminais de saída


Como não dispomos deste recurso na maioria dos microcontroladores, cuja referência para o conversor A/D é a própria tensão de alimentação a solução é inovar.

Vamos nos aproveitar de uma característica intrínseca de alguns microcontroladores, e entre eles o PIC16F688.  Usaremos como exemplo os pinos RC0/RC1.
Como pode ser visto no circuito acima, o ADC fica conectado o tempo todo ao pino de I/O. Isso significa que é possível medir a tensão no pino sob carga! Ou seja, é possível medir a diferença de tensão entre os pinos (+) e (-) e compensar nos cálculos as quedas de tensão nos elementos de chaveamento:

Desta forma, para o eixo X:


E para o eixo Y:



Observações Finais:


  • A medição de tensão diretamente nos pinos resolve o problema da compensação, mas o resultado final tem menos bits do que a resolução intrínseca do ADC.
  • A tela 'touch' é um sensor ruidoso, portanto é necessário verificar se a tensão no ponto de toque está entre V_HI e V_LO. 

  • A fim de economizar energia, principalmente se a tela for utilizada numa aplicação com baterias, mantenha em alta impedância todos os pinos conectados aos eletrodos, e faça medições somente 
  • Para se detectar se a tela está sendo pressionada ou não, utilize a configuração abaixo e meça como entrada digital o pino conectado ao eletrodo Y+. Caso a tela esteja sendo tocada, o valor lido vai ser "0". 










Um comentário:

Alexandre Souza - PU1BZZ disse...

Cara, parabens pela aula! Aprendi mais aqui que em um tempao pesquisando sobre o assunto!