Bitwise Linguagem C - AVR

Embed Size (px)

Citation preview

Programao em C no AVR

Rodrigo Toste Gomes a.k.a Cynary Nuno Joo a.k.a Njay Senso

ltima reviso: 21/12/2010

1

Neste documento tentamos explicar ao leitor as vrias funes que um micro-controlador AVR disponibiliza, e como pode controlar as mesmas, sem recorrer a bibliotecas de alto nvel que muitas vezes roubam performance e acrescentam tamanho aos programas, como por exemplo as que o arduino disponibiliza. Assumimos que o leitor tem alguma experincia com programao em C, e que o contacto que tem com AVR com o arduino (logo, todos os exemplos que temos aqui iro funcionar no mesmo. No entanto, podem funcionar noutros micro-controladores AVR com poucas ou nenhumas alteraes). Todos os programas aqui podem ser compilados atravs dos seguintes comandos: avr-gcc -Wall prog.c -Os -mmcu=atmega168 -o prog.out -DF_CPU=16000000 avr-objcopy -O ihex -R .eeprom prog.out prog.hex (substituir prog.c pelo nome do ficheiro com o cdigo) E podem ser transferidos para o arduino com o seguinte comando: avrdude -p m328p -c avrisp -P /dev/ttyUSB0 -b 57600 -F -U flash:w:prog.hex muito fcil alterar estes comandos para funcionarem com outros micro-controladores e programadores, estando essa informao provavelmente na datasheet. Os programas necessrios para os comandos acima funcionarem vm instalados com o IDE do arduino, e podem ser utilizados para programar outros micro-controladores que no o usado pelo arduino. Para os utilizadores de windows, a utilizao das ferramentas AVRStudio e WinAVR recomendada, mas visto que est alm do alcance deste documento, o leitor incentivado a pesquisar, mas garantimos que os comandos acima funcionam. Qualquer software presente neste documento oferecido com objectivos didcticos, e no acompanhado de qualquer garantia de performance ou funcionalidade. Gostaria de agradecer a todos os membros da lusorobtica que comentaram no tpico respectivo a estes tutoriais, e em especial ao membro Njay, que me autorizou a usar o seu Micro-tutorial neste documento.

ltima reviso: 21/12/2010

2

ndiceProgramao em C no AVR..................................................................................................................1 Introduo.............................................................................................................................................5 Programao em C em micro-controladores........................................................................................6 Controlo da funcionalidade do micro-controlador os registers....................................................6 Pseudo-cdigo/cdigo esqueleto......................................................................................................7 MACROS.........................................................................................................................................8 Variveis volatile..............................................................................................................................8 Operaes bit-wise em C.................................................................................................................8 GPIO General Purpose Input/Output...............................................................................................14 Entrada Digital Normal..................................................................................................................14 Entrada com pull-up (puxa para cima)...................................................................................15 Entrada controlada por um perifrico............................................................................................16 Sada Digital Normal.....................................................................................................................16 Sada em Colector Aberto (open colector).....................................................................................17 Sada controlada por um perifrico................................................................................................17 GPIOs na Arquitectura AVR..........................................................................................................18 Configurao dos Portos em Linguagem C...................................................................................20 Interrupes........................................................................................................................................21 O que uma interrupo?..............................................................................................................21 Como funciona uma interrupo no AVR?....................................................................................21 Como lidar com uma interrupo no AVR?...................................................................................22 Exemplo de interrupo atravs do pino digital 2 (INT0).............................................................23 Cuidados a ter na utilizao de interrupes.................................................................................26 Timers.................................................................................................................................................28 O que so e como funcionam timers?............................................................................................28 Timers no AVR...............................................................................................................................28 Modos Normal e CTC....................................................................................................................29 Como usar um timer no AVR.........................................................................................................29 Eventos relacionados com timers..................................................................................................32 Interrupes e timers......................................................................................................................36 Timers Parte 2, Pulse Width Modulation.........................................................................................39 O que PWM?...............................................................................................................................39 Vrios Modos de PWM.................................................................................................................39 Fast PWM......................................................................................................................................41 Phase and Frequency Correct PWM..............................................................................................46 Analog-to-Digital Converter..............................................................................................................52 Formato Analgico e Digital..........................................................................................................52 O que o ADC?.............................................................................................................................52 Como funciona o ADC no AVR?...................................................................................................52 Como ligar o input ao AVR?..........................................................................................................56 Utilizar o ADC construir um sensor de distncia.......................................................................57 ADC8 medir a temperatura interna.............................................................................................61 Comunicao Serial no AVR..............................................................................................................62 Como funciona a comunicao Serial?..........................................................................................62 O que a USART?.........................................................................................................................63 Inicializando a USART do AVR....................................................................................................64 Enviando e Recebendo Dados atravs da USART........................................................................65 Exemplo de utilizao do USART.................................................................................................68 Comunicao por IC..........................................................................................................................72 O Protocolo IC..............................................................................................................................72 ltima reviso: 21/12/2010 3

IC no AVR.....................................................................................................................................74 Bibliografia.........................................................................................................................................83

ltima reviso: 21/12/2010

4

"Excerto do "Micro Tutorial AVR" de Njay (http://embeddeddreams.com/users/njay/Micro Tutorial AVR - Njay.pdf) com alteraes/adaptaes de Cynary (formatao e contedo)"

Introduo"AVR" o nome de uma famlia de micro-controladores de 8 bits comercializada pela ATMEL. A arquitectura do AVR foi desenvolvida por 2 estudantes de doutoramento noruegueses em 1992 e depois proposta ATMEL para comercializao. Para quem souber ingls, podem ver uma pequeno vdeo sobre os AVR aqui: http://www.avrtv.com/2007/09/09/avrtv-special-005/ . O AVR consiste, tal como um PIC e outros micro-controladores, num processador (o "core"), memrias volteis e no- volteis e perifricos. Ao contrrio do PIC, o core do AVR foi muito bem pensado e implementado desde o inicio, e o core que usado nos chips desenhados hoje o mesmo que saiu no 1o AVR h mais de 10 anos (o PIC teve "dores de crescimento" e o tamanho das instrues aumentou algumas vezes ao longo do tempo de forma a suportar mais funcionalidade). Assim de uma forma rpida podemos resumir a arquitectura do AVR nos seguintes pontos: Consiste num core de processamento, memria de programa (no voltil, FLASH), memria voltil (RAM esttica, SRAM), memria de dados persistentes (no voltil, EEPROM) e bits fuse/lock (permitem configurar alguns parmetros especiais do AVR). Arquitectura de memria Harvard (memria de programa e memria de dados separadas) A memria voltil (SRAM) contnua A maior parte das instrues tm 16 bits de tamanho, e este o tamanho de cada palavra na Execuo de 1 instruo por ciclo de relgio para a maior parte das instrues. Existem 32 registos de 8 bits disponveis e h poucas limitaes ao que se pode fazer com Os registos do processador e os de configurao dos perifricos esto mapeados (so Existe um vector de interrupo diferente por cada fonte de interrupo. Existem instrues com modos de endereamento complexo, como base + deslocamento O conjunto de instrues foi pensado para melhorar a converso de cdigo C em assembly.

memria de programa (FLASH).

cada um. acessveis) na SRAM.

seguido de auto- incremento/decremento do endereo. (A introduo do Micro tutorial do Njay mencionava mais alguns tpicos, que considerei como irrelevantes para este tutorial, logo cortei-os).

ltima reviso: 21/12/2010

5

Programao em C em micro-controladores.Neste conjunto de tutoriais, tentamos ensinar ao leitor como programar um micro-controlador AVR em C low-level. Para fazer isso, especialmente necessrio compreender como controlar as vrias funes do micro-controlador. Os restantes tutoriais concentram-se nisso. No entanto, para compreender os exemplos dados, e poder aplicar o que ensinado, o leitor necessita de compreender algumas coisas bsicas primeiro, respectivamente: Controlo da funcionalidade do micro-controlador os registers. Pseudo-cdigo/cdigo esqueleto MACROS Variveis volatile Operaes bit-wise em C. assumido que o leitor sabe programar em C e que domina os seguintes conceitos: comentrios, bibliotecas, variveis, funes, ponteiros, ciclos, condies, lgica e bases numricas.

Controlo da funcionalidade do micro-controlador os registersOs AVR tm vrias funes: podem ser usados para comparar e ler diferenas de potencial, comunicar por serial, Todas estas funes so controladas por registers mas o que so registers? Todos os CPUs tm uma certa memria interna. Esta funciona quase como a memria ram, excepto no uso de ponteiros. O CPU tem acesso directo a esta memria, o que significa que em termos de performance muito mais eficiente usar registers para armazenamento do que memria ram (o compilador em C optimiza automaticamente os programas, dando uso deste boost na performance sempre que possvel da a importncia de usar variveis volatile quando se usam interrupes, estudadas mais frente). No entanto, estes no so s usados para armazenamento, mas tambm para controlar vrias funes dos micro-controladores. Certos bits em certos registers podem controlar o estado de um pino, ligar e desligar o ADC, Nos AVR todos os registers tm o tamanho de 8 bits. Logo, quando necessrio armazenar valores maiores que 255, usam-se mais do que um register. No entanto, este pormenor abstrado pelo compilador, visto que podemos muitas vezes aceder a um conjunto de registers como se fosse um s (como por exemplo, o register TCNT1 do timer1 que corresponde a dois registers, visto que pode conter um valor de 16 bits). Agora que sabemos o que um register, vamos aprender como us-los. As bibliotecas do avr do-nos um header muito til que nos permite aceder directamente aos ltima reviso: 21/12/2010 6

registers e bits dos mesmos atravs dos seus nomes: avr/io.h Um exemplo: Para alterar o estado de um pino, alteramos o bit correspondente no register DDRx (em que x corresponde porta. Por exemplo, o pino PB1 est na porta B, logo para alterar o seu estado, alteramos o bit PB1 no register DDRB). Logo, utilizamos o cdigo seguinte: #include int main(void) { DDRB |= (1