Iniciar Atmega 8

Olá!

Porque o Atmega8?

Porque sim 🙂

Trata-se de um uC que poderá ter booloader ou simples, tem todas as funcionalidades da generalidade dos uC’s, para melhor o compreendermos podemos ler este Tutorial(Br)

Como vêm vou ser pratico, se já existe literatura, não vou inventar nada.

E perguntam vocês, afinal o que é o bootloader num uC, a explicação esta aqui

O manual da ATMEL encontra-se aqui, neste manual encontra toda a informação sobre arquitectura do Atmega8, contudo se é um iniciante precisara de ajuda para compreender melhor o que consta no manual, o tutorial anterior, poderá ajuda-lo nesse sentido, no entanto vou referir aqui os aspectos mais importantes:

  • De facto quando tentei escrever este assunto parei aqui e disse para mim.:

– Por onde irei começar? Bom… o melhor mesmo é começar pela necessidades de construção de projecto.

  • Então vamos construir algo, tipo um led a piscar, simples, certo? Mas bonitinho quando vimos o trabalho final.
  • Vamos lá! Um led é um simples díodo que tem uma polaridade, ou seja + e – , espero que esta parte já seja conhecida, senão sugiro: este site , na electrónica podemos fazer piscar um led com uso de transístores, com uC a tarefa é bem mais simples, no entanto precisamos de conhecer bem o uC e seus periféricos.
  • Com recurso ao software Proteus, poderá fazer a montagem do uC e testar o software.
  • Em alternativa compre uma breadboard e monte o circuito da forma que vou explicar.
  1. Pois agora é vão ser elas, montar o circuito?Para isso precisamos de alguns componentes e fazer este trabalho de forma artesanal, isto porque temos de ligar aos canais os respectivos periféricos o melhor mesmo é esquecer-mos tudo isto e compramos um kit 128 que terá tudo preparadinho para testar-mos ou desenvolvermos projectos, ou não, que tal o desafio de fazermos á “unha” a iniciação, já que começamos vamos dar continuidade, afinal o custo dos componentes não é assim tão elevado para esta brincadeira.
  2. Vamos precisar da breadboard , Atmega8,SuporteDIPProgramador USBASPLed’s, Fonte de AlimentaçãoPonte alimentação(gera algum ruído, mas para este trabalho é muito boa, para ligar a bredboard),ligadores,resistênciasBotões, bem já é muita coisa, com um KIT128 por 8Euros fazemos a brincadeira toda 🙂 , mas não vamos por ai, por enquanto.
  3. E agora? Temos um problema, ou não, o Atmega8 vem com bootload, se comprar-mos cá em Portugal ( o que encontro vem com bootloader), então temos uma tarefa que será árdua retirar o bootloader para não trabalharmos como Arduino, mas como um crú uC, Esta tarefa poderá ser FATAL,  ou não, se executarmos com toda a cautela, isto porque vamos limpar o chip,então bora lá!
  4. Para programar o uC precisamos da USBASP e do software de programação da eeprom, no meu caso uso o eXtreme Burner – AVR, para a librarias temos aqui dos nossos amigos Indianos que possuem bons projectos…
  5. Deveremos ligar deste modo,como consta na figura 1, contudo a principal ligação do Atmega8 para programar é conforme a figura 2: ver artigo Remover Bootloader

Ainda assim se já viu toda a explicação e se não ficou com o seu Atmega feito num 8,  então podemos avançar para o “pisca led”, vamos dar mais uma olhadela para um video da QSP Tecnologia: embora seja com AVRstudio5, para iniciar é igual ao 6 ou 7.

Muito bem, se chegou ate este paragrafo é porque continua interessado em avançar com o pisca LED, no

Tutorial(Br) que esta muito bem elaborado, foi referido muito sobre a arquitectura do Atmega8, o que temos de reter é a configuração das portas( PORT ) do atmega8, sim porque poderemos usar como entradas e como saídas.

Para o botão teremos de configurar como uma entrada, para o LED como uma saída, existe 2 registos de 8 bits manipuláveis que teremos de configurar, passo aqui uma explicação.

exemplo:

DDRC – O Port C  Registo Dados Direccional: leitura/escrita
PORTC – O Port C Registo Dados: leitura/escrita
PINC – O PORT C Registo Entradas Pinos: apenas de leitura

Registos do PORT

o DDRC é o responsável pela configuração do PORTC se são entradas ou saídas, sendo que definimos 0 entradas e 1 como saídas,deste modo DDRC=0b00000100 , temos então o pino 3 configurado como saída e os restantes como entradas, uma outra forma é em hexadecimal podem usar esta ferramenta obtemos 0x08 então podemos configurar DDRC=0x08; que será o mesmo bit3, outra forma mais evoluída é com shift, assim apenas referimos com o bit que pretendemos assim DDRC|=(1<<PC3) ou então DDRC|=(1<<3), como os restantes bit do PORT estão por defeito a zero então assume como entradas e só shifta o bit 3 do PORTC.

O projecto em AVRStudio inicia-se assim: piscaled1

Será dentro do main que iremos colocar as configurações que pretendemos, podemos fisicamente instalar o led de 2 modos activo nível lógico alto, ou nível lógico baixo:

Formas de Ligar o LED

Como referi dentro do main antes do while, escrevemos

DDRC|=(1<<3); não esquecer do ponto-virgula. ja esta configurado o pino3 como saída, depois activamos o PORTC: PORTC|=0x08; agora sim dentro do while colocamos: PORTC^=(1<<3); o ^= em C significa Toggle, ou seja mudança de estado, no sentido pratico.

O que se verifica é que dependente da frequência do clock o LED poderá parecer sempre ligado, como contornamos isso?

Colocando uma temporização ( Delay ), essa temporização ira defenir o tempo que ficara ligado e desligado em milisegundos, para isso teremos de chamar uma biblioteca onde conta a função _delay_ms(); a biblioteca é #include <util/delay.h>, colocada logo abaixo da #include <avr/io.h>, agora sim dentro do while colocamos _delay_ms(500);

 

piscaled2

Agora é só compilar o programa e enviar para o Atmega, para isso basta clicar na tecla F7, ira aparecer na pasta onde gravou o projecto uma sub-pasta com nome “Debug”, dentro desta sub-pasta existe um ficheiro com extensão .hex, é este o programinha que temos de introduzir no eXtreme Burner – AVR e depois enviar pela USBASP para o micro-controlador, et voilá temos um LED a piscar.

Agora proponho um desafio: configure todos os bits do PORTC como saídas coloque, LED’s nos 8 bit’s do PortC e depois retire o comando PORTC^=(1<<3);  e em vez disso coloque PORTC++; veja o resultado e comente a sua opinião o que faz esse comando. BOA SORTE!

Deixe uma resposta

Your email address will not be published.

www.000webhost.com