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
- 4 -
SUMÁRIO
Pág.
CAPÍTULO 1 - INTRODUÇÃO.............................................................................................. 9
CAPÍTULO 2 – FUNDAMENTAÇÃO TEÓRICA.................................................................. 10
2.1- Assembly ............................................................................................................ 10
2.2- Teoria dos jogos.................................................................................................. 11
2.3- Microcontrolador ............................................................................................... 12
2.3.1- Os microcontroladores AVR Atmel ...................................................... 14
2.3.2- Gravador Atmel AVR........................................................................... 16
2.3.3- Programa para gravação........................................................................ 18
2.4- AVR ATmega16 - características ....................................................................... 18
2.5- Diodo semicondutor ........................................................................................... 21
2.5.1- Polarização Direta .................................................................................. 22
2.5.2- Polarização Reversa ............................................................................... 22
2.6- LED (Diodo Emissor de Luz) ............................................................................. 23
CAPÍTULO 3 – ESPECIFICAÇÃO DO PROJETO................................................................. 24
3.1- Funcionamento ................................................................................................... 24
3.2- Hardware ........................................................................................................... 25
3.3- Software ............................................................................................................. 27
3.3.1- Linguagem de programação .................................................................. 27
3.4- Fluxograma ........................................................................................................ 28
CAPÍTULO 4 – DESENVOLVIMENTO E IMPLEMENTAÇÃO........................................... 29
4.1- Cronograma ....................................................................................................... 29
4.2- Definição do microcontrolador............................................................................ 29
4.3- Gravador do microcontrolador ............................................................................ 29
4.4- Desenvolvimento do software ............................................................................. 30
4.5- Exemplos de códigos .......................................................................................... 30
4.6- placa de circuito impresso ................................................................................... 32
4.7- Produto final ....................................................................................................... 33
CAPÍTULO 5 – VALIDAÇÃO E RESULTADOS .................................................................. 34
- 5 -
5.1- resultados obtidos................................................................................................ 35
CAPÍTULO 6 - CONCLUSÃO ............................................................................................... 36
CAPÍTULO 7 - REFERÊNCIAS BIBLIOGRÁFICAS ............................................................ 37
APÊNDICE A - GLOSSÁRIO................................................................................................. 38
ANEXO A – LISTAGEM DO PROGRAMA .......................................................................... 39
- 6 -
LISTA DE FIGURAS
Figura. 1 – Gênius da Estrela .......................................................................................... 11
Figura. 2 - RISC e CISC ................................................................................................. 14
Figura. 3 - Circuito interno do 74HC244......................................................................... 16
Figura. 4 - Circuito elétrico do gravador ......................................................................... 17
Figura. 5 - ATmega16..................................................................................................... 19
Figura. 6 - Diagrama em blocos ATmega16.................................................................... 20
Figura. 7 - Diagrama em blocos do hardware .................................................................. 26
Figura. 8 - Diagrama eletrônico do hardware .................................................................. 26
Figura. 9 - Protótipo do jogo ........................................................................................... 27
Figura. 10 - Fluxograma de funcionamento..................................................................... 28
Figura. 11 - Layout da placa de circuito impresso............................................................ 32
Figura. 12 - Placa de circuito impresso (vista superior) ................................................... 32
Figura. 13 - Projeto montado em caixa de acrílico........................................................... 33
Figura. 14 - Visão do botão de reset e dos conectores de energia..................................... 33
Figura. 15 - Fonte de alimentação adaptada..................................................................... 34
Figura. 16 - Crianças jogando durante o evento no colégio Positivo Junior ..................... 35
- 7 -
LISTA DE SIGLAS
UNICENP – Centro Universitário Positivo
EEPROM – Electrically Erasable Programmable Read-Only Memory.
EPROM – Erasable Programmable Read-Only Memory.
IDE – Integrated Development Environment.
JTAG – Joint Test Action Group.
RAM – Random Access Memory.
CISC - Complex Instruction Set Computer
RISC - Reduced Instruction Set Computer
LED - Light Emission Diode
AVR - Advanced Virtual RISC
SPI - Serial Peripheral Interface
- 8 -
LISTA DE SÍMBOLOS
ΩΩΩΩ – Ohm. Hz – Hertz. MHz – Mega Hertz. V – Volts. A – Ampere. Mb – Mega Bytes.
- 9-
CAPÍTULO 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.
- 10-
CAPÍTULO 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.
Os componentes da linguagem assembly são as instruções para o processador. E podem ser
divididos nas seguintes categorias:
• Instruções de registradores
• Instruções de pilha
• Instruções de execução
• Instruções de memória
• Instruções de flag
• Declarações de memória
• Diretivas para o assembly
• Comentários
- 11-
2.2. Teoria dos jogos
A teoria de jogos (matemática), um ramo da economia (Mendes, 2007), visualiza qualquer
ambiente multiagente como um jogo, desde que o impacto de cada agente sobre os outros seja
“significativo”, não importando se os agentes são cooperativos ou competitivos. Os jogos
ocuparam as faculdades intelectuais dos seres humanos – chegando algumas vezes a um grau
alarmante – desde que surgiu a civilização.
Como uma parte dos jogos podemos citar os jogos educativos, mais explicitamente os do tipo
computadorizados. Os jogos educativos computadorizados possuem, como uma de suas
principais vantagens, um grande potencial para o processo de ensino e aprendizagem (Silveira,
1998), por despertarem naturalmente o interesse dos alunos. “Os jogos podem ser empregados
em uma variedade de propósitos dentro do contexto de aprendizado. Um dos usos básicos e
muito importante é a possibilidade de construir-se a autoconfiança. Outro, é o incremento da
motivação. (...) um método eficaz que possibilita uma prática significativa daquilo que está
sendo aprendido. Até mesmo o mais simplório dos jogos pode ser empregado para proporcionar
informações factuais e praticar habilidades, conferindo destreza e competência”.
Um exemplo de jogo educativo computadoriza é o jogo GÊNIUS da fabricante brasileira
de brinquedos Estrela S/A. Este jogo tem como objetivo desenvolver a capacidade de utilização
da memória. Na Fig.1 abaixo podemos ver uma imagem do mesmo.
Fig. 1 – Gênius da Estrela
Os jogos desempenham um papel importante no desenvolvimento da criança. O jogo
representa esforço e conquista, é uma necessidade vital. O jogo possibilita o equilíbrio entre o
mundo interno e o externo, canalizando as energias das crianças e transformando em prazer suas
angústias.
- 12-
O jogo estimula a vida e representa, efetivamente, uma contribuição na aprendizagem da
criança, por ser uma atividade rica e desafiadora, contribuindo para o crescimento intelectual e
afetivo. Os jogos educativos podem despertar no aluno: motivação, estímulo, curiosidade,
interesse em aprender e cabe ao professor aproveitar-se destas características como estratégias
pedagógicas. O aluno “constrói” seu conhecimento de maneira lúdica e prazerosa.
A influência do brinquedo no desenvolvimento da criança é muito grande. Através deste, a
criança aprende a agir cognitivamente, sendo livre para determinar suas ações. O brinquedo
estimula a curiosidade, a iniciativa e a autoconfiança, proporcionando o desenvolvimento da
linguagem, do pensamento e da concentração da atenção.
"Desde muito cedo o jogo na vida da criança é de fundamental importância, pois quando
ela brinca, explora e manuseia tudo aquilo que está à sua volta, através de esforços físicos e
mentais...".
O jogo tem uma relação estreita com a construção da inteligência e possui uma efetiva
influência como instrumento incentivador e motivador no processo de ensino e aprendizagem.
Os jogos devem possuir as seguintes características básicas: estimular a imaginação
infantil, auxiliar no processo de integração grupal, liberar a emoção infantil, facilitar a
construção do conhecimento e auxiliar na aquisição da auto-estima.
2.3. 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.
- 13-
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 é 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.
- 14-
2.3.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.
- 15-
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.
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)
- 16-
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.3.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)
- 17-
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).
- 18-
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).
O capacitor C1 é um capacitor de desacoplamento para o CI, servindo assim como “filtro” contra
transientes.
2.3.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.4 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.
- 19-
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)
- 21-
2.5 Diodo semicondutor Conforme (Marques ,2002) o diodo semicondutor é constituído por uma junção PN, ou seja, pela
união física de um material tipo P (cujos portadores majoritários são lacunas) com um tipo N
(cujos portadores majoritários são elétrons).
Efetuado-se esta união, o excesso de elétrons do material tipo N tende a migrar para o material
tipo P, visando tanto o equilíbrio eletrônico – equilíbrio das densidades de elétrons dos dois
materiais – como a estabilidade química – cada átomo do material tipo N que perde um elétron
fica com oito elétrons na sua camada de valência, o mesmo acontecendo com cada átomo do
material tipo P que tem sua lacuna ocupada por este elétron.
Este fenômeno de ocupação de uma lacuna por um elétron é chamado de recombinação. Como o
processo de recombinação ocorre inicialmente na região próxima à junção, um fenômeno
interessante acontece: a formação de uma camada de depleção. Depleção significa diminuição ou
ausência e, neste caso, esta palavra corresponde à ausência de portadores majoritários na região
próxima à junção PN.
A medida que os átomos do material tipo P próximos à junção recebem os primeiros elétrons
preenchendo suas lacunas, no lado N forma-se uma região com íons positivos (falta de elétrons)
e, no lado P, uma região com íons negativos (excesso de elétrons), dificultando ainda mais a
passagem de elétrons do material tipo N para o material tipo P.
Assim, a partir de certo momento, este fluxo de elétrons cessa e esta região ionizada (camada de
depleção) fica com ausência de elétrons e lacunas, que são os responsáveis pela corrente elétrica.
Como a camada de depleção fica ionizada, cria-se uma diferença de potencial na junção chamada
barreira de potencial. Esta diferença de potencial, a 25ºC é de aproximadamente 0,7V para os
diodos de silício e 0,3V para os diodos de germânio.
Cada lado do diodo semicondutor recebe um nome: o lado P chama-se anodo(A) e o lado N
chama-se catodo(K).
Aplicando-se uma tensão nos terminais do diodo, a camada de depleção se modifica, alterando
também as características da barreira de potencial. Estas modificações dependem do sentido de
polarização do diodo.
- 22-
2.5.1 Polarização Direta
A polarização direta ocorre quando o potencial positivo da fonte encontra-se ligado ao lado P e o
potencial negativo ao lado N. Com VCC > Vy, os elétrons do lado N ganham mais energia
porque são repelidos pelo terminal negativo da fonte, rompem a barreira de potencial Vy e são
atraídos para o lado P, atravessando, assim, a junção.
No lado P, eles recombinam-se com as lacunas, tornando-se elétrons de valência, mas continuam
deslocam-se de lacuna em lacuna, pois são atraídos pelo terminal positivo da fonte, formando-se
uma corrente elétrica de alta intensidade (Id ou If), fazendo com que o diodo semicondutor se
comporte como um condutor ou uma resistência direta Rd muitíssimo pequena. (Marques ,2002)
2.5.2 Polarização Reversa
A polarização reversa ocorre quando o potencial negativo da fonte encontra-se ligado no lado P e
o potencial positivo no lado N. Por causa da polarização reversa, os elétrons do lado N são
atraídos para o terminal positivo e as lacunas para o terminal negativo da fonte. Com isso
formam-se mais íons positivos do lado N e íons negativos no lado P, aumentando assim, a
camada de depleção e, consequentemente, a barreira de potencial.
A barreira de potencial aumenta até que sua diferença de potencial se iguale a tensão da fonte de
alimentação. Portanto, quanto maior a tensão da fonte, maior a barreira potencial. Desta forma ,
os portadores majoritários de cada lado do diodo (lacunas no lado P e elétrons no lado N) não
circulam pelo circuito.
Por outro lado, existe uma corrente muito pequena formada pelos portadores minoritários
(elétrons no lado P e lacunas no lado N), muitos deles criados continuamente pela energia
térmica a temperatura ambiente. Esta pequena corrente elétrica é chamada corrente reversa (Ir)
estando limitada aos portadores minoritários, ou seja, ela não aumenta proporcionalmente à
tensão reversa aplicada ao diodo, sendo considerada desprezível na grande maioria dos casos.
Assim o diodo se comporta como se fosse um circuito aberto ou uma resistência reversa Rr
altíssima.
Portanto, o diodo semicondutor é um dispositivo que conduz apenas quando polarizado
diretamente. Este fato fez com que este dispositivo pudesse substituir a antiga válvula diodo,
com a vantagem de dissipar menos potência e ter dimensões muito menores.
- 23-
2.6 LED (Diodo Emissor de Luz)
Num diodo, quando polarizado diretamente, uma grande quantidade de portadores atravessa a
região de depleção na qual, algum deles, recombinam com átomos ionizados. Nesse processo, os
elétrons, perdem energia na forma de radiação. Nos diodos de silício ou germânio, essa radiação
é liberada principalmente na forma de calor mas, em compostos de arseneto de (GaAs), existe a
liberação de energia na forma de luz.
Esses diodos são chamados de diodos emissores de luz ou, simplesmente, LED (do inglês Light
Emitting Diode) e podem emitir luz visível, infravermelho (freqüência menor ou comprimento
de onda maior que a faixa de luz visível) ou ultravioleta (freqüência maior ou comprimento de
onda menor que faixa de luz visível). Este fenômeno ocorre principalmente quando o tamanho da
banda proibida é igual ao comprimento das ondas de luz, favorecendo a emissão de fótons
(partículas de luz).
Os principais LEDs de luz visível são feitos a partir de GaAs acrescidos de fósforo que,
dependendo da quantidade, podem irradiar luz vermelha, laranja, amarela, verde ou azul e são
muito utilizados como sinalizadores em instrumentos eletrônicos ou na fabricação de displays
(indicadores numéricos de sete segmentos onde cada segmento é um LED).
Para a emissão de luz infravermelha, pode-se utilizar InSb (antimoneto de índio) com aplicações
em alarmes, transmissão de dados por fibras óticas e outras que exijam radiação invisível ou
GaAs acrescida de alumínio que são muito utilizados em aparelhos de disco-laser. Para a
radiação ultravioleta, o mais utilizado é o diodo a base de sulfato de zinco (ZnS).
Os LEDs têm as mesmas características dos diodos comuns, ou seja, só conduzem quando
polarizados diretamente com tensão maior ou igual a Vy. Comercialmente, eles trabalham
normalmente com correntes na faixa de 10mA a 50mA e tensões na faixa de 1,5V a 2,5V.
Assim, para se polarizar um LED, deve-se utilizar um resistor limitador de corrente para que o
mesmo não danifique.
CAPÍTULO 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
- 24-
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.
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.
- 25-
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.
- 26-
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.
- 27-
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
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.
- 28-
3.4 Fluxograma
Abaixo na Fig. 10 está o fluxograma de funcionamento do programa do jogo da memória.
Início
Inicialização
(piscam todos os leds)
Aguardar que um botão
seja precionado
(seleciona nível dificuldade)
Gerar aleatóriamente novo
número, guardar na memória no
fim da fila de números gerados
Mostrar seqüência de números
gerados piscando os respectivos
leds
FIM
Aguardar que o jogador precione
os botões na quantidade igual a
quantidade mostrada
Piscar leds em série indicando
que o jogador venceu o jogo
Armazenar na memória o valor
dos botões precionados pelo
jogador
Os valores gerados pelo jogo
São iguais aos valores dos botões
que jogador precionou ?
Piscar leds em série indicando
que o jogador errou
Atingiu a quantidade
de números definidos no
nível de dificuldade ?
Não
Sim
Sim
Não
Fig. 10 – Fluxograma de funcionamento
- 29-
CAPÍTULO 4 – DESENVOLVIMENTO E IMPLEMENTAÇÃ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.
Toda a documentação sobre o microcontrolador pode ser encontrada no próprio web site da
Atmel em forma de documentos pdf que podem ser baixados de forma gratuita.
Não foi encontrado fornecedor deste microcontrolador em Curitiba, sendo necessário a compra
do mesmo com fornecedor de São Paulo através da Internet.
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
- 30-
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. No web site da
Atmel encontram-se documentos que mostram de forma detalhada com programar utilizando o
AVR Studio e a linguagem de programação assembly. Os principais documentos são o “AVR
Instruction Set” que possui todas as instruções assembly suportadas pelos microcontroladores da
família AVR e o “AVR-Assembler-Guide” com exemplos de como começar a programar e
controlar os componentes internos dos microcontroladores AVR.
A maior dificuldade encontrada durante a programação do jogo, não foi a linguagem assembly
como muitos podem pensar, mas sim conhecer o correto funcionamento dos componentes
internos do microcontrolador e como acioná-los via programação, pois isto não está muito claro
na documentação técnica da Atmel e não há muito material disponível em livros ou na Internet
para os casos específicos do projeto.
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 // PORTA -> IN
ldi tp,0xFF
out DDRB,tp // PORTB -> OUT
out DDRD,tp // PORTD -> OUT
- 31-
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 // Time Counter2 = 0
out TCCR2,tp // Iniciar Timer2
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: // Generate random number using TimeCounter2
NOP
in tp,TCNT2 // Lê o valor do TimeCounter2 e armazena em tp
ldi tmp,0x03 // Máscara = 00000011
AND tp,tmp // Mantém somente os dois últimos bits do contador
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
- 32-
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)
- 33-
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
Fig. 14 - Visão do botão de reset e dos conectores de energia
- 34-
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.
CAPÍTULO 5 – VALIDAÇÃO E RESULTADOS
Como o projeto possui poucos componentes externos ao microcontrolador, a montagem e testes
em protoboard foi realizada sem maiores dificuldades. Após os testes realizados no ambiente de
desenvolvimento de software, o programa foi gravado no ATMega16 que utilizando leds e push-
buttons montados no protoboard respondeu conforme o esperado à programação feita. Foi
necessária uma grande quantidade de ajuste no software até se obter bons resultados com a
temporização ao piscar os leds e com a resposta ao pressionamento dos botões pois como a
leitura das portas de entrada e saída do microcontrolador é feita em uma velocidade bastante alta,
foi necessário criar partes específicas de software somente para detectar quando o botão era
pressionado e quando o mesmo era solto pelo jogador evitando assim múltiplas leituras repetidas
enquanto o botão estava pressionado.
A fonte de energia utilizada no projeto, Fig. 15, foi adaptada de um carregador de celular da LG
que fornece uma tensão de 5V com uma corrente de até 1A sendo essa capacidade muito maior
que a utilizada pelos componentes envolvidos.
Fig. 15 – Fonte de energia adaptada
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. 16.
- 35-
Fig. 16 – Crianças jogando durante o evento no colégio Positivo Junior
5.1 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.
- 36-
CAPÍTULO 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.
- 37-
CAPÍTULO 7 - 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.
(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
- 38-
APÊNDICE A – CRONOGRAMA
Mar/07: Pesquisas sobre programação serial do processador 8051 ou similar e
componentes de hardwares necessários, definição da especificação técnica.
Abr/07: Desenvolvimento e testes iniciais do hardware básico, entrega da especificação
técnica.
Mai/07: Desenvolvimento do software e testes iniciais.
Jun/07: Entrega do projeto (monografia) e dos testes preliminares do mesmo.
Jul/07: Desenvolvimento da placa de circuito impresso do módulo microcontrolador,
instalação do módulo microcontrolador com os push-buttons e luzes indicativas em protótipo.
Ago/07: Realização dos testes funcionais de todo o sistema. Apresentação prévia da
implementação do projeto especificado.
Set/07: Correção dos problemas encontrados e melhorias sugeridas.
Out/07: Apresentação do projeto implementado;
Nov/07: Documentação do projeto.
Dez/07: Apresentação e documentação das conclusões e resultados finais.
- 39-
CENTRO UNIVERSITÁRIO POSITIVO - UNICENP
NÚCLEO DE CIÊNCIAS EXATAS E TECNOLÓGICAS - NCET
ENGENHARIA DA COMPUTAÇÃO
LUIS FABIANO CANTERI
JOGO DA MEMÓRIA EMBARCADO
Manual do usuário
CURITIBA 2007
- 40-
LUIS FABIANO CANTERI
JOGO DA MEMÓRIA EMBARCADO
Manual do usuário
Manual do usuário apresentado à disciplina de projeto
final, como requisito parcial à conclusão do curso de
Engenharia da Computação.
Orientador: Adriana Thomé
CURITIBA 2007
- 41-
SUMÁRIO
1 - Introdução................................................................................................................ 05
2 - Instalação ................................................................................................................ 05
3 –Como jogar .............................................................................................................. 05
4 – Prossíveis problemas.............................................................................................. 06
- 42-
LISTA DE FIGURAS
Figura 1 – Conectores de alimentação ......................................................................... 05
Figura 2 - Números ao lado dos botões indicam o nível de dificuldade........................ 06
- 43-
1. Introdução
Este manual tem por objetivo auxiliar o usuário com relação ao manuseio do
equipamento, descrevendo qual é a forma correta para se fazer a ligação do
equipamento e o funcionamento do jogo.
2. Instalação do equipamento
Conectar a fonte de alimentação ao jogo obedecendo as respectivas cores dos
conectores da fonte e dos conectores do jogo conforme figura 1 abaixo:
Figura 1 – Conectores de alimentação
Assim que o equipamento é ligado, automaticamente inicia o processo de
inicialização que é caracterizado por piscar todos os leds ao mesmo tempo e emitir
um bip.
3. Como jogar
a) Após a inicialização, o jogo fica aguardando que seja precionado um botão para
selecionar o nível de dificuldade desejado.
b) Selecione a dificuldade conforme o número que aparece ao lado do botão,
conforme figura 2, este número indica qual a quantidade de posições deve ser
memorizada para se ganhar o jogo. Quanto maior o nível de dificuldade, mais
rápidamente os leds irão piscar.
- 44-
Figura 2 – Números ao lado dos botões indicam o nível de dificuldade
c) Após selecionar um nível de dificuldade o jogo será iniciado piscando uma luz
aleatóriamente, o jogador deve precionar o botão correspondente a luz que
acendeu.
d) Em seguida, irá piscar novamente a luz que acendeu no início e mais uma luz, o
jogador deve precionar os botões correspondentes às luzes que acenderam mas
na ordem em que foram mostradas.
e) A cada vez que o jogador consegue repetir a seqüência de luzes apresentada, o
jogos irá piscar todos as luzes ao mesmo tempo e emitir um bip indicando que a
jogada foi executada com sucesso.
f) Caso o jogador consiga repetir as seqüências apresentadas até a quantidade
definida na seleção de nível de dificuldade, o jogo ficará com as luzes piscando
e mais uma luz azul piscará dentro do jogo indicando que o jogador ganhou.
g) Se em algum momento o jogador precionar os botões de forma diferente do que
as luzes piscaram, então as luzes irão piscar uma de cada vez dando a
impressão de girar em sentido anti-horário e ficará emitindo bips para indicar que
o jogador perdeu a partida.
h) Após ganhar ou perder uma partida, é necessário precionar o botão vermelho de
reset na lateral do jogo, confome figura 2, para iniciar uma nova partida.
4. Possíveis problemas
Caso ao ligar, o jogo não emita nenhum sinal luminoso, verifique se os conectores e
os cabos estão bem firmes ou então remova os conectores e insira-os novamente.
Verifique se há energia elétrica na tomada onde o jogo foi ligado.
- 45-
CENTRO UNIVERSITÁRIO POSITIVO - UNICENP
NÚCLEO DE CIÊNCIAS EXATAS E TECNOLÓGICAS - NCET
ENGENHARIA DA COMPUTAÇÃO
LUIS FABIANO CANTERI
JOGO DA MEMÓRIA EMBARCADO
Manual Técnico
CURITIBA 2007
- 46-
LUIS FABIANO CANTERI
JOGO DA MEMÓRIA EMBARCADO
Manual Técnico
Manual do usuário apresentado à disciplina de projeto
final, como requisito parcial à conclusão do curso de
Engenharia da Computação.
Orientador: Adriana Thomé
CURITIBA 2007
- 47-
SUMÁRIO
1 - Introdução................................................................................................................ 05
2 - Conexões ................................................................................................................ 05
2.1 - Conetor dos botões.................................................................................... 05
2.2 - Conector dos leds ...................................................................................... 06
2.3 - Conector da alimentação ........................................................................... 06
2.4 - Conector do buzzer.................................................................................... 07
3 – Possíveis problemas............................................................................................... 07
- 48-
LISTA DE FIGURAS
Figura 1 – Conector dos botões.................................................................................... 05
Figura 2 – Conector dos leds........................................................................................ 06
Figura 3 – Conector da alimentação............................................................................. 06
Figura 4 – Conector do buzzer ..................................................................................... 07
- 49-
1. Introdução
Este manual tem por objetivo mostrar os detalhes técnicos relacionados com o
equipamento, descrevendo a forma correta de interligação dos módulos do mesmo.
2. Conexões
Existem 4 conectores na placa de circuito:
- Conector dos botões
- Conector dos leds
- Conector da alimentação
- Conector do buzzer
2.1 Conector dos botões
O conector dos botões esta definido conforme a tabela 1 abaixo, seguindo a imagem
da figura 1 :
Cor do fio Finalidade
Fio preto fio terra ou negativo
Fio branco botão 3
Fio cinza botão 2
Fio lilás botão 1
Fio azul botão 0
Fio verde Alimentação +5V
Tabela 1 – tabela do conector dos botões
Figura 1 – Conector dos botões
- 50-
2.2 Conector dos leds
O conector dos leds está definido conforme a tabela 2 abaixo, seguindo a imagem da
figura 2 :
Cor do fio Finalidade
Fio preto botão de reset
Fio marrom Led 0
Fio vermelho Led 1
Fio laranja Led 2
Fio amarelo Led 3
Tabela 2 – tabela do conector dos leds
Figura 2 – Conector dos leds
2.3 Conector da alimentação
O conector de alimentação deve ser ligado respeitando a orientação da figura 3.
Figura 3 – Conector de alimentação
- 51-
2.4 Conector do buzzer
O conector do buzzer deve ser ligado respeitando a orientação da figura 4.
Figura 4 – Conector do buzzer
3. Possíveis problemas
Caso ao ligar, o jogo não emita nenhum sinal luminoso, verifique se os conectores e
os cabos estão bem firmes ou então remova os conectores, revise todas as conexões e
insira-os novamente na placa de circuito.
Verifique se há alimentação chegando no processador.
- 52-
JOGO DA MEMÓRIA EMBARCADO
Luis Fabiano Canteri [email protected]
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
Top Related