Arquitetura de Computadores · Documento de Requisitos Técnicos

Sistema programável
de três bombas

Trabalho AP1 · Arduino Mega 2560 · Prof. Clayton J A Silva

3 entradas analógicasAssembly pelo monitor serial128 posições de memóriaISA definida pelo grupo

Sumário

01 / Descrição geral do projeto

1.1 Escopo

Desenvolver, em grupo, um sistema embarcado baseado no Arduino Mega 2560 para monitorar três reservatórios e controlar suas respectivas bombas. Três potenciômetros deverão simular, de forma independente, os níveis de água. As bombas serão representadas por LEDs.

O usuário deverá construir um programa em linguagem assembly pelo monitor serial. O montador deverá validar e converter cada instrução em uma palavra binária, armazenando-a em uma memória simulada de 128 posições. O executor deverá buscar, decodificar e executar essas palavras binárias.

Definição obrigatória pelo grupo: o grupo deverá arbitrar todos os códigos binários das instruções, a largura fixa da palavra, os campos de opcode e operandos e as regras de codificação. Este documento define o comportamento das instruções, mas não fornece seus opcodes.

O foco é a aplicação dos conceitos de Arquitetura de Computadores. O sketch e a documentação deverão identificar entrada/saída, Unidade de Controle (UC), Unidade Lógica e Aritmética (ULA), memória e registradores simulados.

1.2 Não escopo

1.3 Objetivos

02 / Funcionalidades do produto

2.1 Elementos arquiteturais obrigatórios

ElementoRequisito
MEM_PROG128 palavras de largura fixa W, uma instrução completa por posição. Endereços de 0x00 a 0x7F. O grupo define W e o tipo ou estrutura de armazenamento.
PCContador que determina o endereço da próxima instrução.
IRRegistrador que recebe a palavra binária completa buscada em memória.
ACCAcumulador que recebe o percentual lido por READ ou INFO e o resultado da diferença calculada por CMP.
NIVEL e validadeTrês registradores de nível, associados às bombas 1, 2 e 3, e indicação de que cada leitura já foi realizada.
FLAG_L, FLAG_Z, FLAG_GIndicadores de menor, igual e maior, atualizados por CMP, e indicação de que existe uma comparação válida.
ControlePonteiro de carga, quantidade de posições ocupadas, modo de operação e estado de execução.
SaídasEstados independentes das três bombas, dos três alarmes preventivos e dos três alarmes corretivos.

Os elementos deverão ter uso efetivo, nomes identificáveis e comentários sobre seu papel arquitetural. A UC implementa a busca, decodificação, execução e atualização do PC. A ULA realiza a diferença e a comparação. A arquitetura simulada deverá ser distinguida da arquitetura física do ATmega2560.

2.2 Modelo de operação do sistema

2.2.1 Entrada e montagem — LOAD

O comando LOAD inicia um novo programa: interrompe a execução, desliga bombas e alarmes, apaga o display, limpa a memória e os estados internos e posiciona o ponteiro de carga em 0x00. Todas as posições são zeradas, mas permanecem marcadas como não carregadas.

O usuário envia uma instrução assembly por linha, confirmada por Enter. O montador valida o mnemônico e os operandos, gera a palavra binária e a grava na próxima posição livre. A confirmação deverá mostrar endereço hexadecimal e palavra binária completa. A carga avança uma posição somente após uma instrução válida. Nenhuma instrução será executada durante a carga.

END finaliza a carga. O montador deverá verificar se os destinos dos desvios correspondem a posições carregadas; referências futuras são permitidas durante a digitação. Pendências impedem RUN ou AUTO e devem ser informadas. Para corrigir o programa, o usuário pode iniciar nova carga com LOAD.

Comentários de linha no programa assembly

O montador deverá aceitar o caractere ; como início de comentário. Todo o texto a partir do primeiro ; até o fim da linha deverá ser ignorado antes da validação e da codificação. O comentário pode aparecer após uma instrução ou ocupar uma linha inteira.

; Programa de exemplo
READ 1 ; Lê o nível do reservatório da bomba 1
INFO 1 ; Mostra a faixa de nível no display
HALT   ; Encerra o programa

Linhas vazias e linhas contendo apenas comentários não ocupam posições de memória e não avançam o ponteiro de carga. Comentários não fazem parte da palavra binária. No exemplo, READ 1 ocupa 0x00, INFO 1 ocupa 0x01 e HALT ocupa 0x02.

2.2.2 Execução passo a passo e automática

RUN inicia uma sessão passo a passo em 0x00. A execução de uma instrução ocorre somente ao receber STEP ou *. AUTO inicia execução contínua em 0x00. Ambos preservam o programa e reinicializam registradores, validade das leituras e comparações e saídas, com bombas e alarmes desligados e display apagado.

  1. Buscar a palavra em MEM_PROG[PC].
  2. Carregar a palavra completa em IR.
  3. Extrair opcode e operandos por operações sobre os bits.
  4. Executar a ação e atualizar os estados.
  5. Avançar PC em uma posição ou carregar o destino do desvio.

É proibido executar o programa reinterpretando strings assembly. A conversão para binário acontece na montagem; durante a execução, o controle deve depender exclusivamente das palavras armazenadas. Textos podem ser mantidos para consulta, sem determinar a ação executada.

2.2.3 Parada e estados internos

HALT encerra normalmente a execução e mantém as saídas. STOP cancela a execução ou uma espera e desliga bombas e alarmes. Após parada, novos passos são ignorados até RUN ou AUTO. Erros de execução também interrompem o programa, desligam bombas e alarmes e geram diagnóstico no monitor serial.

Depois de cada instrução, mostrar: endereço executado, palavra de IR em binário, mnemônico decodificado, ACC em decimal com sinal, indicadores, níveis e estados das saídas. Mostrar o próximo PC em hexadecimal quando houver continuidade; em parada, informar o estado, sem apresentar um endereço fictício.

2.2.4 Comandos do ambiente

ComandoFunção
LOADIniciar nova carga e reinicializar o sistema.
ENDFinalizar a carga e validar destinos de desvios.
RUNIniciar execução passo a passo em 0x00.
STEP ou *Executar uma instrução na sessão passo a passo.
AUTOIniciar execução contínua em 0x00.
STOPInterromper a execução e desligar bombas e alarmes.
MEMConsultar todas as 128 posições de memória.
MEM 0x00 0x0FConsultar um intervalo inclusivo de endereços.
STATUSConsultar modo, PC, registradores, indicadores e saídas.

Comandos do ambiente não são instruções da ISA e não ocupam a memória de programa. MEM e STATUS deverão estar disponíveis durante carga, parada e execução; não podem alterar PC, memória ou saídas. Durante AUTO, a consulta poderá pausar a execução entre instruções e retomá-la ao final. STEP adicional durante WAIT deverá ser rejeitado, sem enfileiramento. STOP deve continuar sendo atendido durante WAIT e programas com laços.

2.3 Conjunto de instruções

x identifica a bomba (1, 2 ou 3); n é um percentual inteiro decimal entre 0 e 100; a é um endereço hexadecimal com prefixo 0x; t é uma quantidade inteira decimal de unidades de 100 ms, com limite definido pelo grupo.

MnemônicoDescrição funcional
READ xLer a entrada analógica do reservatório x, converter em percentual inteiro e armazenar em NIVEL[x] e ACC. Marcar a leitura como válida.
ON xLigar o LED que representa a bomba x.
OFF xDesligar o LED que representa a bomba x.
ALARM xAtivar o estado de manutenção corretiva da bomba x e o buzzer. Informar a identificação da bomba no monitor serial.
LED xAtivar o LED de manutenção preventiva da bomba x.
INFO xRealizar nova leitura, atualizar NIVEL[x] e ACC, marcar leitura válida e mostrar a faixa no display. Informar bomba, percentual e dígito no monitor serial.
SILENCE xDesativar o estado de manutenção corretiva da bomba x. O buzzer só desliga quando não houver nenhum alarme corretivo ativo.
LEDOFF xDesativar o LED de manutenção preventiva da bomba x.
CMP x, nComparar o último nível válido da bomba x com n, sem nova leitura. Armazenar NIVEL[x] − n em ACC e atualizar FLAG_L, FLAG_Z e FLAG_G, exatamente um verdadeiro.
JMP aDesviar incondicionalmente para a.
JL aDesviar se FLAG_L for verdadeiro.
JE aDesviar se FLAG_Z for verdadeiro.
JG aDesviar se FLAG_G for verdadeiro.
WAIT tAguardar t unidades de 100 ms antes de permitir a próxima instrução, mantendo atendimento ao monitor serial.
HALTEncerrar a execução e manter o estado das saídas.

