MC 404 - Arquitetura e Programação de microcontroladores


Profs. Célio Guimarães e Nelson Machado
Atualizado em 05 Jul 2010

Horário de atendimento: IC1 - sala 40: 2ª a 5ª F. das 11:30 - 12:30 e 18:00  às 19hs
PED: Milton Aparecido Soares Jr, PAD: Thiago Santiago; atendimento 3a e 6aF 18-19hs Lm03

Exame: 15 de Julho (5ªF)19hs CB12 (sala da aula)

Alunos reprovados por falta

Planilha com Notas Finais

Arquitetura/Programação do microcontrolador AVR (Atmel)

Diagrama de blocos de uma CPU simples. Veja aqui o ciclo de execução de uma instrução usando o diagrama da CPU simples.
O programa minimal visto em aula: lê o estado de chaves (0 ou 1) ligadas nas portas B e C, faz a soma dos valores binários lidos e põe o resultado da soma em leds conectados na porta D. Veja também no mesmo diretório a representação binária ("linguagem de máquina) das instruções do programa minimal (in, add e out) extraídas do manual de instruções do AVR.
Um resumo dos modos de endereçamento do AVR (leia, imprima e traga nos laboratórios).
Diagrama de blocos simplificado do AVR
Um bom tutorial com exemplos sobre o assembler do AVR: instruções, diretivas, etc Veja também este tutorial (em pdf)
Introdução ao ambiente AVR studio (Windows) de programação assembler + depurador da familia AVR.
manual do assembler do AVR : diretivas, expressões, etc.
Introdução à  arquitetura do AVR ATmega 88 (extraido do datasheet) (leia pgs 1-17). É o principal documento deste modelo do AVR.
Instalação das ferramentas de software da Atmel: o ambiente AVR Studio (para Windows) inclui montador, simulador com depurador dinâmico, interface para o compilador gcc e exemplos. Executável para instalação da última versão: AvrStudio416Setup.exe e o Service Pack correspondente SP1 571. Livre, também pode ser baixada diretamente do site da Atmel
O compilador gcc para Windows (WinAVR) pode ser instalado a partir de WinAVR-20090313-install ou da: winavr.sourceforge.net Simulador Hapsim do display LCD HD44780U (funciona como plug-in do AVR Studio). Download do executável e exemplos
Diretório com manuais e documentação do AVR.
Como escrever programas estruturados em assembler!
Exemplo simples de subrotina para multiplicar dois valores de 8 bits.
Exemplo de macro para multiplicar dois valores de 8 bits. Mais eficiente e mais versátil do que a subrotina correspondente vista acima.
Exemplos de macros úteis (extraído do site www.mikrocontroller.net/articles/AVR_Assembler_Makros.
Resumo das diretivas do assembler do AVR incluindo montagem condicional e operador de deslocamento. Leia e imprima.
Rotinas para leitura e escrita na E2PROM.
Programação de E/S - EEPROM: datasheet (p. 18-23)
Introdução a interrupções e E/S no AVR.
Vetores de interrupção do ATmega88 datasheet (p. 56)
Exemplo de interrupção de fim de escrita na E2PROM.
Exemplo de E/S com leds: acende e apaga ciclicamente 8 leds
Exemplos de rotinas de interrupção: gravação de byte na e2prom, temporizador TIMER0, e interrupção INT0.
Introdução ao Hapsim
Rotinas para configurar e escrever no LCD via Hapsim e arquivo correspondente de configuração do Hapsim
Exemplo de E/S digital com botões que acendem leds; teste com Hapsim usando o arquivo de configuração simplebut2led.xml

Dicas para programaçao em C no AVR-gcc (imprima-o e estude-o).
FAQ do manual da biblioteca avr-libc do gcc para o AVR; contém muitas "dicas" para programação em C.
Exemplos em C que utilizam a biblioteca avr-libc.


Atividades de Laboratório

As atividades opcionais a seguir não entram no cômputo da nota final mas são altamente recomendadas de serem programadas e exibidas nas aulas de laboratório (*); os conceitos nelas contidos farão parte das provas de avaliação.
  1. Resolva os exercícios no documento ciclo de execução de uma instrução.
  2. Trabalhando com vetores: geração e armazenamento da sequencia de Fibonacci (com 16 bits) lab02.html
  3. Invertendo um vetor de bytes na memória RAM

  4. Escreva um trecho de programa contendo apenas uma instrução lógica e saltos condicionais apropriados, para verificar se um inteiro com sinal em um registrador é positivo, negativo, par ou impar. Desenhe os arcos onde há saltos e verifique se o número de cruzamentos de arcos é mínimo.
  5. Trabalhano com multiplicação: produto escalar de 2 vetores de 8 bits
  6. Trabalhando com macros - aritmética de 16 bits:
    o documento avr202.asm, extraído de manuais da ATMEL, exemplifica operações aritméticas de 16 bits para efetuar soma e subtração de pares de registradores, soma/subtração de uma constante de 16 bits a/de um par de registradores, comparação, negação, etc. O exemplo é limitado no sentido de que pares específicos são usados assim como constantes específicas. O objetivo deste exercício é transformar as operações citadas em macros de forma que quaisquer pares de registradores e constantes de 16 bits possam ser usados como operandos dessas operações.
  7. Considere uma implementação na E2PROM da biblioteca de manipulação de bits. Modifique as rotinas findbit e setbit para localizar e ligar um bit na E2PROM, lembrando que as operações de leitura e escrita na E2PROM são feitas a nível de byte.. Utilize as rotinas de leitura e escrita na E2PROM vistas em aula.

Atividades obrigatórias:

  1. Trabalhando com números inteiros com e sem sinal lab01.pdf. Prazo de entrega: 19/03/2010
  2. Construção de uma biblioteca para manipular bits. Submissão: 26/03/10 Prazo de entrega: 07/05/10.
  3. Implementando um "cronômetro/relógio de parede" através de interrupções: atividade obrigatória 3.
    Submissão: 07/05/10 Prazo de entrega: 04/06/10.
  4. Implementando em C (avr gc) o "cronômetro/relógio de parede" através de interrupções: atividade obrigatória 4.
    Prazo de entrega: 25/06/10

Atividade desafio (opcional, individual): o quebra-cabeça dos 12 pentaminós
Condições para fazer o desafio após a realização da 1ª prova serão negociadas caso a caso.


(*)Toda submissão de uma atividade de laboratório deverá ser feita no laboratório, acompanhada da impressão do arquivo .lst gerado pelo montador e no formato paisagem, a fim de não truncar os comentários de linha. Para gerar o arquivo .lst, após abrir o projeto, selecione: Project → Assembler Options e na janela aberta selecione a caixa Create List File.
A qualidade e apresentação do programa serão levadas em conta na nota da atividade (veja sugestões no documento sobre programação estruturada em assembler