Mudanças entre as edições de "MIC29004-2019-2"
(78 revisões intermediárias por 3 usuários não estão sendo mostradas) | |||
Linha 6: | Linha 6: | ||
* [[MIC-EngTel_(Plano_de_Ensino) |Plano de Ensino]] | * [[MIC-EngTel_(Plano_de_Ensino) |Plano de Ensino]] | ||
* [[Cronograma_de_atividades_(MIC-EngTel) | Cronograma de Aulas]] | * [[Cronograma_de_atividades_(MIC-EngTel) | Cronograma de Aulas]] | ||
+ | * [http://docente.ifsc.edu.br/roberto.matos/mic_public/2019-2/notas_MIC29004_2019-2.pdf Notas] | ||
== Material == | == Material == | ||
*[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/ApostilaMemorias.pdf Apostila Memória] | *[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/ApostilaMemorias.pdf Apostila Memória] | ||
*[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/mic-slides_1-memoria.pdf Slides Memória] | *[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/mic-slides_1-memoria.pdf Slides Memória] | ||
+ | *[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/slides-AVR_aula01.pdf Introdução AVR] | ||
+ | *[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/slides-AVR_aula02.pdf Modos de Endereçamento] | ||
+ | *[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/slides-AVR_aula03.pdf Assembler AVR] | ||
+ | *[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/Aula-pilha_sp_sub-rotinas.pdf Pilha, SP e Sub-rotinas] | ||
+ | *[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/Aula-gpio.pdf Portas de Entrada e Saída] | ||
+ | |||
+ | ===Livro AVR=== | ||
+ | *[http://borgescorporation.blogspot.com/2012/05/avr-e-arduino-tecnicas-de-projeto.html Livro AVR e Arduino: Técnicas de Projeto, 2a ed.] | ||
<!-- | <!-- | ||
*[[Media:mic-slides_2-handout.pdf|Introdução a Microprocessadores]] | *[[Media:mic-slides_2-handout.pdf|Introdução a Microprocessadores]] | ||
Linha 17: | Linha 26: | ||
==Listas de Exercício== | ==Listas de Exercício== | ||
* [[MIC29004-lista1 | Lista de Exercícios: Memória, Arquitetura, Organização e BIP]] | * [[MIC29004-lista1 | Lista de Exercícios: Memória, Arquitetura, Organização e BIP]] | ||
− | * [ | + | *[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/Exercícios-sobre-a-programação-do-BIP.pdf Lista Introdução a programação do BIP] |
* [[MIC29004-lista2-avr | Lista de Exercícios Microcontroladores e AVR]] | * [[MIC29004-lista2-avr | Lista de Exercícios Microcontroladores e AVR]] | ||
+ | **[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/Lista_exercicios_AVR_e_Arduino_2a_ed.pdf Lista de Exercícios] | ||
+ | |||
= Aula 29/07/2019: Apresentação = | = Aula 29/07/2019: Apresentação = | ||
Linha 82: | Linha 93: | ||
:# Uma memória 64x4 | :# Uma memória 64x4 | ||
:# Uma memória 64x8 | :# 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 | ||
+ | |||
+ | *'''Notas de Aula:''' | ||
+ | **[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/mic-slides_2-Arquitetura_e_Bip.pdf Introdução à Arquitetura e Organização de Computadores] | ||
+ | **[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/mic-slides_3-Projetando_um_Computador_slides.pdf Projetando um Computador - BIP] | ||
+ | |||
+ | * '''Experimento:''' | ||
+ | **[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/Exercícios-sobre-a-programação-do-BIP.pdf Lista Introdução a programação do BIP] | ||
+ | |||
+ | |||
+ | = Aula 19/08/2019: Arquitetura BIP = | ||
+ | |||
+ | *'''Objetivos:''' | ||
+ | ** Entender a Arquitetura BIP | ||
+ | ** Programar em Assembly o BIP | ||
+ | |||
+ | *'''Notas de Aula:''' | ||
+ | **[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/mic-slides_3-Projetando_um_Computador_slides.pdf Projetando um Computador - BIP] | ||
+ | |||
+ | * '''Experimento:''' | ||
+ | **[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/Exercícios-sobre-a-programação-do-BIP.pdf Lista Introdução a programação do BIP] | ||
+ | |||
+ | |||
+ | = Aula 20/08/2019: Organização do BIP = | ||
+ | *'''Objetivos:''' | ||
+ | ** Entender a Organização do BIP | ||
+ | ** Criar tabela de decodificação do BIP | ||
+ | |||
+ | *'''Notas de Aula:''' | ||
+ | **[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/mic-slides_3-Projetando_um_Computador_slides.pdf Projetando um Computador - BIP] | ||
+ | |||
+ | *'''Software Utilizado:''' | ||
+ | **[http://bipide.com.br/ BIP IDE] | ||
+ | |||
+ | |||
+ | = 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 | ||
+ | |||
+ | *'''Experimento:''' | ||
+ | ** [[Experimento_BIP_I | Experimento BIP I]] | ||
+ | |||
+ | |||
+ | = 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 | ||
+ | **[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/Artigo-BIP.pdf Artigo BIP II] | ||
+ | |||
+ | *'''Experimento:''' | ||
+ | ** [http://docente.ifsc.edu.br/roberto.matos/mic_public/labs/codigos_bip2.zip Instruções de Desvio BIP II] | ||
+ | |||
+ | *'''Exercício:''' | ||
+ | ** Implementar as mudanças da organização do BIP para criar o BIP II | ||
+ | ** Implementar o decodificador do BIP II ([http://www.32x8.com/ 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 | ||
+ | |||
+ | *'''Objetivos:''' | ||
+ | ** Dúvidas da [[MIC29004-lista1 | Lista de Exercícios: Memória, Arquitetura, Organização e BIP]] para prova I. | ||
+ | |||
+ | |||
+ | = 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 | ||
+ | |||
+ | *'''Notas de Aulas:''' | ||
+ | **[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/mic-slides_4-Intro_Microcontroladores_CISC_RISC.pdf Introdução aos Microcontroladores, CISC vs. RISC] | ||
+ | |||
+ | *'''Notas Extras:''' | ||
+ | **[http://ww1.microchip.com/downloads/en/DeviceDoc/30010135D.pdf Referência Rápida Família AVR] | ||
+ | **[http://ww1.microchip.com/downloads/en/DeviceDoc/30009630M.pdf Overview Microcontroladores Microchip] | ||
+ | |||
+ | ==Homework== | ||
+ | * [http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf Datasheet Atmega328p] | ||
+ | |||
+ | *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 | ||
+ | |||
+ | *'''Notas de Aulas:''' | ||
+ | **[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/mic-slides_5-AVR.pdf Introdução AVR] | ||
+ | |||
+ | *'''Notas Extras:''' | ||
+ | **Die do [https://siliconpr0n.org/archive/doku.php?id=azonenberg:atmel:atmega48 ATmega48] e do [https://siliconpr0n.org/archive/doku.php?id=azonenberg:atmel:atmega328 ATmega328] | ||
+ | |||
+ | = Aula 23/09/2019: Arquitetura do AVR (cont.) = | ||
+ | |||
+ | *'''Objetivos:''' | ||
+ | ** Finalizar os objetivos da última aula | ||
+ | |||
+ | *'''Notas de Aulas:''' | ||
+ | **[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/slides-AVR_aula01.pdf Introdução AVR] | ||
+ | |||
+ | *'''Experimento:''' | ||
+ | ** Simulação do primeiro código em Assembly usando o MPLAB X IDE | ||
+ | ** [[Simular Assembly do AVR no MPLAB IDE | Criar projeto]] | ||
+ | <code> | ||
+ | start: | ||
+ | inc r16 | ||
+ | inc r17 | ||
+ | sts $0100,r16 | ||
+ | sts $0101,r16 | ||
+ | rjmp start | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==Homework== | ||
+ | * Instalar o MPLAB X e o XC8: [[Setup Ferramentas AVR para Assembly]] | ||
+ | * Rodar o exemplo da aula para verificar | ||
+ | |||
+ | |||
+ | = 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 | ||
+ | |||
+ | *'''Notas de Aulas:''' | ||
+ | **[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/slides-AVR_aula02.pdf Modos de Endereçamento] | ||
+ | |||
+ | ==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: | ||
+ | <code> | ||
+ | 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: | ||
+ | :<code> | ||
+ | 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: | ||
+ | #Execute 1.000 vezes uma ação em loop. | ||
+ | #Execute 100.000 vezes uma ação em loop. | ||
+ | #Carregue na SRAM 10 valores sequenciais a partir do endereço 0x0102 usando endereçamento de dados indireto com pós-incremento. | ||
+ | #Tenha o mesmo resultado do programa anterior, mas que utilize endereçamento de dados indireto com pré-decremento. | ||
+ | |||
+ | *Links: | ||
+ | **https://www.microchip.com/webdoc/avrassembler/avrassembler.wb_instruction_list.html | ||
+ | **http://ww1.microchip.com/downloads/en/devicedoc/atmel-0856-avr-instruction-set-manual.pdf | ||
+ | |||
+ | = 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 | ||
+ | |||
+ | *'''Material de Aula:''' | ||
+ | **[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/slides-AVR_aula03.pdf Assembler AVR] | ||
+ | **[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/Aula-pilha_sp_sub-rotinas.pdf Pilha, SP e Sub-rotinas] | ||
+ | |||
+ | *'''Referências:''' | ||
+ | **[http://academy.cba.mit.edu/classes/embedded_programming/doc1022.pdf Manual do montador (PDF)] | ||
+ | **[https://www.microchip.com/webdoc/avrassembler/index.html Manual do montador (online)] | ||
+ | **[http://borgescorporation.blogspot.com/2012/05/avr-e-arduino-tecnicas-de-projeto.html Livro AVR e Arduino: Técnicas de Projeto, 2a ed.] | ||
+ | |||
+ | = 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 | ||
+ | |||
+ | *'''Material de Aula:''' | ||
+ | **[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/Aula-pilha_sp_sub-rotinas.pdf Pilha, SP e Sub-rotinas] | ||
+ | **[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/Aula-gpio.pdf Portas de Entrada e Saída] | ||
+ | **[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/Lista_exercicios_AVR_e_Arduino_2a_ed.pdf Lista de Exercícios] | ||
+ | **[http://docente.ifsc.edu.br/roberto.matos/mic_public/labs/gpio_src.zip Códigos] | ||
+ | |||
+ | *'''Referências:''' | ||
+ | **Capítulo 5 do [http://borgescorporation.blogspot.com/2012/05/avr-e-arduino-tecnicas-de-projeto.html Livro AVR e Arduino: Técnicas de Projeto, 2a ed.] | ||
+ | ** Pinout Arduino Uno: | ||
+ | http://docente.ifsc.edu.br/roberto.matos/mic_public/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. | ||
+ | |||
+ | *'''Material de Aula:''' | ||
+ | **[http://docente.ifsc.edu.br/roberto.matos/mic_public/material/Aula-interrupcao.pdf Slides Interrupção] | ||
+ | **[http://docente.ifsc.edu.br/roberto.matos/mic_public/labs/int0.asm Códigos] | ||
+ | |||
+ | *'''Referências:''' | ||
+ | **Capítulo 5 do [http://borgescorporation.blogspot.com/2012/05/avr-e-arduino-tecnicas-de-projeto.html Livro AVR e Arduino: Técnicas de Projeto, 2a ed.] | ||
+ | |||
+ | ==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 = | ||
+ | *[[MIC29004-lista2-avr | Lista de Exercícios Microcontroladores e AVR]] | ||
+ | |||
+ | ==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 = |
Edição atual tal como às 11h24min de 26 de novembro de 2019
Microprocessadores: Diário de Aula 2019-2
- Professor: Roberto de Matos
- Encontros: 2ª e 3ª feira às 9:40h
- Atendimento Paralelo: 4ª às 10h e 14h (1h cada)
- Plano de Ensino
- Cronograma de Aulas
- Notas
Material
- Apostila Memória
- Slides Memória
- Introdução AVR
- Modos de Endereçamento
- Assembler AVR
- Pilha, SP e Sub-rotinas
- Portas de Entrada e Saída
Livro AVR
Listas de Exercício
- Lista de Exercícios: Memória, Arquitetura, Organização e BIP
- Lista Introdução a programação do BIP
- Lista de Exercícios Microcontroladores e AVR
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.
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
- Notas de Aula:
- Experimento 1 - Memória 16x4:
- Entrar no Windows.
- Baixar o arquivo de projeto aqui. Coloque em um diretório conhecido.
- Descompacte. Clique sobre o arquivo *.pdsprj. O PROTEUS será executado e o projeto aberto.
- Observe que o projeto está parcialmente pronto. Você pode entrar em modo simulação.
- O sistema está preparado para que se possa inserir ou ler manualmente posições de memória.
- Leia todas as 16 posições de memória e anote os valores.
- Grave o número da sua matrícula na memória. Preencha o restante com zero.
- 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:
- Uma memória 16x8
- Uma memória 64x4
- 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
- Notas de Aula:
- Experimento:
Aula 19/08/2019: Arquitetura BIP
- Objetivos:
- Entender a Arquitetura BIP
- Programar em Assembly o BIP
- Notas de Aula:
- Experimento:
Aula 20/08/2019: Organização do BIP
- Objetivos:
- Entender a Organização do BIP
- Criar tabela de decodificação do BIP
- Notas de Aula:
- Software Utilizado:
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
- Experimento:
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
- Experimento:
- 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
- Objetivos:
- Dúvidas da Lista de Exercícios: Memória, Arquitetura, Organização e BIP para prova I.
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
- Notas de Aulas:
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?
- 8. Memórias do AVR
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
- Notas de Aulas:
Aula 23/09/2019: Arquitetura do AVR (cont.)
- Objetivos:
- Finalizar os objetivos da última aula
- Notas de Aulas:
- 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
- Instalar o MPLAB X e o XC8: Setup Ferramentas AVR para Assembly
- Rodar o exemplo da aula para verificar
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
- Notas de Aulas:
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:
- Execute 1.000 vezes uma ação em loop.
- Execute 100.000 vezes uma ação em loop.
- Carregue na SRAM 10 valores sequenciais a partir do endereço 0x0102 usando endereçamento de dados indireto com pós-incremento.
- 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
- Material de Aula:
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
- Material de Aula:
- Referências:
- Capítulo 5 do Livro AVR e Arduino: Técnicas de Projeto, 2a ed.
- Pinout Arduino Uno:
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.
- Material de Aula:
- Referências:
- Capítulo 5 do Livro AVR e Arduino: Técnicas de Projeto, 2a ed.
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