Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf ·...

94
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.

Transcript of Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf ·...

Page 1: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 2: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 3: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 4: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 5: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 6: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 7: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 8: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 9: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 10: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 11: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 12: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 13: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 14: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 15: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 16: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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).

Page 17: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 18: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 19: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 20: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 21: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 22: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 23: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 24: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 25: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 26: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 27: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 28: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 29: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 30: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 31: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 32: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 33: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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).

Page 34: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é 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.

Page 35: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 36: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 37: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 38: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 39: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 40: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 41: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 42: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 43: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 44: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 45: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 46: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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).

Page 47: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 48: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 49: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 50: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é 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

Page 51: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 52: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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).

Page 53: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 54: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 55: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 56: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 57: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 58: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 59: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 60: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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>.

Page 61: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 62: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 63: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 64: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 65: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 66: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 67: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 68: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 69: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 70: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 71: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 72: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 73: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 74: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 75: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 76: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 77: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 78: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 79: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 80: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 81: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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 ;==========================================================

Page 82: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 83: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 84: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 85: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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 ;==========================================================

Page 86: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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.

Page 87: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 88: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 89: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 90: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é 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

Page 91: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 92: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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

Page 93: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é 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

Page 94: Identificador de Chamadas Enviadas Mariano A. Hexselsiaibib01.univali.br/pdf/Mariano Hexsel.pdf · em alto nível em Delphi, usando a linguagem pascal. O resultado do projeto é um

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