Atualizado em 18/10/2012
Já pensou em montar um frequencimetro com Lcd usando um PIC12F629? Algumas pessoas já pensaram, eu sei (algumas pessoas já perguntaram sobre isto em blogs!!!).
Mas exigiria ligar um cristal externo, tomando 2 IO’s (ou seja, perdendo 2 pinos). O PIC12F629 dispõe somente de 5 IO’S + 1 entrada (se não usar o ‘reset externo’). E para ligar o LCD? Mais 6 pinos com função plena de IO (entrada/saida). Mas …. sobrou somente ‘míseros’ 3 pinos!!! A metade do que nós precisamos, sem contar que também precisamos de uma das IO para ler a frequencia.
“Há !!! Já sei…” dirá alguém , “vou usar um outro chip para expandir IO’s”. Seria uma boa solução, mas …NADA DE OUTRO CHIP,CERTO!!! Aí a porca torce o rabo. Que ótimo desafio, não concorda? Mas … já foi vencido. Quero apresentar o FREQ_METER_TINY !!!
Este projeto visa mostrar o que se pode fazer quando se utiliza varios recursos da eletronica para obtenção de um objetivo.
Qual o “objetivo” em questão? O desafio de conseguir montar um circuito que originalmente utiliza um microcontrolador com muitos pinos, usando um processador com poucos pinos e obter resultados similares. Assim, esta materia pretende focalizar na tecnica de “multiplexação para LCD”. O que é isto?
No artigo “Hcs_Prog_Tiny – programador de Hcs 200…301…” iniciei o uso do método ‘Lários’ que usa RC + Delay para definir o nivel de tensão no pino ‘RS’ do LCD. Então, pensei comigo, e se fizessemos o mesmo com os pinos DB7…DB4? Seria em teoria, necessário somente 3 pinos para transmitir dados/comandos para o Lcd.
Em principio, funciona da seguinte maneira, usando basicamente 6 fases para o envio de cada nibble (4 bits) para Lcd em modo 4 bits:
1) Colocar na linha ‘DB7’ o valor de ‘DB5’ e colocar na linha ‘DB6’ o valor de ‘DB4’. Se for um dado , setar (1) a linha ‘E’ e se for comando resetar (0) a linha ‘E’.
2) Dar um Delay (em torno de 800 a 1000 uSeg) para carregar os capacitores ligados nos pinos ‘DB4′,’DB5′,’E’. Se a linha era ‘0’, não haverá carga, logicamente.
3) Colocar na linha ‘DB7’ o valor de ‘DB7’ e colocar na linha ‘DB6’ o valor de ‘DB6’ .
4) Imediatamente, pulsar a linha ‘E’ para enviar para o Lcd estes 4 bits (sendo 2 atuais e 2 carregados nos capacitores).
5) resetar(0) ou zerar ‘DB7’, ‘DB6’ e ‘E’.
6) Dar um tempo de Delay de aproximadamente 1 mSeg para descarregar os capacitores carregados.
Agora é só repetir o mesmo para o proximo nibble , colocando na linha ‘DB7’ o valor de ‘DB1’ e na linha ‘DB6’ o valor de ‘DB0’ (Passo 1). Depois Delay, depois no Passo 3 colocar na linha ‘DB7’ o valor de ‘DB4’, na linha ‘DB6’ o valor de ‘DB3’. O resto é igual. Tá dificil de entender? No inicio também achei. Mas funciona. Conforme o valor dos capacitores e as tolerancias dos resistores, talvez precise aumentar um pouco o Delay. Tudo feito na base da tentativa e erro. Mas tem uma grande tolerancia e com os valores mencionados, não deverá haver problemas.
Vamos agora a parte da leitura da frequencia. Estou usando o timer 0 como contador de pulsos por um periodo de 1 Seg. Temos que usar o prescaller, senão não conseguimos ler frequencias maiores que 800 khz. Para extrair o valor do prescaller, usei o artificio de alternar entre oscilador interno e pulso externo (aterrado) e a cada pulso, verificar se o timer 0 incrementou. Estes são os pulsos que faltaram para chegar a 0. Portanto, basta subtrair de 0 e obter o seu valor.
Note que o pino 5 (gpio,2) trabalha como a entrada externa de contagem e após obter a frequencia, como saida para envio de bit para o LCD.
Todo o programa ocupa apenas uns 500 bytes de flash da memória de programa. Testei ele com um oscilador em 24.560.067 hz e ele mostrou de forma adequada esta frequencia. Não entrarei no mérito da precisão, que não é o objetivo deste projeto. Mas para os aficcionados, poderão colocar um trimmer junto ao cristal de 4 MHZ para ‘sintonizar’ a contento. Também, como sugestão, pode ser instalado um prescaller na entrada para aumentar a faixa de leitura em altas frequencias.
Segue o esquema
Segue o código asm
Segue o código Hex
Desenho da placa (pdf), click aqui.
Desenho da placa com com componentes, click aqui. Atenção!!! visto pelo lado de baixo.
O arquivo gerador para placa (abrir com ExpressPCB), click aqui. (Se desejar, poderá mudar o layout da placa, você mesmo).
Lista de materiais, click aqui.
Nota de errata: Desenho da placa anterior faltava ligações do pino 7 do PIC e um resistor de 220 ohms, de proteção no pino Db7 do LCD, cuja função é evitar conflito de I/O entre microcontrolador e LCD, em certas situações, o que poderia levar a queima de um dos componentes. Foi anexado o arquivo gerador (abrir com o programa ExpressPCB) e se houver mais algum erro, ou desejar mudar o layout da placa, sinta-se a vontade. Também o transistor Q1 tem suas pinagens corretas para BC548 e não para o BF254. Altere a montagem dos pinos ao montar (se a placa já foi feita) ou acerte no arquivo gerador antes de fazer a placa.
Até o próximo artigo!!!
Curiosidades:
Solucionado mistério do diamante!!!
O gigante do céu – Zepelim
Concorde – entrou para história da aviação
Outros assuntos:
Como lidar com doença crônica
Como controlar meu peso
claudio bom dia!!
sobre tudo vc esclareceu bastante obrigado.
mas tenho duvidas talvez bobas mas…
tipo assim posso por esse frequencimetro na tomada da minha casa para medir a frequencia…
tipo to kerendo axa o 50 60hz entende naum sei c e por ae ..
c vc puder me ajuda .
obrigado pela compreensao.
Olá Fabinhos! Realmente, temos que usar bom senso em como ligar os equipamentos elétricos em diferentes testes. Lógicamente, ligar direto na tomada, com certeza poderia queimar o pic. Uma opção, segura , é voce ligar um transformado abaixador de , por exemplo, 110v para 6 a 12 volts. Ligue o aparelho no secundário (baixa tensão), sendo um fio do trafo no gnd e o outro na entrada do capacitor em serie com um resistor de 1kohms em série. O primário deverá ser ligado no 110 volts.
Claudio
boa noite claudio.
intaum eu quero medir um cd4047
para ver a frequencia de ocilacao. uma voltagem de 10v dc numa frequencia de 50 a 60 hz
tipo inversor .
c puder me ajudar agradeco
muito obrigado.
Olá Fabinhos! Neste caso, creio que o sinal é forte suficiente para voce ligar direto, ou seja , da entrada do frequencímetro ao ponto de medida (saíida do integrado) E NÃO ESQUECENDO DE LIGAR OS GND’S DAS DUAS PLACAS entre si, para circular a corrente.
Claudio
cladio !!!
obrigado mas…eu nao entendi muito bem .
no caso eu kiria medir a frequencia de uma energia de 10v dc .
e gostaria de saber o q fazer para poder usar obrigado.
Exatamente o quê voce quer medir?
Se sua fonte geradora tiver um sinal alto de baixa ‘impedancia’, ligando direto voce terá uma leitura de frequencia. Se sua fonte tiver uma ‘impedancia alta’, ao ligar direto irá ‘matar’ o sinal. Neste caso, tem que ter um adaptador de entrada para casar esta ‘impedancia’, geralmente construidos com operacionais ou mesmo transistores .
Claudio
claudio bom dia!!!
qual a voltagem maxima ki eu posso medir ou aplicar nas entradas de medicao??
obrigado.
Olá Fabinhos! A voltagem máxima é dependente da voltagem de isolação do capacitor de 100 nf na base do transistor bf154. Mas não aplique tensão alta sem colocar uma malha atenuadora resistiva ( ou um potenciomêtro de alto valor). O sinal pico a pico a ser medido também tem importância, em alguns casos, tem de ter uma pré-amplificação para poder ser sentido pelo frequencímetro (osciladores de pequeno sinal, por exemplo). Para sinais digitais de 5v pico a pico, trabalha bem. Para aplicações em outras funções, tem de se colocar estagios atenuadores/ amplificadores.
Claudio
amigo boa noite
venho mais uma vez com uma pergunta
o indutor de 10uh
qual modelo e que tem vario
e na lista naum especifica
vc pode me mostrar algum modelo?
muito grato
Obrigado.
Olá Fabinhos! Poderá ser os modelos em forma de resistor de 1/8 w conforme este link mostra a tabela ou qualquer um com enrolamento sobre ferrite ou ar de pequena corrente. È muito comum de encontra-los na parte de video das tv’s antigas. Pode ser enrolado com algumas
dezenas de volta sobre um resistor de alto valor (consulte na internet sobre como enrolar tais bobinas). O importante é que seja de 10 microHenrys.
Cláudio