quarta-feira, 10 de outubro de 2018

Osciloscópio de matriz de leds

Osciloscópio com Matriz de Leds


Há muitos anos eu achei um artigo da revista Popular Electronics de novembro de 1996, onde havia um projeto de osciloscópio digital. O cerne do projeto era um baseado em um microcontrolador PIC 16C71, um dos primeiros da Microchip a ter conversores analógico-digitais. O PIC realizava a conversão de um sinal analógico para 8 bits, que em seguida eram encaminhadas através de uma porta paralela de PC (a usada em impressoras paralelas) e processadas por um software (em MS-DOS) para apresentar a plotagem na tela do PC.

Pois bem, eu redesenhei o layout da placa e montei o projeto, com algumas alterações: eu usei o PIC 16C711 que é muito parecido com o 16C71, alterando algumas linhas do código em assembly fornecido. Entretanto, o osciloscópio não funcionou. A parte do software no PC se mostrou não funcional e assim por muitos anos guardei a plaquinha.

Mas havia outro projeto de eletrônica que sempre me deu vontade de fazer, que era um osciloscópio de matriz de leds. Recentemente adquiri dois displays de matriz de leds de 8x8.  A maioria dos projetos que se encontra na internet usa os cis LM3914 que é um acionador de leds tipo VU, e contadores Johnson CD4017.  Eles são fáceis de se achar e conseguem cada um acionar 10 saídas (portanto 10 linhas para o LM3914 e 10 colunas para o CD4017).  O LM3914  liga uma de suas 10 saídas de acordo com o nível de tensão na sua entrada, enquanto que o CD 4017 faz ligar uma coluna por vez, fazendo a varredura horizontal da matriz de leds.  A maioria dos projetos não tem ajuste de trigger (disparo da varredura), o que torna a visualização da forma de onda instável e difícil de parar na tela.

Mas, os dois cis tornam difícil a utilização dos meus displays  (vai sobrar ou faltar saídas de acionamento), além disso, os displays são mais fáceis de se usar se estiverem lado a lado e não empilhados. Logo, a minha tela seria mais viável no formato 8 linhas x 16 colunas.

Pensei então em aproveitar a plaquinha do projeto com o PIC para fazer a conversão e acionar as linhas dos displays.  Haveria então a possibilidade do PIC realizar a conversão e acionar apenas uma das linhas do display a cada coluna, ele mesmo enviar o clock para a varredura horizontal e realizar o trigger da varredura, sincronizando o sinal automaticamente e estabilizar a visualização do sinal na matriz.

Só que usei agora um PIC 16F819, que é mais moderno que o 16C711 (que era OTP - programável uma vez) por um PIC que tem memória de programa FLASH, o que facilita de sobremaneira o desenvolvimento e teste do programa.  Ao invés de o PIC enviar 8 bits (o que significava 256 pontos de resolução vertical), agora o 16F819 apenas lê o sinal de entrada e aciona apenas uma das 8 saídas ligadas às linhas dos displays. O conversor aceita de 0 a +5V na entrada, Ou seja, cada linha representa uma faixa de tensão de 5/8 = 0,625V.  O 16F819 tem conversores de 10 bits, mas a conversão é feita em 8 bits,  o que significa 256 valores, assim cada faixa de 0,625V representam 32 valores na conversão (256/8).

O esquema é o seguinte:




Cada vez que o PIC faz uma conversão, ele também envia um pulso para que a varredura horizontal avance uma coluna (duas opções: 1ms  / led e 100us / led).  Como esse PIC tem poucas portas, há a necessidade de circuitos auxiliares para fazer a varredura horizontal: um contador binário de 4 bits  74197, e dois decodificadores de 3 para 8 linhas  74138.  O contador recebe os pulsos do PIC e conta de 0 a 15 (ou seja as 16 colunas), onde 3 linhas menos significativas vão endereçar as saídas dos 74138, e o bit mais significativo do contador habilita ou desabilita cada um dos 74138.
Por fim, o PIC realiza o trigger automático, através do monitoramento de uma nova passagem por zero (na verdade passagem de 2,5V) após a varredura chegar na última coluna.  Ele fica esperando o evento e quando a passagem ocorre, ele envia um reset para o contador e recomeça o envio dos pulsos para contagem da varredura.

O condicionamento do sinal de entrada é o do projeto original da revista.  O sinal analógico entra em um divisor de tensão formado por resistores (no total 1M ohm que é a resistência de entrada). Há 3 faixas possíveis de entrada de sinal: 10Vpp, 25Vpp e 50Vpp.  No caso de 10Vpp, o sinal é dividido por 2, o que fornece até 5Vpp para um amplificador operacional LF347, que soma o sinal com um offset de 2,5Vdc para que a entrada do PIC receba um sinal não negativo e dentro da faixa de 0 a +5Vdc.  A entrada do PIC tem um zener de 5,1V para proteção.

Originalmente, o projeto da revista era alimentado com apenas uma fonte de tensão de +9V (bateria de 9V ou fonte de alimentação).  Um ci ICL7662 convertia os +9V para fornecer -9V para que o LF347 tenha fonte simétrica, e mais dois cis 78L05 e 79L05 para fornecer +5V (para o PIC) e -5V para o ajuste de offset.

Esse circuito serve apenas para brincadeira e tem um visual muito legal.  A varredura horizontal é de 1ms por coluna, o que permite apenas a visualização de sinais de até poucas centenas de hertz.  Veja o resultado:

A matriz de leds e os cis TTL foram montados na protoboard, enquanto que o PIC e o resto do circuito está na plaquinha antiga, ligada pelos fios na parte inferior da foto.

Aqui dois vídeos demonstrando o funcionamento. O primeiro vídeo está sem o autotrigger, e o segundo já com o autotrigger:



Lista de componentes:
PIC 16F819
Cristal de 16MHz
2 capacitores de 15pF
6 capacitores de 100nF
3 capacitores de 10uF
2 capacitores de 1uF
4 resistores de 100k
2 resistores de 1M
9 resistores de 1k
2 resistores de 2k2
1 resistor de 1k5
1 resistor de 1,82k (ou 1k5 + 120R)
1 trimpot de 1k
1 chave 1 pólo 3 posições
1 ci 74197
2 cis 74138
1 ci LF347
1 ci 78L05
1 ci 79L05
1 diodo zener 5,1V

A listagem do firmware para o PIC (arquivo HEX):

:100000004828A000A00DA00D200D383981389F0090
:100010000030A1001E3013201F151F190D28A1014B
:100020001E084328A101FB3EA000A109FF30031CCC
:100030001C28A00703181928A0076400A10F19287D
:1000400000000800A101A301A20001302C28A10199
:10005000A301A20004302C28A80023082102031DBC
:10006000332822082002043003180130031902301B
:100070002805031DFF3043280038031DFF30040509
:10008000031DFF3043288313031383126400080009
:1000900080309F0083160E309F00A33085008601BC
:1000A0008312BF01BC018030BD0085153F08BD0033
:1000B00000300120BF00640020303F020318622896
:1000C0000130BE003F08A0001F302220B8003F08CA
:1000D000A00040302720BA00380884003A083C20AD
:1000E000BA00BB0064003A083B04031979280230C7
:1000F000BE003F08A0003F302220B8003F08A0000B
:1001000060302720BA00380884003A083C20BA0042
:10011000BB0064003A083B04031990280430BE0079
:100120003F08A0005F302220B8003F08A0008030C8
:100130002720BA00380884003A083C20BA00BB00E7
:1001400064003A083B040319A7280830BE003F08A2
:10015000A0007F302220B8003F08A000A030272058
:10016000BA00380884003A083C20BA00BB0064009A
:100170003A083B040319BE281030BE003F08A00017
:100180009F302220B8003F08A000C0302720BA00CE
:10019000380884003A083C20BA00BB0064003A08E2
:1001A0003B040319D5282030BE003F08A000BF3013
:1001B0002220B8003F08A000E0302720BA0038080D
:1001C00084003A083C20BA00BB0064003A083B04B3
:1001D0000319EC284030BE006400E0303F02031CED
:1001E000F3288030BE0064000F303C020318FA2868
:1001F000FB28FB280B293E08860005116400851E9C
:1002000006290330A100CA301320082946301220E5
:100210000515BC0A56283D08A00080302720B800EC
:100220003F08A0007F302220BA00380884003A0836
:100230003C20BA00BB0064003A083B040319332990
:10024000BC013E088600851114301220851564001B
:10025000851E2F290330A100CA30132031294630D2
:0C02600012205628342956286300342947
:02400E00023F6F
:00000001FF