Índice:

Introdução ao Bascom AVR: 5 etapas
Introdução ao Bascom AVR: 5 etapas

Vídeo: Introdução ao Bascom AVR: 5 etapas

Vídeo: Introdução ao Bascom AVR: 5 etapas
Vídeo: 10 steps to start AVR microcontrollers 2024, Novembro
Anonim
Primeiros passos com Bascom AVR
Primeiros passos com Bascom AVR

Este é o início de uma série para ensiná-lo a programar seu microcontrolador AVR com Bascom AVR.

Por que estou fazendo isso.

A maioria dos exemplos de programa desta série pode ser feita com o Arduino.

Alguns mais fáceis e outros mais difíceis, mas no final ambos rodarão no mesmo controlador.

Mas a forma de programação é diferente em cada ambiente de desenvolvimento. O Arduino precisa de uma biblioteca para tudo, exceto as funções básicas. Bascom também funciona com bibliotecas, mas raramente preciso incluir uma. Com o Arduino, todas as configurações específicas do hardware são feitas por meio das bibliotecas. você tem muito pouca influência na potência real do microcontrolador. Começando com os temporizadores que o controlador possui. com o arduino, você precisa de uma biblioteca novamente. se você tiver o cronômetro até que ele funcione, pode ser que outra biblioteca esteja colidindo com suas configurações. Na bascom, você tem acesso gratuito ao hardware completo, incluindo o setor de boot ocupado pelo arduino. por exemplo, algumas bibliotecas da bascom perguntam qual cronômetro você deseja usar. por outro lado, como o arduino torna muito fácil criar uma biblioteca você mesmo, ele naturalmente o torna uma plataforma onde novos hardwares e sensores geralmente têm uma biblioteca diretamente. o que costuma ser associado a muitas pesquisas na bascom e às funções que uma biblioteca normalmente assumia, deve ser meticulosamente incorporado ao código do programa. mas boas notícias: a comunidade bascom também é muito grande, por isso existe uma solução para cada ideia.

Portanto, depende em parte do projeto o que é usado para um ambiente de desenvolvimento e em parte do know-how do programador.

mas por que estou fazendo esta série. por um lado, economiza muito dinheiro. Não preciso comprar uma placa Arduino para cada projeto. Por exemplo: Um noname Arduino uno custa cerca de 12 € o controlador que está nele custa apenas 2,5 € com o circuito mínimo necessário para uma função estável, custa cerca de 4 €. por outro lado, você tem uma seleção completa de chips avr que são suportados disponíveis. atmegas 8 a 256 e attiny 8 a 2313 e muitos tipos xmega sobre os quais não tenho experiência. Se você quiser usar apenas um servo e um sensor ultrassônico que reconheça uma mão, por exemplo, e depois abra a tampa de uma lata de lixo, pode usar o menor chip possível. Portanto, há muitos motivos para aprender um segundo idioma.

Então vamos começar

Suprimentos

Esta é uma lista de peças mínimas necessárias para uma operação estável do chip e programação.

Placa de ensaio para teste

Atmega 8-16PU (melhor você comprar 2 ou 3 se você matá-los por engano)

Regulador de tensão 7805 5V

Resistor de 10 kohm

Capacitor de filme 100nF

Capacitor eletrolítico de 10µF

Capacitor eletrolítico de 100µF

alguns fios para placa de ensaio

PC com Windows 7/8 / 8.1 / 10

Programador ISP (vou usar aqui o USBasp você pode comprar na amazon por pouco dinheiro)

Bascom AVR (você pode baixar aqui uma DEMO. Todas as funções são desbloqueadas, mas você pode escrever código apenas até o tamanho de 4Kb que é o suficiente para muitos códigos).

Partes opcionais:

LED's com resistores

botões de pressão

peças específicas do projeto

Etapa 1: Instalação do Bascom e configuração

Instalação do Bascom e configuração
Instalação do Bascom e configuração
Instalação do Bascom e configuração
Instalação do Bascom e configuração
Instalação do Bascom e configuração
Instalação do Bascom e configuração

Baixe o arquivo e instale o Bascom AVR. Instale todas as partes, incluindo a última caixa de seleção após a instalação.

Depois disso, reinicie o PC, caso contrário, o bascom não iniciará.

Após a reinicialização, inicie o bascom.

Vá para Opções -> Programador e escolha USBasp na lista, salve as configurações e feche o Bascom.

Use este programa para instalar o usbasp. Depois disso, reinicie o PC novamente. Agora conecte o USBasp ao seu PC e inicie o gerenciador de dispositivos. O USBasp deve aparecer nos dispositivos libusb.

Stat Bascom novamente e crie um novo arquivo. Salve-o no seu PC e aperte o botão F7 do teclado.

O compilador inicia e compila o programa vazio. Agora você pode testar a funcionalidade do programador.

Aperte o botão F4 em seu teclado para iniciar a janela do programador. Agora vá para chip -> identifique para iniciar uma interação. Os LEDs do USBasp devem piscar brevemente. Você deve receber uma mensagem como o chip Id FFFFFF não pôde ler o dispositivo. É um bom sinal de que o programador está funcionando, mas não encontrou nenhum chip.

Agora podemos começar a construir o primeiro circuito.

Etapa 2: vamos examinar mais de perto o chip

Vamos dar uma olhada mais de perto no chip
Vamos dar uma olhada mais de perto no chip

Se você olhar a pinagem do chip, parece que o chip não tem nenhuma semelhança com a placa arduino. Claro, usamos um Atmega8 e no Arduino uno é um Atmega328. Mas o Pinout é quase o mesmo, mas o chip da placa do Arduino Uno tem mais funções. Aqui estão os nomes dos pinos. VCC e GND são os pinos da fonte de alimentação.

AREF e AVCC são pinos para a tensão de referência e fonte de alimentação para o conversor analógico para digital.

PB 0-7 PC 0-6 PD 0-7 são pinos de saída de entrada de propósito geral com ocupação múltipla.

pino de redefinição é o que o nome diz. Para reiniciar o chip. A linha acima do nome do reset significa negação. Isso significa que, para reinicializar o chip, você precisa baixá-lo para 0V.

Para os seguintes pinos, separem instructables que virão em breve.

RXD TXD são pinos de hardware para comunicação serial UART.

INT0 INT1 são pinos de interrupção de hardware

Fonte de relógio XCK / T0 UART / temporizador / fonte de relógio Counter0

Os pinos XTAL / TOSC são para um cristal externo de até 16 MHz (diferentes modelos até 20 MHz) / os pinos de cristal para um RTC interno

T1 é semelhante a T0

Os pinos AIN são para o comparador analógico

ICP1 é semelhante a T0 / T1

OC1A é o pino de saída de hardware para pwm timer1 canal A

PIN de seleção de chip SS / OC2 para SPI / como OC1B, mas canal B

MOSI MISO SCK / OC2 são os pinos SPI de hardware e os pinos para programação / temporizador de saída PWM2

ADC0 a ADC5 são as entradas analógicas

SDA SCL são os pinos para hardware I2C

O chip normal pode trabalhar de 4, 5V a 5, 5V o Atmega 8L pode trabalhar com tensão muito mais baixa.

Você vê que até mesmo este chip pode fazer mais do que um Arduino Uno parece não fazer. Mas o Arduino também pode fazer isso, basta programá-lo.

Etapa 3: O primeiro circuito

O Primeiro Circuito
O Primeiro Circuito
O Primeiro Circuito
O Primeiro Circuito

Agora é hora de construir seu primeiro circuito.

Qual é normalmente o primeiro circuito? Direito! Vamos piscar um LED.

O LED está conectado ao PB0. O resistor próximo ao chip tem 10k Ohms.

O resistor próximo ao LED tem 470 Ohms.

Agora você pode conectar o USBasp ao Atmega conforme mostrado na imagem.

Mas antes de ligar a energia, deixe-nos escrever o programa.

Etapa 4: Escreva o primeiro programa

Escreva o primeiro programa
Escreva o primeiro programa

Crie um novo arquivo no Bascom e digite o seguinte texto.

$ regfile "m8def.dat"

$ crystal = 1000000 config portb.0 = saída do portb.0 = 1 espera 1 portb.0 = 0 espera 1 loop

depois disso, compile-o pressionando F7 no teclado.

Agora podemos programar o chip pressionando F4. A janela do programador é exibida. Agora é hora de ligar a alimentação da placa de ensaio. Você deve aplicar algo entre 6 e 12 Volts.

Agora vá para chip -> autoprogram. Se a janela do programador fechar automaticamente, a programação foi bem-sucedida.

O LED deve piscar na frequência de um segundo.

Agora dê uma olhada mais de perto no programa para entender a sintaxe.

$ regfile "m8def.dat"

$ crystal = 1000000

com $ regfile dizemos ao compilador o tipo do chip usado, o nome do chip Arduino seria "m328pdef.dat"

com $ cristal, dizemos a ele a velocidade da CPU em cerca de 1MHz.

config portb.0 = Saída

isso significa que PB0 deve atuar como saída.

A propósito, a abreviatura PB0 significa porta B bit 0. O chip é dividido em várias portas. Cada porta recebe uma carta para identificação clara. e cada pino de porta um bit de 0 a 7. Por exemplo, posso escrever um byte completo no registro de saída da porta, que será enviado por meio dos pinos de porta individuais.

Faz

ciclo

Isso é o que significa a instrução void loop no Arduino. Todos esses dois comandos se repetirão para sempre. (com algumas exceções, mas mais tarde sobre isso)

Portb.0 = 1

aguarde 1 portb.0 = 0 aguarde 1

Aqui geramos o piscar do led.

Portb.0 = 1 diz ao chip para mudar a saída PB0 para 5V

o comando wait 1 deixa o chip esperar por um segundo. Se você deseja alternar o led mais rápido, você deve substituir o comando de espera por waitms agora, você pode inserir algum tempo agora em milissegundos, por exemplo, waitms 500. (waitus significa espera em nanossegundos)

Portb.0 = 0 diz ao chip para mudar a saída PB0 para 0V.

Etapa 5: adicionar um botão para usar entradas

Adicionar um botão para usar entradas
Adicionar um botão para usar entradas

Agora vamos adicionar um botão para acender o led se o botão for pressionado.

Insira o botão conforme mostrado na imagem.

agora digite o seguinte programa.

$ regfile "m8def.dat"

$ crystal = 1000000 config portb.0 = configuração de saída portd.7 = entrada Portd.7 = 1 faça se pind.7 = 0 then portb.0 = 1 else portb.0 = 0 loop

Se você carregar esse programa para o chip, o led só acenderá quando o botão for pressionado. Mas por que?

o programa começa de forma idêntica ao último até

configuração portd.7 = entrada. Isso significa que o pino PD7 que conectou com o botão atua como uma entrada.

Portd.7 = 1 não muda o pino para alto, mas ativa o resistor pull up interno do Atmega.

O comando if parece um pouco estranho se você estiver acostumado com o arduino.

se você usar a instrução if, terá que usar a instrução "then". Neste exemplo, a instrução if é usada para operações de comando único. Se você quiser usar mais comandos, terá que escrever assim.

se pind.7 = 0 então

portb.0 = 1 algum código algum código algum código else portb.0 = 0 end if

para este uso da instrução if, você deve usar a instrução "end if" no final.

o que ainda é importante. Talvez você já tenha visto. as entradas não são consultadas com portx.x, mas com pinx.x. Você pode se lembrar disso facilmente. As saídas têm o "o" (porta) na palavra e as entradas têm o "i" (pino).

Agora é a sua vez de brincar um pouco.

Meu próximo instrutível virá em breve (instruções padrão como while, select case, for e variables.)

Se gostar do meu instrutível e quiser mais me diga nos comentários.

Recomendado: