terça-feira, 23 de junho de 2015

Placas, placas, placas

Esse final de semana finalmente consegui fazer aqui algumas placas de projetos que estavam parados há algum tempo. Agora começa a fase de montagem e testes.

Infelizmente a plaquinha do Tek (emulador de teclado) se moveu de posição na laminadora e acabei deixando ela pra depois.

Superprobe para caixa de Tic Tac (link)

Mame-USB (link)

TK-85 AV Tetraloaded (link)

Kolour (link)



MSX Add-on card para DE-1 (link)

Tic Tac X (link)
Todas juntas logo antes de começar o banho de percloreto.

sábado, 20 de junho de 2015

Soldando Plástico

Há algum tempo atrás, eu quebrei o retrovisor esquerdo do Xavantinho  no momento de estacionar ele na garagem. Esse veículo ficou parado um tempo, mas agora está andando de novo.
Pedaço de plástico do suporte do espelho ainda na haste do retrovisor
Tentei achar um retrovisor com o suporte igual, mas sem chance. O mais próximo que achei foi um genérico de haste de plástico. Cheguei a cogitar fazer uma adaptação porém além do trabalho que ia dar, os retrovisores esquerdo e direito ficariam muito diferentes. Daí resolvi utilizar outra abordagem.

 Eu nunca pensei que fosse possível soldar plástico como se fosse metal, porém depois de ver como funciona uma impressora 3D e como fica resistente o material impresso eu tomei coragem e tentei.

Usei um pedaço do mesmo plástico do suporte do espelho e fui derretendo com o ferro de 100Watts, tomando cuidado de aquecer também a o plástico do suporte para que ele se fundisse com o plástico adicionado. O resultado não ficou muito bonito, mas isso não importa, uma vez que essa parte é interna e fica escondida pelo espelho. O importante é que ficou resistente, muito mais do que se eu tivesse usado qualquer cola que eu conheça.

O plástico mais preto ainda está quente.

O lado de trás estava muito ressecado e eu só dei uma derretida de leve sem adicionar material. Se estivesse em melhor condição era só lixar depois. Eis aí o resultado:

Sucesso! Retrovisor está novamente funcional

É bom saber que esse tipo de conserto funciona, pois posso utilizar a mesma técnica para consertar gabinetes trincados, etc..


Tek - Conexões para TK-85 (e TK90) e para ZX81

A ligação da placa ao TK85 e ao TK90 (e ZX Spectrum) é a mesma. A conexão pode ser vista na figura abaixo.
Conexão ao TK85/TK90X


Para o ZX81 a ordem das linhas de dados (conector de 5 vias) é a inversa do TK85/TK90/ZX Spectrum.
Conexão ao ZX81




domingo, 14 de junho de 2015

Tek - Mapas das teclas para o TK90X / ZX Spectrum

O mapeamento das teclas do TK90X ficou parecido com as do TK85, exceto por algumas combinações de teclas mudaram com a entrada do Symbol Shift.

Matriz de teclado do TK90X / ZX Spectrum

O firmware ficou um pouquinho mais genérico, com a passagem da posição das teclas SHIFT e SHIFT EXTENDIDO (Symbol Shift no TK90) para os arquivos de configuração



Definição das constantes de Shift normal e extendido

O mapa do teclado ABNT ficou da seguinte maneira:

Mapa do teclado ABNT para o TK90X / ZX Spectrum

E um mapa 'reverso' com o teclado do TK95 ficou o seguinte:

Mapa das teclas equivalentes no teclado do TK95
Link para os arquivos no DropBox.

domingo, 7 de junho de 2015

Tek - Mapeamento de teclas no emulador de teclado.

Fiz algumas mudanças no código a fim de facilitar a adaptação para teclados diferentes, afinal de contas o objetivo do circuito é ser genérico.

A mudança mais significativa foi trocar a maneira como os 'scancodes' extendidos eram tratados. Por se tratar de menos teclas eles eram tratados individualmente por um switch case() no loop principal do programa. Agora eles são tratados através de uma consulta por tabela.
 
Assim o loop principal ficou resumido a:

Loop principal do firmware do PIC



