Baseada no microcontrolador ATMEGA 16-16PI, a placa Megajoy é uma
poderosa interface para projetos de cockpits caseiros, que se comunica com o PC através da porta USB e é reconhecida pelo Windows como um joystick. É uma placa de baixo custo para aqueles que pretendem montar um cockpit mais simples, mas isso não significa que seja um “simples joystick”, pois a mesma suporta 8 entradas análogicas de alta resolução (10 bits) que podem ser conectadas a vários controles analógicos como manche (yoke), pedais de leme (rudder), throttle, flaps, atuadores, etc, e além do mais suporta 64 teclas simples (push buttons), 16 interruptores de alavanca tipo chave toggle, 4 chaves rotativas e 1 hat switch.
Para um painel simples, basta interligar as chaves, potenciômetros e demais controles a esta placa.
Parte do projeto desta placa é baseado na leitura de uma matriz de diodos (linhas e colunas), onde o microcontrolador envia um sinal a um barramento e faz a leitura de outro. Caso uma tecla seja pressionada, ele verifica qual linha e coluna estão “fechadas” e, através da programação interna, envia ao PC a informação da tecla que está pressionada.
Esta varredura é feita de uma forma muito rápida, pois sua freqüência de operação é de 16 MHz. Quando se usa um cristal nessa freqüência, ele pode atingir até 16 MIPS (MIPS é a sigla para Milhões de Instruções por Segundo; ela é a medida para a velocidade da computação de um programa). Outra parte do projeto é baseada na leitura de entradas analógicas, provenientes de potenciômetros externos (ou até mesmo sensores ou placas, cujos sinais sejam compatíveis com as entradas do Atmega). O microcontrolador analisa a tensão presente nas linhas de entrada de uma de suas portas internas e envia (através da porta USB) uma codificação para o PC, informando a posição do cursor de um potenciômetro ou a situação de um sensor.
O Atmega16
O Atmega16 é um microcontrolador de 8 bits de baixo consumo,baseado na arquitetura RISC, podendo executar até 1 milhão de instruções por MHZ de operação (até 16 MIPS), permitindo o projeto de um poderoso sistema, com uma ótima relação de consumo versus velocidade de operação.
Dentre todas suas características podemos destacar as seguintes:
** 131 instruções
** 32 registradores internos de uso geral
** Memória Flash de 16K Bytes que suporta até 10.000 ciclos de escrita/deleção de dados
** Memória EEPROM de 512 Bytes que suporta até 100.000 ciclos de leitura/deleção de dados
** Memória SRAM de 1K
** Conversor Analógico/Digital de 8 canais com resolução de 10 bits
** 32 linhas programáveis de Entrada/Saída
** Tensão de operação de 2,7 a 5,5V (Atmega16L) e 4,5 a 5,5V (Atmega16)
** Baixo consumo: Ativo = 1,1 mA, Modo Idle = 0,35 mA e modo Power down < 1uA
Abaixo, o diagrama de blocos desse componente:

O funcionamento relativo à parte das chaves da placa Mega Joystick pode ser analisada no esquema abaixo, onde vemos a porta C e a porta B do Atmega.

Em um ciclo de operação, um sinal é enviado da porta C – saída 0 (PC0) às chaves SW1 e SW9, através dos diodos D1, D9 (e demais diodos e chaves ligados à esta porta). Da mesma forma, no próximo ciclo um sinal idêntico é enviado da porta C – saída 1 (PC1) ao diodos D2, D10 e às chaves SW2 e SW10….
Considerando que todas as chaves estejam abertas como mostrado acima, nenhum sinal chegará às entradas da porta B (PB0 a PB7).
Assim que um sinal é liberado pela porta C, o microcontrolador faz uma varredura por todas as entradas da porta B, à procura deste sinal. Consideremos agora que a chave SW1 seja fechada pelo usuário: o sinal proveniente da porta C (PC0), passará pelo diodo D1 e chegará à entrada da porta B (PB0).
Como o microcontrolador faz uma varredura muito rápido, ele detectará este sinal presente em PB0, e “saberá” que o mesmo é proveniente de PC0, devido aos ciclos internos da CPU. Internamente à CPU, uma informação será tratada para ser enviado ao PC (e conseqüentemente ao Flight Simulator ou qualquer jogo que estiver utilizando este Mega Joystick), através da porta USB. A grosso modo dizemos que a CPU envia um sinal para PC0, “varre” todas as portas B (PB0 a PB7), envia outro sinal para PC1, “varre” novamente as portas PB0 a PB7 e assim sucessivamente até encontrar uma chave fechada (sinal de PC em PB).
A função dos diodos é não deixar que um sinal de uma porta C retorne para outra porta C ao se fechar 2 chaves simultaneamente.
Nessa “matriz” de linhas e colunas de diodos e chaves, temos 16 entradas para chaves tipo toggle, 64 para chaves tipo push button, 1 hat switch e 4 chaves rotativas.
As entradas relativas às chaves rotativas são tratadas de forma um pouco diferente, pois a CPU analisa a entrada de sinal e identifica o sentido de rotação da chave (que no caso será um encoder). Isso nos dá a oportunidade de ligar 4 encoders para os rádios.
Já para as entradas analógicas, a porta utilizada para a leitura dos sinais é a porta A (PA0 a PA7).
A linha de alimentação de 5 volts é ligada aos extremos (sentido horário) dos potenciômetros.
Como o extremo oposto (sentido anti horário) está ligado ao terra, ao se mover o cursor a tensão irá varia de 0 a 5 volts. Esta tensão será então enviada às entradas da porta A do Atmega.
Este, por sua vez, faz uma leitura (como nas chaves) de todas as entradas, uma a uma, e verifica qual o nível de tensão presente.
Este nível de tensão é tratado internamente e convertido em uma informação para o PC, conforme a posição do potenciômetro em questão.
Se este potenciômetro for usado para as manetes de potência, por exemplo, o cursor todo à frente enviará uma tensão de 5 volts e o Atmega informará ao PC (e conseqüentemente ao Flight Simulator) que queremos potência máxima.
Bem, depois dessa breve introdução ao funcionamento da placa, vamos à parte prática, que consta das ligações dos periféricos, ou seja, as chaves, potenciômetros e encoders.
Identificação dos conectores na placa
Para ligação dos periféricos nesta placa, devemos seguir a figura abaixo para identificarmos os conectores das chaves e potenciômetros:

Os potenciômetros deverão ser ligados nos conectores identificados como “AXES” no centro da placa.
As 64 chaves tipo push button (contato momentâneo), deverão ser ligadas aos conectores identificados como J3 a J10 (identificados como “PULSE SWITCHES”).
Já as chaves tipo toggle, deverão ser ligadas aos conectores J11 e J12 (identificados como “TOGGLE SWITCHES”).
As 4 chaves do hat switch deverão ser ligadas à barra de pinos “HAT SWITCH” na parte inferior central da placa e as 4 chaves rotativas às barras de pinos com identificação “ROTARY SWITCHES”
Ligação dos potenciômetros
Podem ser ligados potenciômetros com valores entre 10K e 100K ohms, sempre do tipo LINEAR. Valores muito alto podem colocar o circuito vulnerável a ruídos e valores muito baixo podem consumir uma corrente alta o suficiente para prejudicar o funcionamento da porta USB, uma vez que toda a alimentação da placa sai dessa porta e ela tem limitação nesse sentido.
Considerando que sejam ligados 8 potenciômetros de 10k ohms, como eles estão ligados em paralelo com a fonte, a resistência total será dada por:

A fórmula para o cálculo da resistência total dos potenciômetros acima poderia ser simplificada para 10000 (10K) / 8 já que TODOS os 8 potenciômetros são iguais. A fórmula apresentada acima (1/RT = ….) é a correta para o cálculo de vários resistores em paralelo, desde que tenham valortes diferentes entre sí.
Com a resposta acima (1250 Ohms), a corrente consumida será dada por : 5V / 1250 ohms = 0,004 A (ou 4 mA).
Se fosse usado potenciômetro de 100K ohms, a resistência total seria de 12500 ohms e a corrente passaria para 0,0004 A (ou 0,4 mA ou ainda 400 uA).
Percebe-se então, que quanto maior o valor dos potenciômetros menor será a corrente consumida da porta USB, mas temos o problema do ruído. Um valor mais adequado seria então 47k ohms, pois estaria no meio da faixa.
Outro fator que influencia (e muito) para o aparecimento de ruídos é o cabo a ser utilizado. Este cabo deverá ser obrigatoriamente com blindagem (malha) e esta deverá ser aterrada apenas de um dos lados, seja nos potenciômetros ou no lado da placa.
Um excelente cabo para esta finalidade é o cabo utilizado para áudio.
Esse aterramento pode ser visto na figura abaixo:

Lembre-se: não faça o aterramento nas 2 extremidades desse cabo. Caso opte por aterrá-lo na extremidade da placa, ligue a malha ao terminal GND do conector.
Identificação dos terminais dos conectores “AXES”:
1 = +5 Volts
2 = Sinal
3 = GND
Para as conexões desses potenciômetros vamos nos orientar pela figura abaixo.

Siga o mesmo procedimento para os demais potenciômetros da placa.
Nota: Caso não use todos os potenciômetros, para evitar entrada de ruídos na placa, através das entradas não utilizadas, feche os pinos 2 (sinal) e 3 (GND) através de solda ou mesmo um jumper.
Um outro método para se evitar ruídos nas entradas dos potenciômetros, é usando capacitores de poliéster, caso o aterramento não seja suficiente.
Para tal, devemos soldar um capacitor de um valor entre 100 nF e 470 nF (poliéster).
Mas lembre-se: quanto maior for o valor desse capacitor haverá um “retardo” maior na entrada do sinal, pois o mesmo irá ter uma carga / descarga de acordo com a tensão vinda do potenciômetro.
Este capacitor deverá ser ligado entre os pinos 2 e 3 da placa, no próprio conector como mostrado a seguir:

Estes capacitores poderão ter as seguintes inscrições:
Para 100 nF: 100nF ou 100K ou 0,1 uF
Para 220 nF: 220nF, ou 220K ou 0,22uF
Para 330nF: 330nF ou 330K ou 0,33uF
Para 470nF: 470nF ou 470K ou 0,47uF
Poderíamos usar até capacitores eletrolíticos para este filtro, mas o retardo entre a movimentação do potenciômetro e a resposta do circuito seria tão grande que iria acabar prejudicando o projeto.
Se optar por eletrolítico, tente no máximo 1 uF, mas observe a polaridade do mesmo, pois se for invertido o mesmo poderá até explodir.
(Positivo no pino 2 e Negativo no pino 3).
A tensão desse capacitor poderá ser 16 ou 25V.
Mapeamento das chaves na placa:
Todas as chaves são mapeadas por uma matriz de linhas e colunas referentes às portas B, C e D do Atmega (PB0 a PB7, PC0 a PC7 e PD4 a PD7).
Para conectarmos as chaves nesta placa devemos conhecer este mapeamento pois ele é fundamental para nos guiar na montagem do painel.
Cada conector (de J3 a J15) está ligado a uma matriz, formada pelo cruzamento das tres portas informadas acima.
Analisando a figura abaixo, vemos as matrizes que compõem os conectores J3 a J10 (para as chaves tipo Push Button).
Para o J3, por exemplo, qualquer chave que for pressionada irá fechar uma das portas C (PC0 a PC7) à porta B0 (PB0).
Observe no detalhe as chaves 0,1,2,3 e 4.
O mesmo é válido para os demais conectores (J4 a J10), porém o que muda é a porta B que será fechada com as demais portas C (agora de PB1 a PB7).
A porta D (PD4 a PD7) não aparece nesta figura pois é da matriz dos conectores J11, a J15 (Chaves Toggle, Rotary switches e jumpers de configuração).
A placa Megajoy possui 2 modos de configuração de mapeamento (Modo 0 e Modo 1), selecionáveis através do Jumper “MODE“. Quando usamos o Modo 1, Primeiramente definimos as chaves Push Button, depois as Toggle e em seguida as Rotary switches. Se o Modo 2 for selecionado, teremos inicialmente as Rotary switches, depois as Toggle e finalmente as chaves Push Buttons.
Essa configuração foi implementada devido ao fato de que, em algumas antigas versões, o Windows não reconhecia mais que 32 botões por joystick instalado. A partir da versão 5 do DirectX isso foi resolvido, mas o FS2004 ainda preserva este problema.
Então, se você pretende usar primeiramente as 4 Rotary switches e depois as 16 chaves Toggle, o modo a ser usado deverá ser o 2, mas se quiser usar os 64 Push Buttons e depois as 16 chaves Toggle, o modo a ser usado será o 1. As tabelas completas dos mapeamentos das chaves são mostradas abaixo, conforme os modos 1 e 2:


