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










terça-feira, 14 de outubro de 2014

Programador de dispositivos TL866

Adquiri recentemente pelo Ali Express um multi-programador de dispositivos modelo TL866CS. O preço foi de $58,00 que convertido deu aproximadamente R$143,00

O produto chegou em menos de 1 mês a partir do vencimento do boleto. Considerando o tempo médio de compras na China, foi bem rápido.

Testei ele aqui para ler várias EPROMS, EEPROMS, SRAMs em FLASHes e funcionou tudo certinho.

Seguem algumas fotos do 'unboxing'. Depois coloco um passo a passo das telas que capturei desde o download da aplicação, passando pela instalação dos 'drivers', até estar pronto para os primeiros testes.

Pacote recém chegado do além mar.

Conteúdo da caixaa: Programador, seis adaptadores e extrator.

Minha versão é a CS. Esta não tem conector ISP.

Seis adaptadores para CIs SMD mais extrator.

'Close' nos adaptadores.

O programador veio bem protegido.

Acompanha cabo USB de boa qualidade, CD de 'drivers' e certificado de garantia em chinês.

O programador é bem compacto, e bem mais prático de usar que meu Willem v3.5

Ensaiando o adaptador PLCC44.

Agora com o SOIC28 (ou é TSSOP?)
 Aqui uma ressalva em relação ao adaptador PLCC32. Se colocar o chip até o final, os terminais da memória não encostam direito nos terminais do soquete e a leitura/gravação costumam falhar. Tem que deixar o corpo do chip rente com o soquete, mas isso é fácil de fazer, basta colocar o chip de pernas pra cima sobre a bancada e encaixar o soquete por cima dele (depois posto uma foto para ilustrar)
Agora o PLCC32.

A minha versão é a CS, que não possui conector ICSP. Para mim não faz diferença.

Usando o extrator, fica bem fácil tirar os chips do soquete.


domingo, 5 de outubro de 2014

Documentação do teclado LABO

Segue abaixo uma pequena documentação a respeito do teclado LABO.

A pinagem do conector DB-25 encontra-se abaixo.



O teclado consome 480mA de corrente. então é recomendado alimentar ele com uma fonte com capacidade de pelo menos 600mA, para ter uma folga.

O sinal /CAPS é uma entrada ativa em nível baixo e serve para acender a luz que fica dentro da tecla SHIFT LOC e drena por volta de 20mA quando conectado ao terra.

O sinal /UPPER fica normalmente em nível alto (TTL) porém vai a nível zero quando se pressiona a tecla UPPER FUNCTION.

O sinal TX DATA é a saída do teclado, em nível TTL. A velocidade de transmissão é de  1200 bauds com 8 bits de dados, sem paridade e 1 bit de parada (1200 8N1).

A cada tecla pressionada seu código correspondente é transmitido. A tecla SHIFT não possui código próprio, sendo usada apenas para acessar os símbolos alternativos das teclas numéricas e de pontuação.
O teclado não tem auto-repetição automática. Para isso o teclado tem a tecla REP que quando pressionada em conjunto com uma tecla, repete sua transmissão a cada 100ms.

A tecla SHIFT LOC possui dois códigos que transmite alternadamente ao ser pressionada 0xBA para as teclas minúsculas (a, b, c, d, ....) e 0xBB para as teclas maiúsculas (A. B, C, D,...). Esta tecla não altera o estado dos símbolos alternativos das teclas numéricas e de pontuação.
Quando as teclas minúsculas estão selecionadas e se pressiona SHIFT as teclas maiúsculas são transmitidas. Já o oposto não acontece: quando as teclas maiúsculas estão selecionadas pressionar SHIFT não altera o estado para minúsculas.

O mapeamento das teclas encontra-se abaixo. As teclas que não possuem código, quando pressionadas, equivalem ao código ASCII grafado na tecla.

As teclas que possuem apenas um código, quando pressionadas em conjunto com a tecla SHIFT transmitem o caractere 0x00.

Os números do teclado numérico não enviam os mesmos códigos que os números do teclado normal. As teclas Y e N do teclado numérico não possuem os mesmos códigos das teclas Y e N do teclado normal.

A tecla "-" ao lado do SHIFT da direita é um "underscore" e não um sinal de menos.

A tecla na segunda posição à esquerda de BACKSPACE é a tecla de Circunflexo/Til. São teclas ASCII normais, porém a grafia adotada na tecla (setas) não corresponde à grafia normal (^/~).

As teclas ESCAPE e BACKSPACE não usam os códigos ASCII padrão .



Teclado LABO depois do banho

Depois de desmontar todas as teclas eu as coloquei de molho na água com detergente neutro por várias horas. O mesmo fiz com a carcaça.

Depois do banho limpei as teclas uma a uma e as montei de volta (vídeo). Algumas teclas duplas estavam agarrando, e por isso coloquei um pouco de graxa de silicone para lubrificar as partes móveis de plástico. Isso resolveu o problema. As que não estavam agarrando deixei como estavam.

A carcaça eu esfreguei com uma esponja ainda dentro da vasilha onde deixei o conjunto de molho. Depois enxaguei com água corrente. A sujeira preta que estava incrustada na pintura da carcaça saiu por completo.

O teclado agora está com cara de novo.



Para dar uma idéia do tamanho do teclado, eis duas fotos dele ao lado do meu TK90X


Aqui uma vista de cima


sábado, 4 de outubro de 2014

Teclado serial LABO

Recentemente comprei no Mercado Livre um teclado LABO pra ver ser fazia um MOD para usar no PC. Afinal estes teclados antigos são gostosos de digitar pra caramba.

Quando o teclado chegou fiquei contente, pois apesar do gabinete estar impregnado de poeira e ter algumas teclas agarrando, o estado do teclado está muito bom, considerando que foi fabricado em 1982.


Infelizmente não sei o modelo do mesmo. A etiqueta só traz número de série

Abrindo o teclado outra agradável surpresa. A placa estava em ótimas condições de conservação.


A inteligência do teclado é construída em torno de uma UART da AMI modelo S1602P (compatível com os MB8868A da Fujitsu) e quase duas dúzias de CIs de lógica TTL dos antigos, série 74XX.



Como tudo parecia estar em ordem, resolvi seguir as trilhas do regulador de tensão para ver onde ligar a alimentação. Aproveitei e medi as ligações do conector interno do teclado, de 5 pinos ao conector externo de 25 pinos para deixar documentado.


Pino Interno Pino Ext (DB-25) Função
1 6 Alimentação (>8V)
2 8 GND
3 13 TX Out (TTL RS232, 1200 8N1)
4 10 /CAPS LED In
5 11 /UPPER FUNCTION Out

Acabei descobrindo que a conexão entre o pino 5 do conector interno e o pino 11 do DB-25 estava ruim. Será que é por isso que tiraram o teclado do uso?



Depois de ligado, conferi o clock estava funcionando e parti direto para verificar o sinal nos outros pinos do conector e nova surpresa... O teclado está funcionando perfeitamente! Apesar da idade, apesar dos longos anos sem uso, está tudo funcionando, todas as teclas, tudo!

Analisando a forma de onda ao se transmitir um caractere conhecido como a letra "A", consegui medir a velocidade e a quantidade de bits por palavra: 1200 8N1



Uma coisa interessante neste teclado, é que o tratamenteo da tecla SHIFT é feito no teclado, ou seja a tecla SHIFT não transmite nenhum código.

O traço de baixo da forma de onda é o sinal /UPPER FUNCTION, que vai a zero quando esta tecla é pressionada.



Cada tecla pressionada gera apenas 1 transmissão, mesmo que seja mantida pressionada. Para a auto-repetição existe uma tecla específica que, quando pressionada em conjunto com outra tecla, gera um pressionamento a cada 100ms.


Outra curiosidade é que a tecla Caps Lock (SHIFT LOC) não muda o estado do código transmitido, como no caso da tecla SHIFT, porém o bit menos significativo do código transmitido muda de estado cada vez que a tecla é pressioanda. Além disso, o LED indicador de Caps Lock não é processado no teclado, mas externamente, e acende ao se levar o pino /CAPS a nível zero.




O próximo passo vai ser desmontar as teclas uma por uma, e dar um banho de água com detergente em tudo e remontar.