Wiki ADA

Projetos em Engenharia de Computação

Ferramentas do usuário

Ferramentas do site


programacao-atmega328

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
programacao-atmega328 [2018/10/18 11:14]
amador
programacao-atmega328 [2019/01/21 19:57] (atual)
amador
Linha 3: Linha 3:
 Nesta página são apresentados os conceitos básicos para programação de [[ATmega328|ATmega328 e ATmega328p]] utilizando programação em C e o compilador AVR-GCC. A programação é feita tipicamente em um Sistema Operacional Linux. Nesta página são apresentados os conceitos básicos para programação de [[ATmega328|ATmega328 e ATmega328p]] utilizando programação em C e o compilador AVR-GCC. A programação é feita tipicamente em um Sistema Operacional Linux.
  
-Informações sobre a gravação de códigos aqui mostrados nos microcontroladores podem ser encontradas em [[Gravação ATmega328]]. +Informações sobre a compilação e gravação de códigos aqui mostrados nos microcontroladores podem ser encontradas em [[Gravação ATmega328]].
----- +
-=====Instalação do Compilador===== +
- +
-Para distribuições de Linux baseadas em Debian (como o Ubuntu), a instalação do compilador é feita através da linha de comando: +
-<​code>​sudo apt-get install gcc-avr gdb-avr ​ binutils-avr avr-libc</​code>​+
  
-Para distribuições de Linux baseadas em Arch, a instalação é feita a partir da linha de comando: 
-<​code>​sudo pacman -S avr-gcc avr-gdb ​ avr-binutils avr-libc</​code>​ 
 ---- ----
 =====Portas Digitais===== =====Portas Digitais=====
Linha 22: Linha 15:
  
 Para realizar as ações descritas abaixo, é necessário importar no código a biblioteca de entrada e saída do microcontrolador,​ ou seja, é necessário incluir no início do código: Para realizar as ações descritas abaixo, é necessário importar no código a biblioteca de entrada e saída do microcontrolador,​ ou seja, é necessário incluir no início do código:
-<​code>#​include <​avr/​io.h></​code>​+<​code ​c>#​include <​avr/​io.h></​code>​
  
 ====Direção do Pino==== ====Direção do Pino====
Linha 31: Linha 24:
  
 Desta forma, se formos configurar o pino C3 como entrada e o pino D7 como saída, usaremos os comandos Desta forma, se formos configurar o pino C3 como entrada e o pino D7 como saída, usaremos os comandos
-<​code>​+<​code ​c>
 DDRC &= ~(1<<​DDC3);​ DDRC &= ~(1<<​DDC3);​
 DDRD |=  (1<<​DDD7);​ DDRD |=  (1<<​DDD7);​
Linha 46: Linha 39:
  
 Desta forma, se formos ler o conteúdo presente no pino C3, usaremos os comandos Desta forma, se formos ler o conteúdo presente no pino C3, usaremos os comandos
-<​code>​+<​code ​c>
 DDRC &= ~(1<<​DDC3);​ DDRC &= ~(1<<​DDC3);​
 unsigned char valor; unsigned char valor;
Linha 62: Linha 55:
  
 Desta forma, se quisermos escrever '​1'​ no pino B0 e escrever '​0'​ no pino D7, usaremos os comandos Desta forma, se quisermos escrever '​1'​ no pino B0 e escrever '​0'​ no pino D7, usaremos os comandos
-<​code>​+<​code ​c>
 DDRB |=  (1<<​DDB0);​ DDRB |=  (1<<​DDB0);​
 DDRD |=  (1<<​DDD7);​ DDRD |=  (1<<​DDD7);​
Linha 68: Linha 61:
 PORTD &= ~(1<<​PD7);​ PORTD &= ~(1<<​PD7);​
 </​code>​ </​code>​
 +
 +----
 +
 +=====Facilitando a Vida=====
 +Muitas vezes é chato ficar fazendo as máscaras de bits na mão, então há maneiras de simplificar a programação.
 +
 +====_BV====
 +A primeira delas é a macro de sistema ''​_BV'',​ acrônimo de "Bit Value"​. Por exemplo, ''​_BV(6)''​ é igual a ''​(1<<​6)''​. Desta forma, se quisermos configurar o pino D0 como saída, podemos escrever:
 +<code c>
 +DDRD |= (1<<​DDD0);​
 +//ou
 +DDRD |= _BV(DDD0);
 +</​code>​
 +E se quisermos configurar o pino B3 como entrada, podemos escrever:
 +<code c>
 +DDRB &= ~(1<<​DDB3);​
 +//ou
 +DDRD &= ~_BV(DDB3);
 +</​code>​
 +
 +====Macros extras====
 +Além da macro ''​_BV'',​ podemos definir nossas próprias macros. Algumas macros úteis que podem ser definidas no código são: [(siteEmbarcados>>​
 +title     : Bits em Linguagem C
 +publisher : Embarcados
 +url       : https://​www.embarcados.com.br/​bits-em-linguagem-c/​
 +)]
 +
 +<code c>
 +#define setBit(valor,​bit) (valor |= (1<<​bit)) ​  // Define como '​1'​ um bit em um byte
 +#define clearBit(valor,​bit) (valor &= ~(1<<​bit)) ​  // Define como '​0'​ um bit em um byte
 +#define toogleBit(valor,​bit) (valor ^= (1<<​bit)) ​  // Inverte o valor de um bit
 +#define testBit(valor,​bit) ​   (valor & (1<<​bit)) ​ // Testa se um bit é '​0'​ ou '​1'​
 +</​code>​
 +
 +=====Referências=====
 +~~REFNOTES~~
 +
programacao-atmega328.1539872052.txt.gz · Última modificação: 2018/10/18 11:14 por amador