Índice:

Configuração de bits de fusível do microcontrolador AVR. Criando e enviando na memória flash do microcontrolador o programa de LED piscando: 5 etapas
Configuração de bits de fusível do microcontrolador AVR. Criando e enviando na memória flash do microcontrolador o programa de LED piscando: 5 etapas

Vídeo: Configuração de bits de fusível do microcontrolador AVR. Criando e enviando na memória flash do microcontrolador o programa de LED piscando: 5 etapas

Vídeo: Configuração de bits de fusível do microcontrolador AVR. Criando e enviando na memória flash do microcontrolador o programa de LED piscando: 5 etapas
Vídeo: AVR Microcontroller. Chip fuse bits configuration. Creating and uploading the LED blinking program. 2024, Junho
Anonim
Image
Image

Neste caso, iremos criar um programa simples em código C e gravá-lo na memória do microcontrolador. Vamos escrever nosso próprio programa e compilar o arquivo hex, usando o Atmel Studio como plataforma de desenvolvimento integrada. Vamos configurar os bits de fusível e carregar o arquivo hexadecimal na memória do microcontrolador AVR ATMega328P, usando nosso próprio programador e software AVRDUDE.

AVRDUDE - é um programa para baixar e enviar as memórias on-chip dos microcontroladores AVR da Atmel. Ele pode programar Flash e EEPROM e, quando suportado pelo protocolo de programação serial, pode programar fusíveis e bits de bloqueio.

Etapa 1: Gravando o programa e compilando o arquivo hexadecimal, usando o Atmel Studio

Gravando o programa e compilando o arquivo hexadecimal, usando o Atmel Studio
Gravando o programa e compilando o arquivo hexadecimal, usando o Atmel Studio
Gravando o programa e compilando o arquivo hexadecimal, usando o Atmel Studio
Gravando o programa e compilando o arquivo hexadecimal, usando o Atmel Studio

Se você não tiver o Atmel Studio, faça o download e instale-o:

Este projeto usará C, portanto, selecione a opção Projeto executável GCC C na lista de modelos para gerar um projeto executável básico.

Em seguida, é necessário especificar para qual dispositivo o projeto será desenvolvido. Este projeto será desenvolvido para o microcontrolador AVR ATMega328P.

Digite o código do programa na área do Editor de código-fonte principal do Atmel Studio. O Editor de código-fonte principal - Esta janela é o editor principal dos arquivos de código-fonte do projeto atual. O editor possui verificação ortográfica e recursos de preenchimento automático.

1. Devemos dizer ao compilador em que velocidade nosso chip está funcionando para que ele possa calcular os atrasos corretamente.

#ifndef F_CPU

#define F_CPU 16000000UL // informando a frequência de cristal do controlador (16 MHz AVR ATMega328P) #endif

2. Incluímos o preâmbulo, que é onde colocamos nossas informações de inclusão de outros arquivos, que definem as variáveis e funções globais.

#include // cabeçalho para habilitar o controle do fluxo de dados sobre os pinos. Define pinos, portas, etc.

#include // cabeçalho para habilitar a função de atraso no programa

3. Após o preâmbulo, vem a função main ().

