• Nenhum resultado encontrado

Com o letreiro pronto e funcionando, a estrutura foi pintada na cor preta fosca, para que em um ambiente noturno, conseguíssemos ver apenas os LEDs, sem interferência luminosa devido a reflexos que poderiam ser feitos por luzes sobre a estrutura. Uma foto da estrutura final é vista na figura 35.

50

Ao iniciar o letreiro, é preciso escolher uma frase através da conexão com um computador/notebook. Assim que a frase é escolhida, o letreiro passa a apresentar a frase até que receba outra informação de escolha, trocando a frase a ser mostrada.

Os testes de formação das frases foram feitos para 2 tipos de frases coloridas, uma frase grande e outra pequena, com pouca variação entre as velocidades exigidas pelo motor, para que fosse feita a sincronização que causasse o efeito desejado.

O primeiro teste foi feito com as palavras FATEC – SP. Conforme a foto tirada no momento do teste, vista na figura 36.

51

O segundo teste foi feito com uma frase grande, completando a circunferência formada pelo eixo giratório. A frase usada foi TRABALHO DE CONCLUSÃO DE

CURSO! Uma parte da frase é mostrada na figura 37.

Figura 37: Foto do letreiro em funcionamento.

Nos momentos em que as fotos foram tiradas, os textos se apresentavam sem movimentos, devido ao controle da velocidade do motor.

4.1 PROBLEMAS E DIFICULDADES

O principal problema encontrado foi a compatibilidade entre compilador e gravador, devido ao compilador ser antigo e sua ultima atualização ser do ano de 2005, onde não existiam os modelos de 8051 gravados pelo gravador utilizado, que

52

apresentam mudanças na estrutura, como a quantidade de memória RAM. O compilador PEQUI disponibiliza 128 Kbytes de memória RAM e os microcontroladores gravados pelo gravador 8051 USB possuem 256 Kbytes de memória RAM

Essa falta de compatibilidade fez com que nenhuma instrução utilizando a memória RAM funcionasse, afetando o objetivo inicial do trabalho.

O objetivo inicial do trabalho era o usuário do letreiro poder escrever uma frase, que seria reconhecida pelo microcontrolador e o letreiro mostraria o que foi digitado. Para isso, os dados digitados deveriam ser gravados na memória RAM do microcontrolador e depois comparados com os caracteres programados.

O manual do gravador 8051 USB indica que a maioria dos compiladores geram arquivos .HEX incompletos, conforme a imagem da figura 38, retirada do manual.

53

No manual, os fabricantes deram duas alternativas, a primeira é utilizar o compilador BASCOM, porém este compilador é pago e sua compra é feita em dólares. Existe a versão DEMO, mas disponibiliza pouca memória de gravação.

A segunda alternativa é utilizar o programa ICPROG, para compatibilizar o arquivo HEX com o gravador. O ICPROG compatibiliza o arquivo a ser gravado apenas criando outro arquivo HEX maior, compilando a memória de programação usada e o restante não usado em um único arquivo. O ICPROG não compatibiliza a quantidade de memória RAM compilada de 128 Kbytes para uma RAM de 256 Kbytes que é utilizada pelos novos microcontroladores.

Devido à falta de compatibilidade, o objetivo principal foi mudado para frases pré-programadas, que podem ser escolhidas pelo usuário.

54

5. CONCLUSÃO

Neste trabalho foi desenvolvido um letreiro utilizando 7 LEDs, que são girados por um motor permitindo a visualização de um texto devido a uma anomalia na retina humana denominada persistência da retina. Esta anomalia consiste na retenção de um estímulo visual pela retina humana por uma fração de segundo, mesmo após o desaparecimento da fonte de luz que o provocou. Graças a esta anomalia, podemos ver o texto formado a partir da sincronização entre velocidade do motor e controle dos LEDs por um microcontrolador.

O microcontrolador é responsável por controlar os LEDs necessários para formação de cada letra e o tempo que cada um permanece aceso ou apagado.

Foram realizados diversos testes para conseguir uma sincronização perfeita, gerando a visualização das frases de modo que conseguíssemos ver o texto em qualquer ponto da circunferência.

Os cálculos apresentados sobre frequência e velocidade do motor são apenas aproximados, devido a necessidade da modificação da velocidade do motor para cada tipo de combinação das letras, devido ao fato da frequência variar para cada frase formada.

Os circuitos utilizados são simples e não requerem um grande estudo para a utilização dos mesmos. A maior parte dos circuitos utilizados é disponibilizada pelos próprios fabricantes dos componentes, em seus respectivos datasheets.

Durante o desenvolvimento, surgiram pequenos contratempos durante a soldagem dos componentes na montagem da placa de circuito e na montagem da

55

estrutura, pois sendo de plástico, precisou ser colada com solda plástica, para uma melhor fixação das caixas.

Os resultados finais foram satisfatórios, após a escolha da frase, o letreiro começa a apresentar a frase e a visualização é perfeita. O letreiro mostra as frases sem movimento, com movimento horário e com movimento anti-horário que podem ser escolhidos variando a velocidade do motor.

5.1 TRABALHOS FUTUROS

O letreiro pode ser melhorado em alguns setores, como estrutura, comunicação e programação. Com uma estrutura mais rígida e aerodinâmica, poderiam ser feitas sincronizações com velocidades mais altas, sem a preocupação de a velocidade de giro danificar a estrutura.

A comunicação pode ser feita sem utilização de cabos, aumentando a comodidade do usuário, e mudando a frase sem precisar desligar o motor. A comunicação poderia ser feita por WI-FI, simples sinais de rádio frequência, ou por celulares, simplesmente discando o código necessário. Poderiam ser enviados sinais por celulares, tablets e outros equipamentos eletrônicos.

A programação pode ser aperfeiçoada, diminuindo o número de instruções, como o tamanho da programação não foi vista como algo preocupante no decorrer do trabalho, a programação acabou ficando grande, mas pode ser otimizada.

A programação pode ser incrementada, por exemplo, com uma rotina de relógio, para mudar a frase com o passar do tempo ou em determinadas horas.

56

6. REFERÊNCIAS

[1] NICOLOSI, D. E., Microcontrolador 8051 Detalhado, 6ª edição, São Paulo: Érica, 2007. Cap. 1, 2, 3, 8 e 10.

[2] Atmel Corporation. Datasheet do microcontrolador AT89S8253. Disponível em: <http://www.atmel.com/Images/doc3286.pdf>; Acessado em 04/10/2011.

[3] Maxim inovation delivered. Datasheet do circuito integrado MAX232. Disponível em: <http://www.maxim-ic.com/datasheet/index.mvp/id/1798>. Acessado em 29/10/2011.

[4] Instituto Newton C. Braga. Efeito estroboscópico. Disponível em: <http://www.newtoncbraga.com.br/index.php/almanaque/1829-alm248.html>.

Acessado em 15/02/2012.

[5] Cerne tecnologia e treinamento. Manual do gravador 8051 USB. Disponível em: <http://www.cerne-tec.com.br/gp8051usb.pdf>. Acessado em 12/03/2012.

57

7. ANEXO A: PROGRAMA

Neste anexo, estão contidas as linhas de programação principais, uma rotina de frase e uma rotina de letra.

Prog: (rotina que configura a comunicação e recebimento do código digitado) Mov Tmod,#20h; (configura timer 1 p/ MODO 2 (recarga automática))

MOV TH1,#0E6H; (recarrega o timer para taxa de 1200bps)

SETB TR1; (liga o temporizador 1)

MOV IE,#90H; (habilita interrupção pela comunicação)

MOV SCON,#50H; (configura comunicação para MODO 1 (taxa variável))

RECEBE: SJMP $; (loop infinito até receber algum dado pela comunicação)

Org 0023h; (endereço para onde o programa salta quando tem interrupção)

Mov A,Sbuf; (move o dado recebido em SBUF para o acumulador)

CLR RI; (limpa o aviso de interrupção do receptor, habilitando nova recepção)

JMP compara; (salta para a rotina de comparação)

compara: ( rotina que compara o que foi digitado e salta para a frase escolhida) cjne a,#61h,frase2; (compara o que foi digitado, se for diferente de #61, salta para frase2)

jmp inicio; (salta para a frase com código #61)

frase2: cjne a,#62h,frase3; (compara o que foi digitado, se for diferente de #62, salta para frase3, se for igual, salta para a frase escolhida)

jmp inicio1; (salta para a frase com código #62)

frase3: cjne a,#63h,frase4; (compara o que foi digitado, se for diferente de #63, salta para frase4, se for igual, salta para a frase escolhida)

jmp inicio2; (salta para a frase com código #63)

frase4:cjne a,#64h,frase5; (compara o que foi digitado, se for diferente de #64, salta para frase5, se for igual, salta para a frase escolhida)

jmp inicio3; ( pula para a frase com código #64)

frase5: cjne a,#65h,frase6; (compara o que foi digitado, se for diferente de #65, salta para frase6, se for igual, salta para a frase escolhida)

jmp inicio4; (salta para a frase com código #65)

frase6: cjne a,#66h,frase7; (compara o que foi digitado, se for diferente de #66, salta para frase7, se for igual, salta para a frase escolhida)

jmp inicio5; (salta para a frase com código #66)

frase7: ( rotina que acende cada LED com uma cor diferente e chama rotina que envia a informação de código não aceito)

mov p1,#11011110b; mov p2,#00011000b; CLR p3.5;

CLR p3.4; CLR p3.2;

58 CLR p3.3;

call envia; ( chama rotina que envia a informação de código não aceito)

JMP RECEBE; (salta para rotina RECEBE)

INICIO: ( rotina que cria uma das frases) mov r2,#0CCh; ( carrega o registrador r2)

call letraspc; ( chama rotina que cria um espaço de 4 colunas)

call atraso; ( chama rotina que cria um espaço entre as letras)

mov r2,#0CCh; (carrega o registrador r2)

call letraEverde; ( chama a rotina que cria a letra E verde)

call atraso; ( chama rotina que cria um espaço entre as letras)

mov r2,#0CCh; call letraCverde; call atraso; mov r2,#0CCh; call letraPverde; call atraso; mov r2,#0CCh; call letraMverde; call atraso; mov r2,#0CCh; call letraspc; call atraso; mov r2,#0CCh; call letraspc; call atraso; mov r2,#0CCh; call letraspc; call atraso; mov r2,#0CCh; call letraPred; call atraso; mov r2,#0CCh; call letraSred; call atraso; mov r2,#0CCh; call letraco; call atraso; mov r2,#0CCh; call letraCazul; call atraso; mov r2,#0CCh; call letraEazul; call atraso; mov r2,#0CCh; call letraTazul; call atraso; mov r2,#0CCh; call letraAazul;

59 call atraso; mov r2,#0CCh; call letraFazul; call atraso; mov r2,#0CCh; call letraspc; call atraso; mov r2,#0CCh; call letraspc; call atraso; mov r2,#0CCh; call letraspc; call atraso; mov r2,#0CCh; call letraspc; call atraso; mov r2,#0CCh; call letraspc; call atraso; mov r2,#0CCh; call letraspc; call atraso; mov r2,#0CCh; call letraspc; call atraso; mov r2,#0CCh; call letraspc; call atraso; mov r2,#0CCh; call letraspc; call atraso; mov r2,#0CCh; call letraspc; call atraso; mov r2,#0CCh; call letraspc; call atraso; mov r2,#0CCh; call letraspc; call atraso; mov r2,#0CCh; call letraspc; call atraso; mov r2,#0CCh; call letraspc; call atraso; mov r2,#0CCh; call letraspc; call atraso;

60

Durante a execução, são chamados 31 caracteres por frase. A execução fica em

loop infinito, formando a mesma frase repetitivamente até que receba outro código.

letraEamarelo: ( rotina que cria a letra E amarela)

djnz r2,letraEamarelo; ( decrementa r2 para criar um atraso, após isso, acende uma coluna com as próximas instruções)

CLR P1.0; ( acende o LED ligado a porta P1.0)

CLR P2.1; CLR P3.4; CLR P1.1; CLR P2.2; CLR P3.2;

mov r2,#0B0h; ( carrega o registrador r2)

letraEamarelo4: djnz r2,letraEamarelo4; ( decrementa r2 para criar um atraso, que mantem os LEDs acesos)

call apaga;

mov r2,#0B1h; ( carrega o registrador r2)

letraEamarelo33: djnz r2,letraEamarelo33; ( decrementa r2 para criar um atraso, que mantem os LEDs apagados)

CLR P1.0; CLR P2.1; CLR P3.4; CLR P1.1; CLR P2.2; CLR P3.2;

mov r2,#0B0h; ( carrega o registrador r2)

letraEamarelo3: djnz r2,letraEamarelo3; ( decrementa r2 para criar um atraso, que mantem os LEDs acesos)

call apaga;

mov r2,#0B1h; ( carrega o registrador r2)

letraEamarelo22: djnz r2,letraEamarelo22; ( decrementa r2 para criar um atraso, que mantem os LEDs apagados)

CLR P1.0; CLR P2.1; CLR P3.4; CLR P1.1; CLR P2.2; CLR P3.2;

mov r2,#0B0h; ( carrega o registrador r2)

letraEamarelo2: djnz r2,letraEamarelo2; ( decrementa r2 para criar um atraso, que mantem os LEDs acesos)

call apaga;

mov r2,#0B1h; ( carrega o registrador r2)

letraEamarelo13: djnz r2,letraEamarelo13; ( decrementa r2 para criar um atraso, que mantem os LEDs apagados)

CLR P1.6; CLR P1.3; CLR P1.0;

61 CLR P2.1; CLR P2.4; CLR P2.7; CLR P3.4; CLR P1.5; CLR P1.7; CLR P1.1; CLR P2.2; CLR P2.5; CLR P3.6; CLR P3.2;

mov r2,#0B0h; ( carrega o registrador r2)

letraEamarelo1: djnz r2,letraEamarelo1; ( decrementa r2 para criar um atraso, que mantem os LEDs acesos)

call apaga; ( chama rotina que apaga todos os LEDs)

Documentos relacionados