Foram várias as dificuldades, porém consegui ir vencendo uma a uma.
A primeira foi terminar a fixação mecânica dos botões e da manete. Com a ajuda do 'footprint' da caixa CR-096 cortei um pedaço de placa de circuito impresso padrão e soldei os botões de forma que suas hastes ficassem o mais próximo possível dos pontos de apoio da caixa.
Fixação da placa com os botões |
Calço plástico colado nas teclas para acionamento dos push-buttons |
Eu avaliei um monte de alternativas para fixar a placa com a manete na parte de baixo da caixa e não gostei de nenhuma. A que menos desgostei, no entanto, que foi a cola de contato acabou sendo a utilizada.
Placa colada na caixa com cola de contato. Foi necessário fresar o fundo da caixa à mão. |
O próximo passo foi arrumar um código de joystick para modificar, baseado no V-USB e que utilizasse o ATTiny45. Cheguei a avaliar o uso do digispark, por causa da biblioteca de joystick para USB e da possibilidade de carregar o firmware utilizando o bootloader mas acabei não gostando. Queria algo mais simples e além disso eu queria utilizar o ATTiny45 que tenho aqui sobrando. Mas essa brincadeira acabou tomando tempo.
Digispark caseiro |
Resolvi então partir de um adaptador de NES que encontrei na Internet (link). Montei o circuito num proto-board e recompilei o código para conferir se as conexões estavam corretas.
Circuito do V-USB para ATTiny |
A gravação do microcontrolador é também trabalhosa porque toda vez tenho que tirar o CI do proto-board e colocar no programador. A propósito meu programador Xing Ling MiniPRO já está se tornando companheiro inseparável de bancada.
Gravador Mini-Pro chinês |
Depois de verificar o funcionamento do circuito, procurei informação a respeito dos descritores USB para poder personalizar o código para o meu joystick analógico de 2 botões. Um excelente artigo (eu recomendo) é o tutorial sobre HID Descriptors deste link.
Defini o meu pacote como sendo composto de 3 bytes, o primeiro com os botões, o segundo com o eixo X e o terceiro com o eixo Y
Formato do report USB do controlador. |
Para gerar o arquivo de configuração é possível utilizar uma ferramenta disponível no site do consórcio USB chamada HID Tool permite criar o 'report' e exporta-lo na forma de um arquivo .h. Apesar de ter dado conta do serviço, ou seja, ter permitido gerar o arquivo de configuração, essa ferramenta é bem tosquinha.
USB HID Tool |
Após a modificação o circuito já era visto como esperado, ou seja como um joystick analógico mais 2 botões.
Circuito com Report correto, porém ainda com a identificação original (USB NES) |
A modificação para suportar os dois botões foi bem simples, bastou modificar o código para ler os pinos PB2 e PB5, porém aí apareceu a primeira pegadinha. O pino PB5 é o mesmo do RESET e para utiliza-lo como pino de I/O é necessãrio mudar o 'FUSE' RSTDSLB para ativo, ou seja desativar o RESET externo.
O próximo passo foi mais chato um pouco por causa de uma besteira minha (sempre é). O ADC não estava funcionando de maneira alguma. Li e reli um monte de coisas, tentando entender o que tinha feito. No final, mas BEM NO FINAL mesmo, descobri que eu estava associando o canal de leitura do ADC incorretamente. Apesar de ser um erro bem bobinho ele me tomou HORAS!
...
#define CH_X 3
...
Errado!:
...
// Sample Axes
// X Axis
ADMUX = (1 << ADLAR) | ( 1 << CH_X) ; // select channel
...
Correto:
// Sample Axes
// X Axis
ADMUX = (1 << ADLAR) | CH_X; // select channel
...
Descoberto esse problema o circuito está funcionando como esperado, e sendo identificado propriamente pelo gerenciador de dispositivos.
Circuito já identificado com o nome de "batismo": CR-096 Controller |
Agora falta montar o circuito dentro da caixa e finalizar o projeto. Daí eu coloco o código disponível bem como o .hex pre-compilado.
Nenhum comentário:
Postar um comentário