CENTRO UNIVERSITÁRIO POSITIVO NÚCLEO DE CIÊNCIAS EXATAS E TECNOLÓGICAS ENGENHARIA DA COMPUTAÇÃO JOGO DA MEMÓRIA EMBARCADO Luis Fabiano Canteri Monografia apresentada à disciplina de Projeto Final como requisito parcial à conclusão do Curso de Engenharia da Computação, orientada pela profª Adriana Thomé. UNICENP/NCET Curitiba 2007
60
Embed
JOGO DA MEMÓRIA EMBARCADO - up.edu.br · - 2 - RESUMO Este projeto consiste na construção de um jogo da memória embarcado composto por um microcontrolador que gera uma seqüência
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
CENTRO UNIVERSITÁRIO POSITIVO
NÚCLEO DE CIÊNCIAS EXATAS E TECNOLÓGICAS
ENGENHARIA DA COMPUTAÇÃO
JOGO DA MEMÓRIA EMBARCADO
Luis Fabiano Canteri
Monografia apresentada à disciplina de Projeto Final como requisito parcial à conclusão
do Curso de Engenharia da Computação, orientada pela profª Adriana Thomé.
UNICENP/NCET
Curitiba
2007
- 2 -
RESUMO
Este projeto consiste na construção de um jogo da memória embarcado composto por um
microcontrolador que gera uma seqüência aleatória de números binários que é mostrada através
das luzes indicativas (leds) e que devem ser repetidas precionando-se os botões (push-buttons)
existentes na parte externa do equipamento.
Palavras chave: Microcontrolador ATmega16, Jogo Memória, GENIUS, SIMON
- 3 -
EMBEDED MEMORY GAME
ABSTRACT
This project is based on the construction of a embedded memory game using a microcontroller to
build a random sequence of binary number that is showed using indicative lights (led) and must
be replayed pressing the buttons that exist at the external part of equipment.
Key words: ATmega16 Microcontroller, Memory Game, Genius, Simon
Centro Universitário Positivo – Unicenp Resumo. Este projeto consiste na construção de um
jogo da memória embarcado composto por um
microcontrolador que gera uma seqüência aleatória
de números binários que é mostrada através das
luzes indicativas (leds) e que devem ser repetidas
precionando-se os botões (push-buttons) existentes
na parte externa do equipamento.
Palavras chave: Microcontrolador ATmega16, Jogo
Memória, GENIUS, SIMON
1. Introdução O curso de Engenharia da Computação
possui muitas áreas de atuação como o ramo científico, acadêmico, industrial, educacional, entretenimento entre outros. A área educacional e de entretenimento está crescendo muito ao longo dos anos, graças aos avanços científicos e tecnológicos.
Este projeto baseia-se no jogo da memória
GENIUS da Estrela S.A. comercializado na década de 80 originalmente desenvolvido nos EUA com o nome SIMON. O projeto é composto por um microcontrolador ATmega16 da ATMEL, responsável por toda a lógica do jogo. Possui também quatro leds onde uma seqüência binária aleatória gerada pelo microcontrolador será mostrada e possui push-buttons para que o jogador possa tentar executar a mesma seqüência apresentada pelo jogo.
O software, desenvolvido em assembly, é
responsável por toda atuação do microcontrolador bem como pela geração da seqüência aleatória, temporização, visualização dos dados gerados, verificação das ações do jogador e verificação dos dados de entrada para comparação dentro da lógica do jogo e ações que precisam ser executadas.
2. Fundamentação Teórica O trabalho apresentado é baseado em
tecnologia de eletrônica digital utilizando microcontrolador e componentes externos como leds, chaves e resistores e também software como a linguagem de programação Assembly. A seguir são tratados os fundamentos teóricos a respeito de alguns destes componentes.
2.1 Assembly
Assembly é uma linguagem de programação onde os programas são escritos em forma de texto. Usando um editor de texto criamos o chamado código fonte (Hyde, 2003). Este código fonte é transformado pelo compilador e pelo linker num programa que é gravado na memória de programa do microcontrolador para ser executado.
A linguagem Assembly é considerada de
baixo nível. Isto não significa que seja menos importante ou eficiente que uma linguagem chamada de alto nível, são apenas modos diferentes de se programar e níveis diferentes de atuação. Com uma linguagem de baixo nível como a Assembly, pode-se controla diretamente o microcontrolador, ou seja, nada de intermediários.
Uma das características da Assembly é que
cada linha do código fonte possui apenas uma instrução para o processador. Por exemplo, MOV
R15,R16 irá copiar o conteúdo do registrador R16 para o registrador R15. Neste caso, a instrução MOV é chamada de mnemônico. Os mnemônicos são os "apelidos" das instruções, mais fáceis de guardar na memória do que seu valor hexadecimal exigido pelo processador.
O resultado é um programa enxuto, rápido e altamente eficiente.
2.2. Microcontrolador
Um microcontrolador é um componente que possui, num único chip, além de uma CPU, elementos tais como memórias ROM e RAM, temporizadores, contadores, canais de comunicação e conversores analógico-digitais (Ziler, 2007). Esta característica diferencia os sistemas baseados em microcontroladores daqueles baseados em microprocessadores, onde normalmente se utilizam vários componentes para implementar essas funções. Com isso, os microcontroladores permitem a implementação de sistemas mais compactos e baratos do que aqueles baseados em microprocessadores.
Em contrapartida, as CPUs dos
microcontroladores são, em geral, menos poderosas do que os microprocessadores. Seu conjunto de instruções costuma se limitar às instruções mais simples encontradas nestes, sua freqüência de clock é
- 53-
mais baixa e o espaço de memória endereçável costuma ser bem menor. Vê-se daí que o campo de aplicação dos microcontroladores é diferente daquele dos microprocessadores, e que um sistema que possa ser controlado por um microcontrolador tende a ter menor complexidade e menor custo do que um sistema que exija a capacidade de processamento de um microprocessador.
Exemplos de sistemas onde os
microcontroladores encontram aplicação incluem controle de semáforos, balanças eletrônicas, micro terminais, telefones públicos, controle de veiculação de comerciais de TV, controle de carregadores de baterias, inversores, controles de acesso, taxímetros, sistemas de aquisição de dados de manufatura e eletrodomésticos em geral.
A programação dos microcontroladores é,
em geral, mais simples do que a dos microprocessadores, ao menos no que diz respeito às exigências de conhecimento dos componentes periféricos. Isto acontece porque os periféricos on-chip dos microcontroladores são acessados de uma forma padronizada e integrada na própria linguagem de programação, dispensando o conhecimento de detalhes externos.
Não se deve pensar, porém, que isto
simplifique a tarefa do programador em todos os níveis: é necessário que ele conheça bem o hardware conectado ao microcontrolador para poder produzir programas que funcionem corretamente.
Cabe citar ainda uma vantagem particular
dos microcontroladores que possuem memória ROM, que é a possibilidade de armazenar programas internamente, dificultando sensivelmente a cópia ilícita do código.
2.2.1 Os microcontroladores AVR Atmel Os microcontroladores AVR da fabricante
Atmel (Fig. 1) são microcontroladores de 8 bits (Soares, 2006), desenvolvidos sobre a tecnologia RISC – Reduced Instruction Set Computer (Computador com Set de Instruções Reduzido). Esta tecnologia é baseada na arquitetura HARWARD, que separa a memória de dados da memória de programa. Desta forma, um microcontrolador AVR tem um barramento para dados e outro para programa. Esta separação de barramentos permite uma maior velocidade no tratamento dos dados e do programa.
Apenas para efeito de comparação, o
microcontrolador 8051 Intel, por exemplo, foi desenvolvido sob tecnologia CISC – Complex Instruction Set Computer (Computador com Set de Instruções Complexo) e arquitetura Van Neuman, onde a memória de dados e programa não são separadas (trafegam por um mesmo barramento). Na Fig. 2 temos um demonstrativo entre as duas tecnologias descritas.
Fig. 2 – RISC e CISC (Fonte: Soares, 2006)
Um outro detalhe muito importante sobre a
família AVR diz respeito à quantidade de ciclos de máquina necessários para executar uma instrução. Esse fator determina a quantidade de MIPS (milhões de instruções por segundo) que um microcontrolador pode alcançar.
Na família AVR um pulso de clock equivale
a um ciclo de máquina (Soares, 2006). Como é necessário apenas um único ciclo de máquina para executar a maioria das instruções pertencentes ao seu instruction set, um AVR operando com um oscilador de 4 MHZ estará operando exatamente a 4 MIPS.
Essa informação é bastante interessante e
deve ser levada em conta caso seja necessário executar operações a grandes velocidades com um microcontrolador. Se compararmos um AVR a um microcontrolador 8051 e a um microcontrolador PIC (sem o uso do PLL interno, presente na família 18F), ambos com oscilador de 12 MHZ, teríamos as seguintes velocidades, em MIPS, indicadas na Tabela 1. (Soares, 2006)
Como pode ser visto na Tabela 1, a
velocidade dos microcontroladores AVR é grande. Microcontrolador com cristal
externo de 12 MHZ MIPS
AVR Atmel 12 PIC Microchip 03 8051 Intel 01
Tabela 1 – Comparativo de velocidade entre microcontroladores (Fonte: Soares, 2006) Uma outra facilidade muito interessante da
família AVR diz respeito aos modos de gravação possíveis. Alguns microcontroladores AVR admitem até três modos de gravação: ISP – in System, paralela e depuração de debug via interface JTEG.
No modo ISP são necessárias apenas quatro
“ligações” com o microcontrolador para a sua gravação, leitura ou verificação. Veja estas ligações na Tabela 2.
- 54-
Observando os nome das ligações necessárias, é fácil concluir que o protocolo de transferência de dados segue o protocolo SPI, bastante comum em outros CIs.
Nome da conexão Função
MISO Serial Out
Saída de dados
MOSI Serial In Entrada de
dados
SCLK Serial Clock
Clock de sincronismo
RESET Controle de
Reset
Tabela 2 – Ligações ISP (Fonte: Soares, 2006)
No modo ISP não é preciso nenhuma
“tensão específica” em qualquer dos pinos do microcontrolador para efetuar a gravação. Uma outra grande vantagem deste modo, é que o mesmo é feito In-System, ou seja, diretamente onde o microcontrolador está instalado (respeitando-se algumas regras). Desta forma não é necessário retirar o microcontrolador do circuito para gravá-lo. Essa vantagem refere-se diretamente na velocidade de desenvolvimento. A grande maioria dos compiladores do mercado aceitam gravadores ISP e trazem o devido suporte aos mesmos.
No modo paralelo são necessárias outras
ligações e o padrão de comunicação entre o gravador e o microcontrolador é feito de uma maneira diferente. Gravadores neste formato são mais caros, pois são exigidos componentes complexos (como um microcontrolador com o algoritmo necessário a gravação) em seus circuitos. O modo de depuração de debug através de uma interface JTEG permite que o programa seja depurado diretamente no microcontrolador.
Os microcontroladores AVR também
oferecem uma série de periféricos como Timers, Conversores Analógicos, Canais para PWM, portas de comunicação USART, SPI e I2C, além de rede CAN, memórias EEPROM, e muitos outros periféricos.
2.2.2 Gravador Atmel AVR O circuito do gravador é mostrado na Fig. 4.
Tem-se um único CI que atua como buffer para a porta paralela. Trata-se do CI 74HC244. Seu circuito interno pode ser visto na Fig. 3. Este circuito integrado é basicamente um buffer com oito portas TTL. Na Fig. 4 pode-se ver o diagrama de blocos do mesmo, assim como a distribuição de sua pinagem e na Tabela 3 seu modo de operação (tabela verdade).
Fig. 3 – Circuito interno do 74HC244
(Fonte: Soares, 2006)
Fig. 4 – Circuito elétrico do gravador
Entradas Saídas /G A Y L L L L H H
H X Z
L – “low” ou “0” lógico H – “High” ou “1” lógico X – nível lógico não importa Z – Alta impedância
Tabela 3 – Modo de operação para o 74HC244
(Fonte: Soares, 2006) Observando atentamente a Tabela 3,
podemos notar que qualquer nível lógico (0 ou 1) inserido nas entradas “A” são refletidos nas saídas “Y”, desde que o pino de habilitação “/G” seja levado ao nível lógico “1”, as saídas são colocadas em alta impedância, independente do nível lógico presente nas entradas do CI. Os pinos “/G” (1 e 19) do CI são controlados pelos pinos 4 e 5 da porta paralela, ou seja, as saídas são colocadas em tri-state (alta-impedância) sempre que o gravador não estiver em operação. Esta característica permite o uso do gravador diretamente “ligado” ao microcontrolador, instalado no circuito (In-System).
O gravador retira a alimentação do circuito
onde o microcontrolador estiver inserido. O LED está ligado ao VCC e ao pino 4 da porta paralela. Sempre que este pino for levado ao nível lógico “0”, para habilitar o CI, o LED acende indicando. Desta forma tem-se a indicação de que o gravador está em operação (gravação, leitura ou verificação).
- 55-
O capacitor C1 é um capacitor de desacoplamento para o CI, servindo assim como “filtro” contra transientes.
2.2.3 Programa para gravação Para utilizar o gravador, foi utilizado o
programa PonyProg que pode ser obtido gratuitamente no site do desenvolvedor LANCOS. Este programa possui um “add-on” (também disponível no site) que permite que os menus e as mensagens sejam grafados em língua portuguesa.
2.3 AVR ATmega16 – Características O núcleo AVR combina um rico conjunto de
instruções com 32 registradores de uso geral. Todos os 32 registradores estão ligados diretamente com a Unidade Lógica Aritmética (ULA), permitindo que dois registradores independentes tenham acesso executando uma única instrução em um ciclo de clock. A arquitetura resultante possui código mais eficiente enquanto que o throughput é pelo menos dez vezes mais rápido que um microcontrolador CISC convencional.
O ATmega16 possui as seguintes
características: 16k bytes de memória FLASH interna de programa com capacidade Ler-Enquanto-Escreve (Read-While-Write), 512 bytes EEPROM, 1kbyte SRAM, 32 linhas gerais de E/S, 32 registradores de uso geral, uma interface JTAG para Boundary-Scan, suporte on-chip para programação e debugging, 3 temporizadores/contadores flexíveis com modo de comparação, interrupções internas e externas, USART serial programável, interface serial two-wire orientada a byte, 8 conversores analógico/digital com 10 bites de resolução cada, watchdog programável com oscilador interno, porta serial SPI, gerenciador de energia com 6 modos, Isto permite uma inicialização rápida combinado com baixo consumo de energia. (Atmel, 2007)
O microcontrolador é fabricado utilizando
uma tecnologia de memória não volátil de alta densidade da Atmel. A memória FLASH ISP interna permite que o dispositivo seja reprogramado através de uma interface SPI serial, por um programador convencional de memória não volátil, ou por um programa de boot on-chip executando no núcleo do AVR.
Combinando uma CPU RISC de 8-bits com
auto-programação interna em um chip monolítico, o ATmega16 da Atmel é um microcontrolador poderoso que permite alta flexibilidade e solução de custo efetivo para muitas aplicações embarcadas microcontroladas.
O ATmega16 AVR é suportado por uma
grande variedade de programas e ferramentas de desenvolvimento incluindo: compiladores C, macro
assembly, programas simuladores/ debbugers, emuladores in-circuit, e kits didáticos. (Atmel, 2007)
O aspecto externo do ATmega16 é o da Fig.
5. Os pinos VCC (positivo) e GND (negativo ) são utilizados para a alimentação do microcontrolador que pode varias entre 2,7 V e 5,5 V de tensão contínua. A porta A (PA7..PA0) serve como entrada analógica para o conversor A/D. Ela também é utilizada como uma porta de E/S bidirecional de 8-bits, se o conversor A/D não for usado.
A porta B (PB7..PB0) é uma porta de E/S
bidirecional de 8-bits. A porta C (PC7..PC0) é uma porta de E/S bidirecional de 8-bits. Ela também é utilizada para as funções com a interface JTAG. A porta D (PD7..PD0) é uma porta de E/S bidirecional de 8-bits. O pino RESET gera a reinicialização do microcontrolador ao receber um sinal com borda de descida. O pino XTAL1 é a entrada do amplificador oscilador inversor e saída do circuito interno de clock. O pino XTAL2 é a saída do amplificador oscilador inversor. O pino AVCC é o pino de alimentação para a porta A e o conversor A/D. Deve ser conectado ao VCC a não ser que o conversor A/D não seja utilizado. AREF é o pino de referência analógico para o conversor A/D. (Atmel, 2007)
Fig. 5 - ATmega16 (Fonte: Atmega16,2007)
3. Especificação do Projeto Este projeto consiste na construção de um
jogo da memória embarcado composto por um microcontrolador ATMega16 da Atmel que gera uma seqüência aleatória de números binários que é mostrada através das luzes indicativas (leds) e que devem ser repetidas pelo jogador precionando-se os botões (push-buttons) existentes na parte externa do equipamento.
3.1 Funcionamento Ao ligar o equipamento, ele apresenta uma
seqüência de inicialização que consiste em ligar todos os leds por um tempo e apagá-los logo em seguida, apenas para indicar que todos os leds estão funcionando normalmente.
- 56-
Após a inicialização, o jogo fica em looping
aguardando que um dos botões seja pressionado para selecionar o nível de dificuldade do jogo, sendo que cada um dos quatro botões corresponde a um nível de dificuldade. Cada nível corresponde a uma maior quantidade de posições que precisam ser memorizadas e botões que precisam ser pressionados, e também é maior a velocidade com que os leds piscam. Os níveis foram definidos internamente no programa, ou seja, para alterá-los é necessário alterar o programa e regravar o microcontrolador. São estes os níveis definidos:
Nível 1 – Composto por uma seqüência de 5
luzes e tempo de 1500ms entre elas. Nível 2 – Composto por uma seqüência de 7
luzes e tempo de 1000s entre elas. Nível 3 – Composto por uma seqüência de
10 luzes e tempo de 500ms entre elas. Nível 4 – Composto por uma seqüência de
15 luzes e tempo de 125ms entre elas. Após a seleção do nível de dificuldade, o
jogo inicia uma nova seqüência gerando aleatoriamente qual led deve piscar primeiro e armazenando o seu valor na memória, em seguida o jogo pisca o primeiro led e aguarda que seja pressionado um botão, isto é feito lendo-se o conteúdo da porta B do microcontrolador e comparando se o valor é diferente de zero.
Assim que um botão é pressionado, o seu
respectivo valor é armazenado na memória do microcontrolador e comparado com o valor respectivo ao led armazenado em memória. Caso os valores sejam diferentes todos os leds ficam piscando indicando que o jogador errou. Caso contrário o jogo prossegue gerando aleatoriamente um novo led que deve piscar e armazenando o seu valor na memória, na posição seguinte a do led anterior. Então é mostrada a seqüência completa, ou seja, pisca-se um led de cada vez até que todos os que compõe a seqüência tenham piscado, então, o programa aguarda até a quantidade respectiva de botões seja pressionada e faz uma nova comparação.
O jogo termina quando o jogador conseguir
acertar todas as jogadas atingindo a quantidade pré-estabelecida na seleção de dificuldade.
Para reiniciar o jogo, se faz necessário apenas pressionar o botão de reset na lateral do jogo.
3.2 Hardware O equipamento desenvolvido é composto
pelos seguintes componentes: • 1 placa de circuito impresso • 1 processador ATMEL AVR
ATmega16 • 1 suporte para CI de 40 pinos • 2 leds verdes 10mm
• 2 leds amarelos 10mm • 4 resistores de 1k ohm • 4 resistores de 220 ohms • 5 botões do tipo push-button • 1 fonte estabilizada de 5V • 1 caixa de acrílico • Cabos e conectores • 1 buzzer Na Fig. 7 podemos verificar o diagrama em
blocos do equipamento, onde as entradas são os botões (azul e verde) e as saídas são os leds (amarelo).
Na Fig. 8 pode-se observar o diagrama
eletrônico do hardware com a ligação de todos os componentes envolvidos no projeto.
Fig. 7 - Diagrama em blocos do hardware
Fig. 8 – Diagrama eletrônico do hardware
Na Fig. 9 pode-se verificar como ficou o projeto já montado com seus componentes definitivos e pronto para realização dos testes.
Fig. 9 –Protótipo do jogo
3.3 Software O software é parte fundamental do projeto,
sendo que nele está definida toda a lógica do jogo
- 57-
assim como o controle sobre o hardware para efetuar a leitura dos botões pressionados e controlar os leds e o buzzer.
3.3.1 Linguagem de programação O desenvolvimento do software foi realizado
utilizando-se a linguagem de programação assembly e a interface gráfica de desenvolvimento AVR Studio da própria Atmel que fornece a mesma gratuitamente mediante um simples cadastro em seu web site.
Foi utilizado o assembly por três motivos:
primeiro por uma questão pessoal, pois a programação em baixo nível foi uma das matérias estudadas durante o curso que mais me interessaram. Durante o curso aprendeu-se a programação de microcontroladores com arquitetura CISC então para o projeto, decidiu-se utilizar um microcontrolador com arquitetura RISC para aumentar os conhecimentos na área de programação de microcontroladores. Segundo, por ser uma linguagem de baixo nível permite um maior controle sobre o hardware mesmo tornando a programação um pouco mais complexa e trabalhosa. E por último, com a utilização do AVR Studio é possível simular todo o comportamento do hardware, passo a passo, facilitando encontrar problemas (bugs) na programação.
4. Desenvolvimento e mplementação O desenvolvimento e a implementação
envolveram tanto hardware quanto software (pré-requisito para o projeto) sendo que a maior parte do tempo de desenvolvimento foi gasta na parte de software em assembly. Cerca de apenas 1/3 do tempo total de desenvolvimento foi utilizado no hardware.
4.1 Definição do microcontrolador Foi escolhido o microcontrolador ATMega16
da família AVR da ATMEL por ser um microcontrolador com arquitetura RISC, que utiliza um ciclo de clock por instrução, tornando assim mais simples o controle de temporizadores.
Outras características que levaram a escolha deste microcontrolador foram as seguintes:
Possui 16Kbits de memória FLASH para gravação de programas e dados, não necessitando de componentes externos para armazenar o programa. A programação pode ser feita conectando-se o microcontrolador diretamente ao computador onde o programa foi desenvolvido através da porta paralela, com isso é possível desenvolver o projeto em qualquer computador que possua o software de gravação. Possui oscilador interno com clock de 8Mhz evitando assim cristais externos que normalmente são uma fonte de problemas nos projetos. Possui 4 portas de entrada e saída de 8 bits cada que podem fornecer até 20mA de corrente na saída de cada porta conseguindo alimentar sem problemas um led de forma direta ou seja sem
necessidade de fonte externa tornando o projeto com arquitetura de hardware bastante otimizada.
4.3 Gravador do microcontrolador Um dos problemas encontrados foi que os
gravadores existentes para uso não eram compatíveis com os microcontroladores da família AVR da Atmel. Assim foi necessário o desenvolvimento de um gravador específico para o microcontrolador ATMega16. Após vários testes foi encontrado um projeto de gravador relativamente simples (Soares, 2006). Utilizando apenas um circuito integrado o 74HC244 (buffer) e um conector DB25 foi construído o gravador que funcionou já no primeiro teste. O teste foi realizado utilizando o software de gravação PonyProg 2000 que é gratuito e fácil utilização.
4.4 Desenvolvimento do software Para o desenvolvimento do software, foi
utilizado o ambiente de desenvolvimento AVR Studio disponibilizado pela própria Atmel que fabrica o microcontrolador utilizado. A simulação do software é muito fácil de utilizar e de grande ajuda no desenvolvimento do projeto pois facilita a programação permitindo que a mesma seja feita em qualquer computador não necessitando do hardware para os testes mais básicos.
4.5 Exemplos de códigos Na programação do Atmel Atmega16, uma
característica particular é que primeiramente é necessário definir como as portas serão utilizadas, se para entrada de dados ou para saída de dados. Isto é feito utilizando-se os registradores DDRA, DDRB e DDRD que são os respectivos controladores de entrada/saída das portas A, B e D. Não é possível gravar diretamente um valor nas portas de entrada/saída sendo necessário utilizar um registrador temporário para isto. O registrador R16 é utilizado como registrador temporário e é apelidado de “tp” para facilitar a programação. O comando ldi (load direct) transfere diretamente o valor fornecido para registrador.
ldi tp,0X00 out DDRA,tp ldi tp,0xFF out DDRB,tp out DDRD,tp O código abaixo refere-se ao gerador de
número aleatório. Primeiro definimos o valor inicial do contador igual a zero e depois iniciamos o contador que será incrementado a cada clock do microcontrolador.
ldi tp,0x01 ldi tc,0x00 out TCNT2,tc out TCCR2,tp
- 58-
O programa lê o contador e armazena o seu
valor no registrador tp, então é aplicada a uma máscara com valor binário 00000011 e realizada a operação lógica AND para filtrar o valor restando apenas os dois últimos bits do valor lido anteriormente. Como o valor depende do tempo que a rotina levou para ser executada e esta depende do tempo que o jogador demorou para pressionar os botões na jogada anterior, quase sempre o número gerado será diferente do anterior.
Este resultado pode conter os seguintes
valores: 00, 01, 10, 11 sendo que é necessário transformá-los em 0001, 0010, 0100, 1000 respectivamente para formar um valor que possa ser enviado para a porta de saída e acender apenas um led de cada vez.
random: in tp,TCNT2 ldi tmp,0x03 AND tp,tmp random0: ldi rnd,0x00 cp tp,rnd brne random1 ldi tp,0x01 ret random1: ldi rnd,0x01 cp tp,rnd brne random2 ldi tp,0x02 ret random2: ldi rnd,0x02 cp tp,rnd brne random3 ldi tp,0x04 ret random3: ldi rnd,0x03 cp tp,rnd ldi tp,0x08 ret
4.6 Placa de circuito impresso Na Fig.11, podemos ver o layout da placa de
circuito impresso que foi criado utilizando o software gratuito EAGLE (Easily Applicable Graphical Layout Editor) e a placa foi produzida durante o curso de criação de placas de circuito impresso ministrado na Unicenp.
Fig. 11 – Layout da placa de circuito impresso
Na Fig.12 pode-se verificar o resultado final
da placa de circuito impresso já com seus componentes devidamente soldados. Nota-se que na placa ficam somente o microcontrolador, alguns resistores de pull-up, os resistores dos leds, conectores e um led de luz azul para indicar que o jogo terminou.
Fig. 12 – Placa de circuito impresso (vista superior)
4.7 Produto final Nas Fig.13 e Fig.14 podemos observar a
aparência do projeto finalizado. Internamente temos a placa com o microcontrolador e os conectores ligados aos botões e leds. Externamente podemos acionar os botões e ver os leds acendendo.
Fig. 13 – Projeto montado em caixa de acrílico
- 59-
Fig. 14 - Visão do botão de reset e dos conectores de energia
A caixa de acrílico foi confeccionada na
empresa “Pró Acrílico” especializada no trabalho com acrílico onde foi montada a caixa e realizadas as furações para os botões, leds e conectores externos.
5. Validação e Resultados A validação do projeto foi realizada
inicialmente em laboratório com vários alunos e professores do curso de Engenharia da Computação.
Também foi realizada validação do projeto no evento “Ciências e Criação” do colégio Positivo Junior onde houve a oportunidade de testar o projeto com várias crianças jogando por uma manhã inteira, como pode ser visto na Fig. 15.
Fig. 15 – Crianças jogando durante o evento no
colégio Positivo Junior
5.2 Resultados Obtidos Os resultados obtidos foram satisfatórios
pois durante toda a validação o jogo funcionou conforme o esperado não apresentando problemas de lógica ou mau funcionamento.
A construção do projeto se mostrou bastante robusta não apresentando defeitos físicos em nenhum dos casos validados.
Observou-se que o primeiro nível de dificuldade é relativamente lento para crianças, pois as mesmas se mostraram rapidamente adaptáveis ao funcionamento do projeto passando assim para níveis com maior dificuldade e não jogando mais no primeiro nível.
O buzzer localizado internamento na caixa de acrílico apresentou baixa performance para ambientes abertos e ruidosos.
Os leds apresentaram baixa luminosidade em ambientes bem iluminados com luz solar.
A alimentação de energia do projeto, também funcionou como esperado durante todo o tempo.
6. Conclusão
A proposta do projeto foi a construção de um jogo da memória embarcado utilizando um microcontrolador RISC. Dentro do proposto podem citar alguns itens importantes na finalização do projeto tais como: Pontos positivos:
• O microcontrolador mostrou-se bastante robusto e com características importantes para o bom funcionamento do projeto como oscilador interno, boa capacidade de memória SRAM , grande velocidade de resposta respondendo muito bem as ações dos jogadores, baixo custo.
• O circuito impresso foi de fácil desenvolvimento e rápida confecção.
• O ambiente de desenvolvimento é muito versátil tornando possível a simulação completa do programa sem a necessidade do hardware.
Dificuldades encontradas:
• Não foi Encontrado o microcontrolador para compra em Curitiba sendo necessário encomendá-lo em São Paulo.
• Existem poucas referências quando ao gravador do ATMega16.
• Existem poucos exemplos de programação em assembly para os controladores AVR da Atmel pois a maioria dos programadores utiliza a linguagem C.
Possíveis melhorias:
• Colocação do buzzer na parte externa da caixa de acrílico, alteração do circuito de acionamento dos leds que permitam uma maior luminosidade
• Instalação de um display de cristal liquido para mostrar os records obtidos e desafiar os próximos jogadores
• Desenvolver um tocador de músicas no lugar do buzzer para tornar a utilização mais divertida.
• Utilizar componentes menores principalmente botões e caixa, alterar o projeto para trabalhar com bateria interna tornando o jogo móvel.
Referêcias Bibliográficas
(Atmel, 2007) Atmel On-line. Disponível em: www.atmel.com. Acesso em: Junho de 2007. (Atmega16, 2007) Atmel On-line. Disponível em: http://www.atmel.com/dyn/products/product_card.asp?part_id=2010. Acesso em: Junho de 2007.
- 60-
(AVR, 2007) AVR Freaks - Disponível em: http://www.avrfreaks.net. Acesso em: Junho de 2007. (Ziller, 2007) Ziller, Roberto M. Comentários sobre microcontroladores. Disponível em: http://eletronica.ipuc.pucminas.br/~databook/8051/tut8051_ufsc.pdf. Acesso em: Junho 2007. (Marques, 2002) Marques, A.; Cruz, E.; Choueri, S. Dispositivos Semicondutores: DIODOS e TRANSISTORES – 7º Edição 2002 (Soares, 2006) Soares, Marcio José – Os Microcontroladores AVR Atmel - Revista Eletrônica TOTAL - pág. 50 - Nº. 113 ano 2006
(Hyde, 2003) Hyde, Randall - The Art of Assembly Language, 2003
(Mendes,2007) Mendes , Gilmar de Melo. Disponível em: http://igc.infonet.com.br/imprimir.asp?codigo=6140&catalogo=5&inicio=30. Acesso em: Julho de 2007 (Silveira, 1998) Silveira, Sidnei Renato e Barone, Dante Augusto Couto - JOGOS EDUCATIVOS COMPUTADORIZADOS UTILIZANDO A ABORDAGEM DE ALGORITMOS GENÉTICOS - IV Congresso RIBIE, Brasília 1998 - Disponível em: http://lsm.dei.uc.pt/ribie/docfiles/txt200342421140151.PDF