identificador de chamadas enviadas mariano a. hexselsiaibib01.univali.br/pdf/mariano hexsel.pdf ·...
TRANSCRIPT
UNIVERSIDADE DO VALE DO ITAJAÍ
CENTRO DE EDUCAÇÃO SÃO JOSÉ
CURSO DE ENGENHARIA DE COMPUTAÇÃO
TRABALHO DE CONCLUSÃO DE CURSO
IDENTIFICADOR DE CHAMADAS ENVIADAS, COM
CONTADOR DE TEMPO DE CHAMADAS
MARIANO ALBERTO HEXSEL
São José, junho de 2004.
MARIANO ALBERTO HEXSEL
IDENTIFICADOR DE CHAMADAS ENVIADAS, COM
CONTADOR DE TEMPO DE CHAMADAS
Trabalho de Conclusão de Curso apresentado à banca examinadora do Curso de Engenharia
de Computação na Universidade do Vale do Itajaí - UNIVALI, Centro de Educação São José,
como requisito parcial para obtenção do título de Engenheiro de Computação.
Orientador: Prof. Alejandro Rafael Garcia Ramirez,
Dr. M. Eng.
São José, junho de 2004.
ii
MARIANO ALBERTO HEXSEL
IDENTIFICADOR DE CHAMADAS ENVIADAS
Este Trabalho de Conclusão de Curso foi julgado adequado como requisito parcial para a
obtenção do título de Engenheiro de Computação, tendo sido aprovado pelo Curso de
Engenharia de Computação, Centro de Educação São José da Universidade do Vale do Itajaí
(SC).
São José, 20 de dezembro de 2004.
Prof. Esp. Alecir Pedro da Cunha Prof. Dr.M.Eng. Raimundo Celeste Guizoni Teive Responsável pela Coord. do TCC Coordenador do Curso
Apresentada à Banca Examinadora formada pelos professores:
Orientador Prof. DR.M.Eng. Alejandro Rafael Garcia Ramirez
Prof. Esp. Eng. Walter Antonio Gontijo, membro da banca examinadora
Prof. M. Eng. Paulo Roberto Oliveira Valim, membro da banca examinadora
iii
DEDICATÓRIA
Gostaria de dedicar este trabalho aos meus pais que lutaram muito para
que eu aqui chegasse, ultrapassando todas as dificuldades e nenhuma vez
negando-me a busca pelo conhecimento. Dedico também a minha namorada que
me incentivou muito e compreendeu todos os momentos não pude vê-la em
virtude deste projeto.
iv
AGRADECIMENTOS Primeiramente quero agradecer a Deus nosso criador onipotente que me deu condições para
alcançar este objetivo. Quero agradecer também a minha mãe, minha madrasta, meu pai e meu
padrasto que colaboraram como puderam em todos os momentos que precisei de suas ajudas.
Agradeço também a minha namorada que me esperou e continua me esperando pacientemente
para que termos condições de casar. Aos meus amigos Carlos Romeo Tascheck, Cassius Jonath
Stein, Juarez Williann Vicenzi, Cleidson Schlatter, Eduardo Correa Ivanise Neves e Denis
Venturini, também agradeço ao pessoal da Wizard São José que me ajudou, um agradecimento
especial pelo carinho e amizade jamais esquecidos durante essa minha caminhada rumo a
graduação. Não esquecendo dos outros amigos obviamente, como Cássia Giseli Oliveira, Rafinha,
João Paulo, Thiago Marcarini, Anna Cristina e todos os outros que não me esqueci, mas que não
poderei citar aqui por motivos de limitações de páginas. Agradeço também aos colegas de
faculdade e as amizades verdadeiras feitas neste período, como meu grande parceiro Rael Carlos
Wanzuit, Ramon Marcelo Juttel, Rodrigo Martins Santana, Anderson Toazza, Ângelo Fernando
Probst, Carlos Alberto Silva, Carlos Alberto Cipriano Korovsky, Luís Fernando Bortolini, Thiago
Kuroski, Pablo Ricardo Danker, Ramon Thiago da Silva Kissner, Rodrigo de Magalhães, Cláudio
Roberto Tenfen, Feijão, Kazoolo, Rodrigo Brasil, os amigos do futebol, Guto, Simão, Rodrigo
Webber, Léo, Renan. É importante lembrar dos mestres e doutores da UNIVALI-SJ que
colaboraram com minha luta, como o coordenador Raimundo Celeste Ghizoni Teive, Luciano
Silva, Marcio Santos, Milton José Cinelli, Alessandro Müeller, Marcelo Maia Sobral quem me
deu a idéia deste trabalho, e principalmente ao meu orientador Alejandro Rafael Garcia Ramirez
que não só me ajudou com sua sabedoria técnica, mas também com suas frases de motivação e
bom humor para tratar os problemas encontrados ao longo do caminho. Outras amizades
importantes feitas na UNIVALI-SJ como a Viviane Frare, Cris, Antonia, Lageano, Rafael Darosci
Henrique, Alerrandro, Alemão, Cleber, Benthien e outros que não terei páginas suficientes para
citar. Agradeço também a Ana Karine Oliveira Rodrigues quem me incentivou muito no princípio
da faculdade e não deixou que eu desistisse. Agradeço também a comissão de formatura, Mabel,
Roberta Turnes, Alex do Espírito Santo, que lutou muito para que fizéssemos o melhor possível
pela nossa festa. E a todas as outras pessoas que colaboraram de qualquer forma, como Osvaldo
Luciano da Intelbras que colaborou com meu projeto, a Loiva, Suzy e Dani. Agradeço as minhas
vizinhas Débora, Mary, Andressa, Cássia e Nani que sempre que podiam me ajudavam com
burocracias da faculdade. Agradeço também a todas as outras pessoas que não pude citar.
v
SUMÁRIO
1 INTRODUÇÃO .............................................................................................................................1
1.1 CONTEXTUALIZAÇÃO .............................................................................................. 1
1.2 OBJETIVOS .............................................................................................................. 1
1.2.1 Objetivo Geral ................................................................................................ 1
1.2.2 Objetivos Específicos ...................................................................................... 1
1.3 JUSTIFICATIVA ........................................................................................................ 2
2 FUNDAMENTAÇÃO TEÓRICA................................................................................................4
2.1 HISTÓRICO .............................................................................................................. 4
2.1.1 Comunicação.................................................................................................. 4
2.1.2 Telégrafo ........................................................................................................ 5
2.1.3 O Telefone ...................................................................................................... 6
2.1.4 O Início da Telefonia ...................................................................................... 9
2.2 CARACTERÍSTICAS................................................................................................. 10
2.2.1 O Aparelho Telefônico.................................................................................. 10
2.3 O SISTEMA DE TELEFONIA ...................................................................................... 12
2.4 APLICAÇÕES.......................................................................................................... 13
2.5 DECODIFICAÇÃO ................................................................................................... 13
2.6 BINA ................................................................................................................... 14
2.7 CONTAGEM DE PULSOS .......................................................................................... 15
2.8 MICROPROCESSADORES ......................................................................................... 16
2.8.1 Sistemas seqüenciais síncronos (Clock) ........................................................ 17
2.8.2 Diagrama de blocos de um sistema genérico com microprocessador ............ 17
2.9 SET DE INSTRUÇÕES............................................................................................... 19
2.10 MEMÓRIAS............................................................................................................ 19
2.10.1 Expansão de memória................................................................................... 20
2.11 COMUNICAÇÃO SERIAL .......................................................................................... 20
2.12 MICROCONTROLADORES........................................................................................ 21
2.12.1 Descrição ..................................................................................................... 21
2.12.2 Diagrama de Blocos de um microcontrolador............................................... 21
2.12.3 Microcontrolador 89C51 .............................................................................. 22
2.12.4 Características gerais................................................................................... 23
vi
2.12.5 Programação dos microcontroladores .......................................................... 23
2.12.6 Alguns fabricantes de Microcontroladores.................................................... 24
2.13 CONVERSORES A/D-D/A ....................................................................................... 24
2.13.1 Conversores Analógicos-Digitais (A/D). ....................................................... 25
2.13.2 Conversores Digitais-Analógicos (D/A). ....................................................... 27
2.14 DISPLAY DE CRISTAL LÍQUIDO (LCD)..................................................................... 29
2.15 RELÉ..................................................................................................................... 31
2.16 OPTOACOPLADORES .............................................................................................. 33
2.17 REAL TIME CLOCK DS1307Z ................................................................................ 34
2.18 PROTOCOLO I2C.................................................................................................... 35
3 DESENVOLVIMENTO..............................................................................................................38
3.1 DECODIFICADOR CM8870 ..................................................................................... 40
3.2 COMUNICAÇÃO COM O LCD .................................................................................. 43
3.3 TELEFONE NO GANCHO OU FORA DO GANCHO ....................................................... 45
3.4 INÍCIO E TÉRMINO DA LIGAÇÃO ............................................................................. 45
3.5 COMUNICAÇÃO SERIAL ......................................................................................... 47
3.6 PROTOCOLO I2C.................................................................................................... 49
3.7 MEMÓRIA 24C02 .................................................................................................. 50
3.8 REAL TIME CLOCK DS1307................................................................................... 53
4 RESULTADOS ............................................................................................................................57
4.1 HARDWARE........................................................................................................... 57
4.2 FIRMWARE ............................................................................................................ 58
4.3 SOFTWARE ............................................................................................................ 62
5 CONCLUSÕES............................................................................................................................64
6 PERSPECTIVAS.........................................................................................................................65
7 REFERÊNCIAS BIBLIOGRÁFICAS ......................................................................................66
8 ANEXOS ......................................................................................................................................68
8.1 ANEXO 1 ............................................................................................................... 68
8.2 ANEXO 2 ............................................................................................................... 71
8.3 ANEXO 3 ............................................................................................................... 75
8.4 ANEXO 4 ............................................................................................................... 78
8.5 ANEXO 5 ............................................................................................................... 81
vii
LISTA DE FIGURAS FIGURA 1 – TELÉGRAFO. (ENCARTA, 1996). .........................................................................................5
FIGURA 2 – TELEFONES. (ENCARTA, 1996)...........................................................................................7
FIGURA 3 – TELEFONE DE ALEXANDER GRAHAM BELL (1975). (ENCARTA 1996)...............................8
FIGURA 4 - TELEFONISTA EM PORTO FELIZ/SP – 1919. (MUSEU DO TELEFONE, 2004)...........................9
FIGURA 5 – DIAGRAMA DE BLOCOS DE UM APARELHO TELEFÔNICO. (ALENCAR, 2002, P.7). ............11
FIGURA 6 – TECLADO DE UM TELEFONE MULTIFREQÜENCIAL. (ALENCAR, 2002, P.8). ......................12
FIGURA 7 – ESQUEMA DE MONTAGEM DO DECODIFICADOR MT8870D. (ELETRONICA, 2004). ........14
FIGURA 8 – PROCEDIMENTO DE UMA LIGAÇÃO COM BINA. (NICOLAI, 2001). MODIFICADO. ............15
FIGURA 9 – DIAGRAMA DE BLOCOS DO MODELO DE VON NEUMANN....................................................16
FIGURA 10 – DIAGRAMA DE BLOCOS DE UM SISTEMA GENÉRICO COM MICROPROCESSADOR. (SILVA
JÚNIOR, 1998, P.03). ....................................................................................................................18
FIGURA 11 – DIAGRAMA DE BLOCOS DOS SISTEMAS BÁSICOS DE UM MICROCONTROLADOR E SUAS
LIGAÇÕES INTERNAS. (MIKROELEKTRONIKA, 2004) ..............................................................22
FIGURA 12 – REPRESENTAÇÃO DO CONVERSOR A/D. ............................................................................26
FIGURA 13 – CONVERSOR ANALÓGICO-DIGITAL. (IDOETA E CAPUANO, 2000, P. 329). ..................26
FIGURA 14 – EXEMPLO DE ONDA SENOIDAL CONVERTIDA DE ANALÓGICO PARA DIGITAL. (IDOETA E
CAPUANO, 2000, P. 329). ............................................................................................................27
FIGURA 15 – REPRESENTAÇÃO DO CONVERSOR D/A. ............................................................................28
FIGURA 16 – CONVERSOR DIGITAL-ANALÓGICO COM RESISTORES. (IDOETA E CAPUANO, 2000, P.
301)................................................................................................................................................28
FIGURA 17 – DISPLAY DE CRISTAL LÍQUIDO...........................................................................................30
FIGURA 18 – O QUE ACONTECE DENTRO DO RELÉ DEPOIS DA INDUÇÃO................................................31
FIGURA 19 – EXEMPLO DE RELÉ. (RELÉ UP-DW PER TAPPARELLE, 2004). ...................................31
FIGURA 20 – ESTRUTURA INTERNA DE UM RELÉ. (RELÉ UP-DW PER TAPPARELLE, 2004). ..........32
FIGURA 21 – ESTRUTURA INTERNA DE UM RELÉ NP-CL-1A181. (LERCHER, 2003). .........................32
FIGURA 22 – ESTRUTURA INTERNA DO FOTO TRANSISTOR TIL 111. (TEXAS INSTRUMENTS, 2004).
.......................................................................................................................................................33
FIGURA 23 – ESTUTURA INTERNA DO FOTO TRIAC MOC 3021. (TEXAS INSTRUMENTS, 2004). .....34
FIGURA 24 – FOTO DE UM REAL TIME CLOCK DS1307...........................................................................34
FIGURA 25 – REPRESENTAÇÃO DE COMO FUNCIONAM AS MENSAGENS NO PROTOCOLO I2C. ...............37
FIGURA 26 – DIAGRAMA DE COMUNICAÇÃO ENTRE OS COMPONENTES DO PROJETO. ...........................39
FIGURA 27 – IDENTIFICAÇÃO DOS PINOS DO DISPOSITIVO 8870. ...........................................................40
FIGURA 28 – LIGAÇÕES ENTRE O DECODIFICADOR DTMF E O MICROCONTROLADOR 8051 DO MÓDULO.
.......................................................................................................................................................41
FIGURA 29 – DIAGRAMA DE BLOCOS DO DECODIFICADOR DTMF. (ELFA, 2004). ...............................41
viii
FIGURA 30 – LCD EM MODO DE 8BITS. ..................................................................................................43
FIGURA 31 – LCD EM MODO DE 4BITS. ..................................................................................................43
FIGURA 32 – FIGURA QUE DEMONSTRA CIRCUITO ELÉTRICO ENTRE O OPTOACOPLADOR E
MICROCONTROLADOR 8051...........................................................................................................47
FIGURA 33. CIRCUITO DE MONTAGEM DO MAX 232. ............................................................................48
FIGURA 34 – ESQUEMA ELÉTRICO DA LIGAÇÃO ENTRE O 8051 E A MEMÓRIA 24C02............................52
FIGURA 35 – ESQUEMA ELÉTRICO DA LIGAÇÃO ENTRE O 8051 E O RTC 1307. .....................................53
FIGURA 36 – PROJETO ELÉTRICO DO HARDWARE...................................................................................58
FIGURA 37 – FLUXOGRAMA DE FUNCIONAMENTO DO PROGRAMA EXECUTADO PELO
MICROCONTROLADOR....................................................................................................................59
FIGURA 38 – FLUXOGRAMA DE FUNCIONAMENTO DA INTERRUPÇÃO EXTERNA 1.................................60
FIGURA 39 – EXECUÇÃO DA INTERRUPÇÃO SERIAL. ..............................................................................61
FIGURA 40 – FOTO COM TODOS OS COMPONENTES DO PROJETO INTEGRADOS. .....................................61
FIGURA 41 – TELA DE LOGIN E SENHA DE USUÁRIO ...............................................................................62
FIGURA 42 - TELA PRINCIPAL DO PROGRAMA. .......................................................................................62
FIGURA 43 – BUSCA EFETUADA COM PARTE DO NÚMERO TELEFÔNICO.................................................63
FIGURA 44 – RESULTADO DE BUSCA POR DATA. ....................................................................................63
LISTA DE QUADROS QUADRO 1 – FREQÜÊNCIAS DE CADA TECLA DE UM TELEFONE. (CRAM, 2004)...................................12
QUADRO 2. QUADRO DE SAÍDA ANALÓGICA (IDOETA E CAPUANO, 2000, P. 301). ..........................29
QUADRO 3 – QUADRO DE IDENTIFICAÇÃO DOS PINOS DO LCD. ............................................................30
QUADRO 4 – QUADRO DE IDENTIFICAÇÃO DOS PINOS DO LCD. ............................................................44
QUADRO 5 – ILUSTRAÇÃO DE COMO É MONTADO O ENDEREÇO DA MEMÓRIA 24C02. ..........................52
QUADRO 6 – ILUSTRAÇÃO DE COMO É MONTADO O ENDEREÇO DO RTC 1307......................................54
QUADRO 7. QUADRO DEMONSTRATIVO DE DIGITO E DIAS DA SEMANA CORRESPONDENTES. ...............54
QUADRO 8. QUADRO DE REGISTRADORES DO REAL TIME CLOCK DS1307. (DS1307) .........................55
ix
RESUMO Este projeto foi desenvolvido motivado pela não existência de um equipamento que
permita contabilizar e identificar as chamadas telefônicas efetuadas na rede de telefonia fixa.
O projeto desenvolvido consiste em identificar as chamadas enviadas e contabilizar o
tempo destas, sendo que são armazenados os dígitos discados, data e hora do início e término
de cada ligação.
Com essa finalidade foi desenvolvido um sistema hardware-software capaz de
armazenar os dados sobre as ligações efetuadas no sistema de hardware. Um software
também foi desenvolvido para armazenar e efetuar pesquisas nas informações obtidas do
hardware.
No projeto do hardware foram utilizados diversos recursos tecnológicos, como o
microcontrolador, optoacoplador, relógio de tempo real, memória EEPROM, display de cristal
líquido, comunicação serial, decodificador de freqüência múltipla de dois tons (DTMF) e um
computador pessoal.
A programação do microcontrolador é feita na linguagem assembly e a programação
em alto nível em Delphi, usando a linguagem pascal.
O resultado do projeto é um protótipo que permite armazenar as informações das
chamadas efetuadas na memória EEPROM do hardware, tais como o número telefônico e os
dados de início e término da ligação. Também é possível transferir essas informações ao
computador pessoal pelo software, armazenando-as em um arquivo texto onde podem-se
efetuar consultas aos números discados e as chamadas efetuadas dentro de um certo período.
x
ABSTRACT
Due to the fact there isn´t an equipament wich allows identify and account for the
made phone calls, to the users of fixed lines, a project was brought up.
The work consists of identifying the sent calls, to monitorize the time and to store the
called number, start and end of the call.
For that pourpouse was developed a system hardware-software able to store data
about made calls in a hardware system. A software was also developed to store data run
searches from the data stored in the hardware.
To make the hardware a lot of tecnological resources were used, such as a
micocontroler, optoacoplador, real time clock, memo EEPROM, liquid cristal display, serial
comunication, dual tone multiple frequency decoder, and a personal computer.
The setting of microcontroler is in assembly language and the program high level in
Delphi, using the pascal language.
The result of this project is a prototic that allows to store data in the EEPROM
memory in the hardware, which telefone number and the start and end fo the calls. It is also
possible to transfer this data to the personal computer via the software, storing this data in a
text file. Making it possible to run searches of the called numbers, and also the made calls
within a period of time.
1
1 INTRODUÇÃO
1.1 Contextualização
O trabalho proposto consiste em um hardware1 identificador de chamadas efetuadas.
Esse identificador terá uma memória limitada, onde armazenará alguns dados da ligação,
como por exemplo, dia, mês, ano, hora de início, hora do término da ligação e o número
discado.
Um software2 criado em linguagem de alto nível fará a comunicação com o hardware
para copiar os dados da memória para o computador pessoal (PC3), gerenciando assim a
memória do hardware. Esses dados serão armazenados para futuras manipulações. O
software, além de gerenciar a memória no hardware, terá algumas atividades incorporadas.
Por exemplo: organizará as ligações por data, informará o tempo de duração da chamada,
dentre outras funções.
1.2 Objetivos
1.2.1 Objetivo Geral
Projetar um sistema (hardware e software) capaz de identificar as chamadas efetuadas
via rede de telefonia fixa e armazenar os dados relevantes a essas chamadas.
1.2.2 Objetivos Específicos
Projetar e montar o circuito identificador de chamadas efetuadas (hardware) baseado
em microcontrolador;
• Realizar a programação do microcontrolador;
• Desenvolver um software que se comunique com o hardware projetado;
• Implementar a comunicação entre o hardware e o software;
• Testar o sistema desenvolvido;
1 Parte física do projeto. 2 Parte lógica do projeto. 3 Personal Computer ou Computador Pessoal.
2
1.3 Justificativa
O curso de Engenharia de Computação tem como objetivo maior, formar profissionais
capazes de integrar o hardware ao software. Por esse motivo, os futuros engenheiros de
computação, tendem a escolher um trabalho de conclusão de curso que propicie alcançar este
objetivo.
Durante o curso de engenharia de computação surgiu a motivação de criar um
hardware e um software que fosse capaz de identificar as chamadas telefônicas efetuadas pela
rede de telefonia fixa e armazenar alguns dados relevantes. Dados esses, que possibilitassem
aos usuários, a garantia de que a cobrança de sua conta contenha apenas números telefônicos
que realmente foram discados e que o tempo das ligações seja condizente com o tempo
utilizado, isto é, que não houvesse erro na cobrança de ligações.
Essas funcionalidades foram identificadas como: contador de tempo da chamada
efetuada e a obtenção da data e hora de início e término da ligação, podendo assim gerar-se
um relatório para que o usuário pudesse conferir sua conta telefônica real com a conta
telefônica enviada pela operadora. Dessa forma, é necessário ter um hardware que obtém os
dados da linha telefônica, e um software, que objetiva obter os dados do hardware em
questão, e processá-los. Torna-se claro que neste projeto teremos o objetivo do curso
alcançado.
Atualmente, encontramos em muitas empresas, bancos, supermercados, e até mesmo
em casa, aparelhos que se comunicam com o computador, integrando o hardware ao software.
Alguns exemplos podem ser citados como: fornos de alta precisão que emitem sinais à
computadores para que se possa identificar detalhes da queima de uma porcelana, ou de
algum tipo de piso cerâmico. Ou mesmo no banco, quando utilizamos o caixa eletrônico o
qual transmite informações do teclado ao computador, e do computador para a “porta de saída
de dinheiro”; ou ainda a entrada de envelope, onde se faz a leitura do código de barras do
envelope e também a impressão de um extrato ou confirmação de depósito. Também se
presencia as leitoras de código de barra nos supermercados, que enviam os dados para o
computador, o qual insere o produto na lista de compras. Em casa, quando se atualiza um
Palm4 (computador de mão), sincronizando o software do computador com o computador de
mão. Este é outro exemplo de comunicação de aparelhos com o computador.
4 Computador de mão.
3
Constatamos que não somos os únicos que nos sentimos lesados em relação as
operadoras de telefonia locais, no ano de 2003 a empresa que mais obteve reclamações no
Brasil junto ao PROCON5, foi a empresa de telefonia fixa do estado de São Paulo. Depois da
privatização do serviço de telefonia brasileiro, as reclamações em torno do serviço
aumentaram significativamente.
Com problemas nessa área ocorrendo no Brasil, é importante desenvolver um projeto
como este, a fim de possibilitar ao usuário da telefonia fixa um instrumento que possa ajudá-
lo a detectar algum engano da companhia telefônica caso ocorra. Por isso nosso projeto
proposto como trabalho de conclusão de curso, poderia tornar-se um produto com mais
funções, e com isso, alcançar o mercado para ser comercializado.
Deseja-se que o produto que será desenvolvido atenda às necessidades, com baixo
custo, para que qualquer usuário de telefonia fixa possa adquiri-lo. Exatamente por esse
motivo estamos utilizando componentes de baixo custo, como o microcontrolador 8051, por
exemplo, enquanto poderíamos fazer este mesmo projeto utilizando um DSP6 , ou outro
microprocessador/microcontrolador mais robusto e com mais funcionalidades como os da
Zilog, por exemplo.
5 Órgão de defesa do consumidor. 6 Digital Signal Processing ou Processador Digital de Sinais.
4
2 FUNDAMENTAÇÃO TEÓRICA
2.1 Histórico
2.1.1 Comunicação
Comunicação é o processo de receber e transmitir idéias, informações e mensagens. A
informação tem se aperfeiçoado ao longo do tempo. Gestos, o desenvolvimento da linguagem,
são os primórdios da comunicação, que chegou ao que temos nos dias de hoje, computadores,
redes, Internet, telefone, fax, teleconferências, telefones celulares, rádio, televisão e outros.
Comunicação é o ato ou efeito de emitir, transmitir e receber mensagens por meio de
métodos e/ou processos convencionados, quer através da linguagem falada ou escrita quer de
outros sinais, signos ou símbolos, quer de aparelhamento técnico especializado, sonoro e/ou
visual. (AURÉLIO,1980, p. 449).
Comunicação também é a transmissão de informação de um ponto a outro,por meio de
sinais em fios, ondas eletromagnéticas, sinais de luz, ou outros tipos de sinais.
Os animais têm necessidade de se comunicar e utilizam meios diversos. A abelha, por
exemplo, dança para indicar o caminho onde encontrou néctar. A dança é tão precisa que
existem movimentos específicos para indicar a distância que estão as flores e também a
orientação pelo sol, a partir da angulação que a abelha apresenta na dança. Golfinhos
desenvolveram sinais de voz, e com isso se comunicam por longas distâncias através da água.
(ENCARTA 1996).
Segundo Museu de Eletricidade, a raça humana utilizou também o fogo para emitir
sinais de fumaça a fim de comunicar-se, mas ainda limitava a comunicação a pequenas
distâncias.
Durante a evolução humana foram desenvolvidos alfabetos. Já nas cavernas foram
encontrados vários desenhos que descreviam o que acontecia. Existiram mais tarde os dialetos
egípcios, escritos em papiros, gregos, romanos, hebreus e outros mais desenvolvidos e
completos. Segundo Encarta (1996) existem cerca de 3000 dialetos diferentes em todo o
mundo hoje em dia.
Conforme Alencar (2002, p.1), a primeira forma de extrapolar a limitação do alcance
da voz humana, que se dava pela potência da voz do locutor e pela sensibilidade auditiva do
ouvinte, foi o telefone de cordel.
5
Com o avanço da escrita, a comunicação passou a alcançar distâncias maiores. As
informações escritas passaram a viajar pelo país e até mesmo entre países, alcançando longas
distâncias e espalhando informações e conhecimentos e de acordo com Encarta (1996), assim
surgiram os serviços postais, que transmitiam informações através de estafetas, que
transitavam pelos países a cavalo, ou mesmo em navios para maiores distâncias.
Com o avanço tecnológico, a invenção dos motores, aviões, trens, tornou melhores os
serviços postais, que podem entregar as informações enviadas pelo remetente, em menor
tempo ao destinatário. Existem atualmente os meios eletrônicos e outros já citados no texto.
2.1.2 Telégrafo
O telégrafo de Morse foi o primeiro mecanismo de comunicação de informações de
longa distância, mas até que seu telégrafo fosse constituído, passou-se por uma evolução.
Primeiramente foram desenvolvidos outros meio de comunicação para curtas distâncias.
Nos princípios da década de 1790 o engenheiro francês Claude Chappe, inventou a
palavra telégrafo (do grego, “escrever à distância”), e seu projeto consistia em transmitir
letras, palavras e frases através de um código visualizado a partir de 3 réguas de madeira
articuladas colocadas na parte alta de um poste ou edifício. (MUSEU DE ELETRICIDADE,
2004).
Segundo Museu de Eletricidade (2004), posteriormente foram inventados os telégrafos
a agulha, primeiramente o de 5 e mais tarde o de 2 agulhas.
Segundo Encarta (1996), o primeiro aparelho moderno de telecomunicação foi o
telégrafo, inventado por Samuel Morse em 1837 e patenteado em 1840. Segue a seguir a
figura 1 do telégrafo de Morse.
Figura 1 – Telégrafo. (ENCARTA, 1996).
6
Podemos considerar este como o grande marco no avanço da comunicação de longa
distância. Este foi o primeiro método que não necessitava de deslocamento humano para que
informações fossem transmitidas de um ponto a outro, sendo estes pontos inalcançáveis à
visão humana.
O telégrafo Morse consistia de um transmissor, cabo e um receptor. O transmissor era
formado por uma pilha e uma alavanca que, quando pressionada, fechava o circuito e permitia
a passagem da corrente pelo cabo até o receptor. Este continha um eletroímã que, ao receber a
corrente, atraía uma roda embebida em tinta, colocando-a em contato com um rolo de papel,
assim, pintava pontos e traços conforme a duração dos impulsos elétricos. (CTRL+C, 1999).
Esses pontos e traços eram a base de um código binário que, combinados de diferentes
maneiras, conseguiam representar todas as letras e sinais do alfabeto, este foi rapidamente
aceito em todo o mundo - foi o surgimento do "Código Morse".
A velocidade sempre foi um problema a se enfrentar. Os primeiros telegramas eram
enviados a duas mil palavras por hora. Com o advento do chamado "Multiplicador Baudet"
chegariam a sete mil, alcançando seu ápice em torno de 20 mil palavras por hora. Isto dá cerca
de 20 caracteres por segundo, o que não chega aos pés da média atual, de cerca de 33,6 mil
caracteres por segundo, em um modem comum, isto sem contar com o advento da ADSL e
outros meios como as redes ATM e outros. (CTRL+C, 1999).
Para se ter uma idéia da aceitação e rápida expansão do telégrafo, em 1866 já
funcionava um cabo transatlântico unindo telegraficamente a Europa e a América. Em 1878,
uma mensagem enviada pela Rainha Vitória ao presidente dos Estados Unidos, James
Buchanan, levou "apenas" 17 horas e 40 minutos para chegar de uma ponta a outra do cabo.
(CTRL+C, 1999).
2.1.3 O Telefone
Embora o Código Morse tenha marcado o avanço da comunicação rápida em longa
distância utilizando o telégrafo, existia a limitação de poder enviar apenas letra por letra.
Segundo Alencar (1998, p.1), “antes da invenção do telefone, a distância alcançada
pela voz humana era limitada pela potência da voz do locutor – e pela sensibilidade auditiva
do ouvinte. Os princípios sobre os quais se baseia o telefone foram descobertos por Alexandre
Graham Bell, em 1875.”
Em 1875 surgiu o telefone (figura 2), criado por Alexander Graham Bell.
7
Figura 2 – Telefones. (ENCARTA, 1996).
O telefone é um instrumento de comunicação designado a transmitir a fala e outros
sons entre dois pontos distantes por meio da eletricidade.
Segundo o Museu do Telefone (2004), o telefone contém um diafragma que vibra de
acordo com as ondas recebidas. A vibração é convertida em impulsos elétricos e transmitida
para o receptor. O receptor, por sua vez, converte os impulsos elétricos em som novamente.
Em 1854 Charles Bourseul, um inventor francês, sugeriu que as vibrações que a fala
provocava num diafragma, poderia conectar e desconectar circuitos elétricos, produzindo
vibrações similares em outro lugar, onde o som original poderia ser reproduzido. Poucos anos
depois, o físico alemão Johann Philip Reis inventou um instrumento que transmitia tons
musicais, mas não podia reproduzir a fala. Alexander Graham Bell, inventor americano,
produziu o primeiro telefone capaz de transmitir e receber a fala humana com certa qualidade.
(ENCARTA, 1996).
A seguir, veremos o telefone de Alexander Graham Bell na figura 3.
8
Figura 3 – Telefone de Alexander Graham Bell (1975). (ENCARTA 1996).
O aparelho transmissor e receptor eram idênticos. O transmissor convertia as
vibrações da fala em sinais elétricos, que eram transmitidos através de um fio até o outro
aparelho, no final do fio. Este por sua vez convertia os sinais elétricos novamente em
vibrações, reproduzindo o som original. (ENCARTA 1996).
Posteriormente, foram inventadas as centrais, onde uma telefonista recebia as ligações
e conectava os fios para que a pessoa que ligou pudesse conversar com a pessoa que desejava,
como na figura 4 a seguir. Este sistema era muito demorado, e por isso, dispositivos
mecânicos e eletrônicos foram desenvolvidos para solucionar esse trabalho. Os novos
dispositivos permitiram que a telefonista fosse substituída por dispositivos que faziam o
trabalho automaticamente.
9
Figura 4 - Telefonista em Porto Feliz/SP – 1919. (Museu do Telefone, 2004).
Com esses equipamentos tornou-se necessário discar o número de telefone que se
desejava chamar, o que não acontecia antes, quando tirava-se o telefone do gancho, e se
falava o número discado para a telefonista, que fazia as conexões necessárias. Com a adição
desses dispositivos, os números discados eram então, convertidos em freqüências audíveis e
transmitidos. Com essas informações, os equipamentos já se conectavam com o número
telefônico correto. Assim centrais telefônicas foram sendo difundidas e melhoradas a cada
dia. (MUSEU DO TELEFONE, 2004).
2.1.4 O Início da Telefonia
A telefonia tem melhorado sua tecnologia. Passamos dos primitivos equipamentos em
que Bell fez suas experiências, para posteriormente utilizarmos telefones analógicos, e mais
tarde chegarmos aos nossos modernos telefones digitais. A telefonia não parou de melhorar.
Temos também a história dos telefones celulares, que iniciaram no seu modo analógico e,
posteriormente, chegaram ao modo digital. (ALENCAR, 1998, p.1).
As centrais telefônicas são também um avanço tecnológico. Essas também migraram
da telefonia analógica para a digital e hoje em dia nos fornecem muitas informações, como
10
por exemplo, a data, hora, tempo de duração das ligações, estatísticas de uso do telefone, entre
outras.
Estamos falando apenas da telefonia fixa, sem entrarmos no mérito da telefonia
celular. A telefonia fixa teve um avanço tecnológico tão grande que, podemos usufruir desde
secretárias eletrônicas, identificadores de chamadas, telefones digitais com discagem rápida,
com sistema siga-me, onde você programa seu telefone para discar para outro telefone onde
você esteja por exemplo, e outras tantas funcionalidades que podemos utilizar.
2.2 Características
Algumas características importantes sobre a telefonia serão tratadas neste capítulo,
para podermos compreender como funcionava e como funciona atualmente o telefone e o
sistema de telefonia.
2.2.1 O Aparelho Telefônico
O aparelho telefônico é o responsável pela origem e recepção de ligações.
As funções de um aparelho telefônico são:
• Solicitar o uso do sistema telefônico (quando se retira o telefone do gancho,
por exemplo);
• indica se o sistema está pronto para uso, por meio da recepção do tom de
discar;
• envia o número do telefone chamado ao sistema;
• indica o estado da ligação, por meio de sinalização acústica;
• acusa o recebimento de uma ligação, com o toque da campainha;
• converte a voz para sinais elétricos, para transmissão;
• ajusta automaticamente as mudanças de potência;
• transmite dados a partir de um modem, para aplicações na Internet, por
exemplo;
• sinaliza o término de uma ligação ao sistema; (ALENCAR, 2002, p.6).
A seguir (figura 5) o esquema de blocos com as principais funções de um aparelho
telefônico comum.
11
Figura 5 – Diagrama de blocos de um aparelho telefônico. (ALENCAR, 2002, p.7).
O telefone funciona com uma tensão contínua de -48V, uma corrente de operação de
10 a 80mA, uma perda típica de enlace de 8dB com distorção de -50dB.
O telefone decádico, no qual os dígitos são transmitidos por seqüências de pulsos, está
com seus dias contados. De fato, o sistema de discagem multifreqüencial está substituindo o
telefone decádico, por apresentar as seguintes vantagens: (BIGELOW apud ALENCAR,
2002, p.7)
• Diminui o tempo de discagem;
• Utiliza componentes eletrônicos de estado sólido;
• Pode ser utilizado para transmissão de dados a baixas taxas;
• Reduz os requisitos de equipamentos na central local;
• É mais compatível com as centrais de programa armazenado. (ALENCAR,
2002, p.7).
A figura 6 a seguir mostra uma versão do teclado de um telefone multifreqüêncial, no
qual os dígitos são transmitidos por combinações de freqüências, com o par de freqüências
associado a cada tecla.
12
Figura 6 – Teclado de um telefone multifreqüencial. (ALENCAR, 2002, p.8).
Apenas para confirmar as freqüências de um teclado telefônico, o quadro 1 que segue
exemplifica as freqüências montadas por outro autor, para que não ocorram dúvidas:
DTMF 1209 Hz 1336 Hz 1477 Hz 1633 Hz
697 Hz 1 2 3 A
770 Hz 4 5 6 B
852 Hz 7 8 9 C
941 Hz * 0 # D
Quadro 1 – Freqüências de cada tecla de um telefone. (CRAM, 2004).
2.3 O sistema de telefonia
Para que ocorra uma ligação telefônica é necessário que existam, pelo menos, 2 (dois)
assinantes. O processo inicia quando um determinado assinante A, decide conversar com
outro assinante B. O assinante A inicia uma chamada, retira o telefone do gancho, aguarda o
sinal de linha disponível, digita o número telefônico do assinante B e aguarda a resposta. A
resposta pode ser de linha congestionada, número discado inexistente, ocupado, ou mesmo o
assinante B pode não atender a chamada.
13
O assinante A decide então o que fazer a partir dos sinais recebidos. Pode desistir de
chamar, tentar novamente no mesmo instante ou depois de algum tempo.
Essas são as formas possíveis de funcionamento dos sistemas de telefonia fixos atuais.
2.4 Aplicações
Existem diversas aplicações da automação que usam a rede de telefonia fixa e para
exemplificar podemos citar:
• Alarme residencial, que quando acionado pode ligar para o celular do dono da
casa, avisando que o alarme foi acionado.
• Centrais telefônicas, que multiplexam uma única linha telefônica e permite a
comunicação local dos usuários.
• Alguns tipos de automatização residencial, que recebem sinais pela linha
telefônica que indicam que, por exemplo, uma janela deve ser fechada, que um
aparelho deve ser ligado, que um portão deve ser aberto, ou ainda que uma luz
seja acesa.
A KRONOS é uma empresa de segurança residencial da região de Florianópolis. Esta
empresa vende produtos de segurança como o descrito acima, no qual, a central telefônica,
automaticamente, liga para o proprietário da residência indicando que o alarme da casa foi
acionado.
2.5 Decodificação
Um ponto crucial no trabalho é a decodificação dos números telefônicos discados. O
processo de decodificação implicaria em detectar o sinal recebido na linha telefônica e
compará-lo com os sinais conhecidos que o telefone com teclado multifreqüencial gera.
Se a voz humana tiver um tom exatamente igual ao tom de discagem, também existe
um filtro neste decodificador, que impede que a voz humana seja considerada um tom de
discagem.
Devido a grande utilização deste processo, um componente decodificador já foi
produzido, chamado de MT8870D, o qual faz a decodificação do sinal DTMF7.
7 Dual Tone Multiple Frequency ou freqüência múltipla de duplo tom.
14
Este componente foi escolhido devido suas boas referências em vários projetos
referentes a decodificação DTMF, páginas de telefonia, e inclusive vários projetos de
hardware que decodificavam os sinais da rede de telefonia fixa.
Este CI também é muito utilizado por radio amadores para efetuarem chamadas, onde
via rádio se estabelece contato com o circuito, que se comunica com este componente, o qual
faz a decodificação e posteriormente liga-se para o número desejado. (CRAM, 2004).
O trabalho do MT8870D é, receber os tons da linha telefônica e disponibilizar estes
números em suas saídas de controle de 4 bits, ou se preferir, 16 tons DTMF, que como já
vimos é o mesmo número de teclas de um telefone com teclado multifreqüencial. Estes
números são disponibilizados nas saídas Q1 até Q4 da figura 7 a partir do sinal gerado.
Figura 7 – Esquema de montagem do decodificador MT8870D. (ELETRONICA, 2004).
Portanto, cada número que chegar ao MT8870D, será decodificado e enviado as saídas
Q1 até Q4 Essas saídas serão tratadas pelo microcontrolador, que terá o trabalho de
reconhecê-las, armazená-las e enviar para o LCD e para a memória.
2.6 BINA
É um produto que já existe há bastante tempo no mercado. Existe tanto no Brasil
quanto em outros países. Muitos usuários utilizam este serviço, mas o que significa BINA?
Segundo Nicolai (2001), BINA é uma sigla, e significa, B Identifica Número de A,
onde B é o telefone de destino da chamada, e A o telefone da origem da chamada.
15
Existia o problema de identificar a origem de uma chamada e esse problema causava
muitos transtornos, como os trotes telefônicos por exemplo.
Esses problemas foram solucionados a partir do invento do identificador de chamadas
(BINA), no qual Nicolai se intitula criador. Não existe registro que prove efetivamente que
Nicolai é o inventor do BINA, apesar de que em seu site8 existem fotos e documentos que
parecem legítimos, que poderiam dar-lhe o título de inventor do BINA. (NICOLAI 2001).
O comportamento de uma ligação com identificador de chamada funciona como o
representado na figura 8 a seguir.
Figura 8 – Procedimento de uma ligação com BINA. (NICOLAI, 2001). Modificado.
Utilizando-se desta tecnologia, o usuário do telefone que irá receber uma chamada
(B), poderá identificar quem está chamando (A). E B terá a chance de escolher se deseja falar
com esta pessoa nesse momento ou não.
2.7 Contagem de pulsos
Segundo Acessa.com (2004), no horário normal (entre 6:00 à 0:00 durante a semana e
das 6:00 às 14:00 aos sábados), o contador marca um pulso assim que a ligação é completada.
Depois disso, a cada quatro minutos, é contado um outro pulso.
8 Endereço de página na Internet.
16
Segundo Acessa.com (2004), no horário reduzido (entre 0:00 às 6:00 durante a
semana, todo o domingo e feriado, sábado exceto das 6:00 às 14:00), cada chamada só conta
um pulso, independente do tempo da ligação.
Nas ligações de um telefone fixo para um celular, é cobrado um pulso a cada 6
segundos. Como para cada chamada são cobrados, no mínimo, trinta segundos, mesmo que a
ligação caia na caixa postal e o usuário desligue sem deixar recado, ele terá que pagar o
mesmo de meio minuto de ligação. (SABIDO, 2004).
As assinaturas residenciais dão direito a uma quantidade de pulsos mensais, que na
BrasilTelecom é de 100 pulsos atualmente, acima desse valor é cobrado uma taxa por pulso.
Segundo Internet (2004), os pulsos gerados pelas operadoras funcionam
aleatoriamente, dentro dos quatro minutos estipulados. O pulso pode ocorrer no primeiro
minuto ou no quarto.
2.8 Microprocessadores
Os microprocessadores originaram-se do modelo de Von Neumann, como ilustra a
figura 9, foram desenvolvidos para executar tarefas de automação incluindo aplicações
industriais e residenciais.
Figura 9 – Diagrama de blocos do modelo de Von Neumann.
Na figura anterior (9), foi destacada cada parte da arquitetura de Von Neumann, foi
representada a unidade de memória, que é subdividida em memória de dados e de programa, a
unidade de saída de conexões com periféricos (impressora, LCD, monitor, entre outros), a
Unidade
de controle
Unidade
de memória
Unidade
de memória
Unidade
de aritmética
e lógica
Unidade
de saída
17
unidade de entrada de conexões com periféricos (teclado, mouse9, porta serial, paralela, entre
outros), e a CPU que é constituída pelos blocos de unidade aritmética e lógica e o bloco
unidade de controle. Existem os barramentos por onde as informações são transportadas, na
arquitetura Von Neumann, existe um barramento de dados, um de controle e um de endereços.
2.8.1 Sistemas seqüenciais síncronos (Clock)
Microprocessadores precisam de um oscilador para dar início as suas tarefas. É
necessário possuir um clock para funcionar, pois é a partir do clock que as instruções serão
executadas. Existem mais alguns fatores que devem constituir o circuito, mas estes serão
tratados no decorrer desta seção. Para minimizar a curiosidade, pode-se ter uma idéia do que
será tratado, a partir da figura 10 a seguir.
2.8.2 Diagrama de blocos de um sistema genérico com microprocessador
A figura 10 a seguir representa um diagrama de blocos de um sistema genérico com
microprocessador. Usualmente se encontra esse tipo de configuração em projetos de hardware
que utilizam microprocessadores.
9 Dispositivo de entrada de um computador. Utiliza-se deslizando-o sobre uma superfície.
18
Figura 10 – Diagrama de blocos de um sistema genérico com microprocessador. (SILVA JÚNIOR, 1998, p.03).
O que significa cada parte que constitui esse diagrama?
Gerador de Reset: inicializa o sistema ao ligar, ou sob comando externo de um botão.
Interrupções: entrada de sinal externo, outros periféricos, indicando que sua tarefa já
foi concluída. Esse tipo de tarefa, quando tratada no código, constitui um tratamento especial.
O programa que estava sendo processado para, e o programa referente a interrupção acionada
é iniciado, até que este termine, ou outra interrupção com maior prioridade seja acionada.
Oscilador: Nos sistemas seqüenciais síncronos, o Clock é o responsável pela
velocidade com que as informações serão tratadas. Existe uma velocidade máxima
disponibilizada pelo fabricante do microprocessador.
Memória de programa: é o local onde as instruções do programa são armazenadas,
onde o microprocessador irá buscar a nova instrução a ser executada.
Memória de dados: é a memória que serve para ler e escrever dados durante a
operação das instruções. Geralmente é do tipo volátil, mas também podem ser utilizadas
memórias não voláteis, que é nosso caso, onde guardaremos os dados das ligações telefônicas
até que sejam atualizadas no computador ou a memória esteja cheia.
19
Seleção de endereço: é a lógica para escolher a memória ou periférico que a CPU
utilizará.
Portas de I/O: dispositivos de entrada ou saída para comunicação com meios
externos, como o display de LCD10 que será utilizado no projeto. (SILVA JÚNIOR, 1998,
p.03).
2.9 Set de instruções
Exitem dois tipos de arquiteturas:
• RISC: Instruction Set Computer – Computador com conjunto reduzido de
instruções.
• CISC: Complex Instruction Set Computer – Computador com conjunto
complexo de instruções.
A arquitetura RISC utiliza instruções de tamanho fixo de uma palavra. Todas as
instruções efetuam operações simples, que podem ser iniciadas no pipeline11 com apenas um
ciclo de clock. Todos os operandos devem ser registradores antes de serem modificados.
(MURDOCCA e HEURING, 2000, p.4).
Operações mais complexas são divididas em operações simples para serem
executadas. Para que se consiga uma taxa de uma instrução por ciclo de clock com a
arquitetura RISC, é necessário que o pipeline esteja cheio.
Segundo Vantagens e Desvantagens do RISC (2004), devido a tecnologia pipelined12
os processadores RISC alcançam duas a quatro vezes a performance dos processadores CISC
usando tecnologia de semicondutor equivalente e os mesmos valores de clock.
De acordo com Fisher (2000), a arquitetura CISC tem um conjunto de instruções
complexo para ser capaz de completar todos as tarefas de uma maneira mais eficiente.
2.10 Memórias
Memórias são dispositivos de armazenamento de dados. Existem memórias com
diferentes capacidades. A necessidade do usuário e a capacidade de endereçamento do
dispositivo é que definirá o tamanho da memória utilizada.
10 Liquid Crystal Display ou Display de Cristal Líquido. 11 Uma instrução é subdividida em 5 partes (busca da instrução, decodificação, busca de operando, execuçao e escrita do resultado). Uma instrução pode utilizar a ALU enquanto outra acessa registradores, isto é, mais de uma instrução é executada ao mesmo tempo. 12 Passado de pipeline.
20
Foi utilizada uma memória externa no projeto, isto é uma expansão de memória, para
guardar as informações enquanto o computador estiver desligado ou enquanto o hardware não
estiver conectado ao computador.
Existem três tipos de memórias que podem ser utilizadas em projetos com
microprocessadores:
• memórias somente de leitura, não voláteis, estas ainda podem ser subdivididas em:
ROM (Read Only Memory) memória de apenas leitura
PROM (Programable ROM) ROM programável
EPROM (Erasable PROM) PROM regravável, mas esta só é apagada com luz
ultravioleta.
EEPROM (Eleitric Erasable PROM) ROM regravável que pode ser apagada
eletricamente
• memórias de leitura e escrita, voláteis:
RAM (Random Access Memory) memórias de acesso randômico.
2.10.1 Expansão de memória
Grande parte dos microprocessadores/microcontroladores possibilita a expansão de
memória, inclusive o 8051, que será utilizado no projeto. No caso será utilizado apenas 2K de
memória, em um único CI, mas poderiam ser utilizados mais de 2 CIs de memória, poderiam
ser utilizados até 1024 CI´s de memórias, utilizando o protocolo I2C.
2.11 Comunicação serial
O projeto proposto terá uma comunicação do hardware com o PC, e esta se dará
através da comunicação serial.
Grande parte dos microprocessadores possui comunicação serial. O 8051, que será
utilizado no projeto, também possui. Utilizaremos esta opção que, através de outro CI13, que
fará a comunicação serial do microprocessador para enviar os dados das ligações telefônicas
para o PC14.
13 Circuito Integrado. 14 Personal Computer ou Computador Pessoal.
21
2.12 Microcontroladores
Neste capítulo, abordaremos assuntos relativos a microcontroladores, pois será
utilizado um microcontrolador 89C51 no projeto. A descrição, o diagrama de blocos,
microcontrolador 8051, características gerais, programação e fabricantes.
2.12.1 Descrição
Os microprocessadores se desenvolveram tanto e são tão utilizados atualmente, que já,
há bastante tempo, foram lançados os microcontroladores. Microcontroladores são
microprocessadores com memória de dados, de programa, portas de I/O15 e outros recursos
internos necessários para seu funcionamento em um único encapsulamento interno.
Com esta arquitetura pronta, os projetos se tornaram mais simplificados. O espaço
físico ocupado anteriormente com os microprocessadores diminuiu, a programação se
tornoumais simplificada, segundo Silva Júnior (1998, p.15) “[...] seus periféricos são vistos
pela CPU interna como memória”.
Os microcontroladores possibilitam expansões de memória, limitadas pelo tamanho de
endereçamento de cada um, caso seja necessário e também é possível fazer cascateamento de
mais microcontroladores limitados pelos tipos de barramentos.
2.12.2 Diagrama de Blocos de um microcontrolador
Na figura 11 a seguir, veremos um diagrama básico das partes de um
microcontrolador, com sua unidade série, o conversor A/D, memória, unidade de
temporização onde durante o projeto pretendemos colocar um Real Time Clock16, unidade de
I/O, CPU e um temporizador Watchdog17.
15 Input/Output ou entrada/saída. 16CI que implementa um relógio com hora, minuto, segundos, dia, mês e ano. 17 Termo utilizado para dizer que de tempos em tempos ocorre uma verificação.
22
Figura 11 – Diagrama de Blocos dos sistemas básicos de um microcontrolador e suas ligações internas.
(MIKROELEKTRONIKA, 2004)
2.12.3 Microcontrolador 89C51
Este foi o microcontrolador escolhido para ser utilizado em nosso projeto, por ter
baixo custo e fácil utilização.
Cabe destacar que existem vários fabricantes deste tipo de microcontrolador, como os
que estão no item 2.10.6.
Os microcontroladores da família do 8051 executam instruções do tipo: aritméticas,
lógicas, transferência de controle, transferência de dados e booleanas18.
18 Variável que pode assumir apenas 2 valores, veradeiro e falso, ou 0 (zero) e 1 (um).
23
2.12.4 Características gerais
Segue a seguir as características do microcontrolador 89C51:
• CPU de 8bits otimizada para aplicações em controle.
• Alta capacidade de processamento booleano (manipulação de variáveis de um
bit).
• 32 linhas de E/S bidirecionais e individualmente endereçáveis.
• 128 bytes de RAM interna destinada a dados
• RAM de baixo consumo de energia.
• 2 temporizadores/contadores de 16bits
• UART full duplex
• 5 estruturas de interrupção com 2 níveis de prioridade
• Clock interno
• 4 Kbytes de memória flash de programa interna
• 64 Kbytes de memória de programa endereçáveis
• 64 Kbytes de memória de dados endereçáveis
• Freqüência de clock entre 1.2 MHz e 24 MHz
2.12.5 Programação dos microcontroladores
Foi criado um software para fazer a aquisição de dados do decodificador DTMF
utilizado no projeto. Este procedimento se dará através da programação em baixo nível,
utilizando-se a linguagem Assembly.
Existem mais de uma forma de programar um microcontrolador. Pode-se utilizar de
algumas linguagens de programação conhecidas, como o Basic 19 , o C 20 e também o
Assembly21.
A linguagem Assembly é conhecida como linguagem de baixo nível. É considerada de
difícil programação, mas em contrapartida, possibilita uma melhor utilização dos recursos do
hardware.
19 Linguagem de programação de alto nível. 20 Linguagem de programação de alto nível. 21 Linguagem de programação de baixo nível.
24
Os compiladores C e Basic não conseguem otimizar suficientemente o código a ponto
de se comparar com o tamanho do código gerado em Assembly.
Apesar de possibilitar uma programação de alto nível, as linguagens C e Basic
produzem um código pouco otimizado, e algumas vezes isto impossibilita que o programa
seja inserido no microcontrolador, pois este possui memória limitada.
2.12.6 Alguns fabricantes de Microcontroladores
Principais fabricantes de microcontroladores e microprocessadores encontrados no
mercado:
• Motorola
• Mitsubish
• Siemens
• NEC
• Hitach
• Philips
• INTEL
• Microchip
• Matsushitta
• Toshiba
• National Semiconductor
• Zilog
• Texas Instruments
• Sharp
• Atmel
2.13 Conversores A/D-D/A
O decodificador DTMF (MT8870D) utilizado no projeto possui conversor A/D
interno, e devido a isto, este tópico foi inserido ao texto, para que se possa entender melhor o
funcionamento do mesmo.
Para compreender melhor o funcionamento do componente MT8870D, abordaremos
este tópico. O MT8870D trabalha como filtro de freqüências, na qual, apenas reconhece a
freqüência relativa aos números telefônicos conhecidos, mas para isso precisa converter os
25
dados analógicos recebidos da linha telefônica, filtrá-los, reconhecê-los, tratá-los e enviar para
as saídas Q1 até Q4.
Devido a necessidade do tratamento de dados, e a complexidade de tratar os dados de
forma analógica, foram criados os conversores A/D22 e D/A23, para que os dados analógicos
fossem transformados em dados digitais para serem processados e posteriormente, após o
processamento ter sido completado, os dados retornarem a ser analógicos.
Conversores A/D e D/A são a base de todo o interfaceamento eletrônico entre o
mundo analógico e o mundo digital. Estão presentes na grande maioria dos instrumentos de
medida atuais e são os responsáveis pelo aumento significativo nos níveis de precisão e
exatidão, assim como o barateamento e popularização de instrumentos de medida digitais.
(BONFIM, 2004).
2.13.1 Conversores Analógicos-Digitais (A/D).
Nesta seção trata-se sobre os mecanismos utilizados para a conversão entre sinais
analógicos e digitais.
A conversão Analógico-Digital trata-se da conversão do sinal de pontos infinitos no
tempo para um sinal de pontos finitos, no qual a quantidade total de pontos lidos é referente à
freqüência de amostragem no tempo. A freqüência mínima necessária que permite a
reprodução do sinal adquirido corresponde a duas vezes a freqüência do sinal de entrada.
É muito comum usar conversores A/D e D/A em equipamentos de comunicação. Na
telefonia utiliza-se muito a conversão de sinais. Os telefones mais atuais utilizam o modo
Tom (Tone24) para discar e não utilizam mais o modo de Pulso (Pulse25).
Uma estrutura básica de um conversor A/D pode ser representada pela figura 12 a
seguir.
22 Conversor Analógico-Digital. 23 Conversor Digital-Analógico. 24 Modo de discagem de tom. Discagem por freqüência, onde cada tecla do telefone será um par de freqüências. 25 Modo de discagem onde cada número é uma quantidade de pulsos. O Número 1 por exemplo tem 1 pulso, o 2 tem 2 pulsos, e assim sucessivamente.
ea ff *2= onde: af = freqüência de amostragem
ef = freqüência de entrada
26
Figura 12 – Representação do conversor A/D.
Podemos entender mais detalhadamente como funciona o conversor A/D na figura 13
a seguir.
Figura 13 – Conversor Analógico-Digital. (IDOETA e CAPUANO, 2000, p. 329).
O circuito é basicamente constituído por um contador de década que gera um código BCD 8421
nas saídas A’, B’, C’, e D’. Estas saídas são injetadas num conversor digital-analógico, fazendo
com que este apresente na saída uma tensão de referência. Esta, por sua vez, é injetada em uma
das entradas de um circuito comparador, montado a partir de um amplificador operacional à
outra entrada é injetado o sinal analógico a ser convertido. (IDOETA e CAPUANO, 2000,
p.329).
Entrada
Analógica
Conversor A/D
A
B
C
D
27
Segundo Idoeta e Capuano (2000, p.330), a saída deste comparador gera o clock dos
flip-flops do circuito de saída e também aciona uma chave digital (porta E), que bloqueará ou
não a entrada do clock do contador de década.
Podemos ver o exemplo de uma onda senoidal analógica com seus dados
transformados por um conversor A/D na figura 14 a seguir:
Figura 14 – Exemplo de onda senoidal convertida de analógico para digital. (IDOETA e CAPUANO, 2000, p.
329).
Os traços arredondados contínuos mostram a onda senoidal analógica e as retas
mostram o sinal digital obtido.
Na transformação de um sinal analógico para um sinal digital, uma amostragem é feita
de acordo com uma certa freqüência definida, alguns pontos do sinal analógico são captados e
os valores da faixa de erro de quantização variam de 7.81 a -7,81mV no caso a seguir (figura
15). Cada leitura trará a posição e o valor no momento exato que a leitura for efetuada.
A cada quantidade de tempo determinada, esses valores serão lidos e guardados.
Posteriormente, com a lista de valores lidos, pode-se representar o sinal analógico da entrada.
Isto, a partir dos pontos das leituras concebidas, desde que tenha sido respeitado o critério de
que a freqüência de leitura dos dados deve ser no mínimo 2 (duas) vezes maior que a
freqüência de entrada dos dados.
2.13.2 Conversores Digitais-Analógicos (D/A).
Neste ponto será tratado sobre os mecanismos utilizados para a conversão entre os
sinais digitais e analógicos.
28
Entende-se por analógica toda variação contínua de uma variável. Todas as grandezas
físicas (velocidade, pressão, temperatura, corrente elétrica, tensão, resistência, etc) variam de
forma analógica, isto é, para se atingir um valor desejado de uma grandeza qualquer, é
necessário que esta passe por todos os valores intermediários de forma contínua. (IDOETA e
CAPUANO, 2000, p. 301). Portanto, uma grandeza analógica pode ser representada por todos
seus pontos de variação, com uma curva, reta, ou qualquer outro comportamento, dependendo
das características apresentadas.
Segundo Idoeta e Capuano (2000, p.302), “uma variável analógica pode assumir todos
os valores dentro de sua faixa de atuação”.
Uma variável digital não tem o mesmo comportamento de uma analógica, podemos
com isto, concluir que as variáveis analógicas têm infinitos valores enquanto, as digitais têm
valores finitos.
Para converter sinais digitais em analógicos, utiliza-se da seguinte técnica. A
referência (0V) é o nível 0 do sinal digital, e o nível mais alto do sinal digital é equivalente a
tensão correspondente (VCC). Podemos ver um exemplo desse tipo de conversor, utilizando
apenas resistores, como na figura 16 a seguir.
Figura 15 – Representação do conversor D/A.
A figura 17 a seguir mostra um conversor D/A formado de resistores em paralelo:
Figura 16 – Conversor Digital-Analógico com resistores. (IDOETA e CAPUANO, 2000, p. 301).
Saída
Analógica
Conversor D/A
A
B
C
D
29
Considerando as entradas A,B,C e D binárias, teremos as expressões matemáticas no
quadro 2 a seguir considerando que R’<<R:
Número A B C D Saída Tensão
1 1 0 0 0 R
RVCCVs
'*≈ ≈Vs 8V
2 0 1 0 0 R
RVCCVs
2'*≈
≈Vs 4V
3 0 0 1 0 R
RVCCVs
4'*≈
≈Vs 2V
4 0 0 0 1 R
RVCCVs
8'*≈
≈Vs 1V
Quadro 2. Quadro de saída Analógica (IDOETA e CAPUANO, 2000, p. 301).
Segundo Idoeta (2000, p. 304), se considerarmos ativa a entrada de 8R a tensão Vs
será de aproximadamente 1V, da mesma forma, ativando apenas a entrada 4R, a saída Vs será
de aproximadamente 2V e assim sucessivamente para as outras entradas.
No caso de ocorrer 0101, por exemplo, somam-se as saídas parciais de número 2 e 4.
O problema desse tipo de conversor D/A é que sua tensão de saída é muito baixa. Para
resolver esse problema, utilizam-se amplificadores operacionais.
2.14 Display de Cristal Líquido (LCD)
Foi utilizado no projeto um Display LCD para que o usuário possa ver algumas
informações que serão passadas pelo microcontrolador, a fim de melhorar a interface homem
máquina.
Os LCDs26 são muito utilizados juntamente aos microcontroladores, essa união surge
pois o LDC é uma ótima IHM27 para muitos casos.
Podemos escrever no LCD o que passa num determinado instante, por exemplo. É
bastante utilizado para mostrar o status28 de motores, sensores, tempo resultado de operações
efetuadas pelos microcontroladores.
Em nosso caso, o objetivo do LCD é mostrar ao usuário o número do telefone discado
e o tempo decorrido da ligação corrente.
26 Liquid Cristal Display ou Display de Cristal Líquido. 27 Interface Homem-Máquina. 28 Foi utilizada esta palavra por não haver uma outra em português que expresse melhor o que se quer dizer nesta frase.
30
Podemos ver um exemplo de LCD na figura 17 a seguir:
Figura 17 – Display de Cristal Líquido.
No projeto o LCD informará ao usuário alguns dados sobre o número discado e o
tempo da ligação. No quadro 3 a seguir, pode-se ver a ligação de cada pino de um LCD:
Pino Função Descrição
1 Alimentação Terra ou GND
2 Alimentação VCC ou +5V
3 V0 Tensão para ajuste de contraste (GND no nosso caso)
4 RS - Seleção 1= Dado, 0=Instrução
5 R/W - Seleção 1=Leitura, 0=Escrita
6 E - Chip Select 1 ou (1� 0) Descida = Habilita, 0= Desabilitado
7 B0
8 B1
9 B2
10 B3
11 B4
12 B5
13 B6
14 B7 (MSB)
Barramento de dados
Em 4 bits utiliza-se apenas os 4 bits mais significativos
B4, B5, B6 e B7
15 A (Quando existir) Anodo para LED Backlight *
16 K (Quando existir) Catodo para LED Backlight *
Quadro 3 – Quadro de identificação dos pinos do LCD.
31
Existem comandos que servem para manipular o LCD. Exemplificando, uma função
para limpar a tela do display, deslocar posição, entre outros.
As vantagens de se utilizar um LCD em relação aos Displays de 7 segmentos29 é o
consumo muito baixo, na ordem dos nanoamperes, e a capacidade de poder representar
caracteres alfanuméricos, números, e mensagens, e não apenas números e algumas letras,
como os LEDs. A principal desvantagem de se utilizar o LCD é o preço que ainda está
razoavelmente alto, se comparado com os LEDs. (RADIOAMADORES, 2004).
Em compensação, um projeto com um display LCD é muito mais apresentável, isto é,
tem uma interface muito mais amigável à interface de displays de 7 (sete) segmentos.
2.15 Relé
Foi necessário sinalizar o início e o fim de uma ligação durante o projeto, e isto ocorre
devido a uma variação de tensão. Para identificar essa variação de tensão estudou-se a
possibilidade de utilizar um relé.
O Relé é um dispositivo mecânico que pode ter várias utilidades. É acionado a partir
de uma corrente de entrada, que produz uma indução com as bobinas, com isto, ocorre que o
circuito é chaveado dentro do Relé, como mostra a figura 18 a seguir:
Figura 18 – O que acontece dentro do Relé depois da indução.
Existem vários tipos de Relés, a figura 19 a seguir mostra um exemplo de Relé. E a
figura 20 mostra a estrutura interna de um Relé.
Figura 19 – Exemplo de Relé. (RELÉ UP-DW PER TAPPARELLE, 2004).
29 É um conjunto de 7 (sete) LEDs que podem ser utilizados para representar números.
Antes da indução Depois da indução
32
Figura 20 – Estrutura interna de um Relé. (RELÉ UP-DW PER TAPPARELLE, 2004).
A estrutura interna de um Relé NP-CL-1A181 é da forma da figura 21 a seguir:
Figura 21 – Estrutura interna de um Relé NP-CL-1A181. (LERCHER, 2003).
Os Relés podem ser utilizados para evitar que circuitos delicados, como um
microcontrolador, sejam danificados caso ocorra uma tensão ou corrente diferente da sua
faixa de operação. Funciona como um isolador de circuitos. Pode ser utilizado, por exemplo,
para acionar um determinado motor quando uma determinada condição for satisfeita.
As principais vantagens do Relé em relação aos optoacopladores:
• Tem um custo mais baixo do que um optoacoplador;
• pode trabalhar com correntes maiores que os optoacopladores;
• não sofre interferência eletromagnética.
As principais desvantagens em relação aos optoacopladores:
• Mais lento que os optoacopladores;
• produzem barulho quando acionados e desacionados;
• tem limitação de vida útil, pois sofre desgaste mecânico.
33
2.16 Optoacopladores
Como os relés são dispositivos que sofrem desgaste mecânico com o uso, pensou-se
em trocar os relés por optoacopladores que são dispositivos que não sofrem desgaste
mecânico.
São interfaces ópticas, que podem substituir os Relés. Tem um comportamento
bastante parecido com o do Relé com algumas melhorias.
Optoacopladores tem como principais vantagens:
• Não tem limite mecânico de desgaste de acionamento como os Relés;
• são mais rápidos que os Relés;
• não produzem barulho como os Relés.
As principais desvantagens dos optoacopladores são:
• Custo superior ao custo de um Relé;
• sofre interferência eletromagnética;
• trabalha com baixa corrente, se comparado ao Relé.
Podemos ver a estrutura interna do TIL 111 (foto transistor) na figura 22 a seguir.
Figura 22 – Estrutura interna do foto transistor TIL 111. (TEXAS INSTRUMENTS, 2004).
Quando o diodo é acionado, a luz emitida, faz com que a chave troque de posição. No
parágrafo seguinte pode-se ver um exemplo de aplicação que se aplica tanto ao TIL 111
quanto ao MOC 3021. A estrutura interna do MOC 3021 pode ser vista na figura 23 a seguir.
TIL 111
34
Figura 23 – Estutura interna do foto triac MOC 3021. (TEXAS INSTRUMENTS, 2004).
Coloca-se em série com o diodo na entrada, uma resistência para que não seja
ultrapassada a corrente máxima que o optoacoplador pode suportar. A tensão POSITIVA
entra pelo lado POSITIVO do diodo, enquanto o terra fica do lado NEGATIVO do diodo.
Dessa forma, quando for acionado o optoacoplador (MOC 3021), chaveia-se a saída do
circuito, fechando-se para o circuito que se deseja alimentar.
2.17 Real Time Clock DS1307Z
O projeto terá um real time clock para indicar as datas e horas das ligações.
Um RTC30 é um CI capaz de manter atualizado, os segundos, minutos, horas, dias do
mês, mês, dia da semana e ano, até o ano de 2100, a partir da data que lhe foi configurada. É
um componente de baixo consumo de energia.
Este componente é encontrado no mercado com vários tamanhos, como componente
SMD31 ou CI tradicional.
Podemos ver a seguir um RTC no formato SMD na figura 24 a seguir.
Figura 24 – Foto de um Real Time Clock DS1307.
30 Real Time Clock ou Relógio de tempo real. 31 Surface Mount Device ou Dispositivos montados em superfícies.
MOC 3021
35
Este componente possui um mecanismo de detecção de falha no fornecimento de
energia e, automaticamente, modifica a alimentação para a bateria.
2.18 Protocolo I2C
O projeto proposto utiliza componentes que funcionam com o protocolo I2C (memória
externa e real time clock), portanto, descreveremos os pontos importantes do protocolo I2C,
pois provavelmente o utilizaremos na construção do projeto.
O protoloco I2C foi desenvolvido pela Philips, com o objetivo de simplificar a
comunicação entre dispositivos a partir de apenas duas linhas de comunicação, que são:
Dados (SDA) e Clock(SCL). Estas linhas de comunicação serão melhor detalhadas no
decorrer deste capítulo.
Este protocolo permite que até 1024 dispositivos sejam conectados no mesmo
barramento32 de comunicação, dispositivos como: EEPRONs, RAMs, LCDs, portas de I/O,
entre outros. Cada dispositivo receberá um endereço único. Este protocolo trabalha dentro dos
limites de 0 a 5 volts nas linhas digitais comunicação. Existem sinais de início e final de
transmissão. (A. FILHO, 2004).
As principais vantagens do protocolo I2C são:
• Organização funcional em blocos, providenciando um simples diagrama
esquemático final.
• Não há necessidade dos projetistas desenvolverem interfaces. Todos os
dispositivos integram as interfaces "on-chip", o que aumenta a agilidade no
desenvolvimento.
• Endereçamento e protocolo de transferência de dados totalmente definido via
software.
• Possibilidade de inclusão ou exclusão de dispositivos no barramento sem afetá-
lo ou outros dispositivos conectados a este.
• Diagnóstico de falhas extremamente simples. O mau funcionamento é
imediatamente detectado.
• Desenvolvimento simplificado do software através do uso de bibliotecas e
módulos de software reutilizáveis.
32 É um caminho comum que conecta um número de dispositivos (MURDOCCA e HEURING, 2000, p.277).
36
• Facilidade no desenvolvimento de placas de circuito impresso, devido a
quantidade de interconexões. (A. FILHO, 2004).
As principais características do protocolo I2C são:
• Duas vias de comunicação: serial data (SDA) e serial clock (SCL), ambas
bidirecionais. Enquanto o barramento está livre ambas as linhas ficam em nível
lógico alto.
• A taxa de transferência máxima é de 100Kbit/s no modo padrão (standard), ou
400Kbit/s no modo rápido (fastmode).
• Informação de carry entre dispositivos conectados.
• Todo dispositivo possui um endereço único no barramento, independente de
sua natureza.
• Qualquer dispositivo conectado pode operar como transmissor ou receptor,
obviamente, respeitando as limitações de cada dispositivo (um LCD não
poderá transmitir, por exemplo). Independentemente disso, qualquer
dispositivo endereçado é chamado de escravo (slave).
• O número de interfaces conectadas fica dependente da capacitância máxima do
barramento que é de 400pF. (A. FILHO, 2004).
A transmissão dos dados segue os seguintes passos:
1. O dispositivo master ajusta a condição inicial.
2. O dispositivo master envia 7 bis de endereçamento.
3. O dispositivo master envia o 8º bit, R/W.
4. O dispositivo slave envia o sinal de ACK (Acknowledge).
5. O dispositivo master (ou slave) envia pacotes de 8bits de dados, sempre
seguidos de um sinal ACK enviado pelo dispositivo slave (ou master)
confirmando a recepção como se pode ver na figura 25 a seguir.
37
Figura 25 – Representação de como funcionam as mensagens no protocolo I2C.
A figura 25 mostra como ocorre a transferência de dados utilizando-se o protocolo
I2C. Primeiramente ocorre o Start Bit, que acontece quando o bit de Clock está 1 e o de dados
está na transição de descida. Posteriormente enviam-se os dados (8 bits), e o nono bit é
enviado pelo dispositivo que recebeu os 8 bits, este nono bit é o bit de confirmação (ACK).
6. O dispositivo master encerra a comunicação. (A. FILHO, 2004).
Como podemos perceber, somente o mestre (master) inicia e fecha uma comunicação,
além de gerar o clock.
38
3 DESENVOLVIMENTO
Na figura 26 a seguir são ilustrados os componentes que integram o hardware
proposto. Observar que o microcontrolador constitui o principal componente do projeto. O
microcontrolador usado na versão final do projeto foi o AT89C51, cabe destacas que para
efetuar os testes dos componentes do projeto de forma independente foi utilizado o
microcontrolador 89C2051 da mesma família. O microcontrolador troca dados com diversos
dispositivos, como a memória serial, o RTC e o MAX 232, recebe dados do 8870 e do sinal
do gancho e ainda envia dados ao LCD. Essas comunicações ocorrem usando protocolos
seriais como o do RTC e da memória e paralelos como o do LCD e do decodificador.
Basicamente o decodificador DTMF avisa ao microcontrolador da presença de algum número
discado ou recebido, o qual é a visualizado na telado LCD e armazenado na memória 24C02
junto as informações provenientes do RTC (início e término da ligação). Essas informações
são enviadas a um PC, são armazenados e podem ser mostrados na tela do computador. Cada
item deste diagrama será abortado, explicando-se a implementação de cada um.
39
Figura 26 – Diagrama de comunicação entre os componentes do projeto.
Linha Telefônica
µControlador 89C51
Serial MAX232
Decodificador CM8870
Sinal do Gancho
Memória 24C02 RTC DS1307
Barramento I2C
40
3.1 Decodificador CM8870
O decodificador CM8870 serviu para identificar os números discados pelo usuário e
enviá-los ao LCD, foi utilizando inicialmente o microcontrolador 89C2051 que
posteriormente foi substituído pelo 89C51 por motivos que serão descritos no decorrer do
capítulo de desenvolvimento. Este dispositivo também reconhece os números recebidos, caso
o usuário seja contratante do serviço identificador de chamadas de sua operadora.
Foi estudado o decodificador com o intuito de entender seu funcionamento, como
deveria ser ligado, e quais seus pinos de saída. O decodificador é um filtro complexo, pois a
freqüência dos números telefônicos é audível. Para que não ocorra erro na decodificação, caso
uma pessoa fale na mesma freqüência que o tom de um número, ele trabalha com o tempo
também, isto é, Freqüência versus Tempo identifica um número.
A figura 27 a seguir ilustra a pinagem do DTMF.
Figura 27 – Identificação dos pinos do dispositivo 8870.
Cabe destacar que o decodificador DTMF 8870 necessita de um oscilador de
3,579545MHz ligados aos pinos 7 e 8 para funcionar. Os dados decodificados são
disponibilizados nos pinos 11 ao 14, ou Q1, Q2, Q3 e Q4 como ilustrado na figura 28. Os
dados são disponibilizados em 4bits, pois representa-se apenas um dígito por vez, portanto,
com 4 bits podemos representar até 16 números. O pino 15 (StD) é o pino que indica quando
um novo dígito está disponível. O sinal do pino StD foi usado para gerar uma interrupção no
microcontrolador para que o dado disponível no decodificador DTMF fosse tratado.
41
CM8870
1 18
2 17
3 16
4 15
5 14
6 13
7 12
8 11
9 10
IN+ VDD
IN- St/GT
GS ESt
VRef StD
INH Q4
PWDN Q3
OSC1 Q2
OSC2 Q1
VSS TOE
U1
AT89C2051
1
10
1213141516171819
20
236
7
8911
54
RST/VPP
GND
P1.0/AIN0P1.1/AIN1P1.2P1.3P1.4P1.5P1.6P1.7
VCC
P3.0/RXDP3.1/TXD
P3.2/INTO
P3.3/INT1
P3.4/T0P3.5/T1
P3.7
XTAL1XTAL2
MOD_10 do módulo
Figura 28 – Ligações entre o decodificador DTMF e o microcontrolador 8051 do módulo.
Pode-se observar que o DTMF 8870 possui um conversor Analógico-Digital, pois
decodifica sinais analógicos e os transforma em sinais digitais, além das unidades de filtros e
o algoritmo de detecção.
Os pólos positivos e negativos da linha telefônica são conectados aos pinos IN+ e IN-
nessa ordem, o filtro separa os tons de alta freqüência e os de baixa freqüência. Um algoritmo
identifica os tons utilizando-se da freqüência versus tempo, eliminando assim os tons de voz
que tenham essas freqüências. Enquanto o dígito é convertido pelo conversor o pino ESt fica
em estado alto e quando acaba a conversão e o dígito está disponível o pino STD é colocado
em estado alto. Isto significa que os pinos Q1 a Q4 possuem um dígito válido disponibilizado
em formato BCD. A figura 29 a seguir demonstra o diagrama de blocos do DTMF.
Figura 29 – Diagrama de blocos do decodificador DTMF. (ELFA, 2004).
42
O programa a seguir, criado para o teste no módulo, faz a identificação dos números
discados no telefone, lê a interrupção gerada pelo 8870 que disponibiliza os dados nos pinos
do decodificador DTMF os quais estão ligados a parte menos significativa da porta P1. A
figura 28 na página 41 tem o objetivo de ilustrar a ligação física entre o decodificador DTMF
e os pinos do microcontrolador que foram utilizados.
É gerado um dado, este é enviado ao LCD do módulo SDM9431 e para a serial. No
anexo 1 podemos ver o código completo utilizado para teste do decodificador (código fonte
bina_10).
;------------------------------------ ;Programa de teste do CM8870 ;------------------------------------ CLR_DSP equ 10Aah ;código para limpar o LCD no módulo DSP_DAT equ 10FFh ;código para enviar dados para o LCD org 4250h ljmp intr ;salto para a interrupção externa 1 org 4270h jmp serial ;salto para a interrupção serial org 5000h ;início do programa mov sp, #2fh ;Carregar stack pointer lcall CLR_DSP ;limpa Display intr: mov a,p1 ;acc <- P1 (4 bits menos significativos) anl a,#0fh ;Zera a parte alta do Acc add a,#30h ;Transforma em ASCII mov 40h,a ;guarda dado lido na posição 40h da memória mov sbuf,a ;envia dado para a serial lcall DSP_DAT ;Envia para o display em ASCII reti end
O pino StD (15) do DTMF é um indicador de que existe um dígito telefônico
identificado pelo decodificador. Os números processados pelo DTMF são convertidos para
sinal digital e formam um número binário, sendo que estes números são disponibilizados nos
pinos 11 ao 14 (Q1 até Q4) do 8870. Conectado à interrupção externa 1 do microcontrolador,
o pino 15 (StD) do decodificador gera uma interrupção quando existe um dígito telefônico
disponibilizado pelo decodificador. A partir dos pinos Q1 ao Q4 (11 ao 14) obtém-se o
número telefônico decodificado e com estes pinos ligados na parte menos significativa da
porta P1 do microcontrolador pode-se identificá-los e tratá-los de acordo com a necessidade.
43
3.2 Comunicação com o LCD
O LCD foi inserido ao projeto com o intuito de mostrar ao usuário os números
discados. Foi considerada a alternativa de mostrar os números diretamente no computador,
isto é, enviando diretamente cada número discado pela porta serial, por exemplo. Como o
objetivo do projeto é tornar o hardware não totalmente dependente do PC, optou-se por
utilizar um LCD para mostrar essas informações.
Em primeira instância, mostrou-se não só os números discados, como os recebidos
quando a linha telefônica possui o serviço de identificador de chamadas. Cabe observar que o
número é recebido pela linha telefônica antes que o aparelho de telefone receba a tensão
necessária para sinalizar que está recebendo uma chamada. Pode-se perceber isto com o uso
do circuito montado com o decodificador.
Ao LCD são enviadas as informações, inicialmente usando-se 8 bits de dados porque
existiam pinos livres suficientes no microcontrolador. Nesse momento operava-se apenas o
LCD e o decodificador 8870. Os dois dispositivos necessitavam de 15 pinos do
microcontrolador (5 para o decodificador e os outros para o LCD). Porém, para continuar
usando o microcontrolador 89C2051, constatou-se a necessidade de economizar pinos. Uma
solução encontrada foi a mudança para se trabalhar com o LCD usando apenas 4bits de dados
(ver figura 31). Com esta mudança o LCD passou a necessitar apenas de 6 pinos de I/O (4 de
dados e 2 de controle, como figura 31 e não de 10 (8 de dados e 2 de controle) como é
necessário no modo de 8 bits, ver figura 30.
Figura 30 – LCD em modo de 8bits. Figura 31 – LCD em modo de 4bits.
LCD
1 2 3 4 5 6 7 8 9 10 11 12 13 14
GN
D (
Ter
ra)
VC
C (
5V)
V0
RS
R/W
EN
A
B0
B1
B2
B3
B4
B5
B6
B7
AT89C2051_1
1 10
12 13 14 15 16 17 18 19
202 3 6 7 8 9 11 5 4
RS
T/V
PP
GN
D
P1.
0/A
IN0
P1.
1/A
IN1
P1.
2P
1.3
P1.
4P
1.5
P1.
6P
1.7
VC
C
P3.
0/R
XD
P3.
1/T
XD
P3.
2/IN
TO
P3.
3/IN
T1
P3.
4/T
0P
3.5/
T1
P3.
7X
TA
L1X
TA
L2
LCD em modo de 8bits
5V
LCD
1 2 3 4 5 6 7 8 9 10 11 12 13 14
GN
D (
Ter
ra)
VC
C (
5V)
V0
RS
R/W
EN
A
B0
B1
B2
B3
B4
B5
B6
B7
AT89C2051_1
1 10
12 13 14 15 16 17 18 19
202 3 6 7 8 9 11 5 4
RS
T/V
PP
GN
D
P1.
0/A
IN0
P1.
1/A
IN1
P1.
2P
1.3
P1.
4P
1.5
P1.
6P
1.7
VC
C
P3.
0/R
XD
P3.
1/T
XD
P3.
2/IN
TO
P3.
3/IN
T1
P3.
4/T
0P
3.5/
T1
P3.
7X
TA
L1X
TA
L2
LCD em modo de 4bits
5V
44
Algumas modificações foram necessárias para que se trabalhasse com 4 bits, por
exemplo, foi necessário descobrir quais os pinos do LCD deveriam receber as informações, se
eram os 4bits mais significativos ou os 4bits menos significativos. Observou-se que são os
bits mais significativos do LCD os que recebem as informações no modo de 4 bits (B4,B5,B6
e B7). Também foi preciso aprender que ao invés de se enviar um dado de 8 bits era
necessário enviar primeiramente os 4 bits mais significativos e posteriormente os 4 bits menos
significativos ao LCD.
A título de resumo, o quadro 4 mostra em detalhes a descrição dos pinos do LCD. Os
pinos de controle RS e ENA servem para identificar quando mostrar o dado enviado no LCD.
Pino Função Descrição
1 Alimentação Terra ou GND
2 Alimentação VCC ou +5V
3 V0 Tensão para ajuste de contraste (GND no nosso caso)
4 RS - Seleção 1= Dado, 0=Instrução
5 R/W - Seleção 1=Leitura, 0=Escrita
6 E - Chip Select 1 ou (1� 0) Descida = Habilita, 0= Desabilitado
7 B0
8 B1
9 B2
10 B3
11 B4
12 B5
13 B6
14 B7 (MSB)
Barramento de dados
Em 4 bits utiliza-se apenas os 4 bits mais significativos
B4, B5, B6 e B7
15 A (Quando existir) Anodo para LED Backlight *
16 K (Quando existir) Catodo para LED Backlight *
Quadro 4 – Quadro de identificação dos pinos do LCD.
*Em alguns LCDs o pino 15 pode ser o pino 1 e o pino 16 ser o pino 2, nestes casos
desloca-se todos os outros em 2 posições, exemplo, pino 1 = pino 3, pino 2 = pino 4.
O programa precisou de algumas alterações para que trabalhasse desta forma. Um
novo código de envio ao LCD foi criado. Este por sua vez tinha o trabalho de converter os
dados em 8 bits em dados de 4bits e enviá-los na seqüência correta ao LCD (os 4 mais
45
significativos, e posteriormente os 4 menos significativos). A inicialização do LCD também
sofreu modificações para trabalhar com apenas 4bits de dados.
A tabela de inicialização para 8bits era (db 38h,38h,06h,0Eh,01h) diferente da
inicialização com 4bits (db 33h,32h,28h,08h,01h,06h,0Ch). O código criado para esta
conversão está a seguir. O código completo se encontra no anexo 2.
;----------------------------------------- ;Programa de teste do CM8870 (Bina_11.a51) ;-----------------------------------------
lcd: setb ena ; ENA=1 aguarda instrução nop ;não opera
push acc ;guarda o dado do ACC na pilha anl A,#0F0h ;Guarda a parte alta do ACC orl A,#0Fh ;máscara mov P1,A ;Envia os 4 bits + significativos ao LCD clr ena ;ativa LCD para Executar instrução lcall delay3 setb ena ;ENA=1 aguarda instrução nop ;aguarda ENA=1 pop acc ;busca o dado que foi recebido em ACC swap A ;troca parte alta pela parte baixa do ACC anl A,#0F0h ;guarda a parte alta do ACC orl A,#0Fh ;máscara mov P1,A ;Envia os 4 bits + significativos ao LCD clr ena ;ativa LCD para Executar instrução lcall delay3 ret
3.3 Telefone no Gancho ou Fora do Gancho
Para indicar quando o telefone está ou não no gancho foi utilizado um optoacoplador
TIL-111. Usualmente telefones sem fio têm essa indicação, quando o telefone está em uso,
isto é, fora do gancho, uma luz é acesa. Assim pode-se identificar quando uma pessoa está
numa extensão utilizando o telefone, ou pode-se saber se o telefone foi esquecido ligado
ocupando a linha telefônica, por exemplo.
Foi utilizado o optoacoplador TIL-111 porque este não sofre desgaste eletromecânico,
ao contrário do RedRelé (NP-CL—1A181-4/4-218) que seria a outra opção para substituir o
optoacoplador. Mesmo utilizando o Relé sensor Re2 seria necessário observar a polarização,
portanto o relé não acrescentaria vantagens.
3.4 Início e Término da Ligação
O início de uma ligação foi considerado a partir do momento que o telefone está fora
do gancho desde que algum dígito seja detectado pelo decodificador DTMF. O tempo da
46
ligação começa a contar a partir desse momento. Dessa forma, é impossível que uma ligação
computada pela operadora tenha uma duração maior do que a duração computada pelo
microcontrolador.
O final de uma ligação efetuada só ocorre quando o usuário que efetuou a ligação
desliga o telefone, salvo os casos de ligação a cobrar nos quais quem recebe a ligação é quem
tem decide quando encerrá-la.
Para identificar o fim de uma ligação efetuada pelo usuário foi utilizado o mesmo
recurso do telefone no gancho ou fora do gancho, já que uma vez no gancho o dispositivo o
sinaliza. Este dispositivo foi escolhido por disponibilizar 5V em sua saída facilitando a
interação com o microcontrolador, que trabalha na mesma faixa de tensão.
Ao tirar o telefone do gancho ocorre a sinalização do bit do optoacoplador, que está
ligado ao microcontrolador. O código do microcontrolador identifica que este bit foi ativado,
e com isso, inicia o procedimento de aguardar o número discado e enviá-lo ao LCD. O trecho
de código a seguir demonstra como o microcontrolador aguarda que este bit esteja ativo para
iniciar as outras tarefas. O código completo se encontra no anexo 2.
loop_0: setb b_opto ;b_opto = 1 jnb b_opto,loop_0 ;se b_opto=0(zero) volta ao loop_0 jnb flag_digito,loop_0 ;se ñ digitar nenhum número, volta ao loop_0
A obtenção deste sinal ocorre através de um optoaclopador. Quando o telefone está
fora do gancho, a linha telefônica tem uma tensão contínua de 9V. O optoacoplador foi ligado
como ilustrado na figura 32, de tal maneira que, quando a tensão do circuito é de 9V, um bit é
ativado, recebido pelo microcontrolador e tratado adequadamente pelo programa. Para que
esta modificação funcionasse adequadamente foi necessário observar a polarização dos sinais
que chegam ao decodificador. Inicialmente, os sinais provenientes da linha telefônica foram
ligados ao decodificador DTMF sem considerar a polaridade, porém, para que fosse possível
sinalizar quando o telefone está fora do gancho, foi necessário considerar a polarização dos
sinais, como podemos ver na figura 32 a seguir.
47
U2
TIL111
123 4
56
ACA2 GND
OUT6
R1 15K
J1
PHONE JACK-4
1234
R2
2,2K
U1
AT89C51
918 1929
30 311 2 3 4 5 6 7 8
21 22 23 24 25 26 27 28 10 11 12
13
14 1516 1739 38 37 36 35 34 33 32
RS
TX
TA
L2X
TA
L1
PS
EN
ALE
/PR
OG
EA
/VP
P
P1.
0P
1.1
P1.
2P
1.3
P1.
4P
1.5
P1.
6P
1.7
P2.
0/A
8P
2.1/
A9
P2.
2/A
10P
2.3/
A11
P2.
4/A
12P
2.5/
A13
P2.
6/A
14P
2.7/
A15
P3.
0/R
XD
P3.
1/T
XD
P3.
2/IN
TO
P3.
3/IN
T1
P3.
4/T
OP
3.5/
T1
P3.
6/W
RP
3.7/
RD
P0.
0/A
D0
P0.
1/A
D1
P0.
2/A
D2
P0.
3/A
D3
P0.
4/A
D4
P0.
5/A
D5
P0.
6/A
D6
P0.
7/A
D7
5V
Figura 32 – Figura que demonstra circuito elétrico entre o optoacoplador e microcontrolador 8051.
Quando o usuário do telefone retirar o telefone do gancho, será possível identificar esta ação e
com isso, o programa registrará os números discados.
3.5 Comunicação Serial
A comunicação serial no projeto serve para enviar ao software do computador os
dados das ligações efetuadas pelo usuário, como o número discado, a hora de início e a hora
de término da ligação e também para atualizar o RTC.
É necessária uma comunicação com o PC devido à capacidade limitada da memória
não-volátil. Como a memória EEPROM não poderia armazenar indefinidamente os dados das
ligações efetuadas, decidiu-se por transferir os dados da memória ao PC quando o usuário
desejar. Caso o número de ligações alcance a capacidade máxima de armazenamento da
memória as ligações subsequentes não serão armazenadas.
Como o microcontrolador não tem a capacidade de interfacear os sinais do barramento
RS232, foi inserido no projeto um Circuito Integrado (CI) MAX 232 para que efetuasse essa
função. A taxa de comunicação utilizada inicialmente foi de 4800Kb/s, mas posteriormente
passamos a utilizar 19200Kb/s visando uma maior taxa de transferência de dados.
A montagem do circuito do CI MAX 232 pode ser visualizada na figura 33 a seguir.
48
U3
AT89C2051
1
1213141516171819
20
23
6789
11
54
RST/VPP
P1.0/AIN0P1.1/AIN1
P1.2P1.3P1.4P1.5P1.6P1.7
VCC
P3.0/RXDP3.1/TXD
P3.2/INTOP3.3/INT1P3.4/T0P3.5/T1P3.7
XTAL1XTAL2
U2
MAX232
13
8
11
10
1
345
2
612
9
14
7
16
15
RXout
R2IN
RXin
T2IN
C+
C1-C2+C2-
V+
V-TXin
R2OUT
TXout
T2OUT
VCC
GND
P1
CONNECTOR DB9
594837261
+C5
+C5
+
C5
+
C5
Circuito MAX 232 e 8051
C5 = 4,7uF
5V
Figura 33. Circuito de montagem do MAX 232.
O envio serial dos dados da memória do hardware para o PC ocorre quando o usuário,
que opera o computador, solicita pelo software de alto nível que os dados da memória sejam
transferidos para o PC.
O usuário também teria a opção de atualizar a hora do RTC pelo software de alto nível
utilizando a opção de atualização da hora. Para atualizar a hora do RTC, o programa utilizaria
a hora corrente do Windows. Devido a este motivo o usuário deve ter a hora de seu
computador atualizada com a hora da operadora para que possa ter dados mais precisos. Essa
funcionalidade não foi implementada no projeto
Para que ocorressem essas manipulações, foi criado um código que indica para o
hardware qual ação tomar quando recebe um código pela porta serial. O código 1
(Decodificador 1307) indica que o RTC será atualizado e o código 2 (MEM 24C02) indica
que os dados da memória devem ser transferidos ao PC.
Foram efetuados testes para garantir o funcionamento da memória e do RTC.
Inicialmente o software do microcontrolador enviava ao LCD o número discado e logo em
seguida o enviava também pela porta serial. O número enviado serialmente era recebido e lido
no programa Terminal, disponível no Windows. Atualmente os dados das chamadas são
armazenados na memória EEPROM (24C02) e enviados ao PC somente quando o programa
de alto nível realiza tal solicitação.
49
3.6 Protocolo I2C
Este protocolo criado pela Philips 33 foi escolhido principalmente por ser muito
utilizado por diversos dispositivos. Uma vantagem do protocolo é utilizar apenas 2 pinos para
comunicação (clock, dados). No projeto são usados um dispositivo de memória (24C02) e um
RTC (DS1307) os quais usam esse protocolo para troca de informações, utilizando apenas
duas linhas de comunicação (I/O).
Por exemplo, se fosse utilizado o RTC V3020 da EM Microelectronic-Marin que
utiliza comunicação 3-wire, seriam necessários 3 pinos para a comunicação (UART).
Também os RTC da série NR8576 da empresa NPC (Nippon Precision Circuits Inc), utilizam
comunicação serial com 4 pinos (Serial Peripheric Interface - SPI).
A utilização do protocolo I2C foi um desafio para o projeto, observando-se que o 8051
básico não possui este tipo de comunicação. Diversas fontes foram consultadas e diversos
testes feitos até que fosse entendido o funcionamento do protocolo. O algoritmo utilizado está
disponível em: http://www.smartdata.com.au/8051/default.htm na página Sam´s 8051
Page e no anexo 3.
Basicamente, o protocolo utilizado tem duas rotinas de comunicação. A rotina
SendData que envia os dados e a rotina RcvData que recebe os dados. As outras rotinas são
apenas sub-rotinas destas duas e servem para auxiliar no fluxo de dados, identificar erros na
comunicação e gerar confirmações, etc.
A rotina SendData necessita saber o número de bytes que serão enviados pelo
protocolo (armazenados em ByteCnt), o endereço do dispositivo que receberá a informação
(armazenados em SlvAdr), que é chamado de escravo, e o endereço inicial da memória onde
estão os dados que serão enviados pelo protocolo. O primeiro ou os primeiros bytes enviados
(dependendo do dispositivo) indicarão o endereço para armazenamento dos dados. Tendo
esses itens configurados foi executada a rotina SendData e a comunicação foi estabelecida
corretamente, tanto na simulação quanto com o dispositivo físico (memória e o RTC).
A rotina RcvData também necessita ser configurada. Da mesma forma que SendData,
é necessário configurar o número de bytes que serão recebidos pelo protocolo (ByteCnt), o
endereço do dispositivo que enviará as informações (SlvAdr) e o endereço inicial onde as
informações recebidas serão armazenadas no microcontrolador. Porém, para efetuar a leitura
33 Site da Philips está disponível em: <www.philips.com>.
50
dos dispositivos é necessário simular uma gravação no endereço inicial de leitura para que o
ponteiro interno do dispositivo seja posicionado no local correto onde será efetuada a leitura.
Para utilizar o protocolo é necessário que os dispositivos tenham endereços únicos,
isto é, cada endereço será de apenas um dispositivo.
Como a utilização de 6 pinos de I/O para a comunicação com o LCD, 2 pinos para a
comunicação serial (UART), 5 pinos para a comunicação com o decodificador DTMF e 1
pino para a identificação de que o telefone está ou não no gancho, foram utilizados 14 dos 15
pinos de I/O do dispositivo AT89C2051.
Devido a necessidade de mais 2 pinos para a comunicação via protocolo I2C foi
necessário utilizar o dispositivo AT8951, possibilitando ainda a expansão do programa
(firmaware) para uma memória de maior capacidade, além de disponibilizar mais algumas
linhas de I/O para uma possível expansão de projeto, como uma memória EEPROM de maior
capacidade por exemplo.
3.7 Memória 24C02
A memória não volátil utilizada no projeto tem o papel de armazenar os dados das
ligações, tais como os últimos números discados e os horários de início e término de cada
ligação. Inserimos a memória 24C02 no projeto para mostrar que é possível implementar uma
solução que permita armazenar os dados das ligações sem que o PC esteja conectado ao
hardware ligado o tempo todo para armazenar as informações das chamadas.
A memória utilizada (24C02) tem a capacidade de 2Kbits, isto corresponde a
256bytes. A cada ligação utilizamos 16bytes para armazenar o número telefônico em formato
ASCII. As informações sobre o início da ligação são armazenadas em formato BCD ocupando
7bytes e mais 7bytes com informações sobre o término da ligação também em BCD,
totalizando 30bytes de dados a cada ligação efetuada pelo usuário. Desta forma a memória
poderá armazenar até 8 ligações com seus dados sobre início e término de cada chamada.
Cabe destacar que é possível utilizar uma memória com maior capacidade, para
armazenar mais ligações telefônicas, mas o objetivo inicial foi validar o funcionamento da
tecnologia envolvida. Por exemplo, a memória 24C16 permite armazenar até 2Kbytes de
informações.
O dispositivo 24C02 utiliza o protocolo de comunicação I2C para efetuar gravações e
leituras, como já descrito anteriormente, utiliza duas linhas de comunicação, onde uma é a
linha de clock e a outra de dados.
51
O trecho de código a seguir grava na memória os números 1, 3, 9, 2 e 4, lê os números
1, 3, e 9 e os envia ao display do módulo. No código a seguir a primeira posição da tabela de
dados enviados guarda o endereço onde será feita a gravação e a leitura da memória (00). É
efetuada primeiramente a gravação dos dados na memória, posteriormente limpa-se o LCD,
então é feita a leitura da memória e os dados lidos são enviados ao LCD. Foram retirados as
subrotinas I2C por já terem sido apresentadas na seção anterior, denominada Protocolo I2C.
Ver o programa de testes no anexo 4.
mov 30h,#00h ;endereço de gravação na memória mov 31h,#31h ;1 em ascii ->Dado que será gravado na memória mov 32h,#33h ;3 em ascii ->Dado que será gravado na memória mov 33h,#39h ;9 em ascii ->Dado que será gravado na memória mov 34h,#32h ;2 em ascii ->Dado que será gravado na memória mov 35h,#34h ;4 em ascii ->Dado que será gravado na memória call grava_mem ;envia os dados para o endereço 00 da memória call clr_dsp ;limpa o LCD call le_mem ;lê os dados gravados na memória a partir do end. 00 ;envia os dados recebidos para o LCD um a um mov R0,#(recebido_mem-1) ;R0 = endereço inicial da tabela mov r1,#3 ;R1 = num. dados a serem mostrados no LCD ver: inc r0 ;R0-> primeiro dado da tabela mov a,@r0 ;a= primeiro dado da tabela lcall dsp_dat ;lcd = primeiro dado da tabela djnz r1,ver ;diminui o num. dados enviados ao LCD jmp $ ;aguarda indefinidamente ;------------------------------------------------------------------------- ; Grava número discado ; ;------------------------------------------------------------------------- grava_mem: mov SlvAdr,#Memoria ;end do escravo = end. da memória mov ByteCnt,#06 ;serão enviados 6 bytes mov R0,#end_mem ;end. inicial dos dados em end_mem call SendData ;envia os dados referidos a cima ret ;retorna ao ponto de chamada ;------------------------------------------------------------------------- ; Lê número discado ; ;------------------------------------------------------------------------- ; ByteCnt = count of bytes to be sent. ; SlvAdr = slave address. ; Returns: ; @R0 = data received. le_mem: ;simula uma gravação para posicionar o ponteiro interno do dispositivo mov SlvAdr,#Memoria ;end do escravo = end. da memória mov ByteCnt,bytes_end ;x Bytes num. bytes para o endereço mov R0,#end_mem ;end. inicial onde dados estão call SendData ;grava o endereço de início,
;posicionando o ponteiro mov SlvAdr,#Memoria ;end do escravo = end. da memória
52
mov ByteCnt,#03h ;serão lidos 3 bytes da memória mov R0,#recebido_mem ;os 3 bytes lidos serão armazenados a
;partir do end. recebido_mem lcall RcvData ;recebe dados, armazena em recebido_mem ret ;retorna ao ponto de chamada
Para que se entenda melhor o funcionamento da memória e como este dispositivo deve
funcionar, o esquema elétrico entre as ligações da memória e o 8051 encontram-se na figura
34 a seguir.
24C02
U3
24C02A
123
456
7
8A0A1A2
GNDSDA
SCLKWP
VCC
U1
AT89C2051
1
10
1213141516171819
20
23
6
7
8911
54
RST/VPP
GND
P1.0/AIN0P1.1/AIN1P1.2P1.3P1.4P1.5P1.6P1.7
VCC
P3.0/RXDP3.1/TXD
P3.2/INTO
P3.3/INT1
P3.4/T0P3.5/T1
P3.7
XTAL1XTAL2
R110K R2
10K
5V
Figura 34 – Esquema elétrico da ligação entre o 8051 e a memória 24C02.
No esquema elétrico da figura 34 os pinos referentes a A0, A1, e A2 encontram-se
aterrados, significa então a memória utilizará o endereço 0 (zero). Estes pinos indicam a parte
baixa do endereço da memória no barramento I2C. A memória 24C02 tem por padrão de
endereço o seu nible34 mais significativo em A(1010b) e 3 bits do nible menos significativo
do endereço que o projetista escolhe. O bit menos significativo não é utilizado, pois o
protocolo I2C o utiliza para identificar gravação ou leitura, isto é, os endereços escolhidos
serão sempre números pares.
O endereço da memória no projeto é A0h utilizando o padrão memória (A=1010b) e o
endereço que escolhemos para ela (000Xb), como ilustra o quadro 5 a seguir.
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
1 0 1 0 A2 A1 A0 X
Padrão da memória Endereço escolhido pelo usuário W/R
Quadro 5 – Ilustração de como é montado o endereço da memória 24C02.
34 4bits de um byte.
53
3.8 Real Time Clock DS1307
Foi utilizado um RTC com o intuito de diminuir o processamento do RTC já que
existe um componente capaz de executar o trabalho de contagem de tempo. Desta forma não
foi necessário implementar a contagem de tempo e data evitando o que o microcontrolador
tivesse que estar ligado o tempo todo consumindo processamento para manter data e hora
atualizados.
O componente RTC DS1307 ainda tem a vantagem de funcionar com uma bateria de
3V sendo que não é necessário que o hardware esteja o tempo todo alimentado com 5V,
evitando assim a necessidade de atualização do relógio a cada vez que faltar alimentação ao
circuito.
Poderia ser utilizado o RTC da Philips (PCF8563) que trabalha com o mesmo
protocolo I2C, mas o RTC da Dallas DS1307 é encontrado mais facilmente, por isso foi o
utilizado.
A gravação e a leitura do RTC DS1307 funciona exatamente como na memória
24C02. Os mesmos procedimentos de gravação e de leitura da memória foram utilizados para
modificar a data, hora, minutos, segundos e dia da semana no RTC.
Para que se entenda melhor o funcionamento desse dispositivo o esquema elétrico
entre suas ligações e o microcontrolador 8051 encontram-se na figura 35 a seguir.
U1
DS1307
4
75
12
6
38
GND
SQW/OUTSDA
X1X2
SCLK
VBATVCC
R110K
R210K
U1
AT89C2051
1
10
1213141516171819
20
23
6
7
8911
54
RST/VPP
GND
P1.0/AIN0P1.1/AIN1P1.2P1.3P1.4P1.5P1.6P1.7
VCC
P3.0/RXDP3.1/TXD
P3.2/INTO
P3.3/INT1
P3.4/T0P3.5/T1
P3.7
XTAL1XTAL2
5V
RTC e 8051
Figura 35 – Esquema elétrico da ligação entre o 8051 e o RTC 1307.
O RTC 1307 tem por padrão de endereço, o seu nible mais significativo em D(1101b)
e 3 bits do nible menos significativo o endereço que o projetista escolhe. O bit menos
significativo não é utilizado, pois o protocolo I2C utiliza para identificar gravação ou leitura,
isto é, os endereços escolhidos serão sempre números pares como o endereço da memória.
54
O endereço do RTC no projeto é D0h utilizando o padrão D=1101b e o endereço
escolhido pelo projetista para o dispositivo (000Xb), como ilustra o quadro 6 a seguir.
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
1 1 0 1 A2 A1 A0 X
Padrão da memória Endereço escolhido pelo usuário W/R
Quadro 6 – Ilustração de como é montado o endereço do RTC 1307.
Observando-se obviamente suas particularidades, como o bit mais significativo do
endereço 00H do RTC (CH) que indica que o dispositivo está ou não contando o tempo. Outro
diferencial da memória para o RTC é que os dados referentes a tempo controladas pelo RTC
são armazenados em BCD (Binary-Code Decimal). Os outros 3 bits mais significativos são
utilizados para representar a dezena dos segundos (até 5), os 4 menos significativos a unidade,
de 0 a 9.
Da mesma forma funciona o endereço 01H com os minutos, sendo que os três
primeiros bits mais significativos (B4,B5 e B6) são utilizados para representar a dezena dos
minutos e os 4 bits menos significativos a unidade dos minutos, exatamente igual à forma que
os segundos são armazenados.
No endereço 02H do RTC por exemplo, o bit 6 indica o funcionamento do RTC em 12
ou 24horas. Se estiver no modo de 24horas, o bit 5 é utilizado para representar a hora, caso
contrário indica AM/PM (antes ou após o meio dia).
O dia da semana é armazenado no endereço 03H do RTC, e utiliza os 3 bits menos
significativos os quais funcionam da forma que o quadro 7 a seguir demonstra.
Número Dia da semana
1 domingo
2 segunda-feira
3 terça-feira
4 quarta-feira
5 quinta-feira
6 sexta-feira
7 sábado
Quadro 7. Quadro demonstrativo de digito e dias da semana correspondentes.
55
Na posição 04H do RTC é armazenado o dia do mês que já considera os anos
bissextos. Os números correspondentes podem variar dependendo do mês e do ano. Podem
variar entre 1 e 28/29 ou de 1 a 30, ou ainda de 1 a 31 como o calendário.
O endereço 05H armazena os bits referentes ao mês, e o endereço 06H os bits
referentes ao ano.
A modo de resumo, no quadro 8 a seguir está representada a estrutura interna que
armazena os dados utilizados pelo RTC, como os segundos, minutos, horas, dia da semana,
dia do mês, mês e ano.
End. Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Exemplo
00H CH Dezena dos segundos Unidade dos segundos 00-59
01H X Dezena dos minutos Unidade dos minutos 00-59
10HR 02H X 12
24 AM/PM
Dezena
das horas
Unidade das horas 01-12
00-23
03H X X X X X Dia da semana 1-7
04H X X Dezena do dia do
mês
Unidade do dia do mês 01-28/29
01-30
01-31
05H X X X Dezena
do mês
Unidade do mês 01-12
06H Dezena do ano Unidade do ano 00-99
07H OUT X X SQWE X X RS1 RS0
Quadro 8. Quadro de registradores do Real Time Clock DS1307. (DS1307)
Este dispositivo ainda possui 56 bytes de memória SRAM não volátil disponível ao
usuário. Para gravar ou ler da memória e inclusive nestes endereços utiliza-se o procedimento
de gravação exatamente igual ao efetuado na memória 24C02.
O funcionamento do RTC é definido no momento da atualização de seus valores. O
componente trabalhará em 24h ou 12h com AM/PM de acordo com sua configuração. Como a
atualização é feita pelo computador, o RTC funcionará de acordo com a configuração da hora
do PC.
Para a certificação do funcionamento do RTC foi criado um programa, a partir do
programa da memória. Com o objetivo de testar o dispositivo, gravamos uma data no RTC e
posteriormente retirando do programa de teste a parte da gravação e foi efetuada apenas a
leitura da dos dados do equipamento. O tempo continuava a ser contado, isto é, os segundos
56
estavam sendo atualizados. A conclusão foi de que o RTC estava funcionando
adequadamente.
O trecho de código a seguir demonstra o procedimento de gravação no RTC. Os
números gravados devem estar no modo BCD. SlvAdr é o endereço do escravo que será
utilizado neste momento. ByteCnt é o número de bytes que será armazenado no dispositivo.
;---------------------------------------------------------------------- ; Grava Data no RTC ; ;---------------------------------------------------------------------- ; SendData - sends one or more bytes of data to an I2C slave device. ; Enter with: ; ByteCnt = count of bytes to be sent. ; SlvAdr = slave address. ; @R0 = data to be sent (the first data byte will be the ; subaddress, if the I2C device expects one). grava_mem: mov SlvAdr,#I2CCLK ;End. do escravo = end. do RTC mov ByteCnt,#08 ;Indica q 8 bytes serão gravados no RTC mov R0,#end_mem ;End. incicial dos 8 bits call SendData ;envia os dados ao RTC ret ;retorna
Esta parte do código indica a forma de leitura no RTC. Nota-se que primeiramente é
feita uma gravação, mas desta vez grava-se apenas o endereço onde os dados serão lidos,
exatamente igual a memória. Posteriormente efetua-se a leitura efetiva dos dados. O código
completo pode ser visto no anexo 5.
;---------------------------------------------------------------------- ; Lê número discado ; ;---------------------------------------------------------------------- ; ByteCnt = count of bytes to be sent. ; SlvAdr = slave address. ; Returns: ; @R0 = data received. le_mem: mov SlvAdr,#I2CCLK ;End. do escravo = end. do RTC mov ByteCnt,bytes_end ;grava os bytes de endereço mov R0,#end_mem ;Ponteiro com o end. onde será gravado
;no RTC call SendData ;grava o end. (seta o ponteiro) mov SlvAdr,#I2CCLK ;End. do escravo = end. do RTC mov ByteCnt,#07h ;indica que 7 bytes serão lidos mov R0,#recebido_mem ;seta o ponteiro pra posição onde os
;dados serão recebidos lcall RcvData ;recebe dados ret ;retorna
57
4 RESULTADOS
Como resultado do projeto há o circuito do hardware montado, o código criado para o
microcontrolador e o software que faz a comunicação entre o PC e o hardware.
4.1 Hardware
O esquema do circuito na figura 36 mostra as ligações elétricas entre os dispositivos.
Com o objetivo converter os sinais recebidos pela linha telefônica para dígitos na forma BCD
foi utilizado o decodificador DTMF 8870. O optoacoplador foi utilizado para identificar
quando o telefone está ou não no gancho e desta forma podemos identificar com precisão o
final de uma ligação. Para que o usuário tenha a possibilidade de saber os números digitados
foi utilizado o LCD. Desta forma pode-se conferir se o número telefônico discado confere
com o número telefônico que ele desejava discar, oferecendo assim uma interface com o
usuário. Para identificar com precisão a data e hora de início e término da ligação, foi
utilizado o dispositivo RTC 1307. A memória foi utilizada para armazenar o número
telefônico discado pelo usuário e data e hora de início e término da ligação efetuada. Para
comunicar o PC com o hardware foi utilizado o dispositivo MAX 232, proporcionando a
comunicação entre o hardware e o PC. É desta forma que as informações da memória são
transferidas ao PC e também é desta forma que o RTC poderia ser atualizado pelo PC.
O microcontrolador tem o papel principal do projeto. Ele é quem faz o processamento
de toda a informação e a comunicação com os periféricos usados. A identificação de que o
telefone está fora do gancho, podendo assim ocorrer uma ligação, o tratamento do dígito
discado, a leitura da data e hora no RTC, o armazenamento dessas informações na memória
EEPROM, a transferência dos dados da memória ao PC e ainda a atualização da hora do RTC,
são algumas das funções que o microcontrolador realiza.
O esquema elétrico entre esses dispositivos está na figura 36 a seguir.
58
U1
AT89C51
9 181920
29
3031
40
12345678
2122232425262728
1011
12
13
14
15
1617
3938373635343332
RST XTAL2XTAL1
GND
PSEN
ALE/PROGEA/VPP
VCC
P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7
P2.0/A8P2.1/A9
P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15
P3.0/RXDP3.1/TXD
P3.2/INTO
P3.3/INT1
P3.4/TO
P3.5/T1
P3.6/WRP3.7/RD
P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7
DS1307
4
7
5
12
63
8
GND
SQW/OUT
SDA
X1X2
SCLKVBAT
VCC
U2
24C02A
123
4 56
78
A0A1A2
GND SDASCLK
WPVCC
BT1
BATTERY12
CM8870
1 182 173 164 155
14
613712
8
11
9 10
IN+ VDDIN- St/GTGS EStVRef StDINH
Q4
PWDNQ3OSC1Q2
OSC2
Q1
VSS TOE
R856K
R7100K
R6100K
R11100K
R1046K
R9270K
C9
1u
U2
TIL111
123 4
56
ACA2 GND
OUT6
LCD
123456
789
1011121314
GND (Terra)VCC (5V)V0RSR/WENA
B0B1B2B3B4B5B6B7
R410K
R510K
C1110n
C1010n
J1
PHONE JACK-4
1234
R1 15K
R2
2,2K
C1
10uR38,2K + C5
U2
MAX232
13
8
11
10
1
345
2
612
9
14
7
16
15RXout
R2IN
RXin
T2IN
C+
C1-C2+C2-
V+
V-TXin
R2OUT
TXout
T2OUT
VCC
GND
+
C5
+
C5
+ C5
P1
CO
NN
EC
TO
R D
B9
594837261
LCD em modo de 4bits
5V
5V
5V
5V
5V
3,579MHz
32,768KHz
11,0592MHz
5V
C5 = 4,7uF
Figura 36 – Projeto elétrico do hardware.
4.2 Firmware
O primeiro passo que o programa executa é configurar a comunicação serial, para isso
utiliza os registradores internos IE TCON entre outros. Como segundo passo a comunicação
com o LCD é configurada e escreve-se “BINA” na primeira linha do LCD. Algumas variáveis
de controle utilizadas no programa são inicializadas, como o contador de chamadas efetuadas
que fica armazenado na memória do RTC, outra variável inicializada é a variável de dígito
disponível, e ainda existe a variável que indica se existe algo escrito na segunda linha do
LCD. Para exemplificar o funcionamento do programa executado pelo microcontrolador foi
criado o fluxograma da figura 37.
59
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unre
gister
ed T
RIAL V
ersio
n
EA 3.51
- Unre
gister
ed T
RIAL V
ersio
n
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
Configura Serial
Inicializa variáveis (RTC, DTMF, LCD)
Limpa segunda linha LCD
Tel. fora do gancho?
Há algo escrito na segunda linha?
Dígito disponível?
É o primeiro dígito?Busca dados RAM <-- RTC
Tel. de volta ao gancho?
Busca dados RTC -> Armazena num discado, início e término da ligação na mem. 24C02 -> Atualiza cont. do
RTC -> Limpa Tabela_digitos
Configura LCD Imprime BINA na
primeira linha
Figura 37 – Fluxograma de funcionamento do programa executado pelo microcontrolador
A identificação de um dígito disponível ocorre quando o decodificador DTMF aciona
seu pino StD que está conectado ao pino de interrupção externa 1 do microcontrolador (P3.3).
Quando isso ocorre temos um fluxo alternativo, onde ocorre seqüencialmente a leitura do
dígito decodificado pelo DTMF, essa leitura é feita em BCD, o número lido é transformado
em ASCII e armazenado na memória RAM microcontrolador como podemos ver na figura 38
a seguir.
Não
Sim
Não
Início
Sim
Sim
Não
Sim
Não
Não
1
1
Sim
60
Lê Digito
Transforma em ASCII
Armazena na RAM
reti
Figura 38 – Fluxograma de funcionamento da interrupção externa 1.
O programa de alto nível é capaz de interagir com o hardware para adquirir os dados
referentes às ligações armazenados na memória e armazenar em arquivo. Também têm a
capacidade de atualizar a hora do RTC do hardware.
Quando ocorre uma interrupção serial, o programa verifica o que foi recebido no
registrador sbuf, se o código recebido for o código referente a leitura da memória, efetuar-se-á
a leitura do contador de números discados que está armazenado no RTC, será efetuada a
leitura dos dados e esses dados serão enviados pela porta serial (UART), depois do envio, o
contador de números discados armazenado no RTC será zerado. Caso o código seja para a
atualização do RTC, o programa armazena as informações de data (ano, mês e dia), dia da
semana e hora (hora, minutos) que virão e atualiza a hora do RTC.
O funcionamento do microcontrolador quando a comunicação com o programa de alto
nível é solicitada ocorre conforme figura 39 a seguir.
Interrupção externa 1
61
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
EA 3.51
- Unr
egist
ered
TRIA
L Ver
sion
reti
Código Lê contador do RTC
Env ia dados da EEPROM
pela porta serial
Zera cont. RTCAtualiza RTC
com os dados recebidos
Figura 39 – Execução da interrupção serial.
Para efetuar a montagem e o funcionamento de todos os componentes previstos
utilizamos um prot-o-board. Na figura 40 a seguir pode-se visualizar todos os componentes do
projeto e suas ligações.
Figura 40 – Foto com todos os componentes do projeto integrados.
Serial
62
4.3 Software
Para entrar no programa é necessário q o usuário esteja cadastrado, desta forma evita-
se que qualquer pessoa tenha acesso as ligações efetuadas, como podemos ver na figura 41 a
seguir.
Figura 41 – Tela de login e senha de usuário
Depois que o usuário é reconhecido, com login e senha válidos, passa pela tela
Password Dialog aparecerá a tela principal do programa, onde o usuário pode fazer a leitura
das informações armazenadas na memória do hardware, atualizar a hora do RTC e entrar na
tela de relatórios. Foram inseridos alguns números nas datas entre 07/12/2004 e 09/12/2004
para demonstração do funcionamento do software (ver figura 42).
Figura 42 - Tela principal do programa.
63
Na tela de relatórios são listados as ligações efetuadas e seus dados. É possível fazer
busca de ligações efetuadas com parte do número telefônico. No exemplo a seguir podemos
observar que todas as ligações efetuadas para telefones em que “281” (nesta seqüência) fazia
parte dos número telefônico foram listados. (ver figura 43).
Figura 43 – Busca efetuada com parte do número telefônico.
É possível também efetuar buscas de ligações efetuadas com limites de datas, isto é, o
usuário seleciona uma data de início e uma data de término, e todas as ligações efetuadas
dentro deste período são listadas. No exemplo a seguir podemos ver uma busca efetuada com
data de início em 8/12/2004 e término em 09/12/2004, e todas as ligações efetuadas neste
período (ver figura 44).
Figura 44 – Resultado de busca por data.
64
5 CONCLUSÕES
O objetivo principal de identificar as chamadas efetuadas via rede de telefonia fixa e
armazenar os dados relevantes a essas chamadas foi alcançado.
O microcontrolador 89C51 da Atmel foi programado para efetuar as tarefas a ele
destinadas, como comunicação serial com o PC, comunicação serial via protocolo I2C com os
periféricos (memória EEPROM e RTC), envio de dados ao LCD, tratamento dos dados
recebidos do DTMF e sinalização de telefone fora do gancho. Esse dispositivo mostrou-se
adequado para a realização das tarefas a ele incumbidas.
Com o RTC conseguem-se dados precisos referentes a tempo de início e término da
chamada.
A memória 24C02 foi utilizada no projeto para armazenar os número discado e dados
referentes ao início e término da ligação e mostrou-se adequada para validar o funcionamento
do protótipo.
O DTMF identificou com precisão os números discados e não se observou
interferência de ruídos, resultando numa economia de tempo no desenvolvimento do projeto,
pois não foi necessário projetar filtros para identificar os tons dos dígitos telefônicos e
também não foi necessário utilizar conversores AD para transformar esses dígitos em sinais
compreensíveis (BCD) ao microcontrolador.
O software desenvolvido em alto nível recebe as informações armazenadas na
memória 24C02 e armazena num arquivo de texto e também envia informações relativas à
data e hora do PC para atualizar o RTC do hardware, desta forma atingindo o objetivo do
software comunicar-se com o hardware, além de incluir algumas facilidades com a base de
dados criada, como a pesquisa de números telefônicos e a identificação das chamadas
efetuadas em um certo período de tempo.
O resultado do projeto foi satisfatório, pois atingiu os objetivos propostos, permitindo
integrar os conhecimentos de hardware e software adquiridos no curso de engenharia de
computação.
65
6 PERSPECTIVAS
Notou-se no projeto que algumas melhoras poderiam ser aplicadas para que o projeto
se torne um produto.
Uma modificação em relação à memória seria o modo de armazenamento das
informações. Isto é, ao invés de armazenar os dados em ASCII, os dados poderiam ser
armazenados em formato BCD. Desta forma, o número telefônico que armazenado em
formato ASCII ocupa 16bytes, no formato BCD ocuparia apenas 8bytes. Os dados sobre o
início e término da ligação já são armazenados em formato BCD e ambos os dados ocupam
apenas 14bytes no total. Com o número telefônico em ASCII e dados sobre início e término
da ligação em BCD ocupa-se no total 30Bytes para armazenamento dessas informações. Se o
número telefônico discado também fosse armazenado em formato BCD, seriam ocupados
apenas 22bytes, e com isto economizaríamos aproximadamente 25% de espaço na memória
em relação a quantidade de dados ocupados atualmente.
Outra modificação que poderia ser feita é em relação ao dispositivo de memória, este
dispositivo poderia ser substituído por uma memória de maior capacidade com o objetivo de
tornar o hardware independente do computador por mais tempo. Por exemplo, a memória
24C16 tem capacidade de 16KBits, a qual é organizada internamente em 2048X8. Em outras
palavras, são 8 memórias de 2KBits internamente interconectadas. Para chavear entre as
memórias, o dispositivo utiliza paginação por pinos de controle (A0, A1 e A2).Desta forma
seria possível armazenar 8 vezes mais conteúdo. Isto é, com a memória 24C16 poderíamos
armazenar, no modo BCD, até 85 ligações segundo o padrão de 24 Bytes sugerido. Ainda
existem comercialmente memórias que poderiam armazenar até 1MBit permitindo o
armazenamento de até 5461 ligações, usando o padrão de 24 Bytes sugerido.
Em relação à comunicação com o computador, poderíamos deixar de usar o modo de
comunicação pela porta serial (UART) e implementar uma comunicação pela porta serial
USB que possui uma velocidade de transferência maior, além de que a disponibilidade das
portas UART nos PC´s estão diminuindo.
O funcionamento do dispositivo poderia depender apenas da tensão da linha
telefônica, obtendo 5V dos 9V que a linha telefônica mantém quando o telefone está fora do
gancho, aplicando uma fonte alimentada pela linha telefônica ao circuito.
66
7 REFERÊNCIAS BIBLIOGRÁFICAS
A. FILHO, Roberto Paulo Dias. Eletrônica. Protocolo I2C. Disponível em: <http://www.eletronica.org/modules.php?name=News&file=article&sid=13>. Acesso em 10/06/2004.
ACESSA.COM Tecnologia Artnet. Disponível em <http://jfservice.com.br/cidade/arquivo/jfhoje/2003/09/12-telefonia/>. Acesso em: 28/05/2004.
ALENCAR, Marcelo Sampaio de.- Telefonia Digital. São Paulo:Érica, 1998.
BONFIM, Marlio José do Couto. Conversores Analógico-Digitais e Digitais Analógicos. Curitiba – PR. Disponível em: <http://www.eletrica.ufpr.br/marlio/medidas/apostila/apostila3a.pdf>. Acesso em 30/05/2004.
CONVERSORES AD-DA. Centro de Informática UFPE. Disponível em: <http://www.cin.ufpe.br/~mel/curso_pct/aulas/aula03.PDF>. Acesso em 08/06/2004.
CRAM. O que é e como funcionam os tons DTMF. Disponível em <http://planeta.terra.com.br/lazer/cram/dtmf.htm>. Acesso em 08/06/2004.
CTRL+C. Telégrafo. 1999. Disponível em: <http://www.hackemate.com.ar/ezines/ctrl-c/01ctrl-c/01ctrl-c.txt>. Acesso em: 07/08/2004.
DS1307 – Product Folder. Disponível em <http://www.dalsemi.com>. Acesso em 2 de setembro de 2004.
ELETRÔNICA. Disponível em: <http://www.terravista.pt/Fernoronha/2604/download.htm>. Acesso em: 09/06/2004.
ELFA, Disponível em <www.elfa.se>. Acesso em 25/02/2004.
ENCARTA Encyclopedia 96. US: Microsoft Corporation,1996. CD-ROM. Traduzido por nós.
FERREIRA, Aurélio Buarque de Holanda. Dicionário da Língua Portuguesa. Rio de Janeiro: Nova Fronteira, 1980.
FISHER, Paul Douglas. Microprocessadores. Porto Alegre, 2000. Disponível em: <http://www.famed.ufrgs.br/disciplinas/inf_med/comp_micro.htm>. Acesso em 11/06/2004.
GONTIJO, Benício. Microcontrolador 8051. Disponível em: <http://www.dcc.ufmg.br/~daride/8051.htm>. Acesso em 02/06/2004.
IDOETA, Ivan Valeije; CAPUANO, Francisco Gabriel. Elementos de eletrônica digital. 26 ed. São Paulo: Érica, 2000.
INTERNET + Operadoras locais de Telecomunicação. Disponível em <http://www.netpar.com.br/vagnerg/contapul.html>. Acesso em: 26/05/2004.
LERCHER, C. Bloqueador de chamadas telefônicas. Eletrônica & Microinformática, São Paulo, agosto de 2003, Nº 17, p. 31 a 36.
67
MIKROELEKTRONIKA. Disponível em: <http://www.mikroelektronika.co.yu/portuguese/product/books/picbook/capitulo1.htm>. Acesso em 25/05/2004.
MURDOCCA, Miles J.; HEURING, Vincent P. Introdução à Arquitetura de Computadores. Rio de Janeiro: Campus, 2000.
MUSEU DE ELETRICIDADE. Telégrafo. Disponível em: <http://geocities.yahoo.com.br/jcc5001pt/museutelegrafo.htm>. Acesso em: 04/05/2004.
NICOLAI, Nélio José. Inventor do Bina. 2001. Disponível em: <http://www.nelio.hpg.ig.com.br/>. Acesso em 20/11/2003.
RADIOAMADORES. Displays. Disponível em: <http://www.radioamadores.net/displays.htm>. Acesso em: 09/06/2004.
RELÉ UP-DW PER TAPPARELLE. Disponível em: <http://web.tiscali.it/i2viu/electronic/tappupdw.htm>. Acesso em: 10/06/2004.
SABIDO. Disponível em <http://www.sabido.com.br/artigo.asp?art=132>. Acesso em 25/05/2004.
SILVA JÚNIOR, Vidal Pereira da. Aplicações práticas do microcontrolador 8051. São Paulo: Érica, 1998.
SILVEIRA FILHO, Elmo Dutra. Microcontroladores e Automação: Panorama Atual e Perspectivas Futuras. Disponível em: <http://www.rs.senai.br/mecatronica/download.htm>. Acesso em 02/06/2004.
TEXAS INSTRUMENTS. Disponível em: <www.ti.com>. Acesso em 25/05/2004.
VANTAGENS E DESVANTAGENS DO RISC. Disponível em: <http://members.tripod.com/~risc_sm/vantagens.html>. Acesso em: 11/06/2004.
68
8 Anexos
8.1 Anexo 1
;========================================================== ;Bina_10.a51 ;Este programa é um BINA ;Identifica os números recebidos, e enviados ;LCD 8 bits ;========================================================== rs equ p3.2 ;pino de controle do LCD ena equ p3.7 ;pino de controle do LCD ;========================================================== org 0h jmp prog ;salto para o programa org 0013h jmp intr1 ;salto para interrupção externa 1 ;========================================================== prog: mov sp, #2Fh ;Carregar stack pointer mov ie, #84h ;reg. IE <- 84h (ativa Int. ext 1) mov tcon,#04h ;reg. TCON <-04 (Ativa int. ext 1) mov dptr,#lcd_INICIA;ponteiro p/ tabela de inicialização clr rs ;rs=0 -> INSTRUÇÕES mov a,#0 ;acc=0 movc a,@a+dptr ;1a pos. da tabela de incialização mov r6,a ;r6=acc lcall mensagem ;envia para o lcd mov dptr,#Texto_I ;texto inicial "BINA" mov a,#0 ;acc=0 movc a,@a+dptr ;1a pos. da msg BINA mov r6,a ;r6=acc setb rs ;rs=1 lcall mensagem ;envia a msg ao LCD mov a,#0c0h ;mudança p/ 2a linha lcall lcd_com ;executa comando lcall clr_lin ;limpa linha atual mov a,#0c0h ;retorno do cursor lcall lcd_com ;executa comando jmp $ ;aguarda indefinidamente
69
;========================================================== ;envia dados ao LCD lcd_data: setb rs ;rs=1 jmp lcd ;pula para lcd: lcd_clr: mov a,#01h ;a=1 lcd_com: clr rs ;RS=0 -> instruções lcd: setb ena ;Bit Alto, na descida executa nop ;não faz nada mov P1,A ;P1 (LCD) recebe acc clr ena ;envia dados ao LCD lcall delay3 ;aguarda ret ;retorna ;========================================================== ;procedimento para limpar a linha atual clr_lin: mov dptr,#Texto_II ;texto inicial mov a,#0 ;acc=0 movc a,@a+dptr ;1a pos. da tabela mov r6,a ;r6=a setb rs ;rs=1 lcall mensagem ;envia mensagem em branco ret ;retorna ;========================================================== ;procedimento de envio de mensagem ao LCD mensagem: mov r5,#1 ;r5=1 mens_1: mov a,r5 ;acc=r5 movc A,@A+dptr ;2a posição da tabela lcall lcd ;chama rotina lcd: inc r5 ;R5+1 djnz r6,mens_1 ;decrementa contador de tam. da tabela ret ;retorna ;========================================================== ;procedimento de espera delay: push 2 ;guarda registrador 2 na pilha push 3 ;guarda registrador 3 na pilha push 4 ;guarda registrador 4 na pilha mov r2,#50 ;r2=50 delay2: lcall delay3 ;chama rotina delay 3 djnz r2,delay2 ;se r2<>0 vai para delay2 pop 4 ;restaura valor do registrador 4 pop 3 ;restaura valor do registrador 3 pop 2 ;restaura valor do registrador 2 ret ;retorna
70
;========================================================== ;procedimento de espera delay3: push 3 ;guarda registrador 3 na pilha push 4 ;guarda registrador 4 na pilha mov r3,#20 ;r3=20 delay1: mov r4,#0 ;r4=0 djnz r4,$ ;se R4<>0 DEC r4 djnz r3,delay1 ;se R3<>0 DEC r3 e vai para delay1 pop 4 ;restaura valor do registrador 4 pop 3 ;restaura valor do registrador 3 ret ;========================================================== org 200h ;texto inicial Texto_I: db 16,' BINA ' ;texto para limpar a linha Texto_II: db 16,' ' ;tabela de inicialização do LCD LCD_INICIA: db 5,38h,38h,06h,0Eh,01h ;========================================================== intr1: push 2 ;guarda registrador 4 na pilha mov a,p3 ;acc <- P3 anl a,#03h ;Q0,Q1 --> P3.0 e P3.1 mov r2,a ;r2=a mov a,p3 ;acc <- P3 anl a,#30h ;Q2,Q3 --> P3.4 e P3.5 clr c ;limpa carry rr a ;rotaciona bits para direita clr c ;limpa carry rr a ;rotaciona bits para direita orl a,r2 ;verifica os pinos add a,#30h ;Transforma em ASCII cjne a,#3ah,envia ;se for <> 30a pula para envia ;se <> de 0 envia ao LCD mov a,#30h ;a=30h q é = 0(zero) envia: lcall lcd_data ;Envia para o display em ASCII pop 2 ;restaura valor do registrador 2 reti ;retorna interrupção ;========================================================== end ;fim do programa ;==========================================================
71
8.2 Anexo 2
;========================================================== ;Programa para o hardware móvel - (bina_11.a51) ;Versão 1.1 ;CM8870 - Decodificador DTMF ;Possui display com 4 bits de dados (não 8 como de costume) ;Opto-acoplador que indica telefone fora do gancho ou não ;========================================================== ;========================================================== ; Inicialização do programa ;========================================================== rs equ p3.2 ;pino de controle do LCD ena equ p3.7 ;pino de controle do LCD b_opto equ p3.5 ;indica tel. no gancho ou não NUM equ 40H ;end. do NUM (q guardará o ;end. da 1a pos. da tabela) flag_digito equ B.0 ;indica existe novo dígito ;========================================================== ; Endereços de chamada ;========================================================== org 0h jmp prog ;salto para prog org 0013h jmp intr1 ;salto para intr1 ;========================================================== ; Programa Principal ;========================================================== prog: mov sp, #2Fh ;Carregar stack pointer mov ie, #84h ;reg. IE <- 84h (ativa Int. ext 1) mov tcon,#04h ;reg. TCON <-04 (Ativa int. ext 1) lcall delay ;espera clr flag_digito ;limpa variável flag_digito ;========================================== ; Inicializa LCD com 4 bits de dados ;========================================== mov dptr,#lcd_INICIA; ;aponta para a tabela de inicialização clr rs ;rs=0 -INSTRUÇÕES mov a,#0 ;a=0 movc a,@a+dptr ;a=a+endereço tabela inicialização mov r6,a ;r6=ponteiro p/ inicialização do display lcall mensagem ;chama rotina de envio de mensagem
72
;============================================== ; Imprime Texto_I no LCD ;============================================== mov dptr,#Texto_I ;texto inicial mov a,#0 ;a=0 movc a,@a+dptr ;a= endereço inicial do Texto_I mov r6,a ;r6 = endereço inicial do Texto_I setb rs ;rs=1, seta para escrita no LCD lcall mensagem ;Escreve na tela o Texto_I mov a,#0c0h ;mudança p/ 2a linha lcall lcd_com ;executa comando q está no acc lcall clr_lin ;limpa linha mov a,#0c0h ;mudança p/ 2a linha lcall lcd_com ;executa comando q está no acc loop_0: setb b_opto ;b_opto = 1 jnb b_opto,loop_0 ;se b_opto=0(zero) volta ao loop_0 jnb flag_digito,loop_0 ;se n digitar nenhum número, volta ao loop_0 loop_1: jb b_opto,loop_1 ;se tel. fora do gancho aguarda mov a,#0c0h ;mudança p/ 2a linha lcall lcd_com ;executa comando q está no acc lcall clr_lin ;limpa linha atual mov a,#0c0h ;mudança p/ 2a linha lcall lcd_com ;executa comando q está no acc clr flag_digito ;indica que o número ja foi tratado jmp loop_0 ;pula para loop_0 ;========================================================== ; Comandos do LCD ;========================================================== ;============================================== ; Seleciona o modo de recepção de dados no LCD ;============================================== lcd_data: setb rs ;rs=1, seta para escrita no LCD jmp lcd ;pula para lcd: ;============================================== ; Limpa todo o LCD ;============================================== lcd_clr: mov a,#01h ;a=1 ;============================================== ; Seleciona o modo de recepção de instr. no LCD ;============================================== lcd_com: clr rs ;RS=0: inst.
73
;============================================== ; Envia Dados/Instruções para o LCD ;============================================== lcd: setb ena ; ENA=1 aguarda instrução nop ;não opera push acc ;guarda o dado do ACC na pilha anl A,#0F0h ;Guarda a parte alta do ACC orl A,#0Fh ;máscara mov P1,A ;Envia os 4 bits + significativos ao LCD clr ena ;ativa LCD para Executar instrução lcall delay3 ;aguarda setb ena ;ENA=1 aguarda instrução nop ;aguarda ENA=1 pop acc ;busca o dado que foi recebido em ACC swap A ;troca parte alta pela parte baixa do ACC anl A,#0F0h ;guarda a parte alta do ACC orl A,#0Fh ;máscara mov P1,A ;Envia os 4 bits + significativos ao LCD clr ena ;ativa LCD para Executar instrução lcall delay3 ;aguarda ret ;retorna ;========================================================== clr_lin: mov dptr,#Texto_II ;texto inicial mov a,#0 ;acc=0 movc a,@a+dptr ;aponta pra 1a pos. da tabela mov r6,a ;r6=acc setb rs ;rs=1 lcall mensagem ;chama procedimento mensagem ret ;retorna ;========================================================== mensagem: mov r5,#1 ;r5=1 mens_1: mov a,r5 ;a=r5 movc A,@A+dptr ;a=posição X da tabela lcall lcd ;chama procedimento LCD inc r5 ;r5+1 djnz r6,mens_1 ;se r6<>0 DEC r6 e pula pra mens_1 ret ;retorna ;========================================================== ;procedimento de espera delay: push 2 ;guarda registrador 2 na pilha push 3 ;guarda registrador 3 na pilha push 4 ;guarda registrador 4 na pilha mov r2,#50 ;r2=50 delay2: lcall delay3 ;chama rotina delay 3 djnz r2,delay2 ;se r2<>0 vai para delay2 pop 4 ;restaura valor do registrador 4 pop 3 ;restaura valor do registrador 3 pop 2 ;restaura valor do registrador 2 ret ;retorna
74
;========================================================== ;procedimento de espera delay3: push 3 ;guarda registrador 3 na pilha push 4 ;guarda registrador 4 na pilha mov r3,#20 ;r3=20 delay1: mov r4,#0 ;r4=0 djnz r4,$ ;se R4<>0 DEC r4 djnz r3,delay1 ;se R3<>0 DEC r3 e vai para delay1 pop 4 ;restaura valor do registrador 4 pop 3 ;restaura valor do registrador 3 ret ;retorna ;========================================================== org 200h ;texto inicial Texto_I: db 16,' BINA ' ;texto para limpar a linha Texto_II: db 16,' ' ;tabela de inicialização do LCD LCD_INICIA: db 7,33h,32h,28h,08h,01h,06h,0Ch ;========================================================== ;interrupção externa 1 intr1: setb flag_digito ;indica q tem novo dígito mov a,p1 ;acc <- P1 anl a,#0Fh ;acc= parte baixa P1 add a,#30h ;Transforma em ASCII cjne a,#3ah,envia ;se a<>3ah pula para envia mov a,#30h ;a=30h ou 0(zero) em ASCII envia: lcall lcd_data ;Envia para o display em ASCII reti ;retorna interrupção ;========================================================== end ;fim do programa ;==========================================================
75
8.3 Anexo 3
;Rotinas do protocolo de comunicação I2C implementado em assembly. ;I2C EQUates I2CCLK equ 0A0h ;Slave address for PCF8583 clock chip. I2CRAM equ 0AEh ;Slave address for PCF8570 RAM chip. I2CIO equ 4Eh ;Slave address for PCF8574 I/O expander. I2CLED equ 76h ;Slave address for SAA1064 LED driver. ;I2C Data storage locations BitCnt data 0Ah ;Bit counter for I2C routines. ByteCnt data 0Bh ;Byte counter for I2C routines. SlvAdr data 0Ch ;Slave address for I2C routines. tout data 0Dh ;timeout register XmtDat data 10h ;I2C transmit buffer, 8 bytes max. RcvDat data 18h ;I2C receive buffer, 8 bytes max. I2CFlags data 22h ;Location for bit flags NoAck bit I2CFlags.0 ;I2C no acknowledge flag. BusFault bit I2CFlags.1 ;I2C bus fault flag. I2CBusy bit I2CFlags.2 ;I2C busy flag. SCLPin bit P1.6 ;I2C serial clock line. SDAPin bit P1.7 ;I2C serial data line. ;------------------------------------------------------------- ; I2C Routines ;------------------------------------------------------------- ; ; BitDly - insures minimum high and low clock times on I2C bus. ; This routine must be tuned for the actual oscillator frequency used, shown ; here tuned for a 12MHz clock. Note that the CALL instruction that invokes ; BitDly already uses 2 machine cycles. BitDly: NOP ;NOPs to delay 5 microseconds (minus 4 ; machine cycles for CALL and RET). RET ; SCLHigh - sends SCL pin high and waits for any clock stretching peripherals. SCLHigh: SETB SCLPin ;Set SCL from our end. JNB SCLPin,$ ;Wait for pin to actually go high. RET ; SendStop - sends an I2C stop, releasing the bus. SendStop: CLR SDAPin ;Get SDA ready for stop. CALL SCLHigh ;Set clock for stop. CALL BitDly SETB SDAPin ;Send I2C stop. CALL BitDly CLR I2CBusy ;Clear I2C busy status. RET ;Bus should now be released.
76
; SendByte - sends one byte of data to an I2C slave device. ; Enter with: ; ACC = data byte to be sent. SendByte: MOV BitCnt,#8 ;Set bit count. SBLoop: RLC A ;Send one data bit. MOV SDAPin,C ;Put data bit on pin. CALL SCLHigh ;Send clock. CALL BitDly CLR SCLPin CALL BitDly DJNZ BitCnt,SBloop ;Repeat until all bits sent. SETB SDAPin ;Release data line for acknowledge. CALL SCLHigh ;Send clock for acknowledge. CALL BitDly JNB SDAPin,SBEX ;Check for valid acknowledge bit. SETB NoAck ;Set status for no acknowledge. SBEX: CLR SCLPin ;Finish acknowledge bit. CALL BitDly RET ; GoMaster - sends an I2C start and slave address. ; Enter with: ; SlvAdr = slave address. GoMaster: SETB I2CBusy ;Indicate that I2C frame is in progress. CLR NoAck ;Clear error status flags. CLR BusFault JNB SCLPin,Fault ;Check for bus clear. JNB SDAPin,Fault CLR SDAPin ;Begin I2C start. CALL BitDly CLR SCLPin CALL BitDly ;Complete I2C start. MOV A,SlvAdr ;Get slave address. CALL SendByte ;Send slave address. RET Fault: SETB BusFault ;Set fault status RET ; and exit. ; SendData - sends one or more bytes of data to an I2C slave device. ; Enter with: ; ByteCnt = count of bytes to be sent. ; SlvAdr = slave address. ; @R0 = data to be sent (the first data byte will be the ; subaddress, if the I2C device expects one). SendData: CALL GoMaster ;Acquire bus and send slave address. JB NoAck,SDEX ;Check for slave not responding. SDLoop: MOV A,@R0 ;Get data byte from buffer. CALL SendByte ;Send next data byte. INC R0 ;Advance buffer pointer. JB NoAck,SDEX ;Check for slave not responding. DJNZ ByteCnt,SDLoop ;All bytes sent? SDEX: CALL SendStop ;Done, send an I2C stop. RET
77
;RcvByte - receives one byte of data from an I2C slave device. ; Returns: ; ACC = data byte received. RcvByte: MOV BitCnt,#8 ;Set bit count. RBLoop: CALL SCLHigh ;Read one data bit. CALL BitDly MOV C,SDAPin ;Get data bit from pin. RLC A ;Rotate bit into result byte. CLR SCLPin CALL BitDly DJNZ BitCnt,RBLoop ;Repeat until all bits received. PUSH ACC ;Save accumulator MOV A,ByteCnt CJNE A,#1,RBAck ;Check for last byte of frame. SETB SDAPin ;Send no acknowledge on last byte. SJMP RBAClk RBAck: CLR SDAPin ;Send acknowledge bit. RBAClk: CALL SCLHigh ;Send acknowledge clock. POP ACC ;Restore accumulator CALL BitDly CLR SCLPin SETB SDAPin ;Clear acknowledge bit. CALL BitDly RET ;RcvData - receives sends one or more bytes of data from an I2C slave device. ; Enter with: ; ByteCnt = count of bytes to be sent. ; SlvAdr = slave address. ; Returns: ; @R0 = data received. ; Note: to receive with a subaddress, use SendData to set the subaddress ; first (no provision for repeated start). RcvData: INC SlvAdr ;Set for READ of slave. CALL GoMaster ;Acquire bus and send slave address. JB NoAck,RDEX ;Check for slave not responding. RDLoop: CALL RcvByte ;Receive next data byte. MOV @R0,A ;Save data byte in buffer. INC R0 ;Advance buffer pointer. DJNZ ByteCnt,RDLoop ;Repeat until all bytes received. RDEX: CALL SendStop ;Done, send an I2C stop. RET
78
8.4 Anexo 4
;---------------------------------------------------------- ;Procedimento de Teste de memória I2C enviando o resultado ;lido para o LCD ;é setada a posição correta da memória 24C02 que começa em ;0AX sendo q X=número par. Este programa grava os números ;1, 3, 9, 2 e 4 na memória, em modo ASCII. Faz a leitura ;dos mesmos números em 2 vezes, na primeira lê 3 e na ;segunda os últimos 2 números. Fizemos este teste porque na ;simulação perdíamos a posição do ponteiro após a leitura ;mas na prática não acontece, provando que o protocolo está ;funcionando adequadamente. ;a primeira posição da end_mem indica o end. de gravação na ;memória 24C02 ;---------------------------------------------------------- clr_dsp equ 10AAh ;código que limpa o display do módulo dsp_dat equ 10FFh ;código que envia um dado em ascii para o
;LCD do módulo flag_display equ B.0 ;bit do display ocupado ou não NUM equ 4dH ;endereço do NUM (q guardará o endereço da primeira posiçao da tabela) ;I2C EQUates I2CCLK equ 0D0h ;Slave address for 24C02 clock chip. Memoria equ 0A0h ;24C02 ;I2C Data storage locations BitCnt equ 0Ah ;Bit counter for I2C routines. ByteCnt equ 0Bh ;Byte counter for I2C routines. SlvAdr equ 0Ch ;Slave address for I2C routines. tout equ 0Dh ;timeout register XmtDat equ 10h ;I2C transmit buffer, 8 bytes max. RcvDat equ 18h ;I2C receive buffer, 8 bytes max. I2CFlags equ 22h ;Location for bit flags NoAck bit I2CFlags.0 ;I2C no acknowledge flag. BusFault bit I2CFlags.1 ;I2C bus fault flag. I2CBusy bit I2CFlags.2 ;I2C busy flag. SCLPin bit P1.6 ;I2C serial clock line. SDAPin bit P1.7 ;I2C serial data line. end_mem equ 30h ;endereço dos dados q serão enviados à memória recebido_mem equ 40h ;endereço dos dados q serão recebidos da
;memória bytes_end equ 2fh ;qtidade de bytes de end. caso seja mais de um
79
;============================================================= org 5000h ;endereço de início de programa no módulo mov sp,#50h ;ponteiro = 50h mov bytes_end, #1 ;endereço com X bytes ;(alguns disp. usam 2 bytes de end.) mov 30h,#00h ;endereço de gravação na memória mov 31h,#31h ;1 em ascii ->Dado que será gravado na memória mov 32h,#33h ;3 em ascii ->Dado que será gravado na memória mov 33h,#39h ;9 em ascii ->Dado que será gravado na memória mov 34h,#32h ;2 em ascii ->Dado que será gravado na memória mov 35h,#34h ;4 em ascii ->Dado que será gravado na memória call grava_mem ;envia os dados para o endereço 00 da memória call clr_dsp ;limpa o LCD call le_mem ;lê os dados gravados na memória a partir do end. 00 ;envia os dados para o LCD um a um mov R0,#(recebido_mem-1) ;R0 = endereço inicial da tabela mov r1,#5 ;R1 = número de dados a serem mostrados ver: inc r0 ;R0-> primeiro dado da tabela mov a,@r0 ;a= primeiro dado da tabela lcall dsp_dat ;lcd = primeiro dado da tabela djnz r1,ver ;diminui o num.dados a ser enviado para o LCD jmp $ ;aguarda indefinidamente ;------------------------------------------------------------------------- ; Grava número discado ; ;------------------------------------------------------------------------- grava_mem: mov SlvAdr,#Memoria ;end do escravo = end. da memória mov ByteCnt,#06 ;serão enviados 6 bytes mov R0,#end_mem ;end. inicial dos dados em end_mem call SendData ;envia os dados referidos a cima ret ;retorna ao ponto de chamada
80
;------------------------------------------------------------------------- ; Lê número discado ; ;------------------------------------------------------------------------- ; ByteCnt = count of bytes to be sent. ; SlvAdr = slave address. ; Returns: ; @R0 = data received. le_mem: ;simula uma gravação para posicionar o ponteiro interno do dispositivo mov SlvAdr,#Memoria ;end do escravo = end. da memória mov ByteCnt,bytes_end ;x Bytes número de bytes necessários
;para o endereço mov R0,#end_mem ;end. inicial de onde os dados estão call SendData ;grava end. de início, posicionando o
;ponteiro mov SlvAdr,#Memoria ;end do escravo = end. da memória mov ByteCnt,#03h ;serão lidos 3 bytes da memória mov R0,#recebido_mem ;os 3 bytes lidos serão armazenados a
;partir do end. recebido_mem lcall RcvData ;recebe os dados e armazena no end.
;referido acima ret ;retorna ao ponto de chamada ;============================================================= ;------------------------------------------------------------- ; I2C Routines ;------------------------------------------------------------- ;A partir daqui entram as rotinas do protocolo I2C que estão no anexo 3
81
8.5 Anexo 5
;========================================================== ;Programa para o módulo - (Test_RTC.a51) ;Testa o funcionamento do RTC ;========================================================== clr_dsp equ 10AAh dsp_dat equ 10e7h flag_display equ B.0 NUM equ 4dH ;endereço do NUM (q guardará o endereço da
;primeira posiçao da tabela) ;I2C EQUates I2CCLK equ 0D0h ;Slave address for PCF8583 clock chip. Memoria equ 0A0h ;24C02 ;I2C Data storage locations BitCnt equ 0Ah ;Bit counter for I2C routines. ByteCnt equ 0Bh ;Byte counter for I2C routines. SlvAdr equ 0Ch ;Slave address for I2C routines. tout equ 0Dh ;timeout register XmtDat equ 10h ;I2C transmit buffer, 8 bytes max. RcvDat equ 18h ;I2C receive buffer, 8 bytes max. I2CFlags equ 22h ;Location for bit flags NoAck bit I2CFlags.0 ;I2C no acknowledge flag. BusFault bit I2CFlags.1 ;I2C bus fault flag. I2CBusy bit I2CFlags.2 ;I2C busy flag. SCLPin bit P1.2 ;I2C serial clock line. SDAPin bit P1.1 ;I2C serial data line. end_mem equ 30h ;endereço dos dados q serão enviados à memória recebido_mem equ 40h ;endereço dos dados q serão recebidos da ;memória bytes_end equ 2fh ;qtidade de bytes de end. caso seja mais de um
82
;============================================================= org 5000h mov sp,#50h mov bytes_end, #1 ;endereço com X bytes mov 30h,#00h ;endereço inicial de gravação mov 31h,#00h ;segundos = 00 mov 32h,#11h ;minutos = 11 mov 33h,#11h ;horas = 11 mov 34h,#06h ;sexta-feira mov 35h,#11h ;dia 11 mov 36h,#11h ;novembro mov 37h,#11h ;2011 ;call grava_mem ;procedimento de gravação ;qdo regravamos este procedimento ;comentamos esta parte para confirmar ;que o RTC estava contando call clr_dsp ;limpa display call le_mem ;le da memória mov R0,#(recebido_mem-1) ;ponteiro para end. antes de recebido_mem mov r1,#5 ;r1=5 num. de dados q serão lidos ver: inc r0 ;R0+1 mov a,@r0 ;a = o q tem dentro do end. apontado por r0 lcall dsp_dat ;envia ao LCD em ASCII djnz r1,ver ;se r1<>0 dec R1 e pula para ver: jmp $ ;aguarda indefinidamente ;---------------------------------------------------------------------- ; Grava Data na Memória ; ;---------------------------------------------------------------------- ; SendData - sends one or more bytes of data to an I2C slave device. ; Enter with: ; ByteCnt = count of bytes to be sent. ; SlvAdr = slave address. ; @R0 = data to be sent (the first data byte will be the ; subaddress, if the I2C device expects one). grava_mem: mov SlvAdr,#I2CCLK ;End. do escravo = end. do RTC mov ByteCnt,#08 ;Indica q 8 bytes serão gravados no RTC mov R0,#end_mem ;End. incicial dos 8 bits q devem estar na sequencia call SendData ;envia os dados ao RTC ret ;retorna
83
;---------------------------------------------------------------------- ; Lê número discado ; ;---------------------------------------------------------------------- ; ByteCnt = count of bytes to be sent. ; SlvAdr = slave address. ; Returns: ; @R0 = data received. le_mem: mov SlvAdr,#I2CCLK ;End. do escravo = end. do RTC mov ByteCnt,bytes_end ;grava os bytes de endereço mov R0,#end_mem ;Início do ponteiro do end. do RTC onde será gravado call SendData ;grava o end. (seta o ponteiro) mov SlvAdr,#I2CCLK ;End. do escravo = end. do RTC mov ByteCnt,#07h ;indica que 7 bytes serão lidos mov R0,#recebido_mem ;seta o ponteiro pra posição onde os dados serão recebidos lcall RcvData ;recebe dados ret ;retorna ;============================================================= ;------------------------------------------------------------- ; I2C Routines ;------------------------------------------------------------- ;a partir daqui utilizam-se os mesmos códigos do anexo 3