Neste tutorial, vamos fazer a interface de um módulo de joystick com o microcontrolador atmega8. Um JOY STICK é um módulo de entrada usado para comunicação. Basicamente, facilita a comunicação entre o usuário e a máquina. Um joystick é mostrado na figura abaixo.
O módulo de joystick tem dois eixos - um é horizontal e outro é vertical. Cada eixo do joystick é montado em um potenciômetro ou potenciômetro ou resistência variável. Os pontos médios são reduzidos como Rx e Ry. Esses pinos são transportados como pinos de sinal de saída para o JOYSTICK. Quando o stick é movido ao longo do eixo horizontal, com a tensão de alimentação presente, a tensão no pino Rx muda.
A tensão em Rx aumenta quando movida para frente, a tensão no pino Rx diminui quando movida para trás. Da mesma forma, a voltagem no Ry aumenta quando movida para cima, a voltagem no pino Ry diminui quando movida para baixo.
Portanto, temos quatro direções do JOYSTICK em dois canais ADC. Em casos normais, temos 1 volt em cada pino em circunstâncias normais. Quando o stick é movido, a tensão em cada pino fica alta ou baixa dependendo da direção. Portanto, quatro direções como (0 V, 5 V no canal 0) para o eixo x; (0 V, 5 V no canal 1) para o eixo y.
Vamos usar dois canais ADC de ATMEGA8 para fazer o trabalho. Vamos usar o canal 0 e o canal 1.
Componentes necessários
Hardware: ATMEGA8, fonte de alimentação (5v), AVR-ISP PROGRAMMER, LED (4 peças), capacitor 1000uF, capacitor 100nF (5 peças), resistor 1KΩ (6 peças).
Software: Atmel studio 6.1, progisp ou flash magic.
Diagrama de circuito e explicação de trabalho
A tensão no JOYSTICK não é completamente linear; será barulhento. Para filtrar o ruído, um capacitor é colocado em cada resistor no circuito, conforme mostrado na figura.
Conforme mostrado na figura, existem quatro LEDs no circuito. Cada LED representa cada direção do JOYSTICK. Quando o manche é movido em uma direção, o LED correspondente acende.
Antes de prosseguir, precisamos falar sobre ADC de ATMEGA8, Em ATMEGA8, podemos dar entrada Analógica a qualquer um dos QUATRO canais do PORTC, não importa qual canal escolhermos pois todos são iguais, vamos escolher o canal 0 ou PIN0 do PORTC.
Em ATMEGA8, o ADC tem resolução de 10 bits, então o controlador pode detectar uma mudança mínima de Vref / 2 ^ 10, então se a tensão de referência é 5V, obtemos um incremento de saída digital para cada 5/2 ^ 10 = 5mV. Portanto, para cada incremento de 5mV na entrada, teremos um incremento de um na saída digital.
Agora precisamos definir o registro do ADC com base nos seguintes termos, 1. Em primeiro lugar, precisamos habilitar o recurso ADC no ADC.
2. Aqui vamos obter uma tensão de entrada máxima para conversão ADC de + 5V. Portanto, podemos definir o valor máximo ou referência do ADC para 5V.
3. O controlador tem um recurso de conversão de gatilho que significa que a conversão ADC ocorre somente após um gatilho externo, uma vez que não queremos que seja necessário definir os registros para o ADC funcionar em modo de execução livre contínua.
4. Para qualquer ADC, a frequência de conversão (valor analógico para valor digital) e a precisão da saída digital são inversamente proporcionais. Portanto, para uma melhor precisão da saída digital, temos que escolher uma frequência menor. Para o relógio ADC normal, estamos configurando a pré-venda do ADC para o valor máximo (2). Como estamos usando o clock interno de 1MHZ, o clock do ADC será (1000000/2).
Essas são as únicas quatro coisas que precisamos saber para começar a usar o ADC.
Todos os quatro recursos acima são definidos por dois registros:
VERMELHO (ADEN): Este bit deve ser definido para habilitar o recurso ADC de ATMEGA.
AZUL (REFS1, REFS0): Esses dois bits são usados para definir a tensão de referência (ou a tensão máxima de entrada que forneceremos). Uma vez que queremos uma tensão de referência de 5V, REFS0 deve ser definido, pela tabela.
AMARELO (ADFR): Este bit deve ser definido para que o ADC funcione continuamente (modo de execução livre).
PINK (MUX0-MUX3): Esses quatro bits são para informar o canal de entrada. Visto que vamos usar ADC0 ou PIN0, não precisamos definir nenhum bit como na tabela.
BROWN (ADPS0-ADPS2): esses três bits são para definir o pré-escalar para ADC. Como estamos usando um pré-escalar de 2, temos que definir um bit.
DARK GREEN (ADSC): este bit definido para o ADC para iniciar a conversão. Este bit pode ser desabilitado no programa quando precisamos parar a conversão.