HacKeyboard, um teclado mecânico de hardware aberto – parte VI

Olá a todos! Esta é a sexta parte da publicação sobre a construção do HacKeyboard. Caso não tenham visto as anteriores, podem ver aqui:

[HacKeyboard, um teclado mecânico de hardware aberto – parte I]

[HacKeyboard, um teclado mecânico de hardware aberto – parte II]

[HacKeyboard, um teclado mecânico de hardware aberto – parte III]

[HacKeyboard, um teclado mecânico de hardware aberto – parte IV]

[HacKeyboard, um teclado mecânico de hardware aberto – parte V]

Ligar o HUB USB e a pen USB

hub usb

Por esta altura a parte electrónica estava quase pronta 🙂 A próxima coisa que tive de fazer foi preparar o Hub USB. Se forem tentar fazer o vosso próprio HacKeyboard, devem tentar encontrar um hub semelhante ao que conseguem ver nas fotos no ebay, uma vez que têm uma altura muito reduzida e uma PCB pequena sem quaisquer conectores soldados. São muito baratos (provavelmente os mais baratos de todos), muito comuns e fáceis de encontrar. Segue-se abaixo um passo a passo do que tive de fazer:

  1. Abri a caixa do hub com cuidado. Foi muito fácil utilizando uma chave de fendas e um x-acto;
  2. Depois tirei uma fotografia da PCB para que mais tarde pudesse verificar onde deveria ser soldado cada um dos cabos. Se estiverem a fazer isto e não tirarem fotografia, deverá ser semelhante à que podem ver na imagem abaixo;
    pcb USB hub
  3. Dessoldei todos os cabos que ligavam aos conectores USB;
  4. Soldei cabos novos, com as mesmas cores (para não me enganar) no lado do “host” (porta H);
  5. No lado de dispositivos o hub tem ligações para 4 portas USB mas só usei 3 delas: numa delas soldei os 4 cabos nas ordens correctas (porta A), noutra soldei todos menos o vermelho (porta B) e no terceiro soldei apenas o verde e o branco (porta C). A quarta porta USB ficou sem quaisquer cabos soldados. Lembrem-se das letras das portas H, A, B e C, uma vez que vão ser referidas mais à frente;
  6. Coloquei uma pequena camada de cola quente por cima das soldaduras para garantir que os cabos não iriam sair.

Depois de preparar o hub USB, procurei fixá-la na PCB. Primeiro encontrei um local sem quaisquer soldaduras e colei a placa à PCB com cola quente.

hub usb Hackeyboard

Depois de fixá-la no seu lugar, tive de soldar os fios nos seus respectivos locais:

  • Olhando para a PCB do lado do microcontrolador, os 4 cabos do lado do “host” (porta H) foram soldados aos 4 pinos próximos do conector micro USB da direita (vejam as imagens para referência e ordem de cores);
  • Considerando o mesmo lado da PCB, o conjunto de cabos que apenas tem o verde e o branco (porta C) foi soldado aos dois pinos próximos do microcontrolador;
    ligação dados Hackeyboard
  • A porta com 4 cabos (porta A) foi soldada aos 4 pinos próximos do outro conector micro USB;
  • O conjunto com apenas 3 cabos foi usado para posteriormente efectuar a ligação à pen USB;
  • Utilizando a cola quente, pus todos os cabos em posições seguras, colados à PCB, exceptuando os da porta B.

Uma das fotos mostra claramente todas as ligações que devem ser feitas e só têm de as replicar se estiverem a fazer o vosso próprio HacKeyboard 🙂

hub USB do Hackeyboard

De seguida procedi à preparação da pen USB:

pen drive Hackeyboard USB

  1. Utilizando um x-acto, alicates e chaves de fendas abri a caixa de plástico e removi a PCB da mesma;
    pen USB
  2. Cuidadosamente dessoldei o conector USB.
    pen drive usb conector removido

Depois foi necessário encontrar um local adequado para colar a pen USB à PCB do HacKeyboard. Neste caso, uma vez que estava a lidar com uma PCB de dupla-face pus um bocado de fita cola de electricista  (também podem usar fita kapton) na PCB do teclado para prevenir curto-circuitos.

fita preta PCB hackeyboard

Depois tive de:

  1. Colar a pen drive USB em cima da fita cola preta de elctricista e soldar três fios na porta B do hub USB às ilhas de GND, D- and D+ da pen USB;
    pen drive USB colada
  2. Soldar a outra ponta do cabo vermelho que foi soldado à ilha de VCC da pen USB à ilha próxima do regulador Charge-pump (ver a imagem para referência).
  3. Colocar todos os cabos em posições seguras e colá-los à PCB com cola quente.

Pen drive USB Hackeyboard pronta

As fotos acima mostram claramente onde cada cabo deve ser ligado, no caso de terem algumas dúvidas 🙂

E por esta altura estamos terminados com tudo o que são ligações eléctricas e soldaduras! 🙂

Desenvolvimento do código que faz com que tudo funcione

github Hackeyboard

Nesta secção vou explicar-vos como é que o código que faz o teclado funcionar foi feito.

Decidi usar a JAL para desenvolver o firmware uma vez que não tinha muito tempo para meter o teclado a funcionar até à Lisbon Mini Maker Faire.  JAL, ou Just Another Language, é uma linguagem de alto-nível para uma série de microcontroladores PIC da Microchip que precede o ambiente de desenvolvimento Arduino. Como curiosidade, o Massimo Banzi, um dos fundadores do Arduino, foi um dos contribuidores da JAL. Outra razão pela qual decidi experimentar a JAL, foi que reparei que já havia na JALlib um código de exemplo para criar um dispositivo USB HID que fez com que os primeiros passos no desenvolvimento de um teclado USB completo fossem relativamente fáceis.

Antes de começar a desenvolver o código fiz alguma pesquisa para ver como é que outros programadores geralmente faziam noutros projectos de teclados DIY. O projecto AVR-Keyboard no Github de Fredrik Atmer foi particularmente útil como inspiração. Basicamente reescrevi o código em JAL com algumas modificações que adicionaram todas as funcionalidades extra do HacKeyboard. Uma coisa engraçada é que tive de escrever a função para controlar os LEDs WS2812B de raíz… engraçada porque não tinha um osciloscópio para medir as temporizações dos pinos de saída do PIC18F4550 e praticamente tive de adivinhar as temporizações com base na frequência de operação do microcontrolador e número de instruções por cada ciclo-máquina. Depois de algumas tentativas consegui meter a função a funcionar.

Podem verificar o código fonte no meu GitHub, incluíndo o ficheiro .hex pré-compilado.

Caso queiram modificar alguma coisa no código irão precisar de fazer download do JALlib da página de Github do JALlib. Para compilar basta usar um comando com a seguinte estrutura:

$./(path to compiler) + (path to your .jal file) + (-s) + (path to JALlib libraries) + (options)

Exemplo do comando a partir da directoria do compilador:

./jalv2 file.jal -s ../lib/ -no-variable-reuse -no-fuse

Nota: a variável -no-variable-reuse irá usar mais memória do PIC, mas irá compilar mais depressa.

O comando acima é para a linha de comandos de Linux mas deve ser muito semelhante para Windows.

Gravação do firmware

gravação bootloader hackeyboard

Por esta altura o teclado estava quase completo 🙂 . Já tinha caixa, já tinha electrónica e agora só precisava do código para meter tudo a funcionar.

Neste passo foi necessário usar um Programador de PICs. Se estiverem a construir o vosso próprio teclado podem comprar um por uma pechincha no ebay.

Uma vez que o microcontrolador que usei não tinha formato PDIP, não podia inseri-lo num socket de programação ZIF que alguns programadores têm. Como tal, tive de utilizar o interface ICSP (In-Circuit Serial Programming) que usa 6 pinos:

  • MCLR – pino 18
  • VDD – pinos 7/28
  • VSS/GND – pinos 6/29
  • PGD/RB7 – pino 17
  • PGC/RB6 – pino 16
  • PGM/RB3 – pino 15

ligação ICSP HacKeyboard

MicroPro ICSP HacKeyboard

Uma vez que usei o Tiny Bootloader para desenvolvimento (ficheiro .hex também disponível no meu Github), só precisei de fazer upload do mesmo para o microcontrolado uma vez. Tendo isto em conta e também o facto de que iria tornar a PCB muito mais complicada, não coloquei nenhum conector para o interface de programação. O que fiz foi soldar um fio a cada pista ligada a cada um destes 6 pinos e liguei-as ao programador, como pode ser visto nas fotos. Podem fazer o mesmo para fazer a gravação do ficheiro .hex pré-compilado e depois podem dessoldar os fios.

Anteriorment mencionei um conector de programação próximo das portas micro USB. Este conector de programação é uma interface série apenas destinada para desenvolvimento utilizando o Tiny Bootloader para programar o teclado. Porque usei o Tiny Bootloader? Porque é muito mais rápido e fácil de gravar e fazer depuração do código utilizando o interface série. Se estão a planear desenvolver ou modificar o código do teclado, podem usar o procedimento descrito acima para gravar o Bootloader e continuem a ler para aprender a usá-lo.

Já agora, caso não saibam o que é um bootloader, é um programa muito pequeno que fica gravado numa posição específica da memória do microcontrolador que permite gravar novo código no mesmo utilizando um interface série normal, em vez de um interface de programação mais complicado.

Para gravar código no microcontrolador utilizando o Tiny Bootloader, iremos usar um pequeno programa chamado Tinybldlin. Façam download do mesmo aqui, façam a instalação e executem o mesmo. O Tinybldlin é a versão para linux mas também existe a versão para Windows.

tinybldlin

De seguida procurem o vosso ficheiro hex pretendido.

Liguem um conversor série TTL para USB ao conector de programação série e liguem a ficha USB ao vosso computador.

Seleccionem o débito binário de 115200 bps e escolham a porta USB certa e cliquem em Upload.

Se ligaram tudo correctamente, acabaram de enviar código novo para o vosso teclado 🙂

Código de teste Hackeyboard

Na imagem acima podem ver um dos testes que fiz durante o desenvolvimento utilizando a porta série.

Estão a gostar do projecto? Sigam o link para ler o resto e para ver o conjunto completo de fotos da construção: [HacKeyboard, um teclado mecânico de hardware aberto – parte VII]


Achou esta publicação útil? Deseja contribuir para outros projectos envolvendo ciências computacionais, electrónica, robótica ou mecatrónica que serão publicados neste blog? Se sim, pode fazer uma doação utilizando o botão do Paypal abaixo. Obrigado! 🙂

Donate



  • Facebook
  • Twitter
  • Google Plus
  • LinkedIn
  • Reddit
  • Delicious
  • StumbleUpon
  • Digg
  • RSS
  • Email
  • Print