Pesquisar este blog

Mostrando postagens com marcador eletrônica digital. Mostrar todas as postagens
Mostrando postagens com marcador eletrônica digital. Mostrar todas as postagens

terça-feira, 25 de maio de 2021

Calculadora Binária

Uma calculadora que realiza operações aritméticas e lógicas com dois operandos de 8 bits. A entrada de dados é por lógica RPN  como nas calculadoras HP: primeiro entramos um dado de oito bits e apertamos Enter. Em seguida entramos com o segundo dado e apertamos a tecla da operação desejada. 

O circuito usa um PIC 16F628 com clock interno. O código Hex a ser gravado segue abaixo:

:100000006028A301A200FF30A207031CA307031C62
:100010005B280330A100DF300F200328A101E83E58
:10002000A000A109FC30031C1828A00703181528FC
:10003000A0076400A10F152820181E28A01C222844
:100040000000222808000310A00DA10DFF3E031898
:10005000232820085B280310A10CA00CFF3E0318E6
:100060002B2820085B280038031DFF300405031DE2
:10007000FF305B280404031DFF305B280038031D9C
:10008000FF308408031DFF3A5B281030A800A1014F
:10009000A001A70CA60C031C53282208A0072308C4
:1000A0000318230FA107A10CA00CA50CA40CA80BEE
:1000B000492824085B288313031383126400080073
:1000C00007309F008316FF3085008601831285016B
:1000D0008601BE01BF01C001BD013C10BC103C1136
:1000E0003E0886006400051EAD28C830012064006B
:1000F0003C19A82803013C18FF30B8000301BC18C4
:10010000FF30BA00380884003A083320BA00BB0038
:1001100064003A083B04031996284008BD003F08D4
:10012000C0003E08BF00BE013C10BC1064003C1C77
:100130009B28BE013C103E08A600A7010230A20089
:10014000A3014520B8002508B900380ABE00AD2833
:100150000310BE0D3C103C11BC106400851DE4284A
:10016000C830012064003C19DF2803013C18FF302F
:10017000B8000301BC18FF30BA00380884003A0800
:100180003320BA00BB0064003A083B040319D128AD
:100190004008BD003F08C0003E08BF00BE013C1043
:1001A000BC1064003C1CD628BE013C103E08A600D2
:1001B000A7010230A200A3014520BE00E4280310DD
:1001C000BE0C3C11BC103C106400051D6429C830F5
:1001D000012064003C19F5283F08BE074008BF0015
:1001E0003D08C000BC143C14642900303E180130A6
:1001F000840000303F1801303A20013903193E10C5
:10020000031D3E140030BE18013084000030BF18BA
:1002100001303A2001390319BE10031DBE1400300D
:100220003E190130840000303F1901303A20013975
:1002300003193E11031D3E150030BE190130840024
:100240000030BF1901303A2001390319BE11031DD6
:10025000BE1500303E1A0130840000303F1A0130D4
:100260003A20013903193E12031D3E160030BE1A12
:10027000013084000030BF1A01303A2001390319DF
:10028000BE12031DBE1600303E1B0130840000303C
:100290003F1B01303A20013903193E13031D3E175D
:1002A0000030BE1B013084000030BF1B01303A20FB
:1002B00001390319BE13031DBE174008BF003D08D6
:1002C000C000BC143C143C116400851CE529C830F6
:1002D000012064003C1976293E083F02BE00400818
:1002E000BF003D08C000BC143C14E52900303E1896
:1002F0000130840000303F180130332001390319E8
:100300003E10031D3E140030BE1801308400003042
:10031000BF180130332001390319BE10031DBE146C
:1003200000303E190130840000303F190130332085
:10033000013903193E11031D3E150030BE1901306D
:1003400084000030BF190130332001390319BE1178
:10035000031DBE1500303E1A0130840000303F1AE4
:1003600001303320013903193E12031D3E160030BF
:10037000BE1A013084000030BF1A01303320013929
:100380000319BE12031DBE1600303E1B013084004F
:1003900000303F1B01303320013903193E13031D88
:1003A0003E170030BE1B013084000030BF1B0130FF
:1003B000332001390319BE13031DBE174008BF00C7
:1003C0003D08C000BC143C143C116400051C652AA7
:1003D000C830012064003C19F6294008BD003F08E0
:1003E000C0003E08BF003C14BC10652A00303E1817
:1003F0000130840000303F1801303E2001390319DC
:100400003E10031D3E140030BE1801308400003041
:10041000BF1801303E2001390319BE10031DBE1460
:1004200000303E190130840000303F1901303E2079
:10043000013903193E11031D3E150030BE1901306C
:1004400084000030BF1901303E2001390319BE116C
:10045000031DBE1500303E1A0130840000303F1AE3
:1004600001303E20013903193E12031D3E160030B3
:10047000BE1A013084000030BF1A01303E2001391D
:100480000319BE12031DBE1600303E1B013084004E
:1004900000303F1B01303E20013903193E13031D7C
:1004A0003E170030BE1B013084000030BF1B0130FE
:1004B0003E2001390319BE13031DBE174008BF00BB
:1004C0003D08C000BC143C143C116400851FAC2ADC
:1004D000C830012064003C19712ABE013C10BC10D8
:1004E000AC2A03013E1C013E03193E10031D3E14BD
:1004F0000301BE1C013E0319BE10031DBE140301FF
:100500003E1D013E03193E11031D3E150301BE1D94
:10051000013E0319BE11031DBE1503013E1E013E1F
:1005200003193E12031D3E160301BE1E013E0319B0
:10053000BE12031DBE1603013E1F013E03193E13EA
:10054000031D3E170301BE1F013E0319BE13031D09
:10055000BE17BC103C103C116400051FB52A640096
:100560003C19B42A3C15B52A3C1170286300B62A00
:02400E00303F41
:00000001FF


segunda-feira, 10 de maio de 2021

Decodificadores BCD 7 segmentos

Dois esquemas de decodificadores BCD (de 0 a 9)  usando só portas de AND e OR de duas entradas e outro com o mínimo de portas lógicas.

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

quinta-feira, 17 de dezembro de 2015

Dispositivos I2C

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

Decodificador alfanumérico com PIC

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:



terça-feira, 28 de julho de 2015

Coleção de Microprocessadores

Coleção de Microprocessadores 2


Aumentei minha coleção de microprocessadores antigos com essas duas peças:
Me faltava um Intel 8086, que foi o primeiro processador de 16 bits da Intel. É muito fácil encontrar um 8088 porque ele foi muito usado nos PCs e PC-XTs, mas o 8086 foi usado muito pouco em microcomputadores devido ao seu barramento externo ser de 16 bits (o 8088 tinha barramento de 8 bits) o que dificultava o projeto do circuito. Por isso é mais difícil de ser encontrado. 

Acima está um microprocessador Z180 da Zilog. O Z180 é um Z80 CPU turbinado com um monte de circuitos auxiliares como: 2 canais de DMA, controladores de interrupção internos, 3 geradores de wait state, oscilador interno, porta de I/O serial, 2 contadores/timers de 16 bits, 2 UARTs, ou seja se parece muito com os microcontroladores, faltando-lhe apenas a memória RAM e ROM. Além de ter instruções compatíveis com o Z80CPU possui instruções extras e pode endereçar muito mais memória (essa versão DIP tinha 19 linhas de endereço = 512kBytes).
Esse encapsulamento DIP de 64 pinos, tem um passo entre pinos um pouco menor do que o padrão de 100mils dos DIPs comuns.

terça-feira, 27 de janeiro de 2015

Duplicador de Eprom

DUPLICADOR DE EPROM


Há muito tempo eu precisava fazer uma cópia de uma EPROM (a do NESTOR, pois eu tenho duas placas) e como não tenho gravador de EPROMs, resolvi fazer um circuitinho bem simples e barato para fazer essa duplicação.
Estudando um pouco o processo de gravação de uma 2716, apenas necessitamos de uma fonte de 25V para o pino Vpp (além evidentemente de uma de 5V para alimentação normal) e gerar pulsos de 50ms com amplitude de 5V, estando os dados e o endereço de gravação presentes nos respectivos barramentos da EPROM.
A ideia é gerar os endereços automaticamente e fazer com que os dados da EPROM original sejam jogados no barramento de dados da EPROM cópia. Os bits de endereço serão iguais nas duas EPROMs.
Para gerar esses endereços, nada melhor do que um microcontrolador e para isso escolhi o PIC 16F628 que possui o número de portas suficiente para gerar os 11 bits de endereço necessários (na verdade eu deixei 12 portas reservadas pra isso) e mais o sinal de pulso de programação, um de controle de chip enable (da EPROM original) e dois botões para comando (um de reset do PIC e outro para iniciar a programação). Como o 16F628 tem oscilador interno, não preciso usar cristal externo e disponibilizo assim 16 portas no total, justinho para o que preciso.
O firmware que escrevi é bem simples: inicializo o PIC e fico esperando o aperto do botão PROGRAMA, que simplesmente habilita a EPROM original abaixando a linha de CE (chip enable ou select), e um contador de endereços de 0 a 2047 (capacidade de endereços da 2716). A cada endereço, jogo um pulso de 50ms no pino PGM da EPROM cópia (que também faz acender um led indicando que a programação está em curso), incremento o endereço e repete-se o ciclo até a contagem chegar a 2047. Ao final desabilita-se o CE e termina o programa.

O esquema é o seguinte:



O firmware para o PIC 16F628:
:10000000412883178001840AFF3E031D02283C28F3
:10001000A301A200FF30A207031CA307031C3C2876
:100020000330A100DF3016200A28A101E83EA0001D
:10003000A109FC30031C1F28A00703181C28A007D7
:100040006400A10F1C2820182528A01C29280000C6
:1000500029280800A2000530A80023082102031D5A
:10006000332822082002043003180130031902301B
:100070002805031DFF303C288313031383126400FB
:1000800008008316303085008601831207309F00F8
:10009000860180308500C830082020308400603020
:1000A0000220A03084005030022020308400303004
:1000B00001206400051A5D285E284B283808860058
:1000C00039180514391C0510B9188514B91C851088
:1000D00039190515391D0511B9198515B91D851170
:1000E0008513013008200517323008200513B80A9F
:1000F0000319B90AA0010830A1003908A300380883
:100100002A20031D842885285E28851785286300FA
:0201100087283E
:02400E00703F01
:00000001FF


Eu fiz a montagem em protoboard, por isso a bagunça de fios que mal dá pra ver as memórias e o PIC. Pra ajudar eu coloquei um 74LS244 (buffer octal) e 8 leds pra visualizar os dados (eles ficam piscando a medida que a cópia acontece) e saber que a coisa funciona. Ao final, posso pegar a cópia e colocar no lugar da original e ver se a gravação foi feita, basta apertar o botão PROGRAMA.

A seguir a versão e as ligações para duplicar uma 2732A. As diferenças são que a tensão Vpp de programação deve ser de 21V e o pulso de programação também é de 50ms, mas um pulso negativo (ativo em nível baixo). Adicionalmente, a linha de endereço A11 precisa ser usada (ela é de 4kbytes).

E o firmware para o PIC 16F628:

:10000000412883178001840AFF3E031D02283C28F3
:10001000A301A200FF30A207031CA307031C3C2876
:100020000330A100DF3016200A28A101E83EA0001D
:10003000A109FC30031C1F28A00703181C28A007D7
:100040006400A10F1C2820182528A01C29280000C6
:1000500029280800A2000530A80023082102031D5A
:10006000332822082002043003180130031902301B
:100070002805031DFF303C288313031383126400FB
:1000800008008316303085008601831207309F00F8
:100090008601C0308500C8300820203084006030E0
:1000A0000220A03084005030022020308400303004
:1000B00001206400051A5D285E284B283808860058
:1000C00039180514391C0510B9188514B91C851088
:1000D00039190515391D0511B9198515B91D851170
:1000E0008513013008200513323008200517B80A9F
:1000F0000319B90AA0011030A1003908A30038087B
:100100002A20031D842885285E28851785286300FA
:0201100087283E
:02400E00703F01
:00000001FF



quarta-feira, 12 de fevereiro de 2014

Computador Nestor Nova Eletrônica

NESTOR o computador pessoal da década de 80


Em meados de 1984, saiu numa edição da saudosa revista Nova Eletrônica, um projeto de computador pessoal para ser montado pelos leitores e que foi segmentado nos diversos números seguintes.  Naquela época o microprocessador mais famoso era o Zilog Z80, de oito bits e que podia rodar os programas escritos para o microprocessador 8080A da Intel (esse era o tataravô do atuais processadores da Intel). O Z80 era usado em vários computadores pessoais da época: TRS-80 da Radio Shack (aqui tinha clones da Dismac e outros fabricantes), no super ultra vendido ZX-81 (aqui clonado pela Microdigital no TK-82C, TK-85 e TK-83; pela Prológica com o CP-200 e Ritas com seu Ringo470) e pelo melhor de todos: o ZX-SPECTRUM (aqui TK-90X e TK-95), além de CP500, Itautec I7000, Sistema 700, etc. O Z80  era usado até nos Apple II, num cartão especial para rodar programas em sistema operacional CP/M e assim usar o dBase II e processador de texto Wordstar.  A base instalada do Z80 era enorme e muita gente tinha conhecimentos de sua programação.

Foi natural então que a revista (editora Editele) escolhesse esse microprocessador para seu projeto.  Surgiu assim o NESTOR, que era um computador bem básico com um teclado de 24 teclas, e displays de leds de 7 segmentos para apresentar os dados e endereços, bem como apresentar algumas mensagens com caracteres alfabéticos rudimentares.  Apesar  do Z80 poder endereçar até 64 kbytes (uma miséria hoje em dia), o Nestor original só tinha 1 kbyte de RAM formada por dois cis 2114 e um programa monitor de 2 kbytes gravado em uma memória EPROM 2716. Um punhado de cis TTL completavam o computador para realizar a seleção de blocos de memória, formar as portas de entrada e saída, controlar os displays de leds e ler o teclado. Tudo isso rodando a um clock de 3,58MHz (cristal de TV) e alimentado por uma fonte de 5Vdc/1A.

Nas edições seguintes, foram informados o layout da placa (dupla face - o que dificultava bastante a confecção caseira) e a listagem do programa monitor que deveria ser gravado na EPROM. Mais adiante surgiram a interface para cassete, de forma que os programas digitados pudessem ser gravados em fitas cassete e depois recuperados, e um circuito para gravação de EPROMs.

Não precisa dizer que ele não aceitava programas escritos em linguagem de alto nível (tipo C, pascal, basic, cobol, fortran, etc). Os programas precisavam ser entrados em formato hexadecimal em cada endereço. Isto é, programação em linguagem de máquina no seu nível mais baixo (mais baixo que isso, só entrando em binário), assim o programador precisava escrever os mnemônicos num papel e depois traduzi-los para os códigos hexadecimais de cada instrução (op codes) para poder entrar. Ou usar um programa assembler (montador tradutor) em outro computador para fazer isso.
Mesmo assim, um computador desses era um valioso instrumento de aprendizado, pois o Z80 era ensinado em todas escolas de eletrônica. Todo mundo queria aprender assembly (linguagem de máquina) do Z80.  Além de ser também um grande aprendizado para entender a estrutura lógica do hardware de computadores digitais.
Pois bem, eu comprei todas as revistas que saíram sobre esse computador, comprei as peças (inclusive teclas), cis, gravei EPROM (tive que digitar toda a listagem) e fiquei esperando um dia conseguir construir esse computador. O problema maior era fazer a placa. A placa era de face dupla, a face superior veio desenhada na revista, mas a face inferior tinha o desenho também, mas com uma grande besteira da revista, pois no layout foram inseridos quadrados em cor marrom (sobre as trilhas pretas) separando os blocos do computador. Ou seja, o layout era inútil para reprodução, sem falar que o alinhamento das duas faces é muito difícil.
Assim, fiquei quase 30 anos no meu sonho, com minhas pecinhas bem guardadas.

Ano passado, o pessoal do grupo Clube do TK no Yahoo, do qual faço parte e só tem sujeito da minha faixa etária e que era vidrado nos computadores pessoais de antigamente (tipo TK, MSX, Color Computer, Amiga, etc etc), reviveu a ideia de montar o Nestor. E o grande Victor Trucco redesenhou e reprojetou o Nestor, com ajuda do Fabio Belavenuto no software. Obviamente meus olhos brilharam e meu sonho de 30 anos podia se tornar realidade. Ele batizou o computador de NESTOR+, pois tinha uns melhoramentos: agora o computador teria 32kbytes de RAM num ci 62256, o processador foi atualizado para um Z80 CMOS (o Z80A original de 4MHz era NMOS), a interface cassete foi embutida na placa principal (que ficou menor).
Imediatamente muita gente se inscreveu querendo o Nestor+.  No começo do ano pudemos saber que o protótipo funcionava e que iriam produzir uma  série limitada de placas.  Pra adquirir, havia duas opções: montado e em kit. Obviamente optei pelo kit, pois queria ter o prazer de montá-lo eu mesmo.
Essa semana me chegou o kit com todas as peças (não vou usar as minhas peças guardadas há tanto tempo, até poderia usar algumas, pelo menos o Z80 e os TTLs, mas não as memórias e nem as teclas).
Agora, minhas próximas postagens no blog, serão sobre a montagem do Nestor+.
Comecei a fazer a checagem da placa, verificando se todas as conexões e trilhas estão ok, com o multímetro em modo de continuidade (apitando quando ok). Já achei dois problemas, mas foram resolvidos.
Próximo passo: começar a soldagem dos componentes.
Abaixo algumas fotos do Nestor original e do Nestor+.

A capa da revista com a foto do Nestor da época, note as teclas antigas e em pouco número para os padrões de hoje:

Foto do Nestor+ montado pelo Victor Trucco, com placa mais compacta e outra disposição dos componentes e teclas pequenas, e a grande memória RAM de 32 kbytes:

O meu kit:


quinta-feira, 24 de outubro de 2013

Decodificadores para displays de 7 segmentos

DECODIFICADOR BCD/Hexa - 7 SEGMENTOS

Em muitos circuitos eletrônicos precisamos de uma interface humana pra rapidamente entendermos os dados que resultam de uma medição, de um ajuste ou comunicação. Um dos meios mais baratos e difundidos é a utilização de displays de leds com 7 segmentos. Com esses displays podemos facilmente apresentar todos os dígitos decimais (0 a 9) e algumas letras do alfabeto. Apesar de existirem displays mais completos, com mais segmentos ou mesmo de matriz de pontos, o de 7 segmentos ainda é o mais usado e de mais fácil utilização. Para isso, geralmente precisamos de um circuito auxiliar que faça a tradução dos dados digitais para que os displays acendam os segmentos corretos e possam assim mostrar o dígito correto.
Esses circuitos são chamados de decodificadores BCD (binary coded decimal - decimal codificado em binário) para 7 segmentos. Para facilitar, esses circuitos são disponíveis em forma de circuitos integrados, sendo exemplos o CD4511 (CMOS) e os da série TTL 7446 7447  7448 (incluindo as variantes LS).
O problema desses cis é que eles só decodificam de 0 a 9 e às vezes queremos decodificar dígitos hexadecimais (acrescentando as letras A b C d E F). Antigamente existia um integrado de código DM9368 que era TTL e que fazia essa decodificação, mas hoje ele se tornou raro (difícil de encontrá-lo) e portanto deve ser caro pra comprar. Eu mesmo tenho umas 3 peças, mas vão virar peças de museu.






Aqui a tabela verdade do 9368, mostrando os dígitos headecimais:

Apesar de que hoje, quase não se usa mais circuitos integrados TTL ou CMOS das séries 74 e 4000/4500, pois praticamente quase tudo é implementado com microcontroladores, FPGA, PAL, etc, de vez em quando ainda precisamos de um decodificador desses.
Pra implementar um decodificador de BCD 7 segmentos, um circuito combinacional um pouco complexo é necessário. São várias portas lógicas interligadas e otimizadas com mapas de Karnaugh (cheguei a fazer vários exercícios de implementação desses decodificadores na escola, inclusive montando de verdade só com portas lógicas). Pra terem idéia, o diagrama de portas do 4511:

O 4511 além de tudo tem latches para manter os dados, mas ainda assim só consegue mostrar de 0 a 9.
Se fosse implementar um decodificador hexadecimal, o circuito seria assim (sem otimização por mapas de Karnaugh):

Esse circuito usa muitas portas com várias entradas, além disso eu coloquei um recurso de poder usar tanto displays de catodo comum como de anodo comum, com as portas XOR (ou exclusivo) nas saídas, de forma a poder selecionar com uma entrada se a lógica seria positiva (catodo comum) ou negativa (anodo comum).
Aqui outro esquema otimizado com os mapas de Karnaugh:

Como não vale a pena usar PAL ou FPGA pra implementar isso, resta a opção de usar microcontroladores para realizar essa "glue logic".  Microcontroladores simples com poucos pinos são muito utilizados para essas funções.
Infelizmente não achei nenhum PIC com a mesma pinagem de alimentação dos decoders comerciais, mas optei por um PIC de 14 pinos, o 16F630 (ou 16F676), que se não serve como substituto direto pino a pino para os decoders, pode simplificar bastante a falta de decoders hexadecimais:

Basta gravar o firmware abaixo, que o PIC se comporta como um decodificador hexadecimal para 7 segmentos, com a vantagem de que as saídas dele podem fornecer até 20mA de corrente para os segmentos de leds. Além disso implementei o recurso de modo de display (catodo comum ou anodo comum) que nenhum decoder comercial tem.

:100000000C288001840AFF3E031D01280728831362
:1000100003138312640008000730990083161F3011
:1000200085008701203084004030831201200F308A
:10003000B9000F300505B800640038083902031D07
:10004000222819283808B900051ABA14051EBA1052
:100050006400BA1C2D282F282E287028192838084B
:100060000F3C031C4D28362087004D2800308A00A5
:1000700038083D3E03188A0A82001F3403342D34A9
:100080002734333436343E3403343F3437343B344E
:100090003E341C342F343C34383438080F3C031CB5
:1000A0006F285820013903198512031D85166F2802
:1000B00000308A0038085F3E03188A0A8200013443
:1000C000003401340134003401340134013401348A
:1000D000013401340034013400340134013419286E
:1000E00038080F3C031C8E28772087008E280030AC
:1000F0008A0038087E3E03188A0A820020343C3485
:10010000123418340C34093401343C3400340834CB
:1001100004340134233410340334073438080F3CDA
:10012000031CB0289920013903198512031D851677
:10013000B02800308A003808A03E03188A0A8200DE
:10014000003401340034003401340034003400340D
:1001500000340034003401340034013400340034FD
:0601600019286300B1281C
:02400E00C43FAD
:00000001FF

A pinagem fica assim:

E a tabela verdade:
Mudando a entrada modo para nível baixo (0), o decodificador funciona com as saídas para displays de anodo comum, e a lógica invertida.

A seguir o firmware versão 16F676, que tem a mesma pinagem do 16F630, só que tem alguns recursos analógicos a mais (conversores A-D).

:100000000C288001840AFF3E031D01280728831362
:1000100003138312640008000730990083161F3011
:100020008500870191012030840040308312012037
:100030000F30B9000F300505B800640038083902E8
:10004000031D23281A283808B900051ABA14051EFA
:10005000BA106400BA1C2E2830282F2871281A28BC
:1000600038080F3C031C4E28372087004E280030EC
:100070008A0038083E3E03188A0A82001F3403347F
:100080002D342734333436343E3403343F3437345C
:100090003B343E341C342F343C34383438080F3C65
:1000A000031C70285920013903198512031D851678
:1000B000702800308A003808603E03188A0A8200DF
:1000C000013400340134013400340134013401348A
:1000D000013401340134003401340034013401347A
:1000E0001A2838080F3C031C8F28782087008F2897
:1000F00000308A0038087F3E03188A0A82002034C4
:100100003C34123418340C34093401343C34003497
:1001100008340434013423341034033407343808E9
:100120000F3C031CB1289A20013903198512031DC5
:100130008516B12800308A003808A13E03188A0AC3
:1001400082000034013400340034013400340034BF
:1001500000340034003400340134003401340034FD
:0801600000341A286300B228E4
:02400E00C43FAD
:00000001FF