int main (void) {

A função main () é única e separada de todas as outras funções. Cada programa C deve ter exatamente uma função main (). Main () é onde o AVR começa a executar seu código quando a energia é ligada pela primeira vez, portanto, é o ponto de entrada do programa.

4. Defina o pino 0 da PORTB como saída.

DDRB = 0b00000001; // Defina PORTB1 como saída

Fazemos isso escrevendo um número binário no registrador de direção de dados B. O registrador de direção de dados B nos permite fazer os bits do registrador B entrarem ou saírem. Escrever um 1 os transforma em saída, enquanto um 0 faria com que eles entrassem. Sendo que estamos acoplando um LED para atuar como saída, escrevemos um número binário, tornando o pino 0 da PORTA B como saída.

5. Loop.

enquanto (1) {

Essa instrução é um loop, geralmente conhecido como loop principal ou loop de evento. Este código é sempre verdadeiro; portanto, ele é executado continuamente em um loop infinito. Isso nunca cessa. Portanto, o LED piscará infinitamente, a menos que o microcontrolador seja desligado ou o código seja apagado da memória do programa.

6. Ligue o LED conectado à porta PB0

PORTB = 0b00000001; // liga o LED conectado à porta PB0

Esta linha dá 1 para o PB0 da PortaB. PORTB é um registro de hardware no chip AVR que contém 8 pinos, PB7-PB0, indo da esquerda para a direita. Colocar 1 no final dá 1 para PB0; isso define PB0 alto, o que o liga. Portanto, o LED conectado ao pino PB0 acenderá e acenderá.

7. Atraso

_delay_ms (1000); // cria um atraso de 1 segundo

Essa declaração cria um atraso de 1 segundo, de modo que o LED acende e permanece aceso por exatamente 1 segundo.

8. Desligue todos os pinos B, incluindo PB0

PORTB = 0b00000000; // Desativa todos os pinos B, incluindo PB0

Esta linha desliga todos os 8 pinos da porta B, de forma que até PB0 é desligado, então o LED apaga.

9. Outro atraso

_delay_ms (1000); // cria outro atraso de 1 segundo

Ele desliga exatamente por 1 segundo, antes de iniciar o loop novamente e encontrar a linha, que o liga novamente, repetindo todo o processo. Isso acontece infinitamente para que o LED pisque constantemente.

10. Declaração de devolução

}

return (0); // esta linha nunca é realmente alcançada}

A última linha do nosso código é uma instrução return (0). Mesmo que esse código nunca seja executado, pois existe um loop infinito que nunca termina, para nossos programas que rodam em computadores desktop, é importante que o sistema operacional saiba se rodaram corretamente ou não. Por essa razão, GCC, nosso compilador, deseja que cada main () termine com um código de retorno. Os códigos de retorno são desnecessários para o código AVR, que funciona independentemente de qualquer sistema operacional de suporte; no entanto, o compilador emitirá um aviso se você não terminar main com return ().

A etapa final é a construção do projeto. Significa compilar e finalmente vincular todos os arquivos-objeto para gerar o arquivo executável (.hex). Este arquivo hexadecimal é gerado dentro da pasta Debug que está dentro da pasta Project. Este arquivo hexadecimal está pronto para ser carregado no chip do microcontrolador.

Etapa 2: Alterar a configuração padrão dos bits de fusível do microcontrolador

Alteração da configuração padrão dos bits de fusível do microcontrolador
Alteração da configuração padrão dos bits de fusível do microcontrolador
Alteração da configuração padrão dos bits de fusível do microcontrolador
Alteração da configuração padrão dos bits de fusível do microcontrolador
Alteração da configuração padrão dos bits de fusível do microcontrolador
Alteração da configuração padrão dos bits de fusível do microcontrolador

É importante lembrar que alguns dos bits de fusível podem ser usados para bloquear certos aspectos do chip e podem potencialmente bloqueá-lo (torná-lo inutilizável)

Há um total de 19 bits de fusível usados no ATmega328P e eles são separados em três bytes de fusível diferentes. Três dos bits de fusível estão contidos no "Byte de fusível estendido", oito estão contidos no "Byte alto do fusível" e mais oito estão contidos no "Byte baixo do fusível". Há também um quarto byte que é usado para programar os bits de bloqueio.

Cada byte tem 8 bits e cada bit é uma configuração ou sinalizador separado. Quando falamos sobre configuração, não configuração, fusíveis programados, não programados, estamos na verdade usando binários. 1 significa não definido, não programado e um zero significa definido, programado. Ao programar os fusíveis, você pode usar a notação binária ou, mais comumente, a notação hexadecimal.

Os chips ATmega 328P possuem um oscilador RC integrado que possui uma frequência de 8 MHz. Novos chips são enviados com este conjunto como fonte de clock e o fusível CKDIV8 ativo, resultando em um clock de sistema de 1 MHz. O tempo de inicialização está definido para o máximo e o período de tempo limite está habilitado.

Os novos chips ATMega 328P geralmente têm as seguintes configurações de fusível:

Fusível baixo = 0x62 (0b01100010)

Fusível alto = 0xD9 (0b11011001)

Fusível estendido = 0xFF (0b11111111)

Usaremos o chip ATmega 328 com um cristal externo de 16 MHz. Portanto, precisamos programar bits de "Fuse Low Byte" de acordo.

1. Os bits 3-0 controlam a escolha do oscilador, e a configuração padrão de 0010 é usar o oscilador RC interno calibrado, o que não queremos. Queremos a operação do oscilador de cristal de baixa potência de 8,0 a 16,0 MHz, portanto, os bits 3-1 (CKSEL [3: 1]) devem ser definidos como 111.

2. Os bits 5 e 4 controlam o tempo de inicialização, e a configuração padrão de 10 é para um atraso de inicialização de seis ciclos de clock desde o desligamento e economia de energia, mais um atraso de inicialização adicional de 14 ciclos de clock mais 65 milissegundos de reinicialização.

Para estar no lado seguro de um oscilador de cristal de baixa potência, queremos o atraso máximo possível de 16.000 ciclos de clock desde o desligamento e economia de energia, então SUT [1] deve ser definido como 1, mais um atraso de inicialização adicional de 14 ciclos de clock mais 65 milissegundos de redefinição, então SUT [0] deve ser definido como 1. Além disso, CKSEL [0] deve ser definido como 1.

3. O bit 6 controla a saída do clock para PORTB0, com a qual não nos importamos. Portanto, o bit 6 pode ser definido como 1.

4. O bit 7 controla a operação de divisão por 8 e a configuração padrão de 0 tem o recurso habilitado, o que não queremos. Portanto, o bit 7 precisa ser alterado de 0 para 1.

Portanto, o novo Fuse Low Byte deve ser 11111111 que, em notação hexadecimal, é 0xFF

Para programar bits do "Fuse Low Byte", podemos usar nosso programador (https://www.instructables.com/id/ISP-Programmer-fo…) e o software AVRDUDE. AVRDUDE é um utilitário de linha de comando usado para fazer download e upload para microcontroladores Atmel.

Baixe AVRDUDE:

Primeiro, devemos adicionar descrever nosso programador ao arquivo de configuração do AVRDUDE. No Windows, o arquivo de configuração está normalmente no mesmo local que o arquivo executável do AVRDUDE.

Cole o texto no arquivo de configuração avrdude.conf:

# ISPProgv1

id do programador = "ISPProgv1"; desc = "porta serial batendo, reset = dtr sck = rts mosi = txd miso = cts"; tipo = "serbb"; connection_type = serial; reset = 4; sck = 7; mosi = 3; miso = 8;;

Antes de iniciar o AVRDUDE, devemos conectar o microcontrolador ao programador, conforme esquema

Abra a janela do prompt do DOS.

1. Para ver a lista de programadores para os quais avrdude é compatível, digite o comando avrdude -c c. Se tudo estiver bem, a lista deve ter ID de programador "ISPProgv1"

2. Para visualizar a lista de dispositivos Atmel para os quais avrdude é compatível, digite o comando avrdude -c ISPProgv1. A lista deve ter o dispositivo m328p para Atmel ATMega 328P.

Em seguida, digite avrdude -c ISPProgv1 –p m328p, o comando informa ao avrdude qual programador está sendo usado e qual microcontrolador Atmel está conectado. Apresenta a assinatura ATmega328P em notação hexadecimal: 0x1e950f. Apresenta a programação do bit fusível atualmente no ATmega328P também em notação hexadecimal; neste caso, os bytes do fusível são programados por padrão de fábrica.

Em seguida, digite avrdude -c ISPProgv1 –p m328p –U lfuse: w: 0xFF: m, É um comando para informar a avrdude qual programador está sendo usado e qual microcontrolador Atmel está conectado e para alterar o Fuse Low Byte para 0xFF.

Agora o sinal do clock deve vir do oscilador de cristal de baixa potência.

Etapa 3: Gravando o programa na memória do microcontrolador ATMega328P

Gravando o programa na memória do microcontrolador ATMega328P
Gravando o programa na memória do microcontrolador ATMega328P
Gravando o programa na memória do microcontrolador ATMega328P
Gravando o programa na memória do microcontrolador ATMega328P

Primeiro, copie o arquivo hexadecimal do programa que fizemos no início da instrução para o diretório AVRDUDE.

Em seguida, digite na janela do prompt do DOS o comando avrdude –c ISPProgv1 –p m328p –u –U flash: w: [nome do arquivo hexadecimal]

O comando grava o arquivo hexadecimal na memória do microcontrolador. Agora, o microcontrolador funciona de acordo com as instruções do nosso programa. Vamos dar uma olhada!

Etapa 4: Verifique o funcionamento do microcontrolador de acordo com as instruções do nosso programa

Verifique se o microcontrolador funciona de acordo com as instruções do nosso programa
Verifique se o microcontrolador funciona de acordo com as instruções do nosso programa
Verifique se o microcontrolador funciona de acordo com as instruções do nosso programa
Verifique se o microcontrolador funciona de acordo com as instruções do nosso programa
Verifique se o microcontrolador funciona de acordo com as instruções do nosso programa
Verifique se o microcontrolador funciona de acordo com as instruções do nosso programa

Conecte os componentes de acordo com o diagrama esquemático do Circuito de LED piscando do AVR

Primeiro, precisamos de energia, como todos os circuitos AVR precisam. Cerca de 5 volts de potência são suficientes para a operação do chip AVR. Você pode obter isso com baterias ou com uma fonte de alimentação CC. Conectamos + 5V de alimentação ao pino 7 e conectamos o pino 8 ao aterramento na placa de ensaio. Entre os dois pinos, colocamos um capacitor de cerâmica de 0,1μF para suavizar a alimentação da fonte de alimentação, de modo que o chip AVR tenha uma linha de alimentação suave.

O resistor de 10KΩ é usado para fornecer Power On Reset (POR) para o dispositivo. Quando a energia é LIGADA, a tensão no capacitor será zero, então o dispositivo reinicializa (uma vez que a reinicialização está ativa baixa), então o capacitor carrega para VCC e a reinicialização será desabilitada.

Conectamos o ânodo do nosso LED ao pino PB0 do AVR. Este é o pino 14 do ATMega328P. Por ser um LED, queremos limitar a corrente que flui para o LED para que não queime. É por isso que colocamos um resistor de 330Ω em série com o LED. O cátodo do LED é conectado ao aterramento.

O cristal de 16 MHz é usado para fornecer clock para o microcontrolador Atmega328 e os capacitores de 22pF são usados para estabilizar a operação do cristal.

Estas são todas as conexões necessárias para acender o LED. Fonte de energia.

OK. O LED está piscando com atraso de um segundo. O trabalho do microcontrolador corresponde às nossas tarefas

Etapa 5: Conclusão

Reconhecidamente, esse foi um processo longo para apenas piscar um LED, mas a verdade é que você superou com sucesso os principais obstáculos: criar uma plataforma de hardware para programar um microcontrolador AVR, usar o Atmel Studio como plataforma de desenvolvimento integrada, usar AVRDUDE como software para configurar e programar um microcontrolador AVR

Se você quiser se manter atualizado sobre meus projetos de microcontroladores básicos, assine o meu YouTube! Assistir e compartilhar meus vídeos é uma forma de apoiar o que faço

Inscreva-se no canal FOG do YouTube

Recomendado: