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.