Aqui você vê as diferenças entre duas revisões dessa página.
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~~ | ||
+ |