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.




sábado, 23 de agosto de 2014

Mais testes com o emulador de teclado

Depois de um longo tempo sem mexer no circuito do emulador de teclado por causa de compromissos profissionais, hoje finalmente consegui avançar mais um pouco.

Depois de acertar alguns parâmetros do software de controle vi que o circuito ainda não estava gerando o acionamento das teclas. Desconfiei então que pudesse estar acontecendo retenção do barramento, de modo semelhante ao que acontece com o TK85 quando se usa a interface JOY81 do Kelly Murta. Fiz algumas medições para investigar. Nas figuras abaixo o sinal laranja corresponde ao sinal de leitura da ULA enquanto o sinal azul representa a linha D0. Sem nenhuma tecla pressionada, a tensão na linha D0 no momento da leitura é de aproximadamente 4,0 Volts.

Tecla "A" solta.
Quando se pressiona a tecla "A", as linhas A9 e DD5 são conectadas, fazendo com que o sinal da linha D0 caia para aproximadamente 0,16 Volts, puxado para baixo pelo LS365 interno ( o o conector interno (ligando as linhas A9 e DD5) .

Tecla "A" pressionada





Por outro lado, quando se ativa a mesma linha de um um driver externo (74LS365) acontece a retenção pois ao mesmo tempo que o 365 externo tenta abaixar o nível da linha, o interno tenta jogar um nível alto. Com isso a tensão resultante é por volta dos 1,44 Volts que o Z80 entende como nível alto.

Linhas A9 e DD0 externas pressionadas - contenção de barramento.

A conclusão é que infelizmente, para que meu circuito funcione vai ser necessária uma adaptação interna no TK90 que consiste na inclusão de 5 diodos, novamente de modo semelhante à modificação do JOY81.  Talvez sejam necessários também resistores de pullup, mas tenho que dar uma estudada melhor no assunto.



sábado, 21 de junho de 2014

Emulador de Teclado - fotos e testes com o protótipo

Fiz hoje alguns testes com o emulador de teclado conectado ao TK.


Alguns problemas se apresentaram, a começar pela contenção da linha A13 por parte do AVR (vide post anterior).

Outro problema que eu tive foi com a rotina de interrupção em assembly. Em alguns momentos eu notava que o AVR parava de responder às interrupções e o TK travava com o sinal /wait em nível baixo. Por enquanto retornei o atendimento à interrupção de leitura de teclado para uma interrupção padrão do Arduino e mesmo com o overhead o TK parou de travar.

Ainda estou com dois problemas que tenho que resolver. Um deles é que de vez em quando o TK demora a iniciar ou não inicia, mas isso não é mais problema de contenção. Desconfio que ainda esterja relacionado ao acionamento incorreto do sinal que libera a linha de /WAIT.

Outro problema é que apesar da matriz estar sendo preenchida corretamente quando se pressionam as teclas (o circuito imprime o estado dos bits na serial) nenhum bit muda de estado na entrada do LS367. Vou precisar debugar esta rotina em separado (fora da interrupção) para descobrir o problema.

Por último, pode ser que eu precise colocar uns resistores em série com as linhas D0 a D4 do LS365 interno do TK a fim de evitar a contenção do barramento de dados quando o LS367 do emulador de teclado estiver ativo.




Treta no A13

Como nada nessa vida é fácil, a primeira vez que liguei o circuito do emulador de teclado no TK ele não inicializou.

Passei um tempo conferindo o circuito, retirei o decodificador e o buffer da placa, mas a coisa continuava na mesma.

Daí foi que lembrei que eu não tinha programado o AVR para colocar como entrada os pinos que vão ligados às linhas de endereço A8-A15! Eu comprovei isso retirando o AVR da placa.

Depois de um bom tempo procurando uma fonte de alimentação que servisse no meu adaptador RS232-TTL eu finalmente programei o AVR com o seguinte 'sketch':

void setup() {
  // put your setup code here, to run once:
  DDRB=0x00;
  PORTB=0xff;
  DDRC=0x00;
  PORTC=0x00;
  DDRD=0x00;
  PORTD=0xc0;
}

void loop() {
  // put your main code here, to run repeatedly: 
  
}

Daí o TK bootou!!

Mas como diz o meu amigo Ferraz, "nessa vida tudo tem que ser com dor", só o primeiro boot deu certo. No segundo o TK ficou com a tela cheia de artefatos, no terceiro ficou branca, no quarto ficou ok. Em resumo, a operação estava de forma intermitente!

Tentei em vão descobrir algo de errado com o osciloscópio mas sem muito sucesso. Daí segui um expediente que embora trabalhoso foi o que me levou a descobrir o problema.

Eu retirei todas as conexões das linhas A8-A15 e espetei a placa no TK. Funcionou (óbvio ne?).

Daí eu removi a placa e fiz a ligação do sinal A8. Recoloquei a placa no TK e funcionou.

Fiz o mesmo com as outras linhas até chegar na linha A13. Com a linha A13 no lugar o TK fica funcionandode modo intermitente.

Removi a ligação da linha A13 e continuei o procedimento com as linhas A14 e A15 . Tudo OK.

De fato tinha alguma treta na linha A13! Esta linha está ligada ao pino PB5 do AVR (sinal SCK).


Como o AVR tem um bootloader, desconfiei que alguma coisa poderia estar acontecendo durante o boot. Daí instalei um resistor de 4K7 entre a linha A13 e o pino PB5 do AVR e o TK bootou normalmente (todas as vezes ).

Medindo com o osciloscópio eu verifiquei que o AVR mantém esta linha em nível baixo por um pouco mais de um segundo durante o 'startup' do bootloader. Eu creio que isso seja um erro de implementação do bootloader, mas por enquanto vou deixar o resistor e prosseguir com os testes. Depois eu dou uma olhada no código fonte do bootloader e/ou entro em contato com o desenvolvedor, pois não considero isso um comportamento normal.

Laranja: PB5 do AVR  / Azul: A13 do Z80