Arquitetura de Computadores · Trabalhos em Grupo

Trabalhos
Propostos

Prof. Clayton J A Silva · Ibmec RJ · organizado por período letivo

Arduino Mega 2560 2022.1 – 2024.1 10 trabalhos 4 períodos letivos

00 / Introdução

Este documento reúne os enunciados dos trabalhos propostos ao longo de diferentes períodos letivos na disciplina de Arquitetura de Computadores, ministrada pelo Prof. Clayton Jones Alves da Silva. Os trabalhos abordam, de forma geral, o projeto e a implementação de sistemas embarcados baseados no microcontrolador Arduino Mega 2560, explorando conceitos de representação de dados (complemento de 1 e complemento de 2), arquitetura de conjunto de instruções (ISA), dispositivos de entrada e saída, programação em linguagem de montagem (assembly) e em C/C++ (sketches), além de sensores e atuadores.

Os itens a seguir estão organizados em ordem cronológica, cada um identificado pelo enunciado original e seguido do período letivo correspondente, na forma (ano.período).

01 / Sumário

02 / Trabalhos

  1. AP1 – Parte 2 – Trabalho em Grupo: Somador 74LS283 e complemento de 1/2 na máquina IAS

    Condições gerais: o trabalho (parte 2 da AP1) perfaz 50% da nota da primeira avaliação bimestral. Deve ser realizado e submetido em grupo, com entrega presencial.

    Dados do problema: projetar um sistema embarcado constituído de placa principal baseada no microcontrolador Atmel ATmega V2560, Arduíno Mega 2560; sistema digital constituído por teclado de 8 teclas digitais, A(A3 A2 A1 A0) e B(B3 B2 B1 B0), que gera a soma binária A+B, como dispositivo de entrada; display LCD 16x2, como dispositivo de saída.

    O dispositivo de entrada deve utilizar como base o somador 74LS283. Os sinais da soma binária resultante devem alimentar entradas digitais da placa do Arduíno Mega 2560. O Arduíno deve processar a entrada da seguinte forma: caso o bit mais significativo do somador seja 1, o sistema deve calcular o complemento de 2 do número; caso seja 0, o sistema deve calcular o complemento de 1 do número. O resultado deve ser enviado ao display LCD 1602, com a representação hexadecimal do binário obtido.

    Pedido:

    1. Esquema elétrico geral, utilizando o EasyEDA ou o Proteus, apresentando os componentes e todas as ligações realizadas.
    2. Simulação lógica computacional, utilizando o Logisim, para testar o funcionamento do esquema elaborado.
    3. Código utilizado para a placa do Arduíno Atmel 2560.
    4. Modelo físico funcionando de acordo com o pedido formulado.
    5. Admitindo o funcionamento do sistema em uma máquina IAS, apresentar o código, em representação simbólica (assembly) e correspondente representação hexadecimal do nível ISA, implementando a soma dos números binários armazenados nos endereços 0x100 e 0x101, armazenando o resultado no endereço 0x102; calcular o complemento de 2 e o complemento de 1 da soma resultante e armazenar os resultados nas posições 0x103 e 0x104. Admitir que as posições 0x105 a 0x3FF de memória estão disponíveis para uso temporário. Apresentar o código com a alocação dos endereços de memória, supondo que a primeira linha está no endereço 0x00F.
    (2022.1)
  2. AP2 – Parte 2 – Trabalho em Grupo: teclado de 9 teclas e desvio de execução em assembler

    Condições gerais: o trabalho (parte 2 da AP2) perfaz 50% da nota da segunda avaliação bimestral, com entrega presencial e toda a equipe presente.

    Dados do problema: um sistema baseado no microcontrolador 2560 possui uma entrada para um teclado de 9 teclas (A a I), cujas palavras do código binário de 1 byte estão associadas a endereços de memória SRAM a partir de 0x200, em uma tabela de códigos. Quando uma tecla é acionada, é gerado um conjunto de 8 bits para uma porta de entrada do microcontrolador. O byte correspondente, armazenado no registrador de I/O, é comparado com o byte da tabela de códigos; quando encontrado, o sistema desvia a execução para endereços específicos da SRAM associados a cada tecla (0x0264 a 0x0584).

    Quando a tecla digitada é a tecla 'A', o sistema calcula a soma dos dados armazenados nos endereços 0x1000 a 0x10FF e carrega o resultado no endereço 0x1200. Quando é a tecla 'B', o sistema determina o maior valor dos dados armazenados no mesmo intervalo e carrega o resultado no endereço 0x1201. Para as demais teclas, o sistema gera o complemento de 1 dos bits correspondentes à tecla digitada e armazena o valor no endereço 0x1201.

    Pedido: elaborar um projeto em assembler (montador) para o microcontrolador AVR Atmega2560, utilizando o Simulador do Microchip Studio7, organizando o código para: carregar dados de teste na faixa 0x1000–0x10FF; carregar os dados na tabela de códigos do teclado; elaborar o código de pesquisa do dado na tabela de códigos e desvio; elaborar o código relativo à tecla A; elaborar o código relativo à tecla B; elaborar o código relativo às demais teclas. É obrigatório usar comentários, macros quando necessário, e labels para referenciar os desvios.

    (2022.1)
  3. AP1 – Parte 2 – Trabalho em Grupo: operações aritméticas imediatas e diretas com LEDs

    Condições gerais: o trabalho (parte 2 da AP1) perfaz 50% da nota da primeira avaliação bimestral, realizado e submetido em grupo, com entrega presencial.

    Dados do problema: projetar um sistema embarcado baseado no Arduíno Mega 2560. O sistema deve receber uma palavra binária de 6 bits como entrada E(E5...E0) e produzir uma palavra de saída binária de 6 bits, S(S5...S0), com cada pino de saída conectado a um LED. O sistema deve possibilitar quatro operações: adição imediata (add), subtração imediata (sub), adição direta (add x) e subtração direta (sub y), de acordo com a faixa de entrada (0x00–0x0F, 0x10–0x1F, 0x20–0x2F, 0x30–0x3F).

    A subtração imediata apresenta o resultado em complemento de 2. Na adição/subtração direta, os valores são somados/subtraídos de variáveis x e y definidas no código; a subtração direta apresenta o resultado no modo definido por uma variável modo (0: bit sinal; 1: complemento de 1; 2: complemento de 2; 3: excesso). Em caso de overflow, todos os LEDs devem piscar.

    Teste de verificação: setup com x = 34d, y = 48d, modo = 2; sequência de instruções: add 0x7; sub y, 0xF; add x, 0xB; sub, 0xC.

    Pedido:

    1. Memorial descritivo dos componentes utilizados.
    2. Esquema elétrico geral do circuito, indicando todas as ligações.
    3. Protótipo do sistema com base na placa Arduíno Mega Atmel 2560.
    4. Código elaborado para a IDE do Arduíno.
    5. Relatório descrevendo o resultado do teste proposto e analisando se é o esperado, elaborando pelo menos mais dois testes em notação simbólica.
    (2022.2)
  4. Trabalho 1 (Turma 2ª/4ª): complemento de 1/2, adição e subtração via LCD

    Condições gerais: trabalho 1 em grupo da disciplina. No dia da entrega o grupo apresenta o sistema funcionando; o representante envia o sketch por e-mail, contendo no código o nome, a matrícula e a autoavaliação de cada componente do grupo (TA: trabalhou ativamente; TP: trabalhou parcialmente; NT: não trabalhou). A nota compõe uma das notas de AC, com peso 3.

    Especificação do sistema: projetar um sistema embarcado baseado no Arduíno Mega 2560 com shield de LCD 1602. O sistema deve receber do usuário, via monitor serial, uma palavra binária de 6 bits como entrada E(E5...E0), e produzir no LCD uma palavra binária de 6 bits, S(S5...S0). O sistema deve possibilitar quatro operações conforme a faixa de entrada: complemento de 1 (0x00–0x0F), complemento de 2 (0x10–0x1F), adição (0x20–0x2F) e subtração (0x30–0x3F). A subtração deve, por meio de uma macro MODO, possibilitar uma das três formas de representação de números negativos.

    Pedido: apresentar o código com extensão .ino (sketch) para resolver o problema; carregar o código no Arduíno, já incluído o circuito (shield) do LCD 1602, e verificar o funcionamento.

    (2023.1)
  5. Trabalho 1 (Turma 3ª): variante — complemento, adição e subtração via LCD

    Mesmas condições gerais e especificação de sistema do trabalho equivalente da turma 2ª/4ª (Arduíno Mega 2560 com shield LCD 1602, entrada binária de 6 bits via monitor serial), com a convenção de operações reorganizada por faixa de entrada: 0x00–0x0F (complemento), 0x10–0x1F (adição), 0x20–0x2F (subtração binário puro) e 0x30–0x3F (subtração em complemento). O complemento (0x00–0x0F) deve, por meio de uma macro MODO (ou variável), possibilitar saída em complemento de 1 ou de 2; a subtração em complemento segue a mesma variável.

    Pedido: apresentar o código com extensão .ino (sketch) para resolver o problema; carregar o código no Arduíno, já incluído o circuito (shield) do LCD 1602, e verificar o funcionamento.

    (2023.1)
  6. AP1 – Parte 2 – Trabalho em Grupo: arquitetura de conjunto de instruções (ISA) com Arduíno

    Condições gerais: o trabalho (parte 2 da AP1) perfaz 50% da nota da primeira avaliação bimestral. No dia da entrega o representante envia o sketch por e-mail, contendo no código o nome, a matrícula e a autoavaliação de cada componente do grupo.

    Especificação do sistema: Arduíno Mega 2560 com shield LCD 1602. O sistema deve receber, via monitor serial, uma sequência de instruções em código binário de 11 bits, E(E10...E0). Os três bits mais significativos representam o opcode da operação, conforme a tabela:

    OpcodeMnemônicoSignificado
    000Comp1Complemento de 1 do operando E7...E0, carregado em variável X
    001AddSoma dos operandos (E7 E6 E5 E4) e (E3 E2 E1 E0), carregada em X
    010AddISoma imediata do operando E7...E0 com X, resultado em X
    011SubSubtração dos operandos (E7 E6 E5 E4) e (E3 E2 E1 E0), carregada em X
    100SubISubtração imediata do operando E7...E0 com X, resultado em X
    101LdoLê X (operando 0) ou Y (operando ≠0), exibe no LCD em 9 bits (bit sinal)
    110StoArmazena o operando E7...E0 na variável X
    111TransCopia o valor de X para Y

    Análise solicitada para a sequência: Add 0x3A; Ldo 0x00; AddI 0x01; Ldo 0x00; AddI 0x01; Trans 0xXX; AddI 0x0A; Ldo 0xFF; Ldo 0x00; Sto 0x00.

    Pedido: apresentar o código .ino (sketch); carregar no Arduíno com o shield LCD 1602 e verificar o funcionamento; apresentar a análise solicitada.

    (2023.1)
  7. AP2 – Parte 2 – Trabalho em Grupo: evolução do sistema ISA para entrada via teclado

    Condições gerais: o trabalho (parte 2 da AP2) perfaz 50% da nota da segunda avaliação bimestral. Entrega conforme prazo definido no GitHub do grupo; o representante envia o link do sketch por e-mail, contendo nome, matrícula e autoavaliação de cada componente.

    Fase 1: mesma especificação do sistema baseado em opcodes de 11 bits do trabalho AP1 (tabela de instruções Comp1/Add/AddI/Sub/SubI/Ldo/Sto/Trans), com Arduíno Mega 2560 e shield LCD 1602, recebendo as instruções via monitor serial.

    Fase 2: evoluir o código da fase 1 de modo que o sistema receba do usuário, através de teclado físico, as instruções em sequência no mesmo código binário de 11 bits E(E10...E0).

    Pedido: apresentar o código .ino (sketch) para resolver o problema apresentado; atualizar o código na pasta do grupo no GitHub.

    (2023.1)
  8. Trabalho 2 – Turma Centro: assembler AVR, tabela ordenada e busca por intervalo

    Condições gerais: o trabalho (parte 2 da AP2) perfaz 50% da nota da segunda avaliação bimestral. No dia da entrega o representante envia o código com extensão .zip por e-mail (com versão adicional em .txt), contendo nome, matrícula e autoavaliação de cada componente.

    Pedidos: elaborar um código para o assembler do microcontrolador AVR Atmega 2560 que: (1) crie uma tabela de 100 valores ordenados contendo números pares e múltiplos de 3, a partir do endereço 0x200; (2) utilizando uma instrução IN em portas de I/O (endereços 0x00 a 0x3F) para ler dois dados quaisquer, some os valores da tabela armazenada a partir de 0x200 cujo valor esteja entre os dois números lidos, armazenando o resultado na posição de memória RAM imediatamente após a última linha da tabela.

    Responder também: qual o espaço de memória flash utilizado pelo programa, e qual a faixa de endereços da memória flash utilizada. Devem ser utilizados comentários e rótulos necessários para a compreensão do código.

    (2023.1)
  9. Trabalho Proposto AP1: sistema de alarme digital programável

    1. Visão geral: desenvolver um sistema de alarme digital programável com o Arduino Mega 2560, aplicando conceitos de dispositivos de entrada/saída, sensores, atuadores e representação de dados, com ênfase em modularização, uso de funções e estruturas de controle. A ativação do alarme é definida por chave seletora (on-off), sinalizada por LEDs; as horas de início e término são definidas por conjuntos de chaves (dip-switches). O Arduíno lê a chave seletora, as chaves de horário, a hora atual via monitor serial, mantém o relógio atualizado, lê o sinal detectado e gera o alarme em caso de invasão. Uma saída de 5 bits, representada por LEDs, mostra o tempo restante (em horas) para o desligamento, em complemento de 1.

    2. Material utilizado: Arduino Mega 2560; LEDs de status e de contagem regressiva; buzzer; chaves dip switch para horários de ativação/desativação (formato 24h binário puro).

    3. Shield: LEDs de status (verde/vermelho); chaves dip switch para horários de início/término; buzzer; LEDs de contagem regressiva em complemento de 1; sensor de presença simulado por chave.

    4. Funcionalidades desejadas: ativação/desativação do sistema pela chave seletora; configuração dos horários limite via dip switches (com sinalização de overflow acima de 24h); configuração da hora atual e manutenção do relógio via monitor serial; determinação e exibição da hora restante em complemento de 1; acionamento e desligamento automático do alarme conforme detecção de presença simulada.

    5. Testes: de hardware (ativação/desativação, leitura das chaves de horário, contagem regressiva, acionamento do buzzer, detecção de intrusão) e de software (conversões binário-decimal, funcionamento do relógio e do timer, verificação de intervalo de alarme, overflow de horário).

    6. Apresentação da solução: descrição detalhada do shield; código-fonte (sketch) comentado; demonstração de funcionalidade do sistema em operação.

    (2024.1)
  10. Trabalho Proposto AP2: evolução do alarme com sensor de movimento/presença

    1. Visão geral: continuação do trabalho AP1 (sistema de alarme digital programável com Arduino Mega 2560). Na parte 2, a ser apresentada na AP2, o grupo deve substituir a chave que simulava o invasor por um sensor de movimento ou de presença. Referências de prática disponibilizadas nos repositórios do professor no GitHub (sensor ultrassônico e sensor de movimento).

    Apresentação: no dia da aplicação da AP2, logo após a prova, com todos os componentes do grupo presentes (o ausente recebe grau 0,0 no trabalho).

    2. Material utilizado: além do material da fase 1, sensor ultrassônico HC-SR04 (para detectar aproximação do invasor a uma distância) ou sensor de presença PIR.

    3. Shield: mantém os elementos da fase 1 (LEDs de status, dip switches de horário, buzzer, LEDs de contagem regressiva), substituindo a chave/jumper simuladora por um sensor ultrassônico ou PIR.

    4. Funcionalidades desejadas: mantém as funcionalidades da fase 1 (ativação/desativação, configuração de horários, relógio, contagem regressiva em complemento de 1, acionamento automático), complementadas pelo sensoriamento real do invasor conforme o tipo de sensor escolhido.

    5. Testes: mantém os testes de hardware e software da fase 1, complementados por um teste de invasão específico, verificando a detecção conforme o sensor utilizado.

    6. Apresentação da solução: descrição detalhada do shield; código-fonte (sketch) comentado; demonstração de funcionalidade.

    (2024.1)