Páginas: [1]   Ir para o fundo
  Imprimir  
Autor Tópico: [AVR] Micro tutorial  (Lida 797 vezes)
Njay
Cristal
***
Offline Offline

Mensagens: 334



WWW
« em: Setembro 15, 2008, 05:21:25 »

Índice
  Motivação
  Introdução
  Ferramentas de Desenvolvimento
  Hardware
      Programador
      Circuito de Teste
      Teste ao hardware
  Software


Motivação

Bom, já vi que o pessoal por aqui, e pelo que percebi mesmo em Portugal, é mais adepto do PIC. Eu como gosto muito do AVR e o considero uma tecnologia bastante superior ao PIC, resolvi então iniciar este tutorial para ajudar a dar os primeiros passos a quem quiser experimentar um AVR. Por falta de tempo vou ter que ir escrevendo aos pedaços, mas espero que ainda assim o tutorial fique completo rapidamente. Também posso vir a re-escrever o texto; se virem isto mudar completamente não se assustem, estou a usar o próprio fórum como folha de rascunho. Mas comecemos.


Introdução

"AVR" é o nome de uma familia de microcontroladores 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 comercialização. Para quem souber inglês, podem ver uma pequeno video sobre os AVR aqui: http://www.avrtv.com/2007/09/09/avrtv-special-005/.
O AVR consiste, tal como um PIC e outros microcontroladores, num processador (o "core"), memórias voláteis e não-voláteis e periféricos. Ao contrário 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 1º AVR há mais de 10 anos (o PIC teve "dores de crescimento" e o tamanho das instruções aumentou algumas vezes ao longo do tempo de forma a suportar mais funcionalidade).

Assim de uma forma rápida podemos resumir a arquitectura do AVR nos seguintes pontos:

  • Consiste num core de processamento, memória de programa (não volátil, FLASH), memória volátil (RAM estática, SRAM), memória de dados persistentes (não volátil, EEPROM) e bits fuse/lock (permitem configurar alguns parametros especiais do AVR).
  • Arquitectura de memória Harvard (memória de programa e memória de dados separadas)
  • A memória volátil (SRAM) é contínua
  • A maior parte das instruções têm 16 bits de tamanho, e é este o tamanho de cada palavra na memória de programa (FLASH).
  • Execução de 1 instrução por ciclo de relógio para a maior parte das instruções.
  • Existem 32 registos de 8 bits disponiveis e há poucas limitações ao que se pode fazer com cada um.
  • Os registos do processador e os de configuração dos periféricos estão mapeados (são acessiveis) na SRAM.
  • Existe um vector de interrupção diferente por cada fonte de interrupção.
  • Existem instruções com modos de endereçamento complexo, como base + deslocamento seguido de auto-incremento/decremento do endereço.
  • O conjunto de instruções foi pensado para melhorar a conversão de código C em assembly.

Para facilitar a vida a todos, a mim e a voccês, vou centrar o tutorial apenas num modelo específico de AVR, o ATtiny26, e em programação C, já que o assembly é muito hardcore para uma introdução. Mais tarde não será difícil extender o descrito neste tutorial para mais 1 ou 2 modelos de AVR sem grandes alterações. Este ATtiny26 apesar de ser pequeno não é dos modelos mais básicos, e na minha opinião consegue um excelente equilibrio preço/funcionalidade; tem ADC, contadores/timers, hardware que facilita a construção de interfaces SPI/I2C/UART, velocidade de relógio até 16MHz (um PIC para ter a mesma velocidade precisava de ter um clock de 64MHz), entre outras coisas.


Ferramentas de desenvolvimento

Vamos precisar das seguintes ferramentas, todas software de utilização livre:

  • AVRStudio 4.13 (73MB) - Ambiente de desenvolvimento gratuito da ATMEL para toda a linha AVR. Consiste num editor, assembler, programador e simulador. Vamos usá-lo como simulador.
  • WinAVR (23MB) - Ambiente de desenvolvimento OpenSource para AVRs. Consiste num editor, compilador C/C++, linker, debugger, simulador e programador. Vamos usar apenas as aplicações para compilação de C e o programador.

