Como fazer a interface do LED com o microcontrolador AVR (ATmega16) – (Parte 4/46)

Como fazer a interface do LED com o microcontrolador AVR (ATmega16) – (Parte 4/46)

ATmega16 possui 32 pinos de E/S para comunicação com dispositivos externos. Antes de fazer interface com dispositivos externos, esses pinos devem ser configurados como pinos de entrada ou saída. Este artigo demonstra a operação básica de E/S do ATmega 16 usando LEDs.
Todas as quatro portas podem ser configuradas para ler uma entrada de algum dispositivo externo ou para fornecer saída para qualquer dispositivo externo conforme a aplicação. Por exemplo, um switch está conectado a um pino específico, esse pino deve ser configurado como entrada para ler os valores do switch (dispositivo externo neste caso) e se você estiver conectando um LED a qualquer pino da porta, então esse pino específico deve ser configurado como saída para transmitir o sinal ao LED (dispositivo externo neste caso). Uma única porta pode ser configurada de forma que alguns dos pinos da mesma porta sejam de entrada e outros de saída.
Configurando portas IO:
Cada porta (PORTx, x = A ou B ou C ou D) dos microcontroladores AVR possui três registros associados:
1. DDRx: Registrador de direção de dados, para definir a direção de cada pino do PORTx e configurá-lo para ser como entrada ou saída.
2. PORTx: Os valores que devem ser fornecidos na saída da porta são escritos neste registrador. Esses valores atuam como entrada para o dispositivo conectado na porta de saída do microcontrolador (através dos pinos configurados de saída PORTx).
3. PINx: Este registro armazena o valor de entrada do hardware externo conectado, quando a porta está configurada como porta de entrada. Os dados de entrada são lidos do registro PINx.
Portanto, a primeira etapa na configuração ou inicialização de qualquer porta IO é definir sua direção no registro de direção de dados (DDRx) para definir o comportamento de pinos individuais como entrada ou saída. Um valor alto (1) em qualquer bit do registro DDRx significa que o pino correspondente está definido como saída e vice-versa.
Exemplo: Considerando o cenário switch-LED, suponha que um switch esteja conectado ao Pin5 (PORTD.4) do PORTD e o LED esteja conectado ao Pin8 (PORTD.7) do PORTD. Agora precisamos inicializar os pinos de acordo. Os outros pinos do PORTD não são utilizados neste caso, portanto podem ser ignorados a partir de agora.
PASSO 1: Para configurar PORTD.4 como entrada o valor do Pin-5 (DDRD.5) no registro DDRD é colocado em 0.
DDRD.7
DDRD.6
DDRD.5
DDRD.4
DDRD.3
DDRD.2
DDRD.1
DDRD.0
0
Fig. 2: Valor do bit do registro DDRD para definir PORTD como entrada no AVR
Passo 2: Para inicializar PORTD.7 como saída, o valor do Pin-8 (DDRD.7) no registro DDRD é definido como 1.
DDRD.7
DDRD.6
DDRD.5
DDRD.4
DDRD.3
DDRD.2
DDRD.1
DDRD.0
1
0
Fig. 3: Valor do bit do registro DDRD para definir PORTD como saída no AVR
Etapa 3: O restante dos pinos pode ter qualquer valor, pois não estão sendo utilizados neste caso. Os valores padrão do registro DDRx são 0 para cada pino, ou seja, todas as portas dos microcontroladores AVR são inicializadas como entrada.
DDRD.7
DDRD.6
DDRD.5
DDRD.4
DDRD.3
DDRD.2
DDRD.1
DDRD.0
1
0
0
0
0
0
0
0
Figura 4:

Portanto, o valor de DDRD será inicializado como 0x80.

Figura 5:
O comando acima também pode ser escrito desta forma:
Figura 6:
Onde, 0b é o símbolo usado para representar números binários e a seguir está o valor real de 8 bits.
Configurando o valor de pull-up:
Todas as quatro portas do Atmega16 são equipadas com resistores pull up internos controlados por software. Cada pino das portas pode ser obtido definindo os valores no registro PORTx. A tabela a seguir ilustra o estado real do pino com diferentes combinações de valores DDRx e PORTx.
DDRx
PORTx
Estado de E/S
Puxar para cima
Descrição
0
0
Entrada
Não
Pinos PORTx definidos como entrada e pull-ups desabilitados.
0
1
Entrada
Sim
Pinos PORTx definidos como entrada com pull up habilitado
1
0
Saída
Não
Pinos PORTx definidos como saída e pull-ups desabilitados.
1
1
Saída
Sim
Pinos PORTx definidos como saída com pull ups habilitados.
Fig. 7: Status do pino para diferentes combinações de bits de DDRx e PORTx na interface de LED
Exemplo: Os comandos a seguir podem ser usados ​​para desabilitar e habilitar pull-ups no PORTD.
PORTD = 0xFF; //Pinos PORTD puxados para cima.
PORTD = 0x00; //Desativa os registros pull-up.
Para entender os comandos acima, um experimento simples de piscar o LED é explicado abaixo.
Descrição do circuito:
Conecte o circuito conforme mostrado no diagrama de circuito. Não há cristal no circuito. Este projeto utiliza o cristal embutido do microcontrolador AVR, evitando assim a necessidade de cristal externo. O valor do cristal interno varia de 1MHz a 8MHz, que pode ser ajustado usando os fusíveis. (Os leitores podem conectar o cristal externo, mas modificar os bits dos fusíveis de acordo. Os bits dos fusíveis são explicados em artigos posteriores).
Explicação do código:
#include
Para incluir todos os arquivos de entrada e saída do microcontrolador AVR.
#include
WinAvr possui uma função integrada para fornecer atraso. Para usar as funções de atraso, inclua o arquivo de cabeçalho acima.
DDRA=0xFF;
Para tornar a porta A como porta de saída
PORTA=~PORTA;
Seja qual for o valor da PORTA, elogie-o e envie de volta para a PORTA.
_atraso_ms(1000);
Uma função de atraso fornece um atraso de 1000 milissegundos.
Para entender a compilação e execução do programa acima, consulte o tutorial Trabalhando com AVRstudio.
O que deve ser observado?
Da mesma forma, um código pode ser para o LED piscar em todas as quatro PORTAS. Observa-se que todos os pinos estão funcionando corretamente, exceto os pinos PC2, PC3, PC4 e PC5. A razão é que os microcontroladores AVR possuem JTAG embutido, que precisa ser desabilitado para usar esses pinos como pinos de E/S. A desativação do JTAG é explicada em um artigo separado.

Código-fonte do projeto

###


// Programa para piscar LED usando microcontrolador AVR (ATmega16)
#incluir
#incluir int principal(vazio) { DDRA=0xFF; enquanto(1) { PORTA=~PORTA; _atraso_ms(1000); } }

###

Diagramas de circuito

Diagrama de circuito de como fazer a interface do LED com o microcontrolador AVR-ATmega16

Componentes do Projeto

  • ATmega16
  • LIDERADO

Vídeo do projeto

Conteúdo Relacionado

Uma rede de sensores é incorporada em todos os...
O controlador do motor é um dos componentes mais...
ESP32-CAM é um módulo de câmera compacto que combina...
A evolução dos padrões USB foi fundamental para moldar...
A SCHURTER anuncia um aprimoramento para sua conhecida série...
A Sealevel Systems anuncia o lançamento da Interface Serial...
A STMicroelectronics introduziu Diodos retificadores Schottky de trincheira de...
Determinar uma localização precisa é necessário em várias indústrias...
O novo VIPerGaN50 da STMicroelectronics simplifica a construção de...
A Samsung Electronics, fornecedora de tecnologia de memória avançada,...
O mercado embarcado tem uma necessidade de soluções de...
Você provavelmente já se deparou com o termo 'arrastar'...
Você provavelmente tem um Isolador de suporte Se você...
Você provavelmente já viu permanecer um isolante sente-se em...
Você provavelmente já viu Isoladores de manilha entronizados em...
Você provavelmente já passou por situações em que o...
Tillbaka till blogg

Lämna en kommentar

Notera att kommentarer behöver godkännas innan de publiceras.