Índice:

Arduino PS / 2 para adaptador USB: 7 etapas (com imagens)
Arduino PS / 2 para adaptador USB: 7 etapas (com imagens)
Anonim
Arduino PS / 2 para adaptador USB
Arduino PS / 2 para adaptador USB
Arduino PS / 2 para adaptador USB
Arduino PS / 2 para adaptador USB

Você sempre quis usar seu antigo teclado PS / 2 com seu laptop ou novo PC de mesa e descobriu que eles não têm mais portas PS / 2? E então, em vez de comprar um adaptador PS / 2 para USB barato como uma pessoa normal faria, queria usar seu Arduino como um adaptador PS / 2 para USB. Então você veio ao lugar certo:)

Aviso justo antes de entrarmos nisso. Quando você está usando seu UNO / Mega como um dispositivo USB-HID (não limitado ao teclado, pode até ser um mouse, joystick, etc.) você perderá temporariamente suas funções como um Arduino. Com isso, quero dizer que você não pode usar as comunicações seriais e não pode reprogramá-las via USB. Isso ocorre porque iremos sobrescrever o firmware em seu chip de interface USB (cara perto da porta USB Atmega8U2 e 16U2 dependendo da revisão). Mas não se preocupe, você não pode realmente bloquear seu UNO / Mega fazendo isso, é sempre reversível.

Além disso, por acaso, se você tiver um Arduino que já possui um recurso USB-HID (Arduino Pro Micro ou Leonardo, etc, faça uma pesquisa no google) você pode esquecer que este instrutível já existiu vá diretamente aqui para se salvar de um mundo de problemas, apenas brincando!

Suprimentos

  • Hardware

    • Arduino UNO ou Mega
    • Teclado PS / 2
    • Opcionalmente, um Arduino extra ou qualquer tipo de programador USB (USBasp, etc) pode ser útil.
  • Programas

    • Atmel FLIP
    • Biblioteca PS2KeyAdvanced para Arduino IDE

Etapa 1: Fiação e configuração

Fiação e configuração
Fiação e configuração
Fiação e configuração
Fiação e configuração
Fiação e configuração
Fiação e configuração
Fiação e configuração
Fiação e configuração

Dependendo da situação, você pode encontrar uma placa de breakout ou recuperar uma porta antiga de uma placa-mãe (minha 2ª tentativa) ou se você estiver se sentindo particularmente mal-humorado, pode até cortar o conector roxo e expor os 4 fios (minha 1ª tentativa) e conecte-os ao UNO.

Teclado_Arduino

+ 5V (VCC) _ + 5V

GROUND_GND

RELÓGIO_ PIN 2 **

DADOS _ PIN3 *

* Você pode alterar o pino de DADOS para o que quiser, mas lembre-se de atualizar o esboço.

** CLOCK deve ser conectado a um pino de interrupção no Arduino, que só pode ser o PIN 2 ou 3 (lembre-se de atualizar o esboço) em um UNO. Para obter mais informações e diferentes configurações de placa, você pode verificar a seção de comentários dos exemplos de biblioteca PS2KeyAdvanced.

Etapa 2: Teste de teclado

Antes de começar, certifique-se de que tudo está funcionando no teclado e na biblioteca.

Anexei aqui uma versão modificada do SimpleTest.ino de exemplos de biblioteca PS2KeyAdvanced com relógio atualizado e pinos de dados e também uma representação de "fazer" e "quebrar". Aqui está uma explicação para a saída.

  • Este sistema de scancode "fazer" e "quebrar" e "Código", que é o scancode isolado (c & 0xFF) do pressionamento ou liberação da tecla, desempenha um papel importante na conversão de PS / 2 para USB e eu recomendo que você estude os outros 2 exemplos que vêm com a biblioteca para obter um melhor entendimento se você estiver planejando melhorar ou alterar (remapeando chaves para layouts diferentes) o esboço final. Além disso, você pode obter uma lista completa de scancodes PS / 2 da biblioteca abrindo os arquivos 'PS2KeyAdvanced.h' ou 'PS2KeyCode.h' em '\ Documents / Arduino / libraries / PS2KeyAdvanced / src \'
  • "Status Bits" refere-se às teclas modificadoras (Ctrl, Alt, Windows, Shift / Caps) e você verá que com cada tecla modificadora adicional, este valor muda enquanto o "Código" principal da tecla normal (não modificadora) permanece inalterado. Mas, no esboço final, desconsiderei esse método e implementei essas teclas modificadoras como simples pressionamentos de tecla (você verá que essas teclas modificadoras também têm scancode "make" e "break" independente das teclas normais, independentemente de várias teclas serem pressionadas ou não). porque torna as coisas mais fáceis com o protocolo USB-HID.

Etapa 3: Visualização da conversão PS / 2 para USB

Antes de atualizar o Atmega8U2 ou 16U2 (UNO Rev3) para identificar o nosso Arduino como um teclado USB, devemos ter certeza de que todo o material de conversão está funcionando corretamente e o esboço final final foi carregado ou, caso contrário, será um grande incômodo substituir o firmware novamente e novamente entre os arquivos hexadecimais do teclado original e USB apenas para que você pudesse fazer o upload do esboço correto. Isso se torna especialmente verdadeiro se você não tiver nenhum programador externo como um USBasp ou outro Arduino para usar como ISP. Então, aqui iremos fazer o upload de uma versão 'DEBUG' do esboço final com uma saída legível por humanos (através do monitor serial) para testar as coisas.

A saída que você vê será formatada assim quando cada tecla for liberada, 00 00 00 00 00 00 00 00

Aqui está uma explicação básica para a saída esperada,

Para cada novo pressionamento de tecla de modificador múltiplo, você deve obter uma nova linha com valores diferentes para 'xx'. Finalmente, quando você soltar todas as teclas modificadoras, 'xx' deve se tornar 00

xx 00 00 00 00 00 00 00 00

Para cada novo pressionamento de tecla normal múltiplo (por exemplo, pressionaremos a tecla hipotética a, a tecla b e a tecla c com os valores 'xx', 'yy' e 'zz' nessa ordem), você deve obter contínuo (não obrigatório) novas linhas como esta,

00 00 xx yy zz 00 00 00

quando você só solta a tecla b, a saída deve mudar para,

00 00 xx 00 zz 00 00 00

e se você pressionar a nova tecla d com o valor 'nn' sem soltar a tecla a ou b, sua saída deve mudar para,

00 00 xx nn zz 00 00 00

e, finalmente, volte a isso quando todas as teclas forem liberadas,

00 00 00 00 00 00 00 00

e, por último, se você pressionar Caps Lock, Num Lock ou Scroll Lock, deverá obter algo assim com várias linhas ao mesmo tempo,

00 00 xx 00 00 00 00 00

00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00

Se tudo aqui acontecer você terá ouro para prosseguir!

Etapa 4: Explicação técnica

Explicação Técnica
Explicação Técnica
Explicação Técnica
Explicação Técnica

Se desejar, você pode pular esta etapa. Esta é apenas uma explicação para os resultados anteriores. O array de 8 bytes de saída que você viu está formatado de acordo com a fig.1 acima. Você pode aprender muito mais sobre isso e também como o byte de status das teclas modificadoras é escrito neste wiki sobre USB-HID. Basicamente, o que meu código faz é cada vez que uma nova tecla é pressionada (o protocolo PS / 2 se refere a isso como 'make'), ele percorre os últimos 6 bytes da matriz que são usados para pressionamentos de tecla normais e preenche os primeiros byte vazio que encontra com o 'scancode HID' relevante (mostrado como na fig.2 Também você pode encontrar uma lista completa do PDF anexado) para o 'scancode PS / 2' recebido. E, finalmente, quando a chave relevante for liberada (o protocolo PS / 2 se refere a isso como 'quebra'), o código percorrerá a matriz de bytes atual e limpará apenas o byte relevante.

Se você seguiu até aqui e também se você leu a página wiki você verá que há um pequeno problema neste método, normalmente quando a chave é liberada, no protocolo HID os bytes restantes são reorganizados para se livrar dos bytes vazios entre bytes não vazios restantes. Mas por alguma razão, independentemente de quantas maneiras eu tentei, não consegui fazer funcionar como planejado sem limpar acidentalmente bytes indesejados para as teclas pressionadas também. Se você pode melhorar isso para fazê-lo funcionar, deixe um comentário. Embora no final do dia esse problema não afete a funcionalidade do teclado, desde que o Arduino ainda registre todas as teclas pressionadas, independentemente de sua ordem de pressionamento (o que não afeta nada no uso prático).

Etapa 5: enviando o esboço final

Portanto, antes de você finalmente atualizar o firmware do Atmega8U2 ou 16U2 (UNO Rev3) para identificar nosso Arduino como um teclado USB, devemos fazer o upload do Sketch Final. Depois de fazer o upload, se você for ao monitor serial, verá que ele imprime lixo a cada nova tecla pressionada, isso é um bom presságio de que tudo está funcionando como planejado e podemos prosseguir para a etapa final. YAY!!!

Etapa 6: Atualizando o Firmware

Finalmente, você pode atualizar o firmware do seu Arduino para registrá-lo como teclado USB. Para isso, não vou entrar em muitos detalhes, pois isso tornará as instruções muito longas.

  1. Siga este guia de arduino.cc sobre 'Atualizando o Atmega8U2 e 16U2 em um Uno ou Mega2560 usando DFU', mas em vez de usar 'Arduino-usbserial-uno.hex', use o anexo 'Arduino-keyboard-0.3.hex'
  2. No FLIP, lembre-se de selecionar o dispositivo de destino como Atmega8U2 ou 16U2 dependendo do seu Arduino e, a partir de selecione o meio de comunicação, escolha USB e finalmente carregue o arquivo hexadecimal correto antes de selecionar executar.
  3. Se você encontrou um erro de driver, vá para o gerenciador de dispositivos do Windows e selecione para pesquisar o driver desconhecido dentro do diretório de instalação de FLIP '\ Arquivos de Programas (x86) Atmel \'
  4. Se você encontrou erros ao atualizar o firmware do FLIP várias vezes, feche o FLIP e execute 'Redefinir preferências' no 'menu Iniciar / FLIP \' e reinicie o FLIP e execute as etapas de configuração antes de tentar novamente. Isso geralmente funciona para mim.
  5. Se você quiser restaurar seu Arduino ao seu estado original, siga o guia arduino.cc acima ao pé da letra, sem usar este arquivo hexadecimal.

Etapa 7: Aproveite …

Aproveitar……
Aproveitar……

Agora aproveite seu teclado PS / 2 para USB recém-convertido…. P. S. Este Instructable foi totalmente escrito a partir de um teclado PS / 2 externo conectado ao meu laptop através do Arduino:)

Recomendado: