|
Sistemas de visualização em LedArray usando microcontroladores PIC 16F84A Por Luis Rodrigo Szabo Introdução Quando desenvolvemos algo utilizando microcontroladores ou mesmo microprocessadores, e isso envolve algum tipo de interface entre o usuário e o sistema, a primeira coisa que surge em nossas mentes é: como será a interface com o usuário? Como será a leitura dos dados? E como o usuário irá entrar os dados no sistema? Logo somos facilmente levados a pensar em displays de sete segmentos, displays de cristal líquido ou displays LCD inteligentes onde podemos escrever caracteres numéricos facilmente com precisão numérica de várias casas decimais. No entanto nem sempre os usuários preferem esse método. Por que alguns ainda preferem dispositivos analógicos utilizando ponteiros ou sistemas com leds em linha? A resposta é simples: porque em certos casos a precisão não é tão relevante quanto o tempo de resposta, ou em outros casos a variação rápida de um determinado valor causa dúvidas quanto a leitura. Nesse casos se torna mais interessante o uso de dispositivos de leitura menos precisos em casas decimais. Caso Prático Um caso prático onde usei um sistema de visualização por leds em linha foi num manômetro de baixa pressão utilizado para determinar a pressão inspiratória e expiratória enviada para o paciente em um ventilador mecânico usado em CTI's, e que, infelizmente, não saiu do protótipo. A idéia desse manômetro era tornar a leitura semelhante a dos manômetros mecânicos que usam ponteiros. Foi usado para este projeto um microcontrolador PIC16F84A facilmente encontrado no mercado, que possui apenas 13 portas para multiplexar 40 leds e ler um conversor AD serial, posteriormente foi possível inserir um teclado com até 8 teclas, 1 buzzer, 1 solenóide e a possibilidade de ligar até 6 leds adicionais. Você poderia pensar " é muita coisa para um microcontrolador tão pequeno!". Realmente o ideal seria utilizar um microcontrolador com mais portas, onde poderíamos ter mais portas disponíveis para os dispositivos. Mas através de técnicas de multiplexação e utilização de alguns integrados TTL ou HCMOS comuns foi possível expandir em muito a capacidade de um simples microcontrolador. Outros exemplos de utilização de LedArrays
Multiplexando 40 leds com 8 portas Usando um demux 74LS138 é possível acender 8 seqüências de 5 leds o que proporciona 40 leds de resolução O software funciona da seguinte forma: Utilizou-se oito portas do microcontrolador sendo que 5 delas para enviar os dados e 3 portas para a seqüência codificada que é decodificada pelo 74LS138. Programa-se o timer para ligar cada seqüência de 5 leds a cada 1ms assim tem-se o sistema atualizado a cada 8ms como nosso olho não percebe tal variação temos a sensação de um sistema contínuo. Abaixo temos alguns trechos do código assembler da rotina update bar UpdateBar FullBar
LedTable MuxTable Inserindo um conversor AD ao nosso projeto O ideal em um sistema onde precisamos de um conversor AD é utilizar um PIC 16C71 que possui o conversor AD no próprio microcontrolador. Outra opção está em inserir um conversor AD em nosso sistema de forma bastante econômica utilizando-se um conversor serial, da família ADC083x que possui de 1 a 8 portas analógicas. A figura abaixo mostra um exemplo de utilização baseado no ADC0832 com 2 canais analógicos, é possível configurar a leitura para 2 canais independentes ou 1 canal diferencial, e cuja leitura de cada canal é configurada pelo pino DI do conversor, a leitura se da de forma síncrona, ou seja, depende do sinal de um clock enviado ao conversor. Existem outras alternativas, que vão depender do tipo de sinal e da velocidade de conversão, existem no mercado conversores tensão / freqüência, ou conversores VF, como o AD654 da Analog Devices para sinais que não necessitam de velocidade. Tabela de configuração dos canais no modo entrada normal
Tabela de configuração dos canais para o modo diferencial
Abaixo temos um exemplo de rotina para a leitura do ADC0832 para o canal 0 em modo entrada normal LeADC Clock Rotina para conversão dos dados lidos pelo ADC0832 para leds Para que a rotina Updatebar possa saber quantos leds são necessários acender precisa converter o dado lido pelo conversor ADC em número de leds acesos. É possível fazer o cálculo matematicamente, ou seja, através de uma expressão ou através de uma tabela. Fazendo-se através de uma expressão temos possibilidade de economizar memória de programação mas aumentamos o processamento, se usarmos uma tabela, utilizamos 256 bytes de memória, que é considerável se tivermos apenas 1024 bytes de memória programável, mas é possível economizar em processamento e além do mais podemos utilizar uma tabela adequando valores para sensores de resposta não linear, ou seja, podemos linearizar uma leitura não linear. No exemplo abaixo temos o uso de uma tabela. ConvertBar ... retlw .39 ;240 Listagem Completa do programa e diagrama Diagrama do circuito em formato CKT(CircuitMaker)
|
[Home] - [Projetos] - [Downloads] - [News] - [Links] - [Currículo] |