Desenvolvimento de um Sistema de Discagem Eletrônica

Transcrição

Desenvolvimento de um Sistema de Discagem Eletrônica
Desenvolvimento de um Sistema de Discagem Eletrônica
Microprocessado
José E. Baggio1, Alfredo C. Leães1
1
Área de Ciências Naturais e Tecnológicas
Centro Universitário Franciscano (UNIFRA) – Santa Maria – RS
[email protected], [email protected]
Resumo. O presente trabalho descreve o projeto de hardware e software e a
posterior implementação de um dispositivo de discagem eletrônica baseado em
um microcontrolador RISC (Reduced Instruction Set Computing) de oito bits.
O sistema foi projetado para prover uma interface com a linha telefônica
convencional, e ainda, possibilitar que o usuário mantenha uma base de dados
com seus respectivos contatos telefônicos. Trata-se de um dispositivo que
fornece a mesma funcionalidade básica das agendas encontradas nos telefones
celulares, implementado para operar em conjunto com aparelhos telefônicos
convencionais.
1. Introdução
A evolução da eletrônica e da microeletrônica tem tornado possível o desenvolvimento
de dispositivos mais rápidos, menores e mais densos. Um exemplo destes dispositivos
são os microcontroladores, estes atualmente trazem uma série de periféricos
encapsulados em um único chip, tornando possível à integração com diversos sistemas.
Além das vantagens inerentes ao hardware, muitas arquiteturas de microcontroladores
dispõem de compiladores que permitem o desenvolvimento de programas em
linguagens de alto nível, como por exemplo, C e Basic.
O uso de agendas eletrônicas tem se difundido muito nos últimos anos, devido à
facilidade de uso. Essas agendas são desenvolvidas muitas vezes em unidades móveis
independentes com o uso exclusivo como agenda, em PALM-TOPs, ou mesmo
integradas em aparelhos celulares. Nos últimos anos, no mercado nacional, também
surgiram os aparelhos de BINA, que além de reconhecerem as fontes de origem da
chamada, podem armazenar alguns poucos números de telefones identificados.
Este projeto de pesquisa é baseado no desenvolvimento de um sistema de
discagem eletrônica. Este apresenta a mesma funcionalidade de um aparelho celular,
com o uso da agenda em um mostrador de cristal líquido e alguns botões que servirão de
interface para o usuário realizar o cadastramento de números de telefone e nomes nessa
“agenda”. Além da função de agenda telefônica, será incorporada a função de discagem
por tom em uma linha telefônica convencional, possibilitando o aparelho realizar a
ligação, a partir do nome selecionado no display.
2. Metodologia
Uma vez definida as características desejadas para o sistema, deu-se inicio o projeto,
sendo este executado em duas fases. Inicialmente foram considerados os aspectos
referentes ao hardware do dispositivo tais como: modelo do microcontrolador, tipo de
memória a ser utilizada e quais dispositivos de interface com usuário seriam
empregados. Após a conclusão do projeto preliminar de hardware iniciou-se a fase de
projeto de software. Os tópicos analisados durante o projeto de software basicamente
foram: linguagem de programação a ser adotada, as ferramentas de desenvolvimento a
serem utilizadas, arquitetura do software e a estrutura de dados. Visando desenvolver e
validar os componentes de software básicos, foram utilizadas ferramentas EDA
(electronic design automation), as quais permitiram simular microcontrolador e boa
parte do hardware externo que compõe o sistema. Desta forma foi possível iniciar
projeto de software sem a implementação de qualquer dispositivo de hardware real,
possibilitando assim um rápido desenvolvimento e depuração dos elementos
relacionados ao software do sistema.
3. Hardware
O hardware que compõe o sistema é constituído de um microcontrolador, memória não
volátil, gerador de tons de discagem, dispositivos de interface com o usuário e alguns
componentes eletrônicos discretos. De modo geral todos os elementos utilizados no
projeto podem ser facilmente obtidos no mercado. É importante ressaltar que em nível
físico, o projeto e a montagem do dispositivo foram relativamente simples, pois por se
tratar de um sistema micro-processado grande parte da complexidade de hardware está
contida no microcontrolador.
Devido à natureza do sistema proposto, este inicialmente pode ser classificado
como um sistema embarcado. Estes sistemas em geral possuem requisitos diferentes
quando comparados a sistemas computacionais convencionais como, por exemplo,
ciclos de vida mais elevados, capacidade de tempo real e confiabilidade. Muitos autores
recomendam que o desenvolvimento de sistemas embarcados seja abordado de maneira
estruturada. Sendo assim, cada componente desenvolvido, deve inicialmente ser
validado, para que posteriormente possa ser integrado ao sistema. A utilização de tal
metodologia permite desenvolver sistemas mais consistentes e com menor demanda de
tempo [Berger 2002]. De forma a seguir as técnicas de projeto recomendadas, o sistema
descrito por este artigo foi formalmente dividido em quatro módulos conforme mostra a
figura a seguir.
Figura 1. Arquitetura geral do hardware do sistema
3.1. Processamento
O módulo de processamento é composto por um circuito integrado modelo PIC18F452
fabricado pela Microchip Corporation. O componente em questão consiste em um
microprocessador RISC (Reduced Instruction Set Computing) de oito bits, o qual é
baseado na arquitetura Harvard (memórias de dados e de programa são fisicamente
distintas). O PIC18F452 incorpora uma série de periféricos, dentre os quais se destacam
os módulos: USART (Universal Asynchronous Receiver/Transmitter), CCP
(Capture/Compare/PWM) e MSSP (Master Synchronous Serial Port). Outra
característica relevante do microcontrolador é quantidade de memória que este
disponibiliza, sendo 32k bytes para programa e 1,5k bytes para dados. A velocidade de
processamento do microcontrolador varia conforme o tipo de oscilador utilizado,
podendo chegar até 10 MIPS (million instructions per second).
3.1. Armazenamento
Conforme as especificações de projeto, o dispositivo de discagem eletrônica proposto
deveria ser capaz de armazenar algo em torno de 500 a 1000 contatos telefônicos.
Embora o microcontrolador utilizado disponibilize 256 bytes de memória não volátil
para uso geral, fica evidente que esta quantidade é insuficiente para o propósito da
aplicação. Desta forma se fez necessária à utilização de um meio de armazenamento não
volátil externo.
Dentre os muitos dispositivos de memória disponíveis atualmente, optou-se pela
utilização de uma memória EEPROM I2C de 32k bytes para o armazenamento de dados.
A escolha de tal dispositivo foi motivada principalmente por se tratar de um
componente de fácil obtenção, pois, a utilização de memórias deste tipo está bastante
difundida. Outro aspecto que influenciou na escolha de uma memória I2C como meio de
armazenamento, reside no fato de que, o PIC18F452 incorpora um recurso denominado
módulo MSSP que implementa a comunicação entre o microcontrolador e dispositivos
I2C através de hardware dedicado. Sem a utilização deste recurso à comunicação com a
memória teria que ser implementada por meio do software, isto certamente influenciaria
negativamente na performance geral do sistema, uma vez que tal abordagem demandaria
processamento extra, durante as operações com memória.
3.2. Interface Usuário Máquina
A interface usuário máquina é baseada em dispositivos de entrada e saída tem como
finalidade prover ao usuário um meio de interação com o sistema. O dispositivo de
entrada consiste em um teclado matricial de 4 linhas por 4 colunas ligado ao
microcontrolador através de 8 vias resultando em um total de 16 teclas. O teclado
permite que o usuário opere o sistema conforme as especificações do projeto. O
dispositivo de saída possibilita ao usuário visualizar as operações que serão executadas
no sistema bem como os dados que estão neste armazenados. Para desempenhar esta
função foi empregado um mostrador de cristal líquido de 2 linhas por 16 colunas,
conectado ao microcontrolador através de um total de 6 vias, 4 para dados e 2 para
controle. A operação do sistema dá-se através de um menu estruturado sugerindo ao
usuário as funções que podem ser executadas.
3.3. Geração de Sinais DTMF
A maioria dos sistemas públicos de telefonia fazem uso de um esquema de sinalização
denominado DTMF (dual tone multi frequency). Estes sinais são utilizados para
codificar os dígitos de discagem de um aparelho telefônico em sinais analógicos, de
forma que estes possam ser transmitidos através de uma rede de telefonia até uma
central, onde então, os sinais são decodificados e tratados. O sistema DTMF utiliza oito
freqüências diferentes as quais são combinadas e transmitidas em pares, podendo assim
representar 16 números, símbolos ou letras distintas. As freqüências DTMF são
mostradas na tabela abaixo.
Tabela 1. Freqüências DTMF e caracteres associados
Freqüências
1209Hz
1336Hz
1477Hz
1633Hz
697Hz
1
4
7
2
5
8
0
3
6
9
#/F
A
B
C
D
770Hz
852Hz
941Hz
*
Conforme é possível observar na tabela, as freqüências DTMF estão dispostas
em forma matricial, onde cada par linha / coluna representa um caractere único. Desta
forma quando um dígito é transmitido através de uma linha telefônica, cada uma das
freqüências que o representam são transformadas em um sinal senoidal independente,
estes sinais são em seguida combinados em único sinal, também conhecido como tom
de discagem, e então, este sinal é transmitido através da interligação telefônica.
Embora os sinais DTMF sejam de natureza puramente analógica, existem
métodos que possibilitam a um microcontrolador digital gerar estes sinais, no entanto,
tal abordagem requer a inserção de hardware adicional, além de consumir ciclos extras
de processamento, pois o software contido no microcontrolador é que de fato
implementaria a geração dos sinais. Sendo assim, optou-se pela utilização de um
circuito integrado dedicado, o qual recebe dados em formato digital por meio de uma
interface, e os codifica em sinais DTMF. O circuito integrado adotado foi o HT9200B
fabricado pela empresa Holtek Semiconductor, este dispositivo traz duas interfaces
digitais sendo, uma serial e outra paralela. O sistema de discagem aqui tratado utiliza a
interface paralela do circuito descrito, a qual é conectada ao microcontrolador por meio
de 4 vias de dados e 1 via de controle, conforme exposto na figura abaixo.
Figura 2. Conexão entre o microcontrolador e o HT9200B através da interface
paralela.
4. Software
O software do dispositivo foi desenvolvido em linguagem C para arquitetura de
microprocessadores PIC18. De maneira análoga ao projeto de hardware, o projeto de
software foi dividido em componentes implementados por meio de rotinas agrupadas
por funcionalidades. A figura a seguir exibe a organização dos componentes de
software.
Figura 3. Arquitetura geral do software do dispositivo
O dispositivo em questão utiliza um sistema operacional bastante elementar,
baseado em uma hierarquia estruturada de rotinas. O sistema é basicamente composto
de uma rotina principal de controle, esta por sua vez invoca sub-rotinas auxiliares sob
demanda. As rotinas de nível mais baixo, ou seja, aquelas subjacentes ao hardware,
interagem diretamente com os dispositivos físicos, o que resulta em uma arquitetura de
3 camadas.
4.1. Sistema de Arquivos
Uma vez definido o meio de armazenamento a ser adotado, foi necessário desenvolver
um sistema de arquivos, pois a base de dados do sistema é de natureza dinâmica, ou
seja, o dispositivo deve suportar procedimentos de inclusão, pesquisa, alteração e
exclusão sobre os registros, ao longo de seu tempo de operação. Outro aspecto que
justificou o emprego de um sistema de arquivos está na disposição dos dados, pois os
registros contidos na base de dados devem apresentar ordenação lógica. Cada registro
armazenado na base de dados é composto por dois campos de 16 bytes, um para
armazenar o nome e outro o telefone e mais um par de ponteiros de 2 bytes cada, sendo
assim cada registro possui um tamanho máximo de 36 bytes. Conforme já mencionado,
o meio físico de armazenamento utilizado para implementar o dispositivo proposto,
consiste em uma memória EEPROM I2C. Este dispositivo embora confiável, apresenta
algumas limitações quanto ao tempo gasto em operações leitura e escrita, característica
também conhecida como latência de memória. Cada operação em memória demanda um
tempo em torno de 5 milisegundos por byte transferido [Microchip 2003]. Analisando a
latência do dispositivo de armazenamento, fica claro que o sistema de arquivos deve ser
baseado em uma estrutura de dados que permita a manipulação de seus registros com
mínimo de operações sobre a memória. A estrutura que pareceu mais plausível neste
caso é a de lista encadeada, onde cada elemento da lista representa um registro. Em uma
lista encadeada os elementos são referenciados através de ponteiros, assim cada
elemento armazena, além de seus dados, também um ponteiro que referencia o elemento
seguinte conforme a regra de ordenação a qual os dados estão submetidos. O último
elemento da lista possui um ponteiro com valor nulo, ou seja, não referência nenhuma
posição de memória. A posição física dos dados dentro de uma lista encadeada é
irrelevante [Sedgewick 1997].
Figura 4. Reapresentação abstrata de uma lista encadeada
A figura acima ilustra uma lista encadeada, embora os elementos que se
referenciam estejam dispostos juntos, é importante ressaltar que esta representação é
apenas lógica, uma vez que fisicamente, os elementos dentro da estrutura não precisam
necessariamente, ocupar posições contíguas dentro do espaço de endereçamento. A
estrutura de lista encadeada apresenta algumas variações, podendo ser circular,
duplamente encadeada, ou uma combinação de ambas, sendo esta última escolhida para
integrar o sistema de arquivos aqui tratado. A figura abaixo ilustra a organização interna
de cada registro do sistema de arquivos. É possível observar que cada registro possui 2
bytes de controle (identificador e separador), 2 ponteiros com 2 bytes de comprimento
cada, e 2 vetores de dados de tamanho variável.
Figura 5. Formato dos registros
Os dados nome e telefone são armazenados nos seus respectivos vetores, os
quais podem armazenar de 1 a 16 bytes cada. Os registros são ordenados
alfabeticamente dentro da estrutura de dados. O método de ordenação utilizado é o de
inserção direta, com base neste método assume-se que o conjunto de dados presente na
estrutura já se encontra ordenado, quando um novo registro for inserido, deve-se
inicialmente efetuar uma pesquisa sobre a estrutura de dados de modo a localizar a
posição na qual o novo registro será inserido. A posição de inserção pode ser no inicio
da estrutura, entre dois registros ou no final da estrutura, após definida a posição
adequada, é realizada a operação de ajuste dos ponteiros entre o novo registro e os
registros adjacentes, ou seja, o próximo registro e o anterior.
Figura 6. Estrutura do sistema de arquivos
A organização do sistema de arquivos é mostrada na figura acima, as posições de
memória de 0x00 até 0x09 são reservadas para o uso do sistema de arquivos. As
posições de memória de 0x00 a 0x05 correspondem a 3 ponteiros. O primeiro ponteiro
indica a próxima posição livre da memória, ou seja, a posição na qual o próximo
registro deverá ser inserido, valor deste ponteiro é incrementado sempre que um novo
registro é armazenado, o valor de incremento corresponde ao comprimento total do
novo registro somado a uma unidade. O segundo ponteiro aponta primeiro registro
lógico da estrutura de dados, a partir do qual todos os demais registros serão
encadeados, este ponteiro é atualizado sempre que um registro de maior precedência for
inserido na estrutura de dados. O terceiro ponteiro referencia o último registro lógico da
estrutura, sendo atualizado toda vez que um registro de menor precedência for inserido.
As posições 0x06 e 0x07 formam um acumulador de 16 bits o qual é utilizado para
indicar quantos registros estão armazenados na estrutura. As posições 0x08 e 0x09 são
reservadas para futuras implementações.
5. Resultados
Por meio de ensaios práticos realizados com equipamento verificou-se que através da
utilização de uma lista encadeada os dados podem ser ordenados de forma mais
eficiente, pois estes são referenciados através de ponteiros. Sendo assim, não há
necessidade de deslocar os dados fisicamente dentro da memória. A utilização de blocos
de dados variáveis eliminou o problema da fragmentação interna possibilitando desta
forma um melhor aproveitamento do espaço de armazenamento. O desenvolvimento
inicial do sistema através de hardware simulado permitiu que o software do dispositivo
fosse finalizado antes da implementação do projeto físico, mantendo total
compatibilidade com o dispositivo real.
6. Conclusões
Sistemas embarcados, tal como o que aqui foi proposto, estão sendo amplamente
utilizados, especialmente nos últimos anos. Estes sistemas em geral possuem requisitos
diferentes quando comparados a sistemas computacionais convencionais, tais como,
ciclos de vida mais elevados, capacidade de operação em tempo real e confiabilidade.
As maiores dificuldades que são encontradas em projetos deste tipo são referentes ao
uso e conhecimento da tecnologia em um nível mais baixo, intrinsecamente ligado ao
hardware, onde o programador deve tratar com temporizações e programação especifica
de um componente, em seu foro mais íntimo. Além de conhecimentos avançados em
programação, é necessário um domínio sobre a eletrônica básica, o que torna este setor
particularmente direcionado a pesquisadores e profissionais da área de Ciência da
Computação. Em termos didáticos a realização deste projeto foi de grande valia, pois
permitiu a aplicação prática de muitos conceitos e métodos referentes a diversas
disciplinas da computação, alguns dos quais abordados apenas a nível teórico em sala de
aula.
7. Referências Bibliográficas
Gardner, N. (2002), PIC C: An introduction to programming The Microchip PIC in
CCS C. Bluebird Electronics.
Sedgewick, R. (1997), Algorithms in C, Parts 1-4: Fundamentals, Data Structures,
Sorting, Searching, Addison Wesley, 3th edition.
Berger, A. (2003), Embedded Systems Design: An Introduction to Processes, Tools
and Techniques. CMP Books.
Microchip Technology. (2002), PIC18FXX2 Data Sheet: High Performance, Enhanced
FLASH Microcontrollers.
Microchip Technology. (2003), 24AA256/24LC256/24FC256 Data Sheet: 256K
I2C™ CMOS Serial EEPROM.