Somente CMP altera os indicadores de comparação. READ e INFO atualizam os níveis, mas não os indicadores. CMP sem leitura válida e desvio condicional sem comparação válida são erros. Se a condição de desvio for falsa, a execução segue para a posição seguinte. Alarmes são independentes do comando da bomba: ALARM e LED não a desligam automaticamente.

2.3.1 Codificação binária arbitrada pelo grupo

2.4 Código e descrição de cada funcionalidade

CódigoFuncionalidade e requisitoRelação arquitetural
F01Receber uma linha assembly pelo monitor serial e validar a sintaxe.Entrada / linguagem de montagem
F02Montar opcode e operandos conforme a codificação definida pelo grupo.Montador / ISA
F03Gravar uma palavra por posição e controlar ocupação e carga.Memória de programa
F04Buscar palavras binárias, carregar IR, decodificar e atualizar PC.UC / ciclo de instrução
F05Ler três entradas analógicas e converter em percentuais.Entrada de dados / registradores
F06Comparar níveis e implementar desvios condicionais.ULA / fluxo de controle
F07Controlar independentemente as bombas simuladas.Saída digital
F08Gerenciar alarmes preventivos e corretivos por bomba.Saída / estados
F09Exibir a faixa atual no display compartilhado.Codificação / saída
F10Consultar memória na tabela END | PALAVRA BINÁRIA.Endereçamento / inspeção
F11Executar WAIT, HALT, STOP e tratar falhas.Temporização / controle

2.5 Representação dos níveis e tratamento de erros

Converter a leitura analógica para percentual inteiro entre 0 e 100, documentando a fórmula e o arredondamento. O display deverá seguir a convenção abaixo.

Percentual inteiroDígito
0 a 10%1
11 a 20%2
21 a 30%3
31 a 40%4
41 a 50%5
51 a 60%6
61 a 70%7
71 a 90%8
91 a 100%9

A faixa do dígito 8 é deliberadamente mais ampla para manter o dígito 1 para até 10% e o dígito 9 para acima de 90%. O display mantém a última indicação até outra instrução INFO ou reinicialização.

ACC deverá representar diferenças entre −100 e +100. O grupo deverá documentar sua largura e a representação em complemento de 2. Uma diferença negativa de CMP é um resultado válido, exibido no monitor serial, e não um erro do display. INFO exibe uma faixa de nível, não o conteúdo negativo de ACC.

Rejeitar mnemônico desconhecido, bomba inexistente, operandos fora da faixa, endereço sem notação hexadecimal, excesso de operandos e memória cheia. A linha rejeitada não altera a memória nem avança a carga. Na execução, validar a palavra e impedir acesso a posições não carregadas. Ao chegar à última posição sem HALT ou desvio válido, interromper com erro, sem retornar automaticamente a 0x00.

2.6 Consulta de memória e notação dos endereços

Regra geral: toda indicação da posição de uma instrução deverá usar hexadecimal com prefixo 0x e dois dígitos, de 0x00 a 0x7F. A regra vale para entrada de destinos, PC, ponteiro de carga, tabelas, exemplos, documentação e mensagens de erro. Quantidades de posições, bombas, percentuais e tempos podem ser decimais.

O comando MEM deverá apresentar as 128 posições em ordem crescente. A forma MEM 0x00 0x0F limita a consulta ao intervalo inclusivo. Intervalos invertidos ou fora da memória devem ser rejeitados.

END    | PALAVRA BINÁRIA
0x00   | <W bits armazenados nesta posição>
0x01   | <W bits armazenados nesta posição>
0x02   | <W bits armazenados nesta posição>
...

O quadro é apenas um modelo de apresentação: na implementação, a segunda coluna deverá conter exclusivamente os W dígitos 0 ou 1 efetivamente armazenados, com zeros à esquerda. Não deverá apresentar mnemônicos nem códigos gerados novamente a partir de texto. Como o grupo arbitra a codificação, não são fornecidas palavras binárias de exemplo.

Posições não carregadas deverão aparecer com W zeros. A quantidade de posições ocupadas e o intervalo carregado devem ser informados fora da tabela. O controle de ocupação deverá ser separado do conteúdo: uma palavra zerada não determina, por si só, se a posição é executável.

03 / Descrição detalhada do esquema elétrico

3.1 Relação de componentes

3.2 Conexões

Ligar os extremos de cada potenciômetro a 5 V e GND e seu cursor à entrada analógica correspondente. Usar terra comum e resistor em série em cada LED e segmento. Documentar a polaridade do display, os resistores adotados e o circuito de acionamento do buzzer, respeitando as características dos componentes e os limites elétricos da placa. O display deverá ser comandado pelas saídas digitais.

3.3 Pinagem de referência

PinoElemento
A0, A1, A2Potenciômetros dos reservatórios 1, 2 e 3, respectivamente
22 a 28Segmentos a, b, c, d, e, f e g, respectivamente
30, 31, 32LEDs das bombas 1, 2 e 3
33, 34, 35LEDs preventivos das bombas 1, 2 e 3
45Sinal de controle do buzzer

A pinagem deverá ser seguida e identificada no esquema. Os números desta tabela identificam pinos físicos, não endereços de instruções.

04 / Setup de testes

Para cada teste, registrar entrada, resultado esperado, resultado obtido e evidência. Utilizar as palavras binárias definidas pelo grupo.

4.1 Montagem e programa armazenado

Carregar READ 1, ON 1, OFF 1 e HALT, uma por linha. Demonstrar que a carga não aciona as saídas e que as instruções ocupam 0x00, 0x01, 0x02 e 0x03. Consultar MEM e explicar cada campo de uma palavra.

Repetir a carga incluindo comentários após as instruções, linhas vazias e linhas contendo apenas comentários. Comprovar que as palavras binárias e seus endereços permanecem iguais aos da versão sem comentários.

4.2 Ciclo de instrução

Executar o programa anterior passo a passo. Apresentar endereço executado, IR binário e próximo PC, identificando no código a busca e a decodificação por bits.

4.3 Leitura independente

Ajustar os três potenciômetros para níveis distintos e executar READ para cada bomba. Verificar registradores e ACC, incluindo os extremos de 0% e 100%.

4.4 Comparação e desvios

Testar nível menor, igual e maior que o limite. Demonstrar CMP, os três indicadores e os desvios correspondentes. Explicar o resultado negativo de uma comparação, por exemplo 20 − 30 = −10, e sua representação em complemento de 2.

4.5 Bombas e alarmes

Acionar e desligar cada bomba e LED preventivo. Ativar ALARM 1 e ALARM 2; executar SILENCE 1 e comprovar que o buzzer permanece ativo; executar SILENCE 2 e comprovar seu desligamento.

4.6 Display

Executar INFO para as três bombas, verificando identificação no monitor serial e dígito no display. Testar todos os limites da tabela, incluindo 10/11%, 70/71% e 90/91%. Podem ser usados dados de teste controlados para verificar os limites, além da demonstração física com potenciômetros.

4.7 Memória e endereçamento

Exibir MEM completo e por intervalo. Carregar todas as 128 posições, até 0x7F, e demonstrar a rejeição de uma instrução adicional. Verificar que a consulta não modifica o programa, o PC ou as saídas.

4.8 Tratamento de erros

Testar instrução desconhecida, bomba inválida, endereço decimal, intervalo inválido, comparação sem leitura e desvio condicional sem comparação. Demonstrar também a detecção de opcode inválido e de execução em posição não carregada; para a corrupção da palavra, poderá ser utilizada uma versão de teste documentada.

4.9 Controle automático

Escrever um programa assembly que leia periodicamente os níveis das três bombas, ligue cada uma abaixo de 30%, desligue acima de 80% e preserve seu estado de 30% a 80%, inclusive. As decisões deverão estar no programa armazenado, usando CMP e desvios. Verificar subida e descida do nível, WAIT e atendimento a STOP durante o laço.

4.10 HALT e avaliação conceitual

Demonstrar HALT em programa finito e comprovar que passos posteriores não executam instruções até novo RUN ou AUTO. Cada integrante deverá localizar memória, PC, IR, ACC, UC, ULA e montador, explicando o percurso assembly → palavra binária → memória → busca → decodificação → execução.

05 / Regras de elaboração do sketch

5.1 Clareza e organização

Usar funções, indentação consistente, nomes significativos e comentários sobre os elementos arquiteturais. Separar interface serial, montagem, memória, decodificação, execução, aquisição analógica e acionamento das saídas.

5.2 Estrutura mínima

Implementar funções para receber linha, remover comentários iniciados por ponto e vírgula, validar operandos, codificar instrução, gravar palavra, consultar memória, buscar/decodificar/executar, comparar níveis, exibir faixa, controlar alarmes e tratar erros. A temporização de WAIT deverá manter o atendimento aos comandos do monitor serial.

5.3 Implementações não aceitas

5.4 Identificação do grupo

Incluir no início do sketch comentário com matrícula, nome e participação de cada integrante: TA — trabalhou ativamente; TP — trabalhou parcialmente; NT — não trabalhou.

06 / Regras de avaliação

6.1 Peso e organização

O trabalho corresponde a 30% da nota da AP1. O desenvolvimento deverá ser realizado pelos grupos definidos em sala, com indicação de um representante. Não serão aceitas entregas individuais ou fora do grupo definido.

6.2 Representante e presença

O representante deverá organizar a pasta do grupo no repositório, submeter os artefatos e conduzir a apresentação com participação dos demais integrantes. A presença de todos é obrigatória. A ausência implica redução de 40% da nota individual e não poderá ser compensada por envio posterior de material.

6.3 Condições de entrega

Os arquivos previstos na seção 8 deverão estar disponíveis localmente para demonstração durante a apresentação. O protótipo deverá estar montado e funcional. Somente após a conclusão da apresentação do grupo, o representante deverá publicar os arquivos na pasta correspondente no repositório indicado na seção 7. Os arquivos enviados deverão corresponder à versão apresentada. Não será permitido alterar o código durante a avaliação. Os únicos entregáveis exigidos são os cinco itens da seção 8.

6.4 Sequência da apresentação

  1. Apresentar o projeto e sua relação com a disciplina.
  2. Explicar a ISA arbitrada, seus formatos e a memória.
  3. Identificar PC, IR, ACC, UC e ULA no sketch.
  4. Demonstrar carga, consulta MEM, execução e funcionalidades.
  5. Executar os testes solicitados e encerrar um programa por HALT.

Para cada funcionalidade, explicar sua função, localizar a implementação, executá-la e comparar o resultado esperado ao obtido.

6.5 Critérios

ConceitoNotaCritério
Excelente10,0Todas as funcionalidades implementadas e atendidas.
Ótimo9,0Pequenas falhas em funcionalidades.
Bom7,0Muitas funcionalidades não atendidas.
Insuficiente0,0Projeto não apresentado ou sem funcionamento mínimo.

6.6 Penalizações específicas

SituaçãoConsequência
Ausência de integrante−40% da nota individual.
Participação TP−40% da nota individual.
Participação NTNota individual 0,0 no trabalho.
Repositório incompletoPoderá invalidar a avaliação.
Ausência de HALT, memória binária efetiva ou ciclo de busca/decodificaçãoFalha conceitual grave.
Ausência de definição documentada dos códigos binários, consulta MEM ou notação hexadecimal dos endereçosRequisito obrigatório não atendido.
Ausência de tratamento de erros e limitesRedução de nota.
Pinagem em desacordoPoderá inviabilizar a avaliação.

6.7 Datas de entrega e apresentação

TurmaDataHorário
Quarta-feira — turma4a30 de setembro de 2026Segundo tempo de aula
Quinta-feira — turma5a1º de outubro de 2026Segundo tempo de aula

A apresentação ocorrerá na data e no horário correspondentes à turma. A publicação dos arquivos no repositório deverá ocorrer somente após a apresentação do respectivo grupo.

07 / Repositório

O repositório do trabalho é github.com/claytonjasilva/trabalhoAP1-2026.2.

Cada representante deverá enviar ao professor seu nick (nome de usuário) no GitHub, para receber acesso ao repositório e poder inserir o material na pasta de seu grupo.

A pasta de cada grupo deverá seguir um dos formatos abaixo, substituindo o campo entre sinais de menor e maior pela matrícula do representante, sem incluir esses sinais no nome:

Exemplos ilustrativos: turma4a-123456 e turma5a-123456. Cada grupo deverá colocar os arquivos de entrega em sua própria pasta, somente após concluir sua apresentação.

08 / Entregáveis

  1. Sketch devidamente identificado, com matrícula, nome e participação de cada integrante, conforme a seção 5.4.
  2. Tabela em arquivo .md com o código binário arbitrado pelo grupo, o respectivo assembly e a descrição de cada instrução. No mesmo arquivo, explicar a largura da palavra e os campos de opcode e operandos.
  3. Esquema contendo as ligações realizadas no protótipo.
  4. Protótipo funcional, apresentado em aula.
  5. Testes realizados e programas usados em assembly, em arquivo .md, contendo resultados esperados e obtidos. Quando houver indicação de posições de instruções, utilizar endereços em hexadecimal.