Baseado na tabela do MODO 1, vemos que as 64 posições iniciais são as chaves tipo Push button. Em seguida temos as 16 chaves tipo Toggle, da seguinte forma:
Quando a primeira chave estiver ABERTA (1), será simulada a chave nº 65 na tabela, e quando esta mesma chave estiver FECHADA, a simulada será a chave nº 73.
Isso se aplica as demais chaves, da 66 até a 96, sendo que uma mesma chave Toggle (física) ocupa 2 posições na tabela, ou seja, uma aberta e uma fechada.
Logo em seguida temos as 4 Rotary switches (97 a 112) , que funcionam da seguinte forma na tabela:
A Rotary 1 ocupa as posições 97, 98, 105 e 106.
Se esta chave for girada LENTAMENTE e no sentido HORÁRIO (CW), a simulação será a chave nº 97.
Se esta mesma chave for girada LENTAMENTE no sentido ANTI-HORÁRIO (CCW), a simulação será a chave nº 98.
Se esta mesma chave for girada RAPIDAMENTE no sentido HORÁRIO (FCW), a simulação será a chave nº 105.
Se esta mesma chave for girada RAPIDAMENTE no sentido ANTI-HORÁRIO (FCCW), a simulação será a chave nº 106.
Seguindo este exemplo, podemos analisar as demais Rotary switches, pois o funcionamento é idêntico.
A tabela 2 mostra a inversão das chaves conforme descrito anteriormente (primeiro as Rotary, depois as Toggle e por último as Push Button).
A utilização de um modo ou outro vai depender do projeto do usuário.
Nota: O Windows reconhece até 32 chaves, então um recurso utilizado para reconhecimento das 112 chaves é o programa MjoyMapper (http://www.sotaoptics.com/download/misc/MJoyMapper.zip). Este programa é bem pequeno e basta que sejam definidas as 112 chaves conforme a necessidade do simulador.
Bem, depois dessa explicação do mapeamento, vamos para as ligações das chaves.
Ligação das chaves tipo Push button:

Existem vários fabricantes e modelos desse tipo de chave, então vou usar como exemplo um tipo bastante comum, que é a da série 31.000 Margirius, mas nada impede que seja usada de outro modelo ou fabricante.
Este push button possui um visor transparente, onde podemos colocar uma lâmpada. A Metaltex tem muitos modelos que possuem 1 ou 2 leds internos, mas para usar esse tipo de push button devemos ter uma placa para seu acionamento (as placas do FSBUS ou similares).
Esse tipo de chave deverá ser ligado nos conectores identificados como J3 a J10 (lado direito da placa) conforme mostrado a seguir:

Como mostrado no detalhe, cada conector (J3 a J10) possui uma linha de terminais comuns, ou seja, todas as chaves deverão ser ligadas desses pinos para os pinos logo abaixo, como mostrado no desenho.
Se a placa for configurada como MODO 1, o primeiro Push Button será a chave nº 1, o segundo será a chave nº 2 e assim sucessivamente até o Push Button 64.
Mas se o MODO 2 for o escolhido, o primeirao Push Button será a chave nº49, o segundo será a chave nº 50 e assim até o último Push Button (chave 112).
Para esta orientação, siga as tabelas mostradas acima (mapeamento).













Tendo como base o PIC16F84A, esta serve de interface entre a placa COM III e 32 leds (máximo).






Baseada no microcontrolador ATTINY2313, esta placa serve de driver para acionamento de no máximo 64 leds ou até mesmo lâmpadas.






























Encoder incremental Encoders de mouse (desmontado)









O led possui um terminal identificado como Catodo e outro como Anodo. O Anodo deverá estar sempre ligado ao lado positivo de uma fonte, já o Catodo do lado negativo.