Se a tua ligação à Internet for lenta, podes deixar o download do AVRStudio para mais tarde, eu digo-te quando na altura (na verdade ele não é essencial para desenvolver programas para AVR, mas ajuda imeeeeenso).

Após a instalação do WinAVR, vamos ter que adicionar uma descrição do nosso hardware programador ao ficheiro de configuração do avrdude, que é a aplicação do WinAVR que trata da programação dos AVRs. Portanto abram o ficheiro <directoria-de-instalação>\WinAVR\bin\avrdude.conf e procurem pelo comentário de texto

# Parallel port programmers.

Este comentário marca o inicio da zona de configuração de programadores de porta paralela, e logo aí vamos inserir a descrição do (hardware) programador que vamos usar e que está descrito na próxima secção:


# AVR Tutorial programmer at www.electronicapt.com
programmer
  id    = "avrpt";
  desc  = "AVR Tutorial at ElectronicaPt.com";
  type  = par;
  reset = 6;
  sck   = 8;
  mosi  = 7;
  miso  = 10;
;



O avrdude é um programa muito flexível e não se limita a aceitar apenas um ou alguns tipos de programadores; ele lê do ficheiro avrdude.conf a configuração de programadores e usa-a para utilizar o programador de hardware que estejamos a usar. Assim podemos utilizar muitos tipos diferentes de programadores sem ter que alterar o código do avrdude; inteligente, não Wink? E ele faz o mesmo para os AVRs. Cada AVR tem memórias de tamanhos diferentes e toda essa informação está no ficheiro de configuração. Mas não é preciso mexer em mais nada Sorridente.

O programador de AVRs que vamos usar é de ligar à porta paralela do PC, o que quer dizer que o teu PC terá que ter uma LPT. Existem uns conversores de USB para LPT, mas normalmente não funcionam, tem que ser uma porta LPT "pura". Também terás que ter direitos de administração no teu PC para instalar um driver de porta paralela.

Agora vamos tratar do hardware.


Hardware


Programador
Precisamos de ter um circuito programador para gravar os nossos programas no AVR. O AVR tem 2 modos de programação: o paralelo/alta voltagem e o série/baixa voltagem. Estes modos permitem ler e escrever nas suas memórias não voláteis e nos bits fuse/lock. O circuito abaixo é um programador de modo série, que vamos utilizar.


Este circuito tem que ser montado dentro da caixa da ficha que liga à porta paralela do PC, e é essencial que fique ali mesmo à saída da porta paralela (mais perto do que dentro da ficha que lá liga, impossível):



(do outro lado)


Circuito de Teste
Vamos montar numa matriz de contactos o circuito abaixo. Este pode ser alimentado por qualquer tensão entre 2.7V e 5V, pelo que pode ser usado por exemplo um par de pilhas AA ou AAA de 1.5V, ou uma pilha de lítio tipo "botão" de 3V.


Nesta placa temos apenas 1 LED como dispositivo externo sobre o qual o AVR pode actuar, mas depois deste tutorial vocês irão certamente ser criativos e ligar muitas outras coisas Sorridente.
Vou usar um suporte de 2 pilhas AA de 1.5V para alimentar o circuito:



Se já tentaste enfiar uma ponte de terminais (as peças dos pinos dourados) numa matriz de contactos, reparaste que eles não prendem lá, porque são demasiado curtos. Para resolver isso pega num alicate e empurra devagar os pinos 1 ou 2mm, usando a base de plástico como apoio para uma das pontas do alicate, assim:


Agora já se conseguem prender as pontes à matriz.

Eu usei pontes de terminais, mas também poderia ter usado fichas macho do tipo das brancas do programador e do suporte de pilhas que podes ver nas fotos. Esses até são um pouco melhores, porque são polarizados, isto é, só permitem que ligues as fichas numa das 2 posições possíveis, o que é importante (especialmente a fichas das pilhas!). Essas fichas são baratas e encontram-se com facilidade cá em Portugal.


Teste ao hardware
Bom, antes de começarmos a fazer programas para o AVR, temos que verificar se o hardware (programador e circuito de teste) estão a funcionar. E vamos fazê-lo verificando se o software programador, o avrdude, é capaz de falar com o nosso AVR.

Para começar tens que instalar um driver no teu PC que irá permitir ao avrdude ter acesso à porta paralela. Para isso vai ao menu Iniciar do Windows e escolhe Executar; aí dá o comando

runas /user:administrador cmd

administrador é o nome de um utilizador no teu PC que tenha direitos de administração, e este comando abre uma Linha de Comando onde os comandos que deres se executarão como se fosses esse utilizador. Se o utilizador que usas habitualmente já tem direitos de administração, então basta-te abrir uma Linha de Comando directamente.
Na Linha de Comando então aberta, vai para a directoria ...\WinAVR\bin\ e corre o ficheiro install_giveio.bat para instalar o driver, como no exemplo:


Verifica se a instalação correu bem, deves ver as mesmas mensagens que na imagem acima. Em princípio só deves precisar de fazer isto uma vez, pois o driver fica instalado como serviço do Windows, de arranque automático. Já podes fechar a Linha de Comando e abrir uma nova, desta vez normal (Iniciar -> Executar -> escrever "cmd" e ENTER). Cria uma directoria de trabalho para este tutorial, por exemplo c:\tutorial e muda-te (cd ...) para lá.

Liga o programador à porta paralela e ao circuito de teste.


Tem atenção à posição da ficha branca. Depois liga as pilhas ao circuito de teste e vamos verificar se o avrdude consegue "falar" com o nosso AVR, dando mais um comando:


C:\tutorial> avrdude -c avrpt -p t26 -i 50

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e9109

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

C:\tutorial>



O texto a laranja (ele não aparece laranja, fui eu que o pintei!) é uma boa indicação de que a conversa foi bem sucedida, uma vez que o avrdude conseguiu ler a assinatura do AVR, que é um código que identifica o modelo de AVR. Se houver mensagens de erro vais perceber... e aí tens que verificar se o cabo está bem montado, bem ligado, o circuito bem montado, se ligaste as pilhas, etc. Enquanto não vires a assinatura do AVR neste pequeno teste, não vais conseguir programá-lo.

Com o hardware a funcionar, vamos então começar a olhar para o software.


Software


Se tiveste a coragem de chegar a este ponto, estás (se não estás, devias estar Sorridente) em pulgas para programar o teu 1º AVR Sorridente. Vamos primeiro ver como é que se compila e grava um programa no AVR, e só depois vamos à explicação dos detalhes.

Vamos fazer o programa que é o sonho de qualquer iniciante Wink, pôr um LED a piscar. Copia o seguinte para um ficheiro e grava-o com o nome pisca_led.c.

Código:
#include <avr/io.h>
#include <util/delay.h>

int main (void)
{
    DDRA = 0x01;    // Configurar pino PA0 como output

    do {  // inicio de ciclo
        PORTA = 0x01;       // Acender o LED
        _delay_ms(500);     // Esperar 500ms...
        PORTA = 0x00;       // Apagar o LED
        _delay_ms(500);     // Esperar 500ms...
    }
    while (1);      // Saltar para o inicio do ciclo
}

E para compilar este programa vamos dar os comandos:


C:\tutorial> avr-gcc -mmcu=attiny26 -DF_CPU=1000000UL -g -O1 -o pisca_led.elf pisca_led.c

C:\tutorial> avr-objcopy -j .text -j .data -O binary pisca_led.elf pisca_led.bin

C:\tutorial>



Finalmente, para programar o AVR damos agora o último comando e observamos, com espanto Sorridente, o AVR ser programado:


C:\tutorial> avrdude -c avrpt -p t26 -i 50 -U flash:w:pisca_led.bin:r

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## |  100% 0.01s

avrdude: Device signature = 0x1e9109
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "pisca_led.bin"
avrdude: writing flash (108 bytes):

Writing | ################################################## | 100% 0.38s

avrdude: 108 bytes of flash written
avrdude: verifying flash memory against pisca_led.bin:
avrdude: load data flash data from input file pisca_led.bin:
avrdude: input file pisca_led.bin contains 108 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.35s

avrdude: verifying ...
avrdude: 108 bytes of flash verified

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

C:\tutorial>



Assim que termina a execução deste comando, e se for bem sucedido tal como no exemplo acima, terás diante dos teus olhos um LED a piscar Sorridente. Parabéns Sorridente!!!


Continua numa próxima oportunidade... entretanto podem ir enviando as vossas dúvidas/sugestões.
« Última modificação: Setembro 29, 2008, 00:29:25 por Njay » Registado

Blog: Tróniquices ~ Projecto: EmbeddedDreams.com ~ Tenho componentes p/ venda nos Classificados
Márcio Oliveira Ferreira
Socket
**
Offline Offline

Mensagens: 163


A persistência é a alma da vitória dos sem dons.


« Responder #1 em: Setembro 15, 2008, 17:36:59 »

Olá Njay,

Parabéns! Essa sua iniciativa é muito importante, pois é um pouco difícil encontrar materail sobre AVR na internet, ainda mais em português, tenho certeza que isso irá transformar o fórum numa referencia na internet...

Abs e fique com Deus,
Registado

Todos os caminhos nos levam as trevas, mas somente aqueles com muita fé seguirão para a luz... Por isso julgue o seu sucesso por aquilo o que você teve que renunciar para consegui-lo.
José Flor
José António Flor de Sousa
Chip
*****
Offline Offline

Mensagens: 1 044


OzFlor - José Flor


WWW
« Responder #2 em: Setembro 16, 2008, 00:43:28 »

De AVRs eu só ouvi falar, não conheço.
Boa matéria. Um optimo trabalho. Espero aparecer mais pessoas com o mesmo objectivo de criar aqui pequenos tutoriais.
Força que estás a ir muito bem.
Abraços   
José Flor
Registado

zhead
Fusivel
*
Offline Offline

Mensagens: 17



« Responder #3 em: Setembro 17, 2008, 15:08:30 »

Njav, dei uma vista de olhos pelo teu blog. Gostei bastante dos teus tutoriais e da forma simples como escreves. Tens muito jeito para criar tutoriais acessiveis mesmo para aqueles que pouco entendem do assunto começarem a perceber. Congratz
Registado
gadelhas
Socket
**
Online Online

Mensagens: 155



« Responder #4 em: Setembro 17, 2008, 15:22:22 »

Njav, dei uma vista de olhos pelo teu blog. Gostei bastante dos teus tutoriais e da forma simples como escreves. Tens muito jeito para criar tutoriais acessiveis mesmo para aqueles que pouco entendem do assunto começarem a perceber. Congratz

X2
Registado

Abraço
Gadelhas
José Flor
José António Flor de Sousa
Chip
*****
Offline Offline

Mensagens: 1 044


OzFlor - José Flor


WWW
« Responder #5 em: Setembro 18, 2008, 05:33:46 »

Njav, dei uma vista de olhos pelo teu blog. Gostei bastante dos teus tutoriais e da forma simples como escreves. Tens muito jeito para criar tutoriais acessiveis mesmo para aqueles que pouco entendem do assunto começarem a perceber. Congratz

X2

Idem aspas.
Já se pode chamar de mili Tuturial.
Abraços
José Flor
Registado

José Flor
José António Flor de Sousa
Chip
*****
Offline Offline

Mensagens: 1 044


OzFlor - José Flor


WWW
« Responder #6 em: Setembro 22, 2008, 04:04:03 »

Citar
O programador de AVRs que vamos usar é de ligar à porta paralela do PC, o que quer dizer que o teu PC terá que ter uma LPT. Existem uns conversores de USB para LPT, mas normalmente não funcionam, tem que ser uma porta LPT "pura". Também terás que ter direitos de administração no teu PC para instalar um driver de porta paralela.

Uhm, no meu caso á muito tempo que não acesso nem paralelo nem serial. Creo que o pessoal hoje em dia vai para laptps ou notebooks e não tem acesso a isso.
Alguma outra alternativa, tipo com outro programador?
Abraços
José Flor
Registado

Njay
Cristal
***
Offline Offline

Mensagens: 334



WWW
« Responder #7 em: Setembro 22, 2008, 04:18:08 »

Haver há, mas já não são tão simples como os de porta paralela. Depois podemos discutir outras opções.

Aproveito para agradecer os comentários simpáticos dos nossos amigos mais acima Sorridente

Está quase terminada a 1ª parte do tutorial, que serve essencialmente para montar o hardware e todo o ambiente de software (falta mostrar mais detalhes para ajudar na construção do programador, ainda não estou contente com esse ponto). Com esta parte toda a funcionar, ficamos sempre prontos para fazer e gravar programas no AVR. Na verdade era por aqui que eu tencionava ficar quando comecei o tutorial e por isso é que lhe chamei "micro", mas vamos a ver.
« Última modificação: Setembro 22, 2008, 04:22:52 por Njay » Registado

Blog: Tróniquices ~ Projecto: EmbeddedDreams.com ~ Tenho componentes p/ venda nos Classificados
JDrEd
Administrador
Chip
*****
Offline Offline

Mensagens: 539


« Responder #8 em: Setembro 22, 2008, 11:51:49 »

Bom tutorial, muito útil e muito acessivel  Cool
Registado
Dropes
Transistor
**
Offline Offline

Mensagens: 28



« Responder #9 em: Outubro 21, 2008, 09:54:34 »

Óptimo tutorial  Sorridente
Também tive algumas dificuldades em aceder ao porto paralelo a partir do Windows XP, normalmente fazia a interface em "Pascal (dos)" e executava a partir do Windows 98.
Hoje, já programo a interface em VB, porque além de ficar com melhor aspecto gráfico, também é possível inserir o "dll" do porto paralelo dentro do programa para resultar em apenas um ficheiro executável.
Sem dúvida que a ATMEL é um dos melhores suportes para desenvolver qualquer tipo de projectos com micro-processadores, além de terem muitos exemplos e tutoriais, também têm um programa bastante completo e atractivo.
Registado
asena
Eng. Electrónico
Cristal
***
Offline Offline

Mensagens: 230



WWW
« Responder #10 em: Outubro 21, 2008, 11:13:22 »

Haver há, mas já não são tão simples como os de porta paralela. Depois podemos discutir outras opções.

Aproveito para agradecer os comentários simpáticos dos nossos amigos mais acima Sorridente

Está quase terminada a 1ª parte do tutorial, que serve essencialmente para montar o hardware e todo o ambiente de software (falta mostrar mais detalhes para ajudar na construção do programador, ainda não estou contente com esse ponto). Com esta parte toda a funcionar, ficamos sempre prontos para fazer e gravar programas no AVR. Na verdade era por aqui que eu tencionava ficar quando comecei o tutorial e por isso é que lhe chamei "micro", mas vamos a ver.


Tá porreiro pá Wink  bom trabalho. Continua, pois vai haver gente que vai gostar de aprender contigo !!
Registado

Cumprimentos,
 
António Sérgio Sena
 
Tlm.: +351.967.033.209
Fax.: +351.236.215.256
 
www.senaeng.com
 
Soluções em Sistemas Electrónicos e de Microcontroladores.
 


.
resinba
Moderador Global
Cristal
*****
Offline Offline

Mensagens: 449


« Responder #11 em: Outubro 22, 2008, 10:42:46 »

Muito bom, continua...

PS: Finalmente alguém se dignificou a falar da concorrência..... Grin Grin Grin Grin Wink

Continua com o bom trabalho.
Registado

Por favor, alterem o meu email no msn pois tenho outro email dedicado aos foruns, e vou bloquear todos os que se encontram no antigo email.
José Flor
José António Flor de Sousa
Chip
*****
Offline Offline

Mensagens: 1 044


OzFlor - José Flor


WWW
« Responder #12 em: Outubro 22, 2008, 11:39:32 »

Muito bom, continua...
PS: Finalmente alguém se dignificou a falar da concorrência..... Grin Grin Grin Grin Wink
Continua com o bom trabalho.
Éh éh éh, gostei.
É bom ter uma diversificação por aqui.
José Flor
Registado

Páginas: [1]   Ir para o topo
  Imprimir  
 
Ir para: