Hello, World! Linguagem C

Este post faz parte da série Franzininho DIY - AVR LibC

Nesse artigo vamos dar os nossos primeiros passos na programação da Franzininho DIY usando a AVR Libc.

Como de costume o nosso “Hello, World!” na eletrônica será um blink LED (Pisca LED). Ao final desse experimento você terá uma estrutura mínima para desenvolver aplicações para o ATtiny85 em C.

Bora, colocar em prática!

Recursos Necessários

  • Placa Franzininho DIY(com Micronucleus)
  • Computador com as ferramentas de software instaladas (link)

Hello, World! Em linguagem C com AVR LibC

Esse exemplo básico nos dará estrutura para todos nossos exemplos daqui pra frente. Como já mencionado, vamos usar a linguagem C em conjunto com a biblioteca AVR LibC. Para esse exemplo você só precisará da placa Franzininho DIY e as ferramentas de softwares listadas no artigo anterior.

O código exibe a estrutura mínima de um programa em linguagem C para microcontroladores. Se você tem dificuldades com a linguagem C, recomendo que confira os seguintes materiais:

Nesse momento é importante que você se atente a estrutura do código. Vamos usar alguns registradores para acionar o LED, mas não serão o foco da explicação. Confira os comentários no código a seguir:

Código

/**
 * @file main.c
 * @author Fábio Souza
 * @brief Exemplo para blink LED na placa Franzinino 
 * @version 0.1
 * @date 2021-02-03
 * 
 * @copyright  Franzininho 
 * This example code is in the Public Domain (or CC0 licensed, at your option.)
 * Unless required by applicable law or agreed to in writing, this
 * software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
 * CONDITIONS OF ANY KIND, either express or implied.
 * 
 */

#include <avr/io.h>
#include <util/delay.h> 

#define F_CPU 16500000L

/**
 * @brief Função main
 * 
 * @return int 
 */
int main(void) 
{
 
  DDRB |= (1 << PB1);   	// Configura Pino PB1 como saída (Pino do LED)
  
  /**
   * @brief loop infinito
   * 
   */
  while (1)
  {
    PORTB |= (1 << PB1);   	// Liga LED
    _delay_ms(500);      	// delay 500 ms

    PORTB &= ~(1 << PB1);  	// desliga LED
    _delay_ms(500);      	// delay 500 ms
  }                                                
  return (0);                           
}

Compilação e upload

Para compilar o programa, acesse a pasta do exemplo e em seguida o comando make:

exemplos-avr-libc/exemplos/hello$ make

Baixe os exemplos no repositório do Github: Exemplos AVR LibC Franzininho

Já temos o makefile configurado na pasta, assim, será feita a compilação e em seguida aparecerá a mensagem para conectar a placa:

../../micronucleus/2.0a4/launcher  -cdigispark --timeout 60 -Uflash:w:main.hex:i
Running Digispark Uploader...
Plug in device now... (will timeout in 60 seconds)
> Please plug in the device (will time out in 60 seconds) ...

Conecte a placa no PC ou pressione o botão de RESET se ela já estiver conectada.

Será iniciado o upload.

Resultados

Nesse exemplo o LED irá piscar em intervalos de 500 ms (on) e 500 ms (off).

No próximo exemplo vamos detalhar sobre os registradores de IO. Nesse momento, além da estrutura inicial é importante que você entenda como usar a função _delay_ms().

Essa função espera o tempo passado em milissegundos.

Altere o código para que o LED fique 100 ms (on) e 1000 ms (off), veja o efeito.

Conclusão

Nesse exemplo tivemos o primeiro contato com a programação em linguagem C para microcontroladores. Notamos que devemos incluir as bibliotecas externas através do #include e que o programa precisa necessariamente ter a função int main(void).

Dentro da função main temos um loop infinito onde os comandos se repetirão enquanto a placa estiver ligada.

Franzininho DIY - AVR LibC

Exemplos AVR Libc – Franzininho DIY Franzininho DIY – Saídas Digitais
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
2 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Marco Aureliuo Santos Cunha
Marco Aureliuo Santos Cunha
04/06/2021 08:46

Bom dia Diego, eu posso usar uma placa sp32. No lugar do franzininho?

Diego Lima
Diego Lima
27/05/2021 15:01

Na declaração :
int main (void)
vc não poderia uar:
void main (void) ??

Home » Software » Hello, World! Linguagem C

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: