sexta-feira, 29 de maio de 2015

Tek - Adaptador de teclado genérico (2)

Continuando com o projeto, hoje testei a parte da geração do sinal serializado para a matriz composta pelos registradores de deslocamento. São necessários 3 sinais

DOUT - Sinal que sai do microcontrolador e entra na matriz
SCK  -  Sinal de clock para os dados que chegam

RCK - Sinal de transferência dos flip flops internos (shift register) para os flip flops de saída (storage register)

Os registradores de armazenamento internos aos 595 são fundamentais para este circuito pois evitam que falsos pressionamentos sejam detectados durante a transferência serial (bit a bit) da matriz.


 
 Os sinais gerados encontram-se abaixo:

Transferência da tecla Q para a matriz. Ao final é gerado um pulso de transferência  (RCK)
Captura da transmissão de várias teclas.
Se mais de uma tecla for pressioanda, ambas são tranferidas à matriz. Algumas teclas são transferidas como uma combinação de mais teclas como é o caso das setas de cursor, que são transferidas como se fossem as teclas SHIFT e a tecla correspondente no teclado (UP=7, DOWN=6, LEFT=7, RIGHT=8)

Transmissão de teclas simultâneas e transmissão de tecla composta SHIFT+xx
O próximo passo é montar tudo no TK e ver se funciona!


Sinal /KBD no TK-85

Este post é para ajudar o amigo Clóvis a identificar um problema num TK-85, mas fica também de referência para futuras pesquisas

O sinal /KBD é gerado pela combinação dos sinais /IORQ, A0 e /RD. A decodificação é incompleta, e qualquer endereço de I/O lido vai gerar este sinal que ativa o buffer IC10 (LS365) e permite a leitura das  colunas do teclado (bits D0-D4) além do sinal do cassete (bit D7). Este sinal também permite ao TK reconhecer o funcionamento em 50/60Hz através da presença/ausência do diodo D6. Se o diodo está presente, então toda vez que o sinal /KBD for ativado ele vai forçar um nível baixo na linha D6. Caso o diodo não esteja instalado, o nível lido é alto (apesar de não existir um pull-up na linha).

Lógica de geração do sinal /KBD no TK-85
 A forma de onda normal do sinal /KBD é uma série de 9 pulsos espaçados de 25us e que se repetem a cada 16 ms (a 60Hz). A primeira leitura é para ler e isolar o estado da tecla SHIFT e as seguintes são para ler o estado das colunas (D0..D4) para cada uma das 8 linhas do teclado (A8..A15).

O sinal /KBD consiste de uma série pulsos para ler a matriz do teclado.
Os  9 pulsos são ativados a cada quadro de vídeo gerado (60Hz).




quinta-feira, 28 de maio de 2015

Tek - Adaptador de teclado genérico

A fim de seguir com o projeto do adaptador de teclado genérico tratei de fazer o PIC16F688 se comunicar com o teclado PS/2. Para não perder muito tempo com a implementação resolvi usar uma biblioteca pronta do compilador Mikrobasic para PIC. Esse compilador, ou melhor esse ambiente de desenvolvimento possui bibliotecas para vários periféricos bem fáceis de usar além é claro do 'conforto' de se programar em Basic, pelo menos para quem viveu a época dos micros clássicos. A versão 'demo' permite gerar código até 2Kbytes, o que dá para fazer bastante coisa.
Porém, a facilidade tem seu preço, como por exemplo quando uma biblioteca não tem as funcionalidades que você quer ou não se comporta da maneira como você deseja, e foi exatamente o que aconteceu.

A biblioteca de PS/2  interpreta os 'scancodes'  levando em consideração o estado da tecla shift e o caps lock, o que complica bastante a geração dos estados da matriz. Por exemplo, quando eu pressiono SHIFT juntamente com a tecla "8" a biblioteca me retorna o asterisco "*". Até aí tudo bem, eu poderia simplesmente associar o "*" ao estado correspondente na matriz.
Mas a coisa complica na hora por exemplo de um SHIFT+Letra, pois o teclado interpreta o estado da tecla SHIFT e também o estado da tecla Caps Lock. Dessa forma não tenho como diferenciar somente pelo código recebido quando eu estou pressionando A com o Caps ligado ou SHIFT+A, pois em ambos os casos eu receberia somente que a tecla "A" (maiúscula) foi recebida. Assim seria necessário acrescentar um tratamento paralelo dos estados das teclas CAPS e SHIFT. Isso sem falar no SHIFT+ENTER que seria chato de tratar também...

Pelo menos ficou a experiência de ter lidado com o Mikrobasic, que achei bem positiva.

Bom, no projeto abandonado do emulador de teclado externo para o TK90 eu tinha passado por algo semelhante com a biblioteca PS/2 'padrão' do Arduino, e acabei usando uma outra biblioteca que me retornava os 'scancodes' exatamente como recebidos do teclado, sem os interpretar nem transformar em ASCII. Esta biblioteca tem ainda a vantagem de ser bidirecional, ou seja ela permite enviar comandos ao teclado como inicializar, trocar o modo dos scancodes ou mudar o estado dos leds.

Como essa biblioteca é bem simples resolvi porta-la para o PIC (em C) trocando algumas funções que tomei emprestadas de uma biblioteca de I2C que eu havia escrito na época do projeto do TKChuck.

Para minha surpresa, o código funcionou logo de cara!!

Biblioteca myPS2 funcionando!

Os dois primeiros bytes recebidos são o teclado respondendo ao comando de inicialização e ao Auto Teste finalizado com sucesso . Os bytes seguintes são correspondentes às teclas sendo pressionadas.

O próximo passo foi portar o restante do código do projeto anterior para o PIC e refazer a tabela que associa o 'scancode' à matriz de teclado de forma a refletir as teclas do TK85.
 


Matriz do teclado do TK-85 linearizada (somente 5 bits menos significativos).


Por exemplo, a tecla "S" equivale à coluna 1 (bit D1) da linha 2 (A9):
#define _Tecla_S 0x0A    // 0.0.001.010 -> 0000 1010 -> 0x0A

Já a tecla "Backspace" equivale à SHIFT + 0, ou seja SHIFT + coluna 0 da linha 3 (bit D0 de A12)
#define _Tecla_BS  0x83    // 1.0.000.011 -> 1000 0011 -> 0x83 
 

Um detalhe de montagem do circuito é que o bit D0 ficou na saída Q7 do registrador de deslocamento. Isso requereu alguns acertos, porém agora o programa preenche a matriz corretamente. Nas figuras abaixo as sequências de números correspondem à matriz, sendo a primeira o estado da matriz quando a tecla é pressionada e a segunda quando a tecla é solta.


Tecla "1"

Tecla "S"
Tecla "Backspace", composta de "SHIFT" + "0"
Somente tecla "SHIFT"

O próximo passo vai ser conferir se os registradores de deslocamento estão sendo devidamente preenchidos com o conteúdo da matriz e em seguida começa o teste 'ao vivo' conectado na placa do TK85.




domingo, 24 de maio de 2015

Retomando um antigo projeto

Há algum tempo atrás fiz o projeto de um adaptador de teclado genérico para micros antigos baseado em registradores de deslocamento mas esse projeto ficou meio abandonado em função de uma variação para ser ligada externamente ao TK90X (que infelizmente precisava de uma modificação interna no TK e por isso também foi abandonada).

Pois bem, como a placa 'ressuscitada' precisa de um gabinete e de um teclado, resolvi retomar o projeto do adaptador de teclado genérico (ou Tek) e construí um protótipo.

Prótótipo montado. Os 595 só entram depois dos primeiros testes com o microcontrolador

Foi necessário furar uma fileira extra para acomodar todos os chips na placa de 5x10cm
O projeto do TK90X era baseado num AVR, mas como o espaço é pouco nessa placa vou utilizar o PIC16F688 que tem apenas 14 pinos porém é mais que suficiente para estimular a matriz e ainda sobram pinos para uma porta serial ( que auxilia no 'debug' e serve de expansão 'cross typing' ) e para alguns pinos de entrada/saída para outros fins como entrada de sinais especiais (led caps, teclas modificadoras, etc)



 e ainda sobram mais alguns pinos para uma interface serial e

sábado, 23 de maio de 2015

Caixa padrão para projetos com Arduino

Há algum tempo atrás um amigo me deu algumas caixas padrão que ele tinha sobrando, e acabei descobrindo por acaso que ela abriga perfeitamente uma placa de Arduino UNO e ainda sobra espaço para um "shield". A caixa em questão é a CP-013 da Patola.

Caixa CP-013 da Patola



A caixa tem ranhuras laterais onde uma placa de Arduino se encaixa direitinho.

A caixa tem espaço para uma placa de Arduino e mais um "shield"

A furação aproximada (apenas para a placa do Arduino) é vista na figura abaixo.


Caixa CP-013 após a furação.

Opcionalmente pode-se fazer um rebaixo na tampa o jaque de alimentação para melhorar o encaixe.

Rebaixo para o plug de alimentação.


Caixa CP-013, tampa e Arduino.

Caixa já furada, vista de outro ângulo.


quinta-feira, 21 de maio de 2015

Ressuscitando um TK-85 (5)

Nos últimos dias não tenho conseguido mexer muito com a plaquinha "ressucitada", mas hoje consegui fazer umas poucas coisas:

Instalei duas barras de pinos. Uma com 5 pinos e outra com 8 pinos.

Barras de pinos para as conexões do teclado.
Com isso já deu para testar as combinações da matriz de teclado. Felizmente todas as teclas estão funcionando.

A imagem ficou muito nítida com o TK85AV Tetraloaded

Instalei também alguns componentes faltantes na placa para implementar o MOD do PSG. Ficou faltando o Jaque de saída (que não tenho no momento) e um capacitor de desacoplamento, este último só fui me dar conta agora. A lista completa dos componentes necessários é:
  • 1 AY3-8912 (IC29, PSG) 
  • 1 74LS00 (IC27)
  • 1 LM386 (IC 38)
  • 4 diodos 1N4148 (D6, D7, D8, D9)
  • 4 capacitores de 100nf (C15, C24, C31, C32)
  • 1 capacitor de 220uf (C16)
  • 1 resistor de 47K (R66)
  • 1 resistor de 100K (R65)
  • 1 soquete de 8 pinos (para IC38)
  • 1 soquete de 14 pinos (para IC27)
  • 1 soquete de 28 pinos (para IC29)
  • 1 Jaque de áudio P2
Como ainda falta testar algumas coisas não instalei os CIs, somente os soquetes.
Ficou faltando o capacitor C32 que serve para desacoplar a alimentação de IC27 (LS00)

Soquete e capacitores para o amplificador de áudio.
Por hoje é só...



domingo, 17 de maio de 2015

Caixa reciclada para o TK85

Aproveitando a onda da reciclagem salvei de ir pro lixo uma caixa de placa de vídeo que serviu perfeitamente para abrigar um TK85. Só precisei cortar um pouco a espuma para encaixar o TK, e ainda sobrou um compartimento onde cabe perfeitamente uma fonte chaveada e um cabo de vídeo.

O TK-85 há décadas não tinha uma casa própria.