MIC29004-2019-2

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Microprocessadores: Diário de Aula 2019-2

Material

Livro AVR

Listas de Exercício


Aula 29/07/2019: Apresentação

  • Apresentação do professor.
  • Apresentação da disciplina: conteúdo, bibliografia e avaliação.


Aula 30/07/2019: Introdução sobre Memória


Diagrama em blocos da memória e barramentos

No diagrama abaixo está representado um bloco de memória primária de 16x8 (dezesseis endereços por 8 bits).

  • Note que uma posição de memória pode ser vista como uma caixa que possue um endereço e um conteúdo.
  • O conteúdo associado a posição de memória é uma palavra binária e, neste caso, possui 8 bits.
DiagramaBlocosMemorias2.jpg

Para que us dispositivo externo possa "acessar" a memória para leitura ou escrita, ele deve se utilizar de um conjunto de fios que chamamos de barramentos.

Barramento de Endereços

Este barramento permite determinar o endereço de uma posição a ser acessada na memória. Um barramento de 4 linhas de endereço é designado por A3,A2,A1 e A0.

Supondo uma memória com endereços designados da forma hexadecimal de 0h a Fh. Supondo que A3 seja associado ao bit mais significativo e A0 ao bit menos significativo. Então, para acessar a posição Bh de memória, deve-se injetar A3=1, A2=0, A1=1 e A0=1. Note que

O termo "injetar" significa aqui que um dispositivo externo deve forçar tensão nas linhas do barramento. Esta tensão depende da tecnologia utilizada. Poderia ser, por exemplo, 5V para o nível lógico 1 e 0V par ao nível lógico 0.,


Aula 04/08/2019: Laboratório de Memória - Introdução


  • Experimento 1 - Memória 16x4:
  1. Entrar no Windows.
  2. Baixar o arquivo de projeto aqui. Coloque em um diretório conhecido.
  3. Descompacte. Clique sobre o arquivo *.pdsprj. O PROTEUS será executado e o projeto aberto.
  4. Observe que o projeto está parcialmente pronto. Você pode entrar em modo simulação.
  5. O sistema está preparado para que se possa inserir ou ler manualmente posições de memória.
  6. Leia todas as 16 posições de memória e anote os valores.
  7. Grave o número da sua matrícula na memória. Preencha o restante com zero.
  8. Note o Chip Select está habilitado sempre. Coloque uma chave adicional para colocar o Chip Select.


  • Atividade 1 - Associação de Memórias:
    • Usando como referência o experimento 1 e os exemplos de associação de memória vistos em sala de aula, implemente o seguinte:
  1. Uma memória 16x8
  2. Uma memória 64x4
  3. Uma memória 64x8
  • Entrega:
    • Fazer em Duplas
    • Última Aula de dúvidas: 06/08 (segunda)
    • Apresentação: 07/08 (terça)

Aula 12/08/2019: Laboratório de Memória - Associação

  • Finalizar o Exercício

Aula 13/08/2019: Introdução à Arquitetura e Organização de Computadores

  • Objetivos:
    • Introdução a Microprocessadores


Aula 19/08/2019: Arquitetura BIP

  • Objetivos:
    • Entender a Arquitetura BIP
    • Programar em Assembly o BIP


Aula 20/08/2019: Organização do BIP

  • Objetivos:
    • Entender a Organização do BIP
    • Criar tabela de decodificação do BIP


Aula 26/08/2019: Decodificador BIP

  • Objetivos:
    • Entender a execução do BIP passo-a-passo no Proteus
    • Implementar o circuito decodificador do BIP no Proteus
    • Entender as mudanças da arquitetura e da organização do BIP II


Aula 27/08/2019: Decodificador BIP (cont.) e BIP II

  • Objetivos:
    • Finalizar o Decode do BIP
    • Introdução da arquitetura do BIP II
  • Exercícios:
    • Implementar e simular exemplos com as instruções de desvio do BIP II


Aula 02/09/2019: Organização do BIP II

  • Objetivos:
    • Entender as mudanças da arquitetura e da organização do BIP II
    • Artigo BIP II
  • Exercício:
    • Implementar as mudanças da organização do BIP para criar o BIP II
    • Implementar o decodificador do BIP II (32x8)
    • Implementar programas de testes no assembly do BIP II
    • Trabalho em Dupla
    • Entrega 08/09 e Apresentação 10/09

Aula 03/09/2019: Dúvidas Lista de Exercício e Apoio Trabalho BIP II

  • Objetivos:
    • Aula de dúvidas


Aula 09/09/2019: Prova I

  • Objetivos:
    • Avaliação dos conceitos de Memória, Arquitetura e Organização, BIP I e II

Aula 10/09/2019: Apresentação Trabalho BIP II

  • Objetivos:
    • Apresentação do Trabalho BIP II


Aula 16/09/2019: Correção da Prova

  • Objetivos:
    • Correção da avaliação para completar o processo de ensino-aprendizagem.
  • Notas:
  • Foi decidido junto à turma que o péssimo resultado da avaliação será recuperado no fim do semestre.
  • O professor se colocou à disposição para recuperar o conteúdo durante o semestre, tirando dúvidas em sala de aula ou no horário de atendimento.
  • Os alunos se comprometeram em recuperar o conteúdo, pois é essencial para a continuidade da disciplina.

Aula 17/09/2019: Introdução aos Microcontroladores

  • Objetivos:
    • Entender os conceitos e diferenças entre um Processador e um Microcontrolador.
    • Introdução à aplicações microcontroladas

Homework

  • Ler:
    • 2. Visão Geral
    • 7. Núcleo AVR
    • Responder:
      • Qual arquitetura de memória usada?
      • Detalhes da ALU (Quais os tipos de operação?)
      • Registradores (Status, Uso geral e de Pilha)
      • Modos de endereçamento
      • Conjunto de instruções (classes e exemplos)
  • Ler:
    • 8. Memórias do AVR
      • Flash
      • SRAM
      • EEPROM
    • Responder
      • Qual o tamanho e o formato da palavra de de dados?
      • Qual o tamanho e o formato da palavra de instrução?

Aula 23/09/2019: Arquitetura do AVR

  • Objetivos:
    • Finalizar CISC vs. RISC
    • Visão Geral dos Microcontroladores ATmega48A/PA/88A/PA/168A/PA/328/P
    • Núcleo do AVR (ALU e Banco de Registradores)
    • Hierarquia de Memórias do AVR

Aula 23/09/2019: Arquitetura do AVR (cont.)

  • Objetivos:
    • Finalizar os objetivos da última aula
  • Experimento:
    • Simulação do primeiro código em Assembly usando o MPLAB X IDE
    • Criar projeto

start:

   inc r16
   inc r17
   sts $0100,r16
   sts $0101,r16
   rjmp start

</syntaxhighlight>

Homework


Aula 30/09/2019: Modos de Endereçamento

  • Objetivos:
    • Introduzir arquitetura Load-Store
    • Entender:
      • Modos de endereçamento do AVR e
      • Instruções relacionadas a cada modo do ATmega328p
    • Implementar programas para compreensão dos novos conceitos

Homework

  • OBS.: Instalar e configurar as ferramentas em casa para quem não fez (ver homework da aula passada).

Exercício 1

  • Testar TODOS os trechos de códigos apresentados. Modifique os valores das localizações de memória afetadas para verificar se o funcionamento está coerente.
  • Exemplo:

start:

   ldi R16,0x14
   rjmp start

</syntaxhighlight>

  • Pergunte-se:
    • A instrução em linguagem de máquina está coerente?
    • Se mudar o valor do imediato 0x14 para 0x25, como afeta a instrução montada? E se mudar o registrador de R16 para R17?
    • Eu posso carregar um imediato para o registrador R0? Por quê?
  • Faça isso para todos os trechos de código apresentados.

Exercício 2

  • Faça um programa que some dois números de 8 bits: C = A + B
  • Considere as varáveis armazenadas sequencialmente a partir do primeiro endereço da memória SRAM.


Aula 01/10/2019: Modos de Endereçamento (cont.)

  • Objetivos:
    • Corrigir exercícios da Aula prática
    • Mais exercícios
  • Exercícios:
    • Some as constantes 25, 14 e 0x32 e armazene o resultado em R0.
    • Some as constantes 32 e 0x23 e armazene o resultado em uma variável na SRAM (endereço 0x010A).
    • Re-implemente o código abaixo usando endereçamento indireto para acessar o R20 como posição de memória na SRAM:

ldi r16, $BB mov r20, r16 </syntaxhighlight>


Homework

  • Estudar instruções lógicas e aritméticas, de desvio (CPSE até BRID), bit e bit-test
  • Escrever códigos que:
  1. Execute 1.000 vezes uma ação em loop.
  2. Execute 100.000 vezes uma ação em loop.
  3. Carregue na SRAM 10 valores sequenciais a partir do endereço 0x0102 usando endereçamento de dados indireto com pós-incremento.
  4. Tenha o mesmo resultado do programa anterior, mas que utilize endereçamento de dados indireto com pré-decremento.

Aula 07/10/2019: Instruções Aritmética e desvio

  • Objetivos:
    • Corrigir exercícios da Aula prática
    • Mais exercícios
  • Exercícios:
    • Faça programas que utilizem a rotação para esquerda e direita. Quais os tipos de rotação possível? Quais os bits de status podem ser modificados?
    • Faça a soma de dois valores de 16 bits usando os registradores.
    • Implemente estrutura de alto nível: IF-THEN-ELSE, WHILE e SWITCH-CASE


Aula 08/10/2019: Instruções Aritmética e desvio (cont.)

Homework

  • Some duas variáveis de 16-bits da memória SRAM e devolva o resultado em outra variável na SRAM.
  • Implemente estrutura de alto nível: IF-THEN-ELSE, WHILE e SWITCH-CASE

Aula 14/10/2019: Finalizar os exercícios

  • Não houve aula


Aula 15/10/2019: Assembler, Pilha e Subrotinas

  • Objetivos:
    • Tirar Dúvidas sobre os exercícios (os alunos não fizeram os exercícios, exceto o Bruno)
    • Aprofundar o conhecimento no montador (assembler) do AVR:
      • Diretivas de compilação, principalmente .INCLUDE, .DSEG, .CSEG, .BYTE, .DB, .DW, .ORG, .EQU, .DEF
      • Funções, principalmente LOW(), HIGH()
    • Conhecer o arquivo com as definições do ATmega328p ("m328pdef.inc").
    • Entender o que é e como funciona uma pilha de microcontrolador
    • Praticar com as instruções do AVR que manipulam a pilha
    • Criar Sub-rotinas
    • Entender o que é salvar o contexto e passar parâmetros

Aula 21/10/2019: Finalizar Subrotinas e GPIO

  • Objetivos:
    • Entender o que é salvar o contexto e passar parâmetros
    • Rotinas Simples de Atraso
    • Entender como funcionam as portas de entrada e saída do AVR
    • Entender e aprender a evitar ruídos de repique nas entradas
    • Praticar a montagem de circuito e a criação de programas em assembly

Pinout_of_ARDUINO_Board_and_ATMega328PU.png

Homework

  • Pilha, SP e Sub-rotinas
    • Exercícios 5.1, 5.2 e 5.3
  • Portas de Entrada e Saída
    • Exercícios 5.5, 5.7, 5.8, 5.9, 5.10 e 5.11

Aula 22/10/2019: Finalizar Subrotinas e GPIO (cont.)

  • Gravação:
    • avrdude -c arduino -P /dev/ttyACM0 -D -p m328p -U flash:w:teste.X.production.hex:i
    • avrdude -c arduino -P /dev/ttyACM0 -D -p ${Device} -U flash:w:${ImageDir}/teste.X.production.hex:i
  • Linha include:

.INCLUDE "/opt/microchip/xc8/v2.05/dfp/avrasm/inc/m328pdef.inc"

Homework

  • Pilha, SP e Sub-rotinas
    • Exercícios 5.1, 5.2 e 5.3
  • Portas de Entrada e Saída
    • Exercícios 5.5, 5.7, 5.8, 5.9, 5.10, 5.11 e 5.12


Aula 28/10/2019: Feriado - Dia do Servidor Público

Aula 29/10/2019: Não houve Aula - Troca pelo horário de sexta

Aula 04/11/2019: Aula de Dúvidas

  • Nenhum aluno fez os exercícios propostos há 15 dias atrás.
  • Avaliação marcada para o dia 12/11
  • Resolução de exercícios GPIO

Aula 04/11/2019: Resolução de exercícios GPIO (cont.)

  • Entrada e saída

Aula 11/11/2019: Aula de dúvidas

  • Resolução de exercícios

Aula 12/11/2019: Aula de dúvidas

  • Avaliação prática

Aula 18/11/2019: Correção Avaliação e Interrupção

  • Correção da Avaliação
    • Fluxograma
    • Implementação Incremental
  • Desafio:
    • Implementar um sistema com um botão (PD2) e dois LEDs, L0 (PB0) e o L1 (PB1). O sistema deve piscar o L0 a cada 2s e quando o botão for pressionado o L1 deve mudar de estado.

Aula 19/11/2019: Interrupção

  • Objetivos:
    • Entender o conceito de interrupção
    • Programação linear vs. com interrupção
    • Entender os detalhes do mecanismo de interrupção da família ATmega
    • Praticar com a interrupção externa do ATmega328p
    • Praticar a montagem de circuito e a criação de programas em assembly
  • Desafio:
    • Implementar um sistema com um botão (PD2) e dois LEDs, L0 (PB0) e o L1 (PB1). O sistema deve piscar o L0 a cada 2s e quando o botão for pressionado o L1 deve mudar de estado.

Homework

  • Modifique o código para que a inversão do estado do led aconteça no momento em que o botão for solto.
  • Modifique o código e o circuito para que o sistema funcione com a Int1.
  • Faça uma implementação, usando a Int0, para o LED piscar enquanto o botão estiver pressionado.


Aula 25/11/2019: Não houve aula

  • Problemas de saúde

Aula 26/11/2019: Dúvidas para Prova

Homework

Faça uma implementação, usando a Int0, onde o LED acenda quando o botão é pressionado (borda de descida) e apague quando o botão for solto (borda de subida). Todas as funcionalidades devem ser executadas na interrupção.

Aula 02/12/2019: Dúvidas para Prova

Aula 03/12/2019: Prova 2

Aula 09/12/2019: Correção Prova 2

Aula 10/12/2019: Dúvidas Recuperação

Aula 16/12/2019: Recuperação