Pesquisar este blog

quarta-feira, 10 de outubro de 2018

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

sexta-feira, 14 de abril de 2017

Voltímetro Eletrônico usando Amplificador Operacional


Muitas vezes ao medir tensões em um circuito eletrônico não pensamos no efeito de carga que o medidor pode inserir no circuito e alterar o valor medido. Muitos multímetro digitais atuais tem resistência de entrada de 10M ohms, o que é suficiente para a maioria das aplicações, mas alguns mais baratos tem somente 1M ohms de resistência de entrada.  

Com os multímetros analógicos, dificilmente se encontra um com resistência de entrada maior do que 20k ohms por volt (nesse caso multiplica-se esse valor pelo valor de fundo de escala pra saber qual a resistência de entrada). Assim na escala de 10V, de um multímetro que tenho, a resistência de entrada seria só de 200k ohms, o que não é muito. Basta querer medir um divisor de tensão com dois resistores de 100k ohms numa bateria de 9V, que a medição seria muito errada (ao invés de 4,5V, mediria 3,6V !).  Isso se deve à pouca sensibilidade do galvanômetro usado nesses multímetros mais baratos, que usam microamperímetros de 50uA  (daí o 20000 ohms por volt => 1/50uA = 20000).  

Multímetros de marcas boas (Hioki, Sanwa) tinham resistência de entrada melhores (50k ohm por volt e até 100k ohm por volt), mas são muito difíceis de se encontrar atualmente. 

Antigamente, no tempo das válvulas, fabricavam-se os VTVM (voltímetros valvulados) que aumentavam a resistência de entrada para mais de 10M ohm (a maioria 11M ohms) com válvulas triodo e usando um galvanômetro que não precisava ser tão sensível. Com a chegada dos transistores e em especial os transistores efeito de campo (FET), eles substituíram as válvulas nesse papel.

Hoje podemos utilizar amplificadores operacionais (AOs) para fazer esse papel de multiplicadores de resistência de entrada para um voltímetro e obter valores mais altos do que os disponíveis nos modelos comerciais. 

Em 1987, comprei uma revista japonesa (Eletronics Life - "Erekutoronikusu Raifu") que apresentava um projeto de circuito eletrônico para ampliar a resistência de entrada de multímetros analógicos mais simples. 

Basicamente era uma rede de atenuação resistiva que era ligada a um amplificador operacional TL071 em modalidade amplificador não inversor. Da saída do operacional ligavam um multímetro analógico.  Como o TL071 é um amplificador operacional (AO) com transistores efeito de campo de junção na entrada diferencial, ele possui uma resistência de entrada de 1 Tera ohms !  É claro que isso é muito alto, mas a resistência de entrada vai ser determinada pela rede resistiva atenuadora.

No projeto da revista, a resistência de entrada era aumentada pra mais ou menos 5M ohms, o que não é muito comparado aos modelos atuais, mas ainda assim bem mais do que a do multímetro ilustrado na capa da revista. O circuito era montado numa placa universal e precisava de duas baterias de 9V para alimentação (simétrica).  O multiplicador de resistência funcionava para voltímetro DC ou AC, bastava selecionar a escala correta no multímetro, mas ficava limitado a uma excursão de sinal de saída de mais ou menos 8V).

Veja a capa e o esquema do projeto:






















Resolvi melhorar um pouco este projeto e mudar os seguintes pontos:
- Usar fonte simples de 12Vdc e usar um conversor para gerar -12Vdc.
- Aumentar a resistência de entrada para 20M ohms
- Ter cinco escalas de medição: 1V, 5V, 10V, 50V e 100Vdc de fim de escala
- Usar um voltímetro fixo de 10Vdc como medidor

Para gerar os -12Vdc para alimentar o TL071 simetricamente, eu preferi o ICL7660S, já que o consumo vai ser muito baixo e o 7660 precisa de apenas dois capacitores externos (10uF de tântalo) para fornecer a tensão negativa.  

A seguir a rede resistiva de atenuação teria resistências de 10M ohms, 8M ohms, 1Mohms, 800k ohms e 200k ohms.  Os valores de 8M ohms e 800k ohms não são valores comerciais, e a precisão do atenuador depende muito da proporcionalidade das resistências usadas.  Nesse caso não é melhor usar resistores de precisão, mas escolher resistores com valores que atendam a proporção, entre vários resistores de 5% de tolerância.

Assim, escolhi resistores de 8M2 nominais que apresentassem a menor resistência medida num ohmímetro. Achei um de 8,12M numa fita de resistores de 8M2. Esse seria o valor base pra selecionar os outros. O resistor de 8,12M é 1,5% maior do que 8M ohms. Assim bastaria eu encontrar resistores que estivesse 1,5% acima do valor necessário inicial.  Achei resistor de 10,15M ohms, 1,015M ohms, 812k ohms e 203k ohms.  Mantem-se assim a proporcionalidade da rede de atenuação.  

Na escala de1V de fim (ou fundo) de escala, nada é atenuado para entrar no TL071. Na escala de 5V, a atenuação é de 50% (divisão de 1/2). Na escala de 10V, o divisor é por 10 (atenua para 10%). Na escala de 50V atenua para 5% e finalmente na escala de 100V, atenua para 1%.

Assim temos fatores de atenuação de 1  0.5  0,1  0.05 e  0.01.
Como o voltímetro é de 10Vdc de fundo de escala, o TL071 precisa amplificar o sinal (DC) para entregar o sinal ao voltímetro. Com 1 volt na entrada, o AO precisa amplificar por 10 vezes. Com 5V na entrada, multiplicado pelo fator de atenuação de 0,5, teremos que amplificar por 4 (5 x 0,5 x 4 = 10). Com 10V na entrada, atenuada para 1V, temos de amplificar novamente por 10. Com 50V, atenuado para 2,5V, a amplificação é novamente de 4 vezes. E finalmente com 100V atenuados para 1V, amplificamos 10V. Assim precisamos de que o AO amplifique ou 4 ou 10 vezes.

Usando resistores de 9k ohms (selecionar em resistores de 9k1) e 3k ohms como resistores de feedback e mais um resistor de 1k ohms, montamos a malha de realimentação do AO.  Uma chave de onda dupla de 5 posições, serve como seletor de escala.

Como o AO TL071 tem entradas JFET, a tensão de offset (balanceamento) de entrada dele é relativamente alta e pode influenciar na saída (multiplica pelo ganho programado do AO). AOs com transistores bipolares conseguem ser fabricados mais casados e menor tensão de offset, mas a resistência de entrada é bem menor e não serviriam para o projeto. Como é necessária altíssima 

resistência de entrada do AO, os tipos com JFET são inevitáveis. Por isso, o TL071 tem dois terminais para ajuste e compensação da tensão de offset. Ligando um trimpot, podemos ajustá-lo e zerar a saída, quando ligamos as duas entradas juntas.  Isso não é muito relevante quando usamos AOs em circuitos de áudio, filtros, etc. (por isso são usados os AOs duplos, quádruplos, sem esse ajuste). Mas em instrumentos, esse ajuste se torna necessário e é fácil de ser feito. Outro AO JFET que pode servir é o CA3140.

Abaixo segue o esquema final do voltímetro.




 As pontas de prova devem ser ligadas na entrada e no terra do circuito. Veja que apesar do circuito poder fornecer tensão positiva e negativa para o voltímetro, ele só mede tensões positivas, portanto a polaridade da medição e das pontas no circuito é importante.

Abaixo algumas fotos do aparelho montado numa caixa de plástico (PB-112 da Patola), o voltímetro Engro de 10Vdc. Para alimentar, pus um conector jack fêmea P4 na lateral da caixa, para alimentar com fontes de parede de 12Vdc.









sexta-feira, 27 de janeiro de 2017

TRIACs - Fórmulas


TRIACs são tiristores que servem para controlar a potência sobre cargas alimentadas por corrente alternada. Não vou discorrer aqui sobre o funcionamento detalhado deles, mas apenas fornecer algumas ferramentas para ajudar no cálculo de circuitos envolvendo o TRIAC.

Basicamente o TRIAC funciona como se fossem dois SCRs (retificadores controlados de silício) ligados em anti-paralelo (um invertido em relação ao outro). De forma que cada um conduza ou corte somente num semi-ciclo da tensão alternada. Como o TRIAC tem apenas um terminal para disparo (gate), ele determina em qual momento o TRIAC começa a conduzir em ambos semi-ciclos. Isso é muito usado em dimmers para lâmpadas e cargas resistivas, onde um controle ajusta a intensidade da lâmpada. Nesse caso o controle atua sobre o momento (ângulo da senóide) em que o TRIAC passa a conduzir e alimentar a carga.
Uma questão crítica é saber qual a tensão eficaz sobre uma carga, tendo-se um determinado ângulo de disparo do TRIAC.
Descobri um antigo livreto com programas para antigas calculadoras HP-25, onde havia fórmulas e programas para calcular a forma de onda no circuito com TRIAC, a partir do seu ângulo de disparo. Apesar das fórmulas não serem muito complicadas, é raro isso ser divulgado e ensinado.
As páginas originais:

Bom, eu não tenho uma calculadora HP25C (ainda), mas eu tenho uma HP34C, que é muito parecida e tem os mesmos recursos. Dessa forma, foi muito fácil adaptar o programinha para minha calculadora:


O funcionamento é simples: basta armazenar o valor da tensão eficaz da fonte no registrador 0 (STO 0), digitar o ângulo de disparo em graus (não em radianos) e apertar R/S.  A calculadora deve apresentar o valor da tensão eficaz (rms) sobre a carga.

As fórmulas com melhor visualização:

Bom, agora sendo realista, ninguém mais usa calculadora para isso. E principalmente com planilhas eletrônicas, fica muito mais fácil. Então eu usei o Excel para fazer isso. Veja as células e as fórmulas:

E aqui uma pequena macro para descobrir o ângulo de disparo a partir da tensão desejada na carga. Essa macro vai linkada ao botão "calcular theta".

Ao usar a planilha, basta inserir os dados de entrada nas células vermelhas. 

Eu montei o seguinte circuito para fazer algumas medições e experiências. Eu não tinha um DIAC que é usado muito pra ter um controle mais preciso do disparo no gate do TRIAC, mas o circuito funciona sem ele (mesmo porque a tensão do transformador é bem menor do que a tensão de disparo de DIACs). O TRIAC que eu usei é o BT136, que aguenta até 4A.  
Como fonte eu usei um transformador de 10Vac, que medido com um multímetro analógico, deu mais ou menos 10,5Vrms.  Sobre a carga, medi 8,7Vrms e sobre o TRIAC 1,8Vrms.  Multímetros digitais comuns vão medir incorretamente as tensões sobre a carga e sobre o TRIAC, pois as formas de onda não serão senoidais. Veja as formas de onda no osciloscópio:

]
O primeiro oscilograma mostra a tensão sobre o TRIAC e o segundo oscilograma, mostra a onda sobre a carga (resistor de 470 ohms). Note que há uma inversão nos dois sinais (o semi-ciclo positivo no primeiro é o complemento semi-ciclo negativo do segundo e vice-e-versa) e que os ângulos de disparo não são iguais para cada semi-ciclo. Fazendo uma medição sem muita precisão, num semi-ciclo demora uns 3,2ms para disparo e no outro 2 ms.  Convertendo isso em ângulos, daria 69° e 43°.

Entrando os valores na planilha:
O valor calculado para 69° seria de 8,93Vrms, próximo do valor medido. Mas o outro semi-ciclo tem mais tempo de condução, o que resultaria em 10,07Vrms.  Tirando uma média, obteria 9,5Vrms.  Um pouco diferente do medido. Mas teoria é teoria e prática é prática.  Pelo menos serve para se ter uma ideia do ângulo de disparo necessário, usando-se o botão de macro do Excel:

Nesse caso, entra-se com o valor da tensão desejada sobre a carga na célula B9 e apertamos o botão de calcular theta.  O resultado aparece na célula B4, ou seja, um ângulo de disparo de 116°.

Eu calculei isso de outra forma, na  HP34C, usando o recurso de integração, com a função (SEN x)^2 e definindo os limites de condução, mandando integrar, depois dividindo pelo período, tirando a raiz quadrada e multiplicando pelo valor de pico da tensão da fonte (isso é o processo do "root mean square"), o resultado é igual ao das fórmulas, embora demore bem mais e com mais trabalho.





quinta-feira, 17 de dezembro de 2015

Mais Dispositivos I2C

Implementei junto ao programa de edição de memórias EEPROM com utilização da placa MCLAB2, a possibilidade de manipular mais dois interessantes circuitos integrados com comunicação I2C. Um deles é o PCF8574(A) da Philips que é um extensor de portas de E/S quase bidirecional, o que o torna muito útil quando se faltam portas para um microcontrolador. O outro é um sensor de campo magnético bem sensível o HMC5883L da Honeywell, muito usado em bússolas eletrônicas e com capacidade de medição de campos magnéticos em 3 eixos (x, y, z). 
Em resumo, o integrado PCF8574 possui 8 portas de E/S que podem ser escritas ou lidas através de comunicação serial I2C, além de possuir um pino de sinalização de interrupção e 3 linhas de endereçamento para identificar o ci se forem usados vários dispositivos no barramento I2C. Assim ele funciona como um conversor serial-paralelo e vice-e-versa. Como ele tem boa capacidade de corrente nas portas (25mA tanto suprindo como drenando) elas são capazes de acionar diversos dispositivos, como por exemplo, leds, muito facilmente. A velocidade para o clock do I2C deve ser de 100kHz. A diferença entre as versões 8574 e 8574A é apenas no endereçamento do dispositivo escravo.

A seguir a pinagem e o diagrama de blocos do PCF8574.


  
No diagrama de tempos do fluxo serial, demonstra qual deve ser o byte de controle enviado, sendo que para o PCF8574, o endereço escravo deve ter os 4 bits mais significativos como 0100 (e 0111 para o 8574A), seguido dos 3 bits de endereçamento de dispositivo e finalmente o bit0 significando escrita (0) ou leitura (1).  

Aqui o fluxo para escrita:


O fluxo para leitura:

Abaixo o esquema elétrico para a conexão do PIC 16F877 com o PCF8574:


No firmware, o PCF8574 passa a ser a opção de seleção número 11 no menu de seleção de dispositivos e o PCF8574A a opção 12. 
Pode-se fazer então a leitura das portas do PCF8574, ou a escrita das portas, onde se entra com o endereço do dispositivo no barramento I2C e em seguida o valor a ser escrito nas 8 portas.


O circuito integrado HMC5883L fornece a medição de campo magnético em 3 eixos, em dois registradores de 2 bytes cada, mas com 12 bits de valor, que representa uma resolução de 2 mili gauss e capacidade de medir até 8 gauss. Esse dispositivo usa tecnologia AMR (anisotropic magneto resistive). Como ele é um ci em encapsulamento smd, geralmente é mais prático utilizá-los através de pequenos módulos, em que há apenas acesso a 5 pinos (alimentação e barramento I2C).
A seguir o diagrama de blocos e interligação com o microcontrolador:


E o esquema completo:


No firmware, o HMC5883L passa a ser a opção 13 no menu de dispositivos. Como a utilização dele é apenas de leitura, na opção de leitura o display passa a apresentar de pronto os valores medidos nos 3 eixos, com polaridade N (negativo) e P (positivo).
A saída se dá pelo botão número 4.

Forneço aqui os códigos hexadecimais a serem gravados no PIC:

:10000000B2018C29B216B21EB212B2190B28B21567
:100010004420031832280830A3005920A20DA30B56
:100020000D28B21E3D2063205F20B21A32203720F7
:10003000220803108729B216B21EB21232192528DF
:10004000FE39B300321503108729321A2D28A60075
:10005000321644200318322826084C200318322870
:10006000B21E87293D20632032113212B2113608A8
:100070008400340884178004432836088400340937
:100080008005841780058729372063208B213D2038
:100090005F203308B2190138A2000830A300A20D76
:1000A00003183720031C3D2063205F20A30B4F283B
:1000B000372063203608840034080005FF3E3708E7
:1000C0008400350940283708840035083A28040898
:1000D000A70089100910091083168910091009104A
:1000E000880183122708B21890283A30A100FC300A
:1000F00012213330A600A3201030A1006830122155
:10010000A32064301121A32038308F200C308F20A1
:1001100001308F2006308F20B21427089028321427
:10012000A600321C9E280910033C031CA328A32010
:100130000730A100D0301221031408003214FE3C15
:100140000319872909148914260888003210891098
:100150003230112103140800B31329080319B3170F
:100160001030A8000301A40DA50D03180130EC20E8
:100170002808031DB2280800B31329080319B31770
:100180000430A800250EC9202508C920240EC92046
:1001900024080F39F63E0318073E0A3EEC28B31335
:1001A00029080319B3170530A8002730A300103021
:1001B000E5200330A300E830E520A3016430E5200A
:1001C000A3010A30E5202408EC28A2002508A1009C
:1001D0002408A00050212008A000A8030319B3138D
:1001E00029080319F6282802031808002008031D0F
:1001F000B313B31B0800303E822983178001840AA1
:10020000FF3E031DFE288729A301A200FF30A2079D
:10021000031CA307031C87290330A100DF30122130
:100220000629A101E83EA000A109FC30031C1B29FE
:10023000A00703181829A0076400A10F1829201887
:100240002129A01C2529000025290800A101A301BE
:10025000A20001303529A20006303529A101A301F1
:10026000A20004303529A2000530A800230821028D
:10027000031D3C2922082002043003180130031911
:1002800002302805031DFF3087290038031DFF3089
:100290000405031DFF3087290404031DFF3087294F
:1002A000A501A4011030A600210DA40DA50D220862
:1002B000A4022308031C230FA502031866292208A1
:1002C000A40723080318230FA5070310A00DA10DF1
:1002D000A60B5429200887291030A800A101A001ED
:1002E000A70CA60C031C7A292208A00723080318D0
:1002F000230FA107A10CA00CA50CA40CA80B70291E
:1003000024088729840031088A003008820083137A
:1003100003138312640008008316DF3085000F305A
:100320008600913087008801890106309F000730E0
:100330009C00831207112030840060308A01FE2067
:10034000A030840050308A01FE20103084006030DC
:100350008A01FD209030840060308A01FD20FE304B
:100360008A01682001308A01682050308A016820A3
:100370006C308A01682061308A01682063308A010C
:10038000682061308A01682020308A0168204D3061
:100390008A01682043308A0168204C308A01682035
:1003A00041308A01682042308A01682032308A0157
:1003B000682020308A01682020308A01682020309F
:1003C0008A01682020308A016820FE308A01682076
:1003D000C0308A0168204C308A01682065308A016B
:1003E00068202F308A01682067308A0168207230C7
:1003F0008A01682061308A01682076308A0168208D
:1004000061308A01682020308A01682049308A01E1
:10041000682032308A01682043308A016820203009
:100420008A01682020308A01682020308A016820F3
:10043000FE308A0168200F308A0168200330A30053
:10044000E8308A010521FE308A01682001308A01E6
:10045000682031308A0168202D308A01682073308D
:100460008A01682065308A0168206C308A01682022
:1004700020308A01682064308A01682065308A0152
:10048000682076308A01682020308A016820323066
:100490008A0168202D308A01682072308A01682024
:1004A00065308A01682061308A01682064308A01E1
:1004B0006820FE308A016820C0308A01682033300D
:1004C0008A0168202D308A01682077308A016820EF
:1004D00072308A01682069308A01682074308A018C
:1004E000682065308A01682020308A016820343015
:1004F0008A0168202D308A01682065308A016820D1
:1005000072308A01682061308A01682073308A0164
:10051000682065308A01682064008A110A12061872
:10052000992AFA308A0104210130CE008A110A1278
:10053000BC2A64008A110A128618A42AFA308A0199
:1005400004218A150A121A2B64008A110A1206194C
:10055000AF2AFA308A0104218A150A12162F640084
:100560008A110A128619BA2AFA308A0104218A11DC
:100570000A16C32A8A018C2AFE308A0168200130BB
:100580008A01682053308A01682065308A0168201A
:100590006C308A01682065308A01682063308A01E6
:1005A000682074308A01682020308A016820643015
:1005B0008A01682065308A01682076308A016820C7
:1005C00069308A01682063308A01682065308A01B9
:1005D00068203A308A01682020308A016820203063
:1005E0008A016820FE308A016820C0308A016820B4
:1005F0003D308A0168208A110A12342364008A116E
:100600000A120618122BFA308A010421CE03640064
:100610004E08003C8A110A12031D102B0D30CE002B
:100620008A01F22A64008A110A128618262BFA30EF
:100630008A010421CE0A64004E080E3C8A110A1277
:10064000031D242B0130CE008A01F22A64008A1196
:100650000A128619322B0130A3005E308A0105216F
:100660008A01AF298A01FE2A64004E08013C8A11E2
:100670000A12031D642BFE308A016820C0308A01F3
:1006800068203D308A01682032308A016820343089
:100690008A0168204C308A01682043308A01682032
:1006A00030308A01682031308A01682020308A0188
:1006B000682020308A01682020308A016820A0301C
:1006C000CB007F30BA00BB0164004E08023C8A11A7
:1006D0000A12031D942BFE308A016820C0308A0163
:1006E00068203D308A01682032308A016820343029
:1006F0008A0168204C308A01682043308A016820D2
:1007000030308A01682032308A01682020308A0126
:10071000682020308A01682020308A016820A030BB
:10072000CB00FF30BA00BB0164004E08033C8A11C5
:100730000A12031DC52BFE308A016820C0308A01D1
:1007400068203D308A01682032308A0168203430C8
:100750008A0168204C308A01682043308A01682071
:1007600030308A01682034308A01682020308A01C4
:10077000682020308A01682020308A016820A0305B
:10078000CB00FF30BA000130BB0064004E08043CCF
:100790008A110A12031DF62BFE308A016820C03030
:1007A0008A0168203D308A01682032308A01682041
:1007B00034308A0168204C308A01682043308A0135
:1007C000682030308A01682038308A016820203063
:1007D0008A01682020308A01682020308A01682040
:1007E000A030CB00FF30BA000330BB0064004E08DD
:1007F000053C8A110A12031D272CFE308A0168204D
:10080000C0308A0168203D308A01682032308A0178
:10081000682034308A0168204C308A0168204330D7
:100820008A01682031308A01682036308A016820C8
:1008300020308A01682020308A01682020308A0117
:100840006820A030CB00FF30BA000730BB00640046
:100850004E08063C8A110A12031D582CFE308A01EC
:100860006820C0308A0168203D308A01682032301B
:100870008A01682034308A0168204C308A0168205F
:1008800043308A01682033308A01682032308A017F
:10089000682020308A01682020308A0168202030BA
:1008A0008A016820A030CB00FF30BA000F30BB00B7
:1008B00064004E08073C8A110A12031D892CA030DF
:1008C000CB00FE308A016820C0308A0168203D30AC
:1008D0008A01682032308A01682034308A01682019
:1008E0004C308A01682043308A01682036308A0102
:1008F000682034308A01682020308A016820203046
:100900008A01682020308A016820FF30BA001F3039
:10091000BB0064004E08083C8A110A12031DB82C63
:10092000FE308A016820C0308A0168203D308A018B
:10093000682032308A01682034308A0168204C30C7
:100940008A01682043308A01682031308A0168209A
:1009500032308A01682038308A01682020308A01CC
:10096000682020308A016820FF30BA003F30BB0089
:1009700064004E08093C8A110A12031DE72CFE3060
:100980008A016820C0308A0168203D308A016820D1
:1009900032308A01682034308A0168204C308A0164
:1009A000682043308A01682032308A01682035305F
:1009B0008A01682036308A01682020308A01682048
:1009C00020308A016820FF30BA007F30BB0064000D
:1009D0004E080A3C8A110A12031D162DFE308A01A8
:1009E0006820C0308A0168203D308A01682032309A
:1009F0008A01682034308A0168204C308A016820DE
:100A000043308A01682035308A01682031308A01FC
:100A1000682032308A01682020308A016820203026
:100A20008A016820FF30BA00FF30BB0064004E0826
:100A30000B3C8A110A12031D432DFE308A016820E7
:100A4000C0308A0168203D308A01682050308A0118
:100A5000682043308A01682046308A016820383097
:100A60008A01682035308A01682037308A01682081
:100A700034308A01682020308A01682020308A01C1
:100A800068204030CB0064004E080C3C8A110A12EA
:100A9000031D702DFE308A016820C0308A01682055
:100AA0003D308A01682050308A01682043308A0135
:100AB000682046308A01682038308A016820353045
:100AC0008A01682037308A01682034308A01682022
:100AD00041308A01682020308A0168207030CB00C4
:100AE00064004E080D3C8A110A12031D9B2DFE3036
:100AF0008A016820C0308A0168203D308A01682060
:100B000048308A0168204D308A01682043308A01CC
:100B1000682035308A01682038308A0168203830F2
:100B20008A01682033308A0168204C308A016820AD
:100B300020308A0168200800FE308A0168200F30CA
:100B40008A016820FE308A01682001308A0168200D
:100B500045308A0168206E308A01682074308A012D
:100B6000682065308A01682072308A016820203050
:100B70008A01682061308A01682064308A01682017
:100B800064308A01682072308A01682065308A01E9
:100B9000682073308A01682073308A0168203A30F7
:100BA0008A01682020308A01682020308A0168206C
:100BB00064000B304E028A110A120318E22D8A11CA
:100BC0000A12592ECA01FE308A016820C0308A01FB
:100BD00068203D308A016820A9014A08A400A501C7
:100BE0006730B000B1018A01CF20FE308A01682051
:100BF000C1308A01682064008A110A120618252E65
:100C0000FA308A010421CA0364004A08FF3C8A11B1
:100C10000A12031D0D2E0730CA00FE308A0168201B
:100C2000C0308A0168203D308A016820A9014A0845
:100C3000A400A5016730B000B1018A01CF20FE30C9
:100C40008A016820C1308A01682064008A110A1272
:100C500086184E2EFA308A010421CA0A64004A0816
:100C6000083C8A110A12031D362ECA01FE308A0181
:100C70006820C0308A0168203D308A016820A901BF
:100C80004A08A400A5016730B000B1018A01CF2055
:100C9000FE308A016820C1308A01682064008A1110
:100CA0000A128619572EFA308A01042108008A0197
:100CB000FB2DA6011030A7005408A200A3018A0151
:100CC0006C21BC002508BD00A6010130A700530817
:100CD000A200A3018A016C21BE002508BF003C08C8
:100CE000BE073D080318013EBF071030A600A7014C
:100CF0005208A200A3018A016C21C0002508C1008E
:100D00003E08C0073F080318013EC10751084007CD
:100D1000B80041080318013EB900FE308A0168207E
:100D2000C0308A0168203D308A0168200430A90063
:100D30003808A4003908A5006730B000B1018A0165
:100D4000BC2020308A0168200530A9003808A400A2
:100D50003908A5006730B000B1018A01CF20FE300C
:100D60008A016820C1308A01682064008A110A1251
:100D70000618232FFA308A010421D4036400540892
:100D8000FF3C8A110A12031DC72E0F30D400A601A2
:100D90001030A7005408A200A3018A016C21BC00F6
:100DA0002508BD00A6010130A7005308A200A30139
:100DB0008A016C21BE002508BF003C08BE073D0823
:100DC0000318013EBF071030A600A7015208A20079
:100DD000A3018A016C21C0002508C1003E08C0079C
:100DE0003F080318013EC10751084007B8004108F9
:100DF0000318013EB900FE308A016820C0308A0124
:100E000068203D308A0168200430A9003808A40019
:100E10003908A5006730B000B1018A01BC2020303C
:100E20008A0168200530A9003808A4003908A50007
:100E30006730B000B1018A01CF20FE308A016820FE
:100E4000C1308A01682064008A110A128618902F26
:100E5000FA308A010421D40A64005408103C8A1133
:100E60000A12031D342FD401A6011030A700540824
:100E7000A200A3018A016C21BC002508BD00A601C7
:100E80000130A7005308A200A3018A016C21BE0013
:100E90002508BF003C08BE073D080318013EBF07F8
:100EA0001030A600A7015208A200A3018A016C21FC
:100EB000C0002508C1003E08C0073F080318013ED6
:100EC000C10751084007B80041080318013EB900A6
:100ED000FE308A016820C0308A0168203D308A01D6
:100EE00068200430A9003808A4003908A50067303C
:100EF000B000B1018A01BC2020308A016820053091
:100F0000A9003808A4003908A5006730B000B10175
:100F10008A01CF20FE308A016820C1308A01682012
:100F200064008A110A120619A12FFA308A010421DD
:100F3000FE308A01682014308A0168208A110A1262
:100F4000A32F8A01B52E64008A150A1206181128EB
:100F5000FA308A010421D30364005308FF3C8A114C
:100F60000A12031DB52F0F30D300A6011030A700C1
:100F70005408A200A3018A016C21BC002508BD0011
:100F8000A6010130A7005308A200A3018A016C2129
:100F9000BE002508BF003C08BE073D080318013EFF
:100FA000BF071030A600A7015208A200A3018A01C2
:100FB0006C21C0002508C1003E08C0073F08031887
:100FC000013EC10751084007B80041080318013E1F
:100FD000B900FE308A016820C0308A0168203D30A7
:100FE0008A0168200430A9003808A4003908A50047
:100FF0006730B000B1018A01BC2020308A0168202E
:101000000530A9003808A4003908A5006730B000F1
:10101000B1018A01CF20FE308A016820C2308A01E6
:10102000682064008A150A1286187E28FA308A0120
:101030000421D30A64005308103C8A150A12031DC8
:101040002228D301A6011030A7005408A200A30152
:101050008A016C21BC002508BD00A6010130A70053
:101060005308A200A3018A016C21BE002508BF001D
:101070003C08BE073D080318013EBF071030A6001C
:10108000A7015208A200A3018A016C21C000250813
:10109000C1003E08C0073F080318013EC1075108C0
:1010A0004007B80041080318013EB900FE308A012C
:1010B0006820C0308A0168203D308A0168200430F1
:1010C000A9003808A4003908A5006730B000B101B4
:1010D0008A01BC2020308A0168200530A900380828
:1010E000A4003908A5006730B000B1018A01CF2003
:1010F000FE308A016820C2308A01682064008A15A7
:101100000A1206198F28FA308A010421FE308A015A
:10111000682014308A0168208A150A1291288A01F1
:10112000A32F64008A150A120618FF28FA308A01D4
:101130000421D20364005208FF3C8A150A12031DE1
:10114000A3280F30D200A6011030A7005408A20037
:10115000A3018A016C21BC002508BD00A601013055
:10116000A7005308A200A3018A016C21BE00250834
:10117000BF003C08BE073D080318013EBF07103002
:10118000A600A7015208A200A3018A016C21C00099
:101190002508C1003E08C0073F080318013EC107EB
:1011A00051084007B80041080318013EB900FE305D
:1011B0008A016820C0308A0168203D308A01682099
:1011C0000430A9003808A4003908A5006730B00031
:1011D000B1018A01BC2020308A0168200530A900B5
:1011E0003808A4003908A5006730B000B1018A01B1
:1011F000CF20FE308A016820C3308A016820640055
:101200008A150A1286186C29FA308A010421D20A3A
:1012100064005208103C8A150A12031D1029D201DD
:10122000A6011030A7005408A200A3018A016C2176
:10123000BC002508BD00A6010130A7005308A2008C
:10124000A3018A016C21BE002508BF003C08BE072F
:101250003D080318013EBF071030A600A701520841
:10126000A200A3018A016C21C0002508C1003E082C
:10127000C0073F080318013EC10751084007B800E6
:1012800041080318013EB900FE308A016820C030D1
:101290008A0168203D308A0168200430A90038089E
:1012A000A4003908A5006730B000B1018A01BC2054
:1012B00020308A0168200530A9003808A4003908C8
:1012C000A5006730B000B1018A01CF20FE308A014D
:1012D0006820C3308A01682064008A150A12061942
:1012E0007D29FA308A010421FE308A0168201430F9
:1012F0008A0168208A150A1280298A150A12912803
:1013000064008A150A120618EE29FA308A010421AF
:10131000D10364005108FF3C8A150A12031D92296B
:101320000F30D100A6011030A7005408A200A3017D
:101330008A016C21BC002508BD00A6010130A70070
:101340005308A200A3018A016C21BE002508BF003A
:101350003C08BE073D080318013EBF071030A60039
:10136000A7015208A200A3018A016C21C000250830
:10137000C1003E08C0073F080318013EC1075108DD
:101380004007B80041080318013EB900FE308A0149
:101390006820C0308A0168203D308A01682004300E
:1013A000A9003808A4003908A5006730B000B101D1
:1013B0008A01BC2020308A0168200530A900380845
:1013C000A4003908A5006730B000B1018A01CF2020
:1013D000FE308A016820C4308A01682064008A15C2
:1013E0000A1286185B2AFA308A010421D10A6400A5
:1013F0005108103C8A150A12031DFF29D101A601CC
:101400001030A7005408A200A3018A016C21BC007F
:101410002508BD00A6010130A7005308A200A301C2
:101420008A016C21BE002508BF003C08BE073D08AC
:101430000318013EBF071030A600A7015208A20002
:10144000A3018A016C21C0002508C1003E08C00725
:101450003F080318013EC10751084007B800410882
:101460000318013EB900FE308A016820C0308A01AD
:1014700068203D308A0168200430A9003808A400A3
:101480003908A5006730B000B1018A01BC202030C6
:101490008A0168200530A9003808A4003908A50091
:1014A0006730B000B1018A01CF20FE308A01682088
:1014B000C4308A01682064008A150A1206196C2A51
:1014C000FA308A010421FE308A01682014308A0132
:1014D00068208A150A126F2A8A150A128029A60125
:1014E0001030A7005408A200A3018A016C21BC009F
:1014F0002508BD00A6010130A7005308A200A301E2
:101500008A016C21BE002508BF003C08BE073D08CB
:101510000318013EBF071030A600A7015208A20021
:10152000A3018A016C21C0002508C1003E08C00744
:101530003F080318013EC10751084007B8004108A1
:101540000318013EB9003808A0003908A1003B0883
:10155000A3003A088A012B218A150A12031D192BB0
:10156000FE308A01682001308A01682049308A01F2
:1015700068206E308A01682076308A0168206130E8
:101580008A0168206C308A01682069308A016820ED
:1015900064308A01682020308A01682061308A0125
:1015A000682064308A01682064308A0168207230C3
:1015B0008A01682065308A01682073308A016820BA
:1015C00073308A01682020308A016820FE308A0149
:1015D0006820C0308A0168204D308A01682061305F
:1015E0008A01682078308A01682020308A016820CA
:1015F00061308A01682064308A01682064308A0181
:10160000682072308A0168203D308A0168200530E8
:10161000A9003A08A4003B08A5006730B000B1015A
:101620008A01CF200B30A300B8308A0105218A013E
:101630009C2D080064000B304E028A150A12031814
:10164000242B8A150A12C52B64004E080D3C8A15FE
:101650000A12031D2E2B8A150A12022D8A019C25BF
:101660004B144A18CB144A1CCB10CA184B15CA1C71
:101670004B114A19CB154A1DCB110730B60010305B
:10168000B4000730B7000830B5004B088A011D20B0
:101690008A010220CD00FE308A01682001308A01D3
:1016A000682044308A01682061308A0168207430E3
:1016B0008A01682061308A01682020308A01682010
:1016C00066308A01682072308A0168206F308A0192
:1016D00068206D308A01682020308A0168207030CF
:1016E0008A0168206F308A01682072308A01682080
:1016F00074308A01682073308A0168203A308A0188
:101700006820FE308A016820C0308A016820643079
:101710008A01682061308A01682074308A0168205B
:1017200061308A0168203D308A0168200230A900BA
:101730004D08A400A5016730B000B1018A01BC20AA
:1017400020308A0168200830A9004D08A400A501B6
:101750006730B000B1018A01AC2064008A150A121A
:101760008619B72BFA308A0104218A01AF29640057
:101770008A150A120619C22BFA308A0104218A1529
:101780000A12302B8A150A12AD2B8A019C254B14A4
:10179000FE308A01682001308A01682061308A01A8
:1017A000682064308A01682064308A0168207230C1
:1017B0008A0168203D308A0168200430A900380879
:1017C000A4003908A5006730B000B1018A01BC202F
:1017D00020308A0168200530A9003808A4003908A3
:1017E000A5006730B000B1018A01CF20640003304A
:1017F0004E028A150A1203180E2C0730B60010305C
:10180000B4000730B7000830B5004B088A011D202E
:1018100038088A011D208A010220D6004E08033CA8
:10182000031DFF30FF3ABC004E08043C031DFF308F
:10183000FF3ABE003C0884003E088A014C21BE00ED
:10184000BF004E08053C031DFF30FF3AC0003E08B4
:101850003F04840040088A014C21C000C10064009C
:10186000400841048A150A120319532C3918CB1465
:10187000391CCB10B9184B15B91C4B113919CB15A4
:10188000391DCB110730B6001030B4000730B70057
:101890000830B5004B088A011D2038088A011D2038
:1018A0008A010220D6004E08A00005308A012621B8
:1018B000BC004E08A0000B308A012E21BE003C085F
:1018C00084003E088A014521BE00BF0064003E0836
:1018D0003F048A150A120319812C0730B600103014
:1018E000B4000730B7000830B5004B088A011D204E
:1018F00039088A011D2038088A011D208A0102202A
:10190000D600FE308A016820C0308A016820643029
:101910008A01682061308A01682074308A01682059
:1019200061308A0168203D308A0168200230A900B8
:101930005608A400A5016730B000B1018A01BC209F
:1019400020308A0168200330A9005608A400A501B0
:101950006730B000B1018A01CF2064008A150A12F5
:101960000618D62CFA308A0104210130B802003062
:10197000031C013EB902FF30A000FF30A10039086E
:10198000A30038088A0133218A150A12031DD32CBB
:1019900064000A304E028A150A120318D32C3A0842
:1019A000B8003B08B9008A150A12C72B64008A15D3
:1019B0000A128618F32CFA308A010421B80A031996
:1019C000B90A3808A0003908A1003B08A3003A086A
:1019D0008A012B218A150A12031DF02CB801B901C6
:1019E0008A150A12C72B64008A150A128619FF2C61
:1019F0000130A3005E308A0105218A01AF298A15D2
:101A00000A12AD2C0A308A010421B801B90107304D
:101A1000B6001030B4000730B7000830B5003C30D5
:101A20008A011D2038088A011D2070308A011B2080
:101A300064308A0104210130B800B9010730B600D2
:101A40001030B4000730B7000830B5003C308A01D0
:101A50001D2038088A011D20E0308A011B206430D7
:101A60008A0104210230B800B9010730B6001030F5
:101A7000B4000730B7000830B5003C308A011D20A3
:101A800038088A011D2000308A011B20FE308A019F
:101A9000682001308A0168204D308A016820653055
:101AA0008A01682064308A01682069308A016820D0
:101AB00064308A0168206F308A01682072308A01A0
:101AC000682020308A0168204D308A01682061300A
:101AD0008A01682067308A0168206E308A01682098
:101AE00065308A01682074308A01682069308A0173
:101AF000682063308A0168200130A300F4308A0135
:101B000005210330B800B9010730B6001030B40029
:101B10000730B7000830B5003D308A011D20380875
:101B20008A011D208A010220C30014308A01042189
:101B30000430B800B9010730B6001030B4000730E7
:101B4000B7000830B5003D308A011D2038088A01F1
:101B50001D208A010220C20014308A0104210530B0
:101B6000B800B9010730B6001030B4000730B70034
:101B70000830B5003D308A011D2038088A011D203B
:101B80008A010220C70014308A0104210630B800FF
:101B9000B9010730B6001030B4000730B700083084
:101BA000B5003D308A011D2038088A011D208A01B8
:101BB0000220C60014308A0104210730B800B901A0
:101BC0000730B6001030B4000730B7000830B50059
:101BD0003D308A011D2038088A011D208A0102201B
:101BE000C90014308A0104210830B800B901073057
:101BF000B6001030B4000730B7000830B5003D30F3
:101C00008A011D2038088A011D208A010220C8008F
:101C10004208A0004308A1007F30A300FF308A01E2
:101C20002B218A150A12031D212E4208003CC200F6
:101C30004308031C013E003CC30055148A150A12D8
:101C4000222E55104608A0004708A1007F30A300AF
:101C5000FF308A012B218A150A12031D3B2E4608EC
:101C6000003CC6004708031C013E003CC700D514D9
:101C70008A150A123C2ED5104808A0004908A10078
:101C80007F30A300FF308A012B218A150A12031D21
:101C9000552E4808003CC8004908031C013E003C82
:101CA000C90055158A150A12562E551164008A1559
:101CB0000A125519742EFE308A01682001308A01FB
:101CC00068205A308A0168203D308A016820A901C5
:101CD0004808A4004908A5006730B000B1018A0196
:101CE000CF2050308A01682064008A150A12551DE1
:101CF000922EFE308A01682001308A0168205A3015
:101D00008A0168203D308A016820A9014808A400A2
:101D10004908A5006730B000B1018A01CF204E30DC
:101D20008A01682064008A150A125518B02EFE3008
:101D30008A016820C0308A01682058308A016820F2
:101D40003D308A016820A9014208A4004308A5008B
:101D50006730B000B1018A01CF2050308A0168207D
:101D600064008A150A12551CCE2EFE308A016820A6
:101D7000C0308A01682058308A0168203D308A01CD
:101D80006820A9014208A4004308A5006730B000FC
:101D9000B1018A01CF204E308A01682064008A1583
:101DA0000A12D518E92E20308A01682059308A019C
:101DB00068203D308A016820A9014608A400470830
:101DC000A5006730B000B1018A01CF2050308A01F0
:101DD000682064008A150A12D51C042F20308A015D
:101DE000682059308A0168203D308A016820A901A5
:101DF0004608A4004708A5006730B000B1018A0179
:101E0000CF204E308A01682064008A150A12861994
:101E10000E2FFA308A0104218A01AF290130A30074
:101E20002C308A0105218A150A12812D8A019C25F0
:101E300064000B304E028A150A120318222F8A11F1
:101E40000A16672864004E080D3C8A150A12031D05
:101E50002B2F8A01AF294B104A18CB144A1CCB10E8
:101E6000CA184B15CA1C4B114A19CB154A1DCB1168
:101E7000FE308A01682001308A01682044308A01DE
:101E8000682061308A01682074308A0168206130DE
:101E90008A01682020308A01682074308A01682015
:101EA0006F308A01682020308A01682070308A01F2
:101EB00068206F308A01682072308A01682074308F
:101EC0008A01682073308A0168203A308A016820CC
:101ED00020308A01682020308A016820FE308A0183
:101EE0006820C0308A01682064308A01682061302F
:101EF0008A01682074308A01682061308A01682074
:101F00003D308A0168200230A9005608A400A501CE
:101F10006730B000B1018A01BC2020308A016820FE
:101F20000830A9005608A400A5016730B000B1012F
:101F30008A01AC2064008A150A120618AE2FFA3006
:101F40008A010421D00A64005008103C8A150A1244
:101F5000031DAB2FD0018A150A12F62764008A15DB
:101F60000A128618C22FFA308A010421CF0A6400AF
:101F70004F08103C8A150A12031DBF2FCF018A1586
:101F80000A12F62764008A150A128619CC2FFA3035
:101F90008A0104218A01AF2964008A150A120619F0
:101FA000F32FFA308A0104211030A600A70150084F
:101FB000A200A3018A016C21BC002508BD003C08D9
:101FC0004F07D6000730B6001030B4000730B70016
:101FD0000830B5004B088A011D2056088A011B20D5
:101FE0008A150A122B2F8A150A129A2F1030A60072
:101FF000A7015008A200A3018A016C21BC0025089A
:10200000BD003C084F07D600FE308A016820C03072
:102010008A01682064308A01682061308A01682062
:1020200074308A01682061308A0168203D308A015D
:1020300068200230A9005608A400A5016730B0004E
:10204000B1018A01BC2020308A0168200830A90033
:102050005608A400A5016730B000B1018A01AC2088
:10206000FE308A01682010308A016820FE308A0123
:10207000682010308A016820FE308A016820103004
:102080008A016820FE308A01682010308A016820A9
:10209000FE308A01682010308A016820FE308A01F3
:1020A000682010308A016820FE308A0168201030D4
:1020B0008A016820FE308A01682010308A01682079
:1020C000FE308A01682010308A0168200800143030
:1020D0008A0104214B14FE308A01682001308A01F4
:1020E000682061308A01682064308A016820643089
:1020F0008A01682072308A0168203D308A01682098
:102100000430A9003808A4003908A5006730B000E1
:10211000B1018A01BC2020308A0168200530A90065
:102120003808A4003908A5006730B000B1018A0161
:10213000CF20640003304E028A110A160318B1281A
:102140000730B6001030B4000730B7000830B500D3
:102150004B088A011D2038088A011D208A010220AF
:10216000D6004E08033C031DFF30FF3ABC004E086A
:10217000043C031DFF30FF3ABE003C0884003E08CB
:102180008A014C21BE00BF004E08053C031DFF30F4
:10219000FF3AC0003E083F04840040088A014C21F9
:1021A000C000C1006400400841048A110A160319E6
:1021B000F6283918CB14391CCB10B9184B15B91C9B
:1021C0004B113919CB15391DCB110730B600103022
:1021D000B4000730B7000830B5004B088A011D2055
:1021E00038088A011D208A010220D6004E08A0006E
:1021F00005308A012621BC004E08A0000B308A0160
:102200002E21BE003C0884003E088A014521BE0004
:10221000BF0064003E083F048A110A1603192429EE
:102220000730B6001030B4000730B7000830B500F2
:102230004B088A011D2039088A011D2038088A01AF
:102240001D208A010220D600FE308A016820C0309D
:102250008A01682064308A01682061308A01682020
:1022600074308A01682061308A0168203D308A011B
:1022700068200230A9005608A400A5016730B0000C
:10228000B1018A01BC2020308A0168200330A900F6
:102290005608A400A5016730B000B1018A01CF2023
:1022A000FE308A01682010308A016820FE308A01E1
:1022B000682010308A016820FE308A0168201030C2
:1022C0008A016820FE308A01682010308A01682067
:1022D0005608A000A1011030A200A3018A015021DC
:1022E000D0005008A600A7011030A200A3018A0167
:1022F0006C21BC002508BD003C085602CF006400DC
:102300008A110A1606189329FA308A010421D00A84
:1023100064005008103C8A110A16031D9029D00150
:102320008A110A16702264008A110A168618A729D3
:10233000FA308A010421CF0A64004F08103C8A1148
:102340000A16031DA429CF018A110A1670226400FF
:102350008A110A160619612A4B10FA308A010421E3
:102360001030A600A7015008A200A3018A016C2129
:10237000BC002508BD003C084F07D60064000330B0
:102380004E028A110A160318D6290730B6001030FB
:10239000B4000730B7000830B5004B088A011D2093
:1023A00038088A011D2056088A011B204E08033C6C
:1023B000031DFF30FF3ABC004E08043C031DFF30F4
:1023C000FF3ABE003C0884003E088A014C21BE0052
:1023D000BF004E08053C031DFF30FF3AC0003E0819
:1023E0003F04840040088A014C21C000C100640001
:1023F000400841048A110A1603191B2A3918CB1404
:10240000391CCB10B9184B15B91C4B113919CB1508
:10241000391DCB110730B6001030B4000730B700BB
:102420000830B5004B088A011D2038088A011D209C
:1024300056088A011B204E08A00005308A0126217B
:10244000BC004E08A0000B308A012E21BE003C08C3
:1024500084003E088A014521BE00BF0064003E089A
:102460003F048A110A160319492A0730B6001030B2
:10247000B4000730B7000830B5004B088A011D20B2
:1024800039088A011D2038088A011D2056088A0152
:102490001B20B80A0319B90A3808A0003908A1009E
:1024A0003B08A3003A088A0133218A110A16031D4A
:1024B0005B2AB801B90114308A0104218A110A1675
:1024C000672864008A110A1686196D2A0130A30054
:1024D0005E308A0105218A01AF298A110A167F29F7
:1024E0001030A600A7015008A200A3018A016C21A8
:1024F000BC002508BD003C084F07D600FE308A010D
:102500006820C0308A01682064308A016820613008
:102510008A01682074308A01682061308A0168204D
:102520003D308A0168200230A9005608A400A501A8
:102530006730B000B1018A01BC2020308A016820D8
:102540000330A9005608A400A5016730B000B1010E
:102550008A01CF20FE308A01682010308A0168206D
:10256000FE308A01682010308A016820FE308A011E
:10257000682010308A016820FE308A0168201030FF
:102580008A016820080064000B304E028A110A1686
:10259000031CCC2A8A01AF294B10FE308A01682027
:1025A00001308A01682045308A01682072308A0132
:1025B000682061308A01682073308A0168206930A0
:1025C0008A0168206E308A01682067308A0168209D
:1025D00020308A0168206D308A01682065308A01C8
:1025E00068206D308A0168206F308A01682072305F
:1025F0008A01682079308A01682020308A016820A9
:1026000020308A016820FE308A016820C0308A01AB
:10261000682043308A0168206F308A0168206E305C
:102620008A01682066308A01682069308A01682042
:1026300072308A0168206D308A01682020308A015A
:1026400068203F308A01682020308A0168204230AB
:102650008A01682075308A01682074308A016820F8
:1026600031308A01682020308A01682020308A01B8
:10267000682064008A110A160618442BFA308A0171
:1026800004218A110A16512B64008A110A16861831
:102690004E2BFA308A0104218A01AF298A110A16C9
:1026A000392BFE308A01682001308A0168204530CC
:1026B0008A01682072308A01682061308A016820AE
:1026C00073308A01682069308A0168206E308A017F
:1026D000682067308A01682020308A0168206D30C8
:1026E0008A01682065308A0168206D308A0168207F
:1026F0006F308A01682072308A01682079308A013F
:10270000682020308A01682020308A016820FE304D
:102710008A016820C0308A01682057308A01682009
:1027200061308A01682069308A01682074308A012A
:10273000682020308A01682020308A0168202030FB
:102740008A01682020308A01682020308A016820B0
:1027500020308A01682020308A01682020308A01D8
:10276000682020308A01682020308A0168202030CB
:102770008A01682020308A016820C401C50144080C
:10278000A0004508A1003B08A3003A088A012821BF
:102790008A110A16031D632CFF30D6006400033033
:1027A0004E028A110A160318E62B0730B6001030C5
:1027B000B4000730B7000830B5004B088A011D206F
:1027C00044088A011D2056088A011B204E08033C3C
:1027D000031DFF30FF3ABC004E08043C031DFF30D0
:1027E000FF3ABE003C0884003E088A014C21BE002E
:1027F000BF004E08053C031DFF30FF3AC0003E08F5
:102800003F04840040088A014C21C000C1006400DC
:10281000400841048A110A1603192B2C4518CB14C1
:10282000451CCB10C5184B15C51C4B114519CB15B4
:10283000451DCB110730B6001030B4000730B7008B
:102840000830B5004B088A011D2044088A011D206C
:1028500056088A011B204E08A00005308A01262157
:10286000BC004E08A0000B308A012E21BE003C089F
:1028700084003E088A014521BE00BF0064003E0876
:102880003F048A110A160319592C0730B60010307C
:10289000B4000730B7000830B5004B088A011D208E
:1028A00045088A011D2044088A011D2056088A0116
:1028B0001B2014308A010421C40A0319C50A8A1195
:1028C0000A16031DBF2BFE308A01682001308A01E1
:1028D00068204D308A01682065308A0168206D309B
:1028E0008A0168206F308A01682072308A0168206E
:1028F00079308A01682020308A01682065308A0199
:10290000682072308A01682061308A016820733043
:102910008A01682065308A01682064308A01682055
:1029200020308A01682020308A01682020308A0106
:102930006820FE308A016820C0308A01682050304B
:102940008A01682072308A01682065308A01682017
:1029500073308A01682073308A01682020308A0130
:10296000682042308A01682075308A0168207430FE
:102970008A01682074308A0168206F308A016820DB
:102980006E308A01682020308A01682034308A0144
:10299000682020308A01682020308A016820640085
:1029A0008A110A168619DB2C0130A30090308A01A7
:1029B00005218A01AF298A110A16CF2C63008A11DA
:0429C0000A16DE2CE9
:02400E00313F40
:00000001FF


segunda-feira, 14 de dezembro de 2015

Extensão do Decodificador BCD para display de 7 segmentos


Utilizei o mesmo PIC 16F676 para um decodificador para apresentar caracteres alfanuméricos em displays de led de 7 segmentos. Para tanto é necessário o uso de mais uma porta para entrar o código binário (agora não mais BCD) de 5 bits, o que permite 32 combinações. Dada a limitação dos displays de 7 segmentos, nem todos caracteres alfanuméricos são possíveis de ser reproduzidos, tais como o "k", "m", "w", "z", "x", e o "q" pra não confundir com o "9".



Segue a tabela com os códigos de entrada na PORT A:
PORT A  
4 3 2 1 0  Caractere
0 0 0 0 0   0
0 0 0 0 1   1
0 0 0 1 0   2
0 0 0 1 1   3
0 0 1 0 0   4
0 0 1 0 1   5
0 0 1 1 0   6
0 0 1 1 1   7
0 1 0 0 0   8
0 1 0 0 1   9
0 1 0 1 0   A
0 1 0 1 1   b
0 1 1 0 0   C 
0 1 1 0 1   d
0 1 1 1 0   E
0 1 1 1 1   F
1 0 0 0 0   g
1 0 0 0 1   H
1 0 0 1 0   i
1 0 0 1 1   J
1 0 1 0 0   L
1 0 1 0 1   n
1 0 1 1 0   o
1 0 1 1 1   P
1 1 0 0 0   r
1 1 0 0 1   t
1 1 0 1 0   u
1 1 0 1 1   y
1 1 1 0 0   -
1 1 1 0 1   =
1 1 1 1 0   [
1 1 1 1 1   ]

Com a utilização de mais um bit de entrada, a seleção de saídas para catodo comum ou anodo comum deixa de existir e o decodificador só funciona para catodo comum.

Os códigos Hexa estão a seguir:
:100000002E288001840AFF3E031D01282928A30110
:10001000A200FF30A207031CA307031C29280330FA
:10002000A100DF3015200928A101E83EA000A109A8
:10003000FC30031C1E28A00703181B28A00764001F
:10004000A10F1B2820182428A01C282800002828DD
:10005000080083130313831264000800073099001B
:1000600083161F30850087019101203084004030C5
:1000700083120120BC01640020303C02031849288F
:100080003C08B80058200130A300F4300820BC0F11
:100090003B280830B8001F300505B8006400380858
:1000A0003902031D54284B283808B90058204B2822
:1000B00038081F3C031C86285F20870086280030F4
:1000C0008A003808663E03188A0A82001F34033407
:1000D0002D342734333436343E3403343F34333410
:1000E0003B343E341C342F343C34383437343B34C6
:1000F00002340F341C342A342E34393428343C343E
:100100000E343734203424341C34073438081F3C70
:10011000031CB8289120013903198512031D851687
:10012000B82800308A003808983E03188A0A8200EE
:100130000134003401340134003401340134013419
:100140000134013401340034013400340134013409
:1001500001340034003400340034003400340134FD
:1001600000340034003400340034003401340134ED
:0601700008006300B9283D
:02400E00C43FAD
:00000001FF

E um pequeno vídeo de demonstração dos caracteres gerados:



domingo, 22 de novembro de 2015

Cálculo de resposta de Filtro RC simples


Um dos circuitos mais utilizados em áudio são as etapas de filtro RC, muito usadas como filtro passa-altas ou passa-baixas e como acoplamentos de estágios. A frequência de corte é calculada simplesmente utilizando-se a fórmula  Fc = 1 / (2 x p x R x C).
Entretanto às vezes é interessante sabermos a resposta do circuito a diversas frequências, plotando-se um gráfico de amplitude e fase do sinal de saída versus a frequência do sinal. Esses valores são encontrados através de cálculos com valores de impedância complexa, onde  o capacitor assume valores diferentes de acordo com a frequência.  Um capacitor assume uma reatância calculada através da fórmula Xc = 1 / (2 x p x F x C) que depois resulta num valor de impedância complexa  Zc = 1 / (j x 2 x p x F x C). O termo  2 x p x F pode assumir uma forma simplificada sendo chamado de velocidade angular, representada pelo símbolo w (ômega).
Assim, a impedância do capacitor é dada pela fórmula:  Zc = 1 / (jwC) que  multiplicada no numerador e denominador por  j, resulta em Zc = -j / (wC)
O filtro RC representa então uma impedância de uma associação em série de um resistor e um capacitor, com valor igual a  Zt = R - j / (wC).
Para se calcular a resposta do filtro, pegamos a tensão e fase sobre o resistor (para filtros passa-altas) ou a tensão e fase sobre o capacitor (para filtros passa-baixas).
Se quisermos calcular esses valores para diversas frequências, esse cálculo se torna trabalhoso e demorado e muito repetitivo, o que se sujeita a muitos erros.
Para facilitar essa tarefa, muitas calculadoras possuem o recurso de serem programáveis e principalmente são capazes de realizar cálculos com números complexos. Dentre elas, posso citar a HP-15C, que trabalha muito facilmente com números complexos. Além disso ela possui grande memória para programas e faz conversões de notações retangulares (a + bj) para notação polar (R , q) e vice-e-versa.
O programa a seguir vai calcular as tensões e fases sobre resistor e capacitor (resultados em notação polar de amplitude e fase em graus), dados os valores de frequência, resistência, capacitância e tensão de entrada.

001 – 42,21,11   g LBL A
002 – 44 0            STO 0
003 – 0                  0
004 – 36               ENTER
005 – 36               ENTER
006 – 45 0            RCL 0
007 – 45 2            RCL 2
008 – 20               X             (vezes)
009 – 2                  2
010 – 20               X
011 – 43 26         g p
012 – 20               X
013 – 42 25         f I
014 – 15               1/x
015 – 42 30         f Re <-> Im  (swap real x imaginário)
016 – 44 4            STO 4
017 – 42 30         f Re <-> Im
018 – 45 1            RCL 1
019 – 40               +
020 – 45 3            RCL 3
021 – 34               x<->y  (swap)
022 – 10               /              (dividido)
023 – 44.0           STO.0
024 – 42 30         f Re <-> Im
025 – 44.1           STO.1
026 – 42 30         f Re <-> Im
027 – 45 1            RCL 1
028 – 20               X
029 – 36               ENTER
030 – 43 16         g ABS
031 – 44 6            STO 6
032 – 33               roll down
033 – 36               ENTER
034 – 42 30         f Re<->Im
035 – 43 5 8        g Cf 8
036 – 10               /
037 – 43 25         g Tan -1
038 – 43 3            g -> Deg
039 – 44 7            STO 7
040 – 45.0           RCL.0
041 – 45.1           RCL.1
042 – 42 25         f I
043 – 0                  0
044 – 45 4            RCL 4
045 – 42 25         f I
046 – 20               X
047 – 36               ENTER
048 – 43 16         g ABS
049 – 44 8            STO 8
050 – 33               roll down
051 – 36               ENTER
052 – 42 30         f Re <-> Im
053 – 43 5 8        g Cf 8
054 – 10               /
055 – 43 25         g  Tan -1
056 – 43 3            g  -> DEG
057 – 44 9            STO 9
058 – 43 5 8        g Cf 8
059 – 45 1            RCL 1
060 – 43 11         g  x^2
061 – 45 4            RCL 4
062 – 43 11         g  x^2
063 – 40               +
064 – 11               raiz quadrada
065 – 44 5            STO 5
066 – 43 32         RTN

Para executar o cálculo devemos guardar o valor do resistor R (em ohms) no registrador de memória R1, o valor do capacitor (em farads) no registrador R2, o valor da tensão (em volts) no registrador R2, digitamos o valor da frequência (em hertz), em seguida f LBL A e R/S. Ao final teremos os seguintes valores calculados nos registradores de memória:
R0 = frequência
R1 = resistência
R2 = capacitância
R3 = tensão de entrada
R4 = Reatância capacitiva
R5 = Módulo da impedância total
R6 = Módulo da tensão no resistor (para plotar filtro passa-alta)
R7 = fase da tensão no resistor (em graus)
R8 = Módulo da tensão no capacitor (para plotar filtro passa-baixas)
R9 = fase da tensão no capacitor (em graus)
R.0 = componente real da corrente elétrica
R.1 = componente imaginário da corrente elétrica.

Como exemplo, quero plotar a resposta de um filtro passa-altas  com resistor de 100k ohms e um capacitor de  10nF e 10V de tensão de entrada (alternada e senoidal).
Entramos com os valores:
100000  STO 1
10 E -9  STO 2
10 STO 3

Iniciando com 30Hz, digitamos 30  f LBL A  R/S e esperamos aparecer o valor do módulo da impedância total (539858), chamando RCL  6 obtemos: 1,85.
Montando-se uma tabela:
30Hz – 1,85V
40Hz – 2,43V
50Hz – 2,99V
60Hz – 3,53V
80Hz – 4,49V
100Hz – 5,32V
120Hz – 6,02V
150Hz – 6,85V
180Hz – 7,49V
200Hz – 7,82V
240Hz – 8,33V
300Hz – 8,83V
400Hz – 9,29V
500Hz – 9,53V
600Hz – 9,66V
1000Hz – 9,87V
2000Hz – 9,97V
5000Hz – 9,99V
10kHz – 10V