Neste tutorial, faremos a interface do sensor FLEX com o microcontrolador ATMEGA8. No ATMEGA8, usaremos o recurso ADC (Conversão Analógico para Digital) de 10 bits para fazer este trabalho. Agora, o ADC em ATMEGA não pode receber uma entrada superior a + 5V.
O que é um Sensor Flex?
Um sensor FLEX é um transdutor que muda sua resistência quando sua forma é alterada. Isso é mostrado na figura abaixo.
Este sensor é usado para detectar as mudanças na linearidade. Portanto, quando o sensor FLEX é dobrado, a resistência é drasticamente dobrada. Isso é mostrado na figura abaixo.
Agora, para converter essa mudança na resistência em mudança na tensão, usaremos um circuito divisor de tensão. Nesta rede resistiva temos uma resistência constante e outra resistência variável. Conforme mostrado na figura abaixo, R1 aqui é uma resistência constante e R2 é o sensor FLEX que atua como uma resistência. O ponto médio do ramo é medido. Quando a resistência R2 muda, o Vout muda com ela linearmente. Então, com isso, temos uma tensão que muda com a linearidade.
Agora, uma coisa importante a se notar aqui é que a entrada obtida pelo controlador para a conversão ADC é tão baixa quanto 50 µAmp. Este efeito de carregamento do divisor de tensão baseado em resistência é importante, pois a corrente retirada de Vout do divisor de tensão aumenta a porcentagem de erro, por enquanto não precisamos nos preocupar com o efeito de carregamento.
Vamos pegar dois resistores e formar um circuito divisor de modo que, para um Vin de 25 volts, tenhamos um Vout de 5 volts. Portanto, tudo o que temos que fazer é multiplicar o valor de Vout por “5” no programa para obter a tensão de entrada real.
Componentes necessários
HARDWARE: ATMEGA8, Fonte de alimentação (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), capacitor 100uF, capacitor 100nF (5 peças), resistor 100KΩ.
SOFTWARE: Atmel studio 6.1, progisp ou flash magic.
Diagrama de circuito e explicação de trabalho
No circuito, o PORTD do ATMEGA8 está conectado à porta de dados LCD. No LCD 16x2, existem 16 pinos ao todo, se houver uma luz de fundo, se não houver luz de fundo, haverá 14 pinos. Pode-se ligar ou deixar os pinos da luz de fundo. Agora, nos 14 pinos, há 8 pinos de dados (7-14 ou D0-D7), 2 pinos de fonte de alimentação (1 e 2 ou VSS e VDD ou gnd e + 5v), 3º pino para controle de contraste (VEE-controla a espessura dos caracteres mostrado) e 3 pinos de controle (RS & RW e E).
No circuito, você pode observar que tirei apenas dois pinos de controle. O bit de contraste e READ / WRITE não são usados com frequência, portanto, podem entrar em curto com o aterramento. Isso coloca o LCD em maior contraste e modo de leitura. Precisamos apenas controlar os pinos ENABLE e RS para enviar caracteres e dados de acordo.
As conexões de LCD com ATmega8 são as seguintes:
PIN1 ou VSS para aterrar
PIN2 ou VDD ou VCC para alimentação de + 5v
PIN3 ou VEE para aterrar (oferece contraste máximo, melhor para um iniciante)
PIN4 ou RS (Seleção de Registro) para PB0 de uC
PIN5 ou RW (leitura / gravação) para aterrar (coloca o LCD no modo de leitura e facilita a comunicação para o usuário)
PIN6 ou E (habilitar) para PB1 de uC
PIN7 ou D0 a PD0 de uC
PIN8 ou D1 a PD1 de uC
PIN9 ou D2 a PD2 de uC
PIN10 ou D3 a PD3 de uC
PIN11 ou D4 a D4 de uC
PIN12 ou D5 a PD5 de uC
PIN13 ou D6 a PD6 de uC
PIN14 ou D7 a PD7 de uC
No circuito, você pode ver que usamos comunicação de 8 bits (D0-D7), porém isso não é obrigatório, podemos usar comunicação de 4 bits (D4-D7), mas com o programa de comunicação de 4 bits torna-se um pouco complexo, então optamos apenas por 8 bits comunicação. (Verifique também este tutorial: interface de LCD 16x2 com microcontrolador AVR)
Portanto, pela mera observação da tabela acima, estamos conectando 10 pinos do LCD ao controlador, em que 8 pinos são pinos de dados e 2 pinos são para controle.
A tensão em R2 não é completamente linear; será barulhento. Para filtrar, os capacitores de ruído são colocados em cada resistor no circuito divisor, conforme mostrado na figura.
O pot de 1K aqui é para ajustar a precisão do ADC. Agora vamos discutir 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.
A interface do sensor FLEX com ATmega8 é explicada passo a passo no código C fornecido abaixo.