Atmel Studio é a plataforma de desenvolvimento disponibilizada gratuitamente pela Microchip para desenvolver projetos com seus microcontroladores. Suporta tanto os Atmel AVR quanto os Atmel ARM Cortex. Nesta ferramenta é possível desenvolver projetos em C/C++ ou Assembly, além de depurar o programa tanto com ferramentas externas como em um simulador integrado. Além do Atmel Studio existem outras ferramentas que auxiliam o desenvolvimento com microcontroladores Atmel AVR, entre elas podemos citar o compilador AVR GCC e o programador por linha de comando AVRDUDE, ambos open-source.
Nesse artigo vamos exibir os primeiros passos para se criar um projeto em linguagem C utilizando o Atmel Studio e como enviar o programa para a placa Arduino UNO utilizando o avrdude.
Atmel Studio
Ante de mais nada é necessário fazer o download do Atmel Studio. Você pode baixar diretamente do site da Microchip. É interessante notar que o Atmel Studio, além de possuir um ótimo editor de código com vários recursos, inclui o compilador GCC C e C++, Assembler e um simulador, e interfaces contínuas com depuradores e programadores no sistema para tornar o desenvolvimento dos códigos mais fácil. Outro ponto a ser notado é que a ferramenta é baseada no Visual Studio da Microsoft, portanto só é possível usar a mesma no Windows.
Após o download é só instalar seguindo os passos do assistente de instalação no Windows.
O AVRDUDE
O AVRDUDE é um programador em linha de comando muito popular para linha de microcontroladores Atmel AVR. É um projeto open-source e também é utilizado para upload dos programas na plataforma Arduino.
Para este tutorial você pode fazer o download do AVRDUDE que será integrado ao Atmel Studio mais à frente
Criando um projeto com o Atmel Studio
Para criar um novo projeto no Atmel Studio acesse File > New > Project, conforme exibido na figura 1:

Será aberta uma janela para configuração do projeto. Nela é possível escolher o compilador, além do nome e do caminho da pasta onde o projeto será armazenado, conforme exibido na figura 2:
A seguir será apresentada uma janela para escolha do microcontrolador alvo. Neste caso foi escolhido o ATmega328P, microcontrolador da Arduino UNO, conforme exibido na figura 3:
Pronto, o projeto foi criado! Além disso também foi criado o código fonte com a função main() já inserida, pronto para digitar o código da aplicação, conforme exibido na figura 4:
Para testar, vamos inserir um código para piscar o LED no pino PB5, que é o pino 13 da placa Arduino UNO. Digite o código a seguir:
#define F_CPU 16000000UL //definição da frequência de clock para uso da biblioteca delay
#include <avr/io.h> //biblioteca para acesso aos registradores do uC
#include "util/delay.h" //biblioteca para funções de delay
int main(void) //função principal
{
DDRB = 0b00100000; //configura pino PB5 como saída e demais como entradas
while(1) //loop principal
{
PORTB^=(1<<PB5); //inverte estado do pino PB5
_delay_ms(1000); //aguarda 1 seg
}
}
O código apresentado é relativamente simples e os comentários explicam detalhadamente cada linha do programa. Para construir o projeto, você pode acessar Build > Build Solution, conforme exibido na figura 5:
Durante a construção do projeto, na janela Output são exibidas algumas informações desse processo além de detalhes do uso de memória e status final do processo, conforme exibido na figura 6 a seguir:
A partir desse ponto já foi criado o arquivo .hex e o mesmo está pronto para ser gravado na memória flash do microcontrolador. Para esse processo vamos utilizar o gravador AVRDUDE junto com o bootloader presente na placa Arduino UNO. Dessa forma não será necessária uma ferramenta de gravação.
Configurando o AVRDUDE no Atmel Studio
Após o download do programa é necessário configurar o mesmo dentro do Atmel Studio para agilizar o processo de upload do .hex para a placa. Inicialmente é interessante criar uma pasta no diretório C:\ com o nome avrdude contendo o executável do programa e os demais arquivos que vieram juntos no download. Próximo passo é configurar dentro do Atmel Studio, para isso acesse Tools > External Tool…, conforme exibido na figura 7:
Será aberta uma janela para configuração de uma ferramenta externa. Configure o avrdude, conforme exibido na figura 8:
O parâmetro Arguments deve ficar da seguinte forma, para interface com a placa Arduino UNO:
-C "C:\avrdude\avrdude.conf" -p atmega328p -c arduino -P COM9 -b 115200 -U flash:w:"$(ProjectDir)Debug\$(ItemFileName).hex":i
Dica do leitor :Luís Fernando Chavier
-C "C:\avrdude\avrdude.conf" -p atmega328p -c arduino -P COM9 -b 115200 -U flash:w:"$(TargetDir)$(TargetName).hex":i
“Dessa forma dá para usar diferentes configurações de build (ex. “Debug”, “Release”, etc.) que ele já busca o executável no lugar certo.”
Obs: Será necessário mudar a COM9, conforme a porta que o Arduino foi conectada.
Após a configuração, a ferramenta estará disponível no menu Tools. Com o projeto já compilado, para iniciar o processo de gravação basta acessar o menu Tools e clicar no nome dado à ferramenta de programação, conforme exibido na figura 9:
O status da programação aparecerá na janela de saída e caso ocorra com sucesso aparecerá a mensagem exibida na figura 10:

Após isso o LED L da placa Arduino UNO começará a piscar em intervalos de 1 seg.
E você leitor, que esta acostumado a programar o microcontrolador Atmega328 com o uso da plataforma Arduino, o que acha de começar a explorar os recursos dos Atmel AVR utilizando as ferramentas apresentadas?





muito bom conprei um usbasp mais nao tava conseguindo a conecção ja tava desistindo do avr para estudar o pic mais agora com esse seu artigo deu certo vou continuar com o avr , obrigado
se eu usar o atmel studio para aprender a programar em C ou assembly
o meu arduino ainda poderá ser programado pela IDE dele normalmente?
Olá Ulisses, nesse caso não ha necessidade de alterar o bootloader, sendo assim, você continuará conseguindo programar a placa na IDE Arduino normalmente.
boa noite, eu gostaria de saber se o ATMega328p, tem um divisor de frequência, igual ao 8051, que divide o clock? se sim é por quanto?
Bom dia Fabio gostei do artigo gostaria de saber se esse procedimento apresentado serve para outras placas arduino como Atmega .
Grato
Olá Wagner, serve sim. Só precisa configurar o programador para o MCU alvo.
É possivel alterar a tensão de trabalho de um atmega 328 ou um 168 para trabalhar com 3.3 V e mesmo assim rodar com a plataforma arduino?
Olá pessoal estou com um problema , atualmente estou trabalhando SparkFun Geiger Counter e estou usando o Atmel porém estou com alguns erros , alguém pode dar uma força?
Olá Mateus, consegue detalhar melhor os erros?
Saudações Fábio!
Tenho um projeto pronto que baixei pela internet aqui: https://www.youtube.com/watch?v=-XuD8idesZo e, dentro de uma pasta, existem vários arquivos como ‘Makefile’, ‘main.c’, entre outros; portanto, gostaria de saber qual ou quais arquivos devo usar para gravar no microcontrolador como um ATmega328-P; Obrigado
Olá Daniel, você precisa gravar o arquivo .hex e em alguns casos também o .eep.
Abraços,
Fábio , me tira uma duvida é possivel rodar o sparkfun geiger counter no atmel ? Ou essa IDE só roda microcontroladores da atmel?
OLá Mateus, qual o microcontrolador desse kit?
Como posso usa-lo com o STM32? o STM estará na World Skills e ainda não o aprendi.
Olá Joel. Essa IDE é para os microcontroladores da Atmel. Recomendo que você olhe esses materiais:
https://embarcados.com.br/descobrindo-o-stm32-ebook-gratis-2/
https://embarcados.com.br/system-workbench-com-stm32f429i-disco/
https://embarcados.com.br/stm32cube/
https://embarcados.com.br/c-para-arm-cortex-m-usando-gcc-e-make/
sucesso!
Então, como nesse exemplo não é utilizado as bibliotecas do Arduino, as Creative Commons do Arduino não se aplicam? Caso você tenha uma placa desenvolvida com base em uma placa do arduino e utiliza outro método para programar a sua placa você não precisa deixar o seu Hardware aberto?
Wlliam você deve respeitar as licenças de hardware, independente da forma de programar. E vice-versa.
Abraços,
Para mais detalhes sobre as licenças, acesse:
https://www.arduino.cc/en/Main/FAQ
https://www.arduino.cc/en/Main/Policy
Fábio, dessa maneira eu consigo utilizar o microcontrolador da forma “pura” ou ele precisaria do bootloader do Arduino?
Digo, utilizar a placa apenas para fazer o upload do código ao microcontrolador e para facilitar a prototipagem.
Olá, dessa forma você consegue programar sem as camadas do Arduino. Você pode usar as funções da ARV LIBC: https://www.nongnu.org/avr-libc/ e a liguagem C com acesso ao baixo nível do microcontrolador. Porém é interessante manter o bootloader do Arduino para facilitar o upload do código sem a necessidade de uma ferramenta externa.
Ai a vantagem da placa e bootloder do arduino que facilitam o upload e prototipação. Essa é uma forma excelente para aprender microcontroladores e fazer aplicações. Vale muito a pena estudar assim. Qualquer dúvida entre em contato. abraços