domingo, 8 de março de 2015

Engenharia reversa numa interface MID 95 para o TK

Depois de algumas horas de trabalho, consegui levantar o esquema da interface MID 95 para os TKs.

O primeiro passo foi fazer uma limpeza da placa e remover os 'jumpers' de fio que estavam sobre as trilhas, a fim de facilitar a visualização. Em seguida, com a placa já limpa (que inclusive desbotou um pouco) eu tirei fotos da frente e do verso da placa, com boa iluminação e máquina ajustada para tirar foto macro.


 Com as fotos em mãos, o próximo passo é sobrepor duas fotos, uma de frente e outra de verso utilizando transparências. Para auxiliar mais ainda, é possível criar uma outra camada com a pinagem dos componentes. A ferramenta utilizada para fazer isso foi o Inkscape


Com esse arranjo em mãos o próximo foi criar o diagrama no Eagle com todos os componentes da placa, e ir seguindo as ligações, uma a uma, marcando as ligações no esquemático. Também é bom conferir com o multímetro diretamente nos pinos da placa, em caso de dúvida.

A fim de conferir se o diagrama bate com o levantado, eu reconstruí o layout da placa. Para isso precisei editar alguns componentes (Eprom, os 74LSs, os transistores e alguns diodos) a fim de casar o 'footprint' com os utilizados na placa real. Se todas as ligações estiverem em ordem, vai ser possível criar um 'layout' muito semelhante ao da placa real.





A partir do circuito (link) é possível saber alguns detalhes a respeito do funcionamento da interface:

- A Interface MID nada mais é do que uma porta serial 'bitbang'. Os bits são escritos/lidos na porta 191 (0xbf, linha A6 em zero). A porta IC4B funciona como inversor do sinal /M1. Os diodos D2/D4 e D3/D6 formam uma porta OR. Interessante é que dois diodos e um resistor poderiam ter sido substituídos pela porta IC1C, que fica ociosa


- A conversão de nível de sinal TTL para RS232 é feita com o auxílio de transistores bipolares comuns. Os dados saem a partir do bit D0 e entram pelo bit D7. O conector de saída vai a um jack P2 estéreo.




- A cada 64us a interface gera uma NMI (clock de 4MHz dividido por 256). Como a velocidade de operação é de 1200bps para recepção, isso significa 13 interrupções (ou 13 amostras) para cada tempo de bit. No caso da transmissão, a 75bps, o tempo entre o início de dois bits consecutivos equivale a 208 interrupções.  Detalhe interessante  é o oscilador que é baseado num buffer (LS125). Esse foi um hack bem bacana no projetista para economizar um CI (na época eles não eram muito baratos).

A cada interrupção o circuito faz uma amostragem (leitura na porta 191) o que também limpa o flip flop que gera a NMI.


 
- O pino /ROMCS está ligado ao VCC. Isso significa que a interface não usa nenhum recurso da ROM (BIOS) do TK.



Meu agradecimento ao Augusto e ao Marcelo que meio que interromperam a negociação que estavam fazendo da interface a fim de que eu a adquirisse para fazer a engenharia reversa.

Segue link para um arquivo .zip contendo:

- Diagrama e PCB no formato Eagle 5
- Diagrama e imagem da PCB em PDF
- ROM da interface (e listagem 'desassemblada' pelo DZ-80).



quinta-feira, 26 de fevereiro de 2015

Gerando sinais de vídeo num PIC com amplitude e impedância corretas (atualizado)

Os sinais de vídeo padrão possuem uma amplitude de 1Volt pico a pico, com o nível de vídeo situado 0,7Volts acima do nível de referência de preto e o sincronismo situado 0,3Volts abaixo.

Fonte: http://www.exampointers.com/teletext/teletext.phtml

Para gerar esses sinais com um microcontrolador podemos utilizar dois pinos e alguns resistores. No circuito abaixo a carga RL representa a impedância interna do monitor, que segundo a norma RS170 deve ser de 75 Ohms. Em alguns circuitos encontrados na internet [1] [2] a resistência R3 não é utilizada, mas isso aumenta muito a impedância de saída do circuito, o que pode ocasionar uma imagem sem contraste em alguns monitores.

Uma das maneiras de se gerar vídeo com um microcontrolador é chaveando-se dois pinos
Usando dois pinos temos quatro combinações possíveis, das quais devemos nos preocupar com as 3 mais importantes: O nível de preto, o pulso de sincronismo e o nível de branco. Dá para gerar um nível de cinza também mas vamos desconsiderá-lo por enquanto.
A linha de nome VBias serve para gerar basicamente o sinal de sincronismo, enquanto a linha VColor gera o conteúdo de vídeo.

Precisamos calcular então os resistores de forma que possamos obter os seguintes níveis quando devidamente terminado por uma carga de 75 Ohms:
 
Pedestal, ou nível de preto: 0,3Volts
Pulso de sincronismo: 0 Volts
Pico de vídeo: 1,0Volt.

A primeira consideração que devemos fazer é em relação aos níveis de saída do microcontrolador. Segundo o 'datasheet' do PIC16F688 (tomado como exemplo) temos que a tensão mínima de saída (VOL, porta em nível 0) pode chegar a 0,6Volts no pior caso. Já a tensão máxima (VOH) pode ser tão baixa quando VDD-0,7Volts

Fonte: Microchip.com

Assim, devemos considerar deslocar nosso nível de sincronismo em 0,3 Volts, pois esse valor corresponde à metade do VOL mínimo. A razão de ser a metade é que estamos considerando que a impedância de saída do nosso circuito vai ser igual à da carga, ou seja 75Ohms.



Com isso, o nível de preto sobe para 0,6 Volts, pois este é 0,3Volts mais alto do que o nível de sincronismo. Já o nível de Branco sobe para 1,3Volts pois esta tensão está 0,7Volts acima do nível de preto. Estes valores estão resumidos na tabela abaixo.
Nível
V Bias
V Color
V Out
Observação
Preto
VOH
VOL
0,6V
0,3V offset + 0,3V sync
Branco
VOH
VOH
1,3V
Vblack + 0,7V video
Sincronismo
VOL
VOL
0,3V
Vblack - 0,3V sync

Os valores acima são todos para o circuito carregado com uma impedância de 75Ohms. No caso do circuito estar sem carga, estas tensões devem dobrar. Assim temos:

CondiçãoV BiasV ColorV Out (RL=75)V Out (aberto)
Black4,7V0,6V0,6V1,2V
White4,7V4,7V1,3V2,6V
Sync0,6V0,6V0,3V0,6V



Agora podemos partir para o cálculo dos resistores de forma a atender à tabela acima. O primeiro passo é a análise do circuito. Partimos então da lei de corrente de Kirchhoff: "Em um nó, a soma das correntes elétricas que entram é igual à soma das correntes que saem"
Aplicando a lei de Kirchhoff para calcular as resistências

Assim temos que 
Considerando as tensões envolvidas, podemos montar a equação genérica do circuito:

Para facilitar as contas, vamos reescrever a equação considerando as condutâncias em vez das resistências.


Então, para RL=75Ohms, VOL=0,6Volts e VOH=4,7Volts (Vdd do PIC a 5,4Volts) temos podemos montar as equações para as três condições principais.


Para o circuito sem carga, ou seja RL=infinito, a condutância é igual a zero. Assim temos



Estas equações podem ser escritas na forma de um produto de matrizes:




Usando o Scilab como ferramenta de cálculo chegamos ao resultado (em Siemens, ou unidades de condutância)

>A=A={4.1 0 -0.6 ; 3.4 3.4 -1.3 ; 0.3 0.3 -0.3 ; 3.5 -0.6 -1.2 ; 2.1 2.1 -2.6 ; 0 0 -0.6}
>b=[ 0.6/75 ; 1.3/75 ; 0.3/75 ; 0 ; 0 ; 0 ]
>x=A\b


O que convertido para resistência resulta em:
 >x.^-1


Usando valores comerciais mais próximos temos:


Vamos agora verificar os valores das tensões considerando os valores comerciais. Para isso é necessário reescrever a equação básica em função de V Out:



Resolvendo as várias condições para Vout, temos que:

Condição V Bias V Color V Out (RL=75) V Out (aberto)
Black 4,7 0,6 0,64 1,29
White 4,7 4,7 1,35 2,71
Sync 0,6 0,6 0,17 0,35

Dividindo-se a tensão em aberto pela tensão com carga de 75 Ohms encontramos a relação igual a:

Vopen/Vload = 2,71/1,35 = 2,01

Essa relação nos permite calcular a resistência de saída do nosso circuito. Partimos da relação de Thèvenin

Em números, ri=75 * (1,01) = 75,75 Ohms.


Conclusão:

Exceto pelos valores de tensão do nível de sincronismo, todos os outros ficaram bem dentro do esperado. Para o circuito carregado temos uma amplitude de 0,47Volts (abaixo do nível de preto) para o pulso de sincronismo e uma amplitude de 0,7Volts (acima do nível de preto) para o sinal de vídeo. Em compensação, apesar dos resistores utilizados serem de valor comercial e estarem ligeiramente diferentes dos valores calculados, a impedância de saída do circuito ficou bem próxima de 75Ohms.



A figura abaixo traz o circuito com os valores finais.

PS:
De maneira genérica, o sistema de matrizes que descreve nosso circuito encontra-se abaixo. O valor das tensões de saída nas três linhas superiores (em verde) correspondem aos níveis de tensão com carga de 75Ohms e as linhas inferiores (em azul) correspondem aos níveis de tensão em aberto, ou seja, sem a carga.







sexta-feira, 20 de fevereiro de 2015

Sinais de sincronismo da TV analógica e micros antigos.


Nas TVs de tubo, um feixe de elétrons é gerado a partir do aquecimento de um metal no catodo do tubo. Este feixe é acelerado por uma alta tensão nos anodos para adquirir energia cinética que depois é convertida em luz quando o feixe incide sobre uma superfície contendo sais de fósforo (tela).

Como o CRT (Cathode Ray Tube) só consegue iluminar um ponto por vez (tês pontos por vez nos CRTs coloridos), é necessário 'passear' o ponto pela tela numa velocidade tal que nossos olhos não consigam enxergar um ponto fixo, mas sim uma imagem contínua. Este processo é chamado de varredura.

Embora existam monitores CRT que desenhem diretamente a imagem na tela (os chamados  monitores vetoriais como os osciloscópios e antigos consoles de radar), a televisão utiliza um sistema baseado em linhas sequenciais, ou linhas de varredura, que são geradas a partir da ação do campo magnético gerado nas bobinas defletoras.

fonte: Techtudo
Estas bobinas são acionadas através do sinal gerado em dois osciladores, de forma a gerar um padrão de linhas que começa no canto superior esquerdo da tela e termina no canto inferior direito.

Ao final de cada linha o feixe de elétrons desce um pouco e retorna ao lado esquerdo da tela. Este é o chamado retraço horizontal. Ao final da última linha o feixe é deslocado novamente para o início. Assim é formado um campo de vídeo.

Fonte: what-when-how.com
 A TV analógica que conhecemos opera entretanto com 2 campos de vídeo entrelaçados conforme definido  pelo padrão RS-170  chamados de campo par e campo ímpar. Dois campos consecutivos constituem um quadro (frame).  Cada campo possui 262,5 linhas, totalizando 525 linhas de varredura por quadro. O entrelaçamento permite obter o dobro da resolução vertical porém a taxa de quadros cai pela metade. Assim, se a frequência vertical é de 60Hz, o vídeo é exibido a 30 quadros por segundo (valor nominal, pois a norma define 29,97 quadros por segundo).

Fonte: Radiologyclub.com
Fazendo a matemática, temos 29,97 quadros por segundo vezes 525 linhas por quadro que resulta em 15734,25 linhas por segundo o que significa que equivale a uma frequência horizontal de 15,734KHz, comumente arredondada para 15KHz nas discussões sobre monitores LG1x21 e afins.

A varredura da imagem na tela é comandada por dois osciladores - horizontal e vertical, que devem ser sincronizados com a imagem a ser exibida. Para isso o sinal de vídeo possui pulsos de sincronismo incorporados a cada linha.


Uma linha típica de vídeo é composta por um período de retraço horizontal (em que o feixe de elétrons é apagado, daí o nome 'blanking' seguido da imagem (linha) a ser exibida. Como o CRT não consegue apagar o feixe instantaneamente, o início do sinal de sincronismo ('frontporch') existe para garantir que a imagem esteja no nível de preto quando o pulso de sincronismo horizontal começar, evitando assim que se perceba o início do retraço horizontal.

Logo após pulso de sincronismo ocorre o período do  'backporch', que é quando os circuitos internos da TV fazem a amostragem do nível de referência (nível de preto) para poderem assim exibir a imagem com o contraste correto.

Fonte: Batsocks.com
O sincronismo vertical ocupa ao todo 9 linhas de vídeo, sendo 3 linhas de pulsos de pré equalização (front porch vertical) seguidas de 3 linhas do pulso de sincronismo vertical em si (vertical serration) e finalmente mais 3 linhas de pós equalização.

O que diferencia os campos pares e ímpares é a posição do início do pulso de sincronismo vertical em relação ao pulso de sincronismo horizontal. Se ambos coincidem temos um campo ímpar, mas se o pulso de sincronismo vertical inicia no meio de uma linha, ou seja, no meio tempo entre dois pulsos horizontais então temos um campo par.

Fonte: http://www.maximintegrated.com


As linhas de pré e pós equalização, bem como as linhas de sincronismo vertical possuem pulsos extras de sincronismo cujo objetivo é permitir que os circuitos separadores de sincronismo do monitor possam diferenciar entre os campos par e ímpar. Mais detalhes nesse (link)

Entre o final do pulso de sincronismo horizontal e o início da primeira linha de vídeo ativa, existem algumas linhas vazias (blank lines) que não são visíveis pois ocorrem durante o tempo de retorno do traço até o alto da tela. Por isso, das 525 linhas de vídeo que compõem um quadro, apenas 483 são visíveis. É daí que vem o nome 480i que significa 480 linhas de vídeo visíveis, num quadro entrelaçado.

Quando os primeiros computadores pessoais começaram a aparecer, eles não possuíam muita capacidade gráfica, e as resoluções verticais raramente excediam 192 linhas, tornando desnecessária a geração de quadros entrelaçados.

Assim, os fabricantes de microcomputadores criaram circuitos mais simples para gerar os sinais de vídeo desconsiderando então toda complexa a geração de pulsos durante o intervalo de sincronismo vertical. O resultado era uma imagem progressiva com 240 linhas úteis, composta de apenas do campo ímpar que se repetia a 60Hz (também chamado de 240p - de progressivo).

Abaixo seguem as formas de onda do intervalo de sincronismo vertical de alguns micros populares no Brasil na década de 80:
.
No TK90X as linhas de 'frontporch' e 'backporch' são brancas, em vez de serem linhas em nível de preto ('blank' lines), e o pulso de sincronismo vertical ocupa o tempo de 4 linhas de vídeo e não começa ao mesmo tempo que o pulso horizontal (começa um pouco antes do final da última linha e termina um pouco antes do próximo pulso de sincronismo.

Intervalo de sincronismo vertical no TK90X. Azul: Vídeo composto / Laranja: Sincronismo composto


No MSX1 (TM9128) o sinal de sincronismo é mais bem comportado, contendo linhas de 'frontporch' e 'backporch' em nível de preto.

Intervalo de sincronismo vertical no TMS9128. Laranja: Vídeo composto


A ausência do campo par nunca foi um problema para os televisores analógicos, pois havia uma margem grande em relação aos pulsos de sincronização vindos do sinal de vídeo. Eles simplesmente resetavam seus osciladores e exibiam novamente o quadro ímpar.  A falta das linhas pares somente evidenciava o efeito das 'scanlines' por causa do aumento do espaço vago entre duas linhas devido à falta das linhas pares.

Nos televisores modernos com circuitos totalmente digitais isso pode funcionar ou não, dependendo de como foi implementada a captura de vídeo, principalmente se a geração dos sinais de sincronismo for meio fora do convencional, como é o exemplo do TK90X. Tudo vai depender da implementação interna do firmware dos monitores. 


sábado, 6 de dezembro de 2014

790Mbytes na RAM? Sem condições, AtmelStudio !!!

Instalei o Atmel Studio 6.2 para fazer uns experimentos com processadores ARM e vi que o micro que uso aqui na minha oficina demora vários segundos para fazer qualquer coisa que seja. Compilar um esqueleto de código toma quase 1 minuto. Mesmo abrir um menu de configuração requer uma paciência de oriental.

Tudo bem que meu processador é até modesto, um Intel Atom 330 a 1.6GHz, com 2GB de RAM, mas nem por isso devia estar tão lento assim.

Resolvi dar uma olhada no consumo de memória e para minha surpresa o programa sozinho, sem estar executando nenhuma função (compilando, linkando, etc) opupa 790Mbytes (sic!) da SRAM e 25% da CPU.





Vou experimentar outras ferramentas, como CooCox, ou até mesmo usar a linha de comando, porque o Atmel Studio 6 é SEM CONDIÇÕES!!!

PS: outro que estou quase desinstalando pelo mesmo motivo é o DropBox, que está consumindo quase 100MBytes e faz o micro ficar uma carroça para iniciar. Péssimo!!

sábado, 1 de novembro de 2014

Magic Computer PC95

Adquiri recentemente no Mercado Livre um Magic Computer PC95, produzido pela Dynacom. Este 'sistema' nada mais é do que um Nintendinho (NES) com uma ROM nativa contendo alguns jogos e programas educativos. Segundo o anúncio o equipamento estava funcionando.
Magic Computer PC95 da Dynacom.



Assim que o equipamento chegou, vi que a fonte de alimentação possuía uma chave de 110-220 mas não havia nenhuma inscrição (o papel havia sido arrancado). Nesses casos a solução é identificar com o multímetro. O enrolamento de 220Volts possui mais espiras, e portanto a resistência do enrolamento é maior.

Ao conectar a fonte na tomada o primeiro susto, pois ela zumbia alto, como se estivesse em curto. Medi então a tensão DC vi que a fonte não estava em curto, pois a tensão era de 14Volts, o que é esperado para este tipo de fonte de alimentação na ausência de carga. Como a fonte estava normal, concluí que o problema era devido a uma queda, que soltou as placas do transformador, ou mesmo a um defeito de fabricação.

Transformador vibrava porque tinha chapas soltas. Parece realmente um defeito de fabricação, mas foi só apertar bem com um alicate que ele parou de vibrar.
 
Em seguida conferi a polaridade da fonte, para ver se batia com o aparelho. Para isso medi a continuidade entre a carcaça dos conectores de A/V, e o conector da fonte. A fonte era mesmo do aparelho, com o GND no pino central do conector DC.

Ao ligar o aparelho, o segundo susto. Nem sinal de vida. Tentei usar outro cabo de vídeo, além do que veio com o aparelho e nada. Mortinho!!

Entrei em contato com o vendedor para perguntar como faríamos, uma vez que o anúncio dizia que o aparelho estava funcionando. De início o vendedor me interpretou mal, pois deve ter achado que eu queria lhe dar um golpe. Disse que o aparelho tinha sido testado, etc.. Mas entre o primeiro email que ele me enviou no início da manhã, até o final da tarde quando cheguei em casa, o vendedor sugeriu que eu testasse o aparelho via RF.

Antes de respondê-lo fiz o teste com RF e vi que apesar da qualidade da imagem estar muito ruim, o aparelho deu sinal de vida, e isso me animou. Respondi então ao vendedor que o equipamento estava aceito, apesar de só estar funcionando via RF. O vendedor agradeceu, mas me disse novamente que tinha testado o equipamento com A/V, porém há um bom tempo.

Resolvida essa parte, sem mágoas para nenhum dos lados, resolvi abrir o equipamento e procurar o problema. E dá-lhe parafusos para abrir a tampa!!

Por dentro o equipamento nada mais é do que um desses "NES on a Chip" chineses com uma placa de teclado, mas nem por isso deixa de ser interessante.Mas uma coisa que me chamou a atenção foi um rastro de umidade dentro do aparelho.

O NES inteiro fica na plaquinha central. São dois chips por baixo da placa.

 O equipamento tinha rastros de umidade

Conexão da matriz do teclado e chave liga-desliga
Por baixo dos 'flats' soquetes para 2 CIs. Qual seria a função deles?

Removidas as 'entranhas', liguei a fonte de alimentação e conferi a tensão na saída do regulador. Tudo certinho, a tensão estava em 4.95Volts! Mas enquanto media vi que os Leds da placa piscavam de vez em quando. Balancei um pouco o cabo e descobri um mal-contato no conector da fonte. Substituí então a solda nos terminais do conector de alimentação, mas o mal-contato continuava. Removi o conector e pude ver que o contato do positivo (externo) estava meio sujo. Dei uma limpada com uma lixa fininha, ressoldei o conector e o mal-contato desapareceu.

O onipresente 7805 para regular a tensão dos chips internos
Aproveitei para refazer também a solda dos conectores de A/V e de RF e enquanto fazia isso, dei uma olhada no circuito e fiquei pensando como é que o equipamento poderia estar funcionando em RF, mas não em A/V, uma vez que o sinal sai da placa principal em A/V, e entra num modulador?!

Foi aí que fui reparar na construção dos conectores RCA, cujos terminais negativos são compostos de duas partes prensadas, e a interface entre estas partes estava bastante oxidada nos três conectores.
Oxidação avançada nos conectores RCA

 Daí a estória inteira se fechou! Quando o vendedor testou o aparelho, segundo ele há bastante tempo atrás, ele funcionava. Porém em algum momento o equipamento ficou em algum ambiente úmido, ou mesmo recebeu um jato d'água. Isso fez com que a interface entre as duas partes do conector RCA oxidasse a tal ponto que quando eu fiz o primeiro teste o negócio não dava contato, e não apareceu nem áudio nem vídeo na TV. Quando eu usei o RF, o conector estava um pouco melhor, mas mesmo assim a qualidade era sofrível. Bem que eu notei que de vez em quando a imagem sumia e tinha que ficar girando o plug RCA no conector para a imagem aparecer de vez em quando.

Na falta de outros conectores que encaixassem na furação da placa, removi os existentes, lixei bastante a parte oxidada e coloquei uma ponte de solda entre as duas partes. Isso resolveu o problema do mal contato, e o aparelho voltou a funcionar via conexão de A/V.

Em seguida desmontei a membrana do teclado e sequei a umidade entre elas com um papel toalha, antes de remontar o equipamento. e taca-le parafuso para fechar!!

Depois de tudo montado,  usei uma aplicação de editor de texto que vem nele para checar se o teclado estava respondendo a todas as teclas. Sucesso!!


 



  








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