60
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

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

Embed Size (px)

Citation preview

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)

- 20-

Fig. 6 – Diagrama em blocos 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