Com isso a personalização do teclado não requer mais mudança no código principal, mas apenas nas duas tabelas de um arquivo de header.

Tabela de caracteres extendidos

Tabela de caracteres normais.

 Notem que existe ainda uma outra matriz, que associa a tecla física do teclado emulado com o bit que é transmitido para a matriz de registradores de deslocamento. Esta matriz tem tantas teclas quanto as combinações possíveis no teclado a ser emulado. No caso no caso do TK85 e do TK90 (ZX81 e ZX Spectrum) são 40 entradas, e a tabela de 'Mapcodes' tem o seguinte formato:

Mapa de bits para o ZX81.

Os três bits menos significativos [2,1,0] determinam a linha da matriz e os bits [5,4,3] determinam a coluna. O bit mais significativo [7] foi reservado para sinalizar o pressionamento da tecla SHIFT em conjunto com outra tecla. Por exemplo, a função Backspace pode ser representada no TK85/ZX81 pelo pressionamento simultâneo das teclas SHIFT e "0" (zero)


Mapas das teclas para o ZX Spectrum

No caso do TK90/ZX Spectrum o mapeamento das teclas é praticamente idêntico ao do TK85/ZX81, porém o bit 6 foi usado para representar o pressionamento da tecla Symbol Shift. Dessa maneira pode-se por exemplo mapear alguns símbolos como "-", "+", ou as aspas, além de ser possível ir para o modo extendido usando uma tecla como "TAB".

Mas em resumo, uma vez que o arquivo dos mapas das teclas foi feito ele não precisa mais ser mexido, pois a associação fica inteira na tabela de Scancodes x Mapcodes.

Para terminar este post, segue abaixo como o ficou o mapeamento das teclas para o TK85:


Mapeamento das teclas para o TK85/ZX81




quinta-feira, 4 de junho de 2015

TEK - Placa 'universal' e coleção de links

Agora que o projeto funcionou com o TK85, resolvi fazer uma versão mais universal, com os seguintes recursos:
  • Matriz de 8x8 expansível a 8 x n. A placa possui pontos de solda para facilitar a expansão.
  • Conectores para teclado: Mini-Din6, 'Header' de 4 pinos e USB (Alguns teclados USB podem funcionar em modo PS/2 caso não consigam se inicializar em modo USB).
  • 2 pinos para leitura de teclas modificadoras ou indicadores, como Caps Lock, etc.
  • 'Header' serial (nível TTL) para facilitar debug de novas versões de firmware, ou para 'cross typing' (Envia teclas pressionadas e ativa teclas recebidas pela serial - recurso ainda não implementado)
  • Conector ISP para facilitar gravação/regravação do microcontrolador.

A placa foi roteada manualmente e ficou com aproximadamente 103mm x 60mm e dupla face. Eu procurei reduzir ao máximo a quantidade de vias para facilitar a confecção caseira (somente 6 vias).

Placa Universal, 8x8
A fim de complementar o projeto, segue abaixo uma coleção de links, desde os primeiros rascunhos até agora.


Emulador De teclado Genérico:
Parte 1 - Primeiras considerações
Parte 2 - Sobre teclados PS/2
Parte 3 - Considerações sobre hardware e tempo de resposta. 
Parte 4 - Primeiro esboço de matriz de registradores de deslocamento
Parte 5 -Codificação da matriz para o TK90X (clone ZX Spectrum)

Versão externa para TK90X: (sem registradores de deslocamento,  baseada em Arduino)
Parte 1 - Temporização da leitura do Teclado pelo Z80
Parte 2 - Gerador de Wait State (hack de flip flop usado como inversor)
Parte 3 - Diagrama de blocos
Parte 4 - Primeiros testes, formas de onda do gerador de Wait
Parte 5 - Placa de circuito impresso para o protótipo (finalizado)
Parte 6 - Tabelas de Scancodes para teclado ABNT
Parte 7 - Embutindo Código assembly embutido no Arduino (para interrupções)
Parte 8 - Cuidado com o bootloader do Arduino, que força a linha PB5 a zero na partida.

Parte 9 - Testes finais - Falha geral!
Parte 10 - Conclusões (porque não funcionou no TK95 mas funcionaria no ZX Spectrum)


Emulador Universal, versão TK85 (Clone ZX81)
Parte 1 - Retomando o projeto
Parte 2 - Novo firmware com PIC16F88 (por falta de espaço na placa de protótipo)
Parte 3 - Funcionamento e formas de onda do registrador de deslocamento
Parte 4 - Testes no TK85. Desta vez sim, sucesso!!!
 
Os arquivos do projeto (placa Eagle 7, código fonte, etc) estão disponíveis na minha pasta do dropbox.


O próximo passo será gerar algumas instruções de conexão da placa e expandir a versão para o TK90X.


 

segunda-feira, 1 de junho de 2015

Tek - Adaptador de teclado genérico (3)

A primeira vez que liguei o circuito do adaptador de teclado ao TK nem preciso dizer que não funcionou, ne?

Pois bem, depois de perder algum tempo preocupado com as formas de onda da linha de dados que circula entre os registradores de barramento, achei o primeiro pedaço do problema: Falta de resistores de pullup nos pinos de seleção de linhas.

O circuito precisa de resitores de pull-up nos pinos que vão às linhas de endereço.
No TK, com o teclado mecânico, estes resistores de pull-up não são necessários, uma vez que  o resistor de pullup da linha de entrada do LS365 puxa a linha para cima. Ao se pressionar uma tecla quem puxa a linha para baixo é a linha de endereço.

Já no emulador de teclado, as linhas de endereço são ligadas aos pinos de /oe dos registradores de deslocamento, e sem os resistores de pullup essas linhas todas ficavam em estado indeterminado. O interessante é que eu esperaria que essas linhas ficassem ativas, pois os registradores de deslocamento são HC e os pinos abertos são tomados como nível baixo, o que deveria ter gerado algum lixo que seria percebido pelo TK como alguma tecla pressionada, mas enfim, não foi assim que aconteceu.

O fato é que depois que coloquei os resitores de pull-up já foi possível baixar o sinal, linha a linha e conferir o acionamento de cada coluna à medida em que se pressionava a tecla correspondente.

Todas as linhas funcionaram, exceto a última linha!! Daí conferindo o circuito, achei que o pino do /oe do chip que recebe os bits da última linha estava em nível alto o tempo inteiro, devido a uma problema na solda (o fio esmaltado não tinha perdido a isolação direito).

Depois de consertada a solda e conferido o contato no multímetro, novo teste e.... Mesma situação!!
Novamente o mesmo procedimento, checar todos os sinais que chegam ao CI. Assim descobri que tinha esquecido de soldar o pino 12, do sinal de RCK que é o sinal responsável por transferir os dados do registrador de deslocamento para o latch de saída.

Havia uma falha dupla na montagem de um dos registradores de deslocamento.

Pois é, falha dupla!!! O pior das falhas duplas é você achar um defeito e achar que está resolvido e depois não testar mais aquele pedaço! Isso pode acontecer com tudo: de máquinas a software!! E o procedimento para resolver e sempre o mesmo: Conferir tudo, mesmo que já tenha sido conferido antes, sem tomar nada por garantido. Se tiver dúvida se já testou ou não, teste de novo.

Depois de consertado mais esse problema, a última linha passou a funcionar. O passo seguinte foi ligar no TK e torcer os dedos!!

Aí sim, sucesso!!!!



Circuito montado na placa ressuscitada.

Todas as teclas funcionaram perfeitamente, inclusive as compostas (setas, backspace, etc)

Detalhe da montagem. A alimentação vem do TK

Circuito composto de 8 registradores de deslocamento (HC595) e um PIC16F688

O projeto ficou pequeno, e ocupou apenas 575 bytes de memória. Isso significa que cabe perfeitamente num PIC menor como um 12F675 ou 12F629, e ainda sobra espaço para melhorar a tabela de associação das teclas (por exemplo BACKSPACE ficou mapeado como SHIFT + 0 pressionados simultaneamente).
Tela do projeto, que está bem simples e consumiu pouca flash.

Agora preciso dar uma arrumada no código, melhorar os comentários, etc antes de publicar. Também preciso redesenhar o circuito.