Pesquisar este blog

sábado, 14 de fevereiro de 2015

Teste free run de microprocessadores

Como Testar Microprocessadores Antigos

Há alguns dias recebi uma mensagem pedindo ajuda para testar o funcionamento de microprocessadores Z80.  Pra isso eu tenho computadores que tem o Z80 como CPU e basta retirá-lo do soquete, inserir o Z80 em teste e ligar o computador pra ver se funciona. Mas o autor da mensagem não tinha esse recurso, portanto precisa de um circuito bem básico para testar os integrados. Eu sugeri que ele montasse um circuito que achei na internet, que usava um artifício de fazer o microprocessador executar apenas instruções NOP (no operation), dessa forma o microprocessador vai incrementando o contador de programa (PC - program counter) e jogando o endereço no barramento de endereços em busca de novas instruções para executar.  Se alimentarmos o microprocessador com um clock decente e fazer pullup e pulldown em alguns sinais de controle, o microprocessador começa a funcionar e podemos ver isso monitorando os sinais na barra de endereços altos (os baixos vão piscar muito rapidamente, dependendo da frequência de clock).
O site em questão é esse:
http://www.z80.info/z80test0.htm

E o esquema do circuito mínimo proposto pelo autor é assim:

Não cheguei a montar e experimentar esse circuito, mas eu tenho outros microprocessadores que eu gostaria de testar o funcionamento. Pesquisando mais um pouco, achei esse site com um projeto de um computador básico usando o microprocessador 8085 da Intel:
http://saundby.com/electronics/8085/index.shtml

O projeto é descrito passo a passo, e nos primeiros ele também faz o 8085 rodar em "free running", executando instruções NOP e verificando a alteração no contador de programa através de monitoramento das linhas de endereço altas.
Eu montei o circuito conforme esse esquema (na verdade os pinos de endereço alto foram ligados a um buffer 74LS245 que aciona os leds):
Fiz a montagem no meu protoboard que já tem alguns circuitos de infraestrutura e usei uma plaquinha com oscilador e divisores de frequência para fornecer o clock para o 8085A. Um detalhe: o 8085 precisa de dois sinais de clock, sendo um invertido em relação ao outro, logo o sinal passa também por uma porta inversora 74LS04 antes de entrar no pino X2.


Vídeo do teste do 8085A
http://youtu.be/2wEv_p6LGJ8
Descobri que tenho um 8085A pifado ...

E no mesmo site havia um circuito para testar também o CDP1802 que é outro microprocessador de 8 bits.
O circuito que eu montei foi o seguinte:


A complicação no 1802 é que o op code da instrução NOP não é $00 como no Z80 ou 8085, mas o código $C4  (1100 0100), portanto as linhas de dados precisariam ter esses bits como entrada. Os resistores ligados  em 5V fazem o bit 1 e os resistores ligados ao terra fazem o bit 0. As linhas de endereçamento foram ligados também ao buffer 74LS245 para acionamento dos leds.



Vídeo do CDP1802
http://youtu.be/oLWaoay9sSI
Dessa vez, todos meus CDP1802 funcionaram.  :o)




quinta-feira, 12 de fevereiro de 2015

Computador Nestor 2

NESTOR 2

Faltava eu colocar mais informações e fotos sobre o Nestor 2, projeto de microcomputador com Z80 da revista Nova Eletrônica, com repaginação do Victor Trucco e firmware adaptado pelo Fábio Belavenuto.

Inicialmente eu até tentei montar e testar em protoboard, mas não funcionou a tentativa. Além de ficar muito confuso e sujeito a falhas e mau contato. Vejam a bagunça:
Começou a faltar fiozinho pra fazer as ligações e meu protoboard não foi suficiente para colocar as teclas, portanto o que me levou a montar o Nestor 2 na placa de circuito impresso.

As fotos a seguir são da sequência de montagem:
 
 Placa com os resistores soldados.

Com os botões colocados.

 
Colocação dos soquetes de cis e para os displays e jacks do cassete.

Com os displays de sete segmentos (vermelhos).


 
Quase no final, com os transistores.

Com o conector de força e o cristal (soquetado).
Cristal de 4MHz.


Placa toda montada, com os integrados e ligada com os displays vermelhos. Na verdade, eles ficaram muito fracos na luminosidade, então substitui pelos verdes que vieram no kit, e que são de brilho mais intenso.


A seguir, mostro algumas das funções e como funciona o teclado:
Existem 24 teclas: 16 com os dígitos hexadecimais de 0 a F, e 7 teclas para funções. A primeira tecla é a "P" de permissão. Ela serve para entramos com dados de endereço. Ao apertarmos P, os quatro dígitos da esquerda e os dois da direita se apagam e podemos entrar com um endereço de 4 dígitos hexadecimais ($0000 a $FFFF, ou 0 a 65535 decimal, que é o máximo de endereços de memória que o Z80 pode acessar). Digitando 0000, e em seguida apertamos "L" de leitura, podemos ver o dado nessa posição de memória.


Nestor com displays verdes e mostrando o conteúdo do endereço $0000, que tem $31 (EPROM). Podemos alterar o conteúdo da posição de memória (desde que seja RAM), apenas digitando-se os novos dados no teclado. As informações digitadas correm da direita para esquerda continuamente, de forma que não é necessário se apagar se houver erro na digitação.

As teclas -1 e +1 apenas decrementam ou incrementas a posição de memória em uma posição. 
Apertando +1, o endereço aumenta de 1.





A tecla "R" faz rodar o programa em assembly que estiver no endereço de memória mostrado no display. Esse é um programa na EPROM que mostra uma palavra.

 A tecla "ER" faz com que o conteúdo dos registradores internos do Z80 sejam mostrados.
Inicialmente o valor do registrador A (acumulador).

Apertando ER novamente, mostra o registrador B.

Mais uma vez o ER, e aparece o registrador C. Em sequência serão apresentados os registradores D, E, H, L, F (flags) e I, depois retornando ao acumulador.

 Por fim, a tecla IV, é para definir uma interrupção vetorizada.


Quem precisa de Raspberry Pi ou Arduino ? Isso é para os fracos. Os fortes programam em assembly,  digitando diretamente os opcodes em hexadecimal na mão (he he he).


Até é possível fazer montagens experimentais e interligação com protoboard (como fazem com Arduino e Raspberry Pi) graças ao conector em barra com os sinais do Z80 disponíveis.

Aqui os esquemas do Nestor:
Circuito de geração de clock, circuito de reset e pullups de alguns pinos do Z80. Como eu coloquei um soquete para o cristal, isso permite que eu mude a frequência do clock apenas trocando o cristal. Eu coloquei um cristal de 2MHz para testar alguns Z80 (de 2,5MHz de clock máximo) e com o Z80A deixei com cristal de 4MHz (o original da revista era um de 3,58MHz).

As memórias usadas foram uma 2732 de 4kbytes em EPROM e uma RAM estática 62256 de 32 kbytes.

Circuito de decodificação e seleção de memórias e entrada e saída. O 74LS138 decodifica e seleciona quais chips de memória serão acessados. Os sinais de entrada são: endereços de A13 a A15 e MREQ (pedido de memória). Isso significa que o 74LS138 aciona blocos de memória de 8kbytes em cada saída. A primeira saída aciona a EPROM de 4kbytes ($0000 a $0FFF) sendo que a EPROM fica espelhada nos endereços de $1000 a $1FFF). A RAM fica no espaço de endereços de $2000 a $9FFF, para isso 4 saídas do 74LS138 são combinadas com portas E do 74LS08.

A habilitação de entrada e saída é feita combinado os sinais IORQ (pedido de entrada e saída) com os sinais WR e RD (write e read).

Circuitos de portas de entrada e saída, habilitadas pelos sinais combinados no esquema anterior. Para isso as entradas passam por buffers tri state 74LS126 e os dados de saída ficam disponíveis e guardados em latches 74LS75. Existem dois barramentos de acesso na placa.

Circuito do teclado matricial, acionado por portas de entrada semelhantes ao esquema anterior e usando buffers tri state 74LS126.

Circuito dos displays de catodo comum multiplexados.

Circuito da interface de cassete (gravação e leitura) e do alto falante.

E aqui o firmware a ser gravado na EPROM com o programa monitor básico e de cassete.
:1000000031009CC5D5E5F521E69B36192169001123
:10001000E79B010600EDB031E49B21E79B06001E43
:10002000063E01CD960079871DC2230078FE00CAE6
:10003000170021E79BCDA2007AD303DB01FE00C2AB
:100040003200CDC300CDDE00FE17C25000C3000851
:10005000FE15CA7D00FE10DA8900CDF60021E69B70
:100060007EC36F000000C3F29BC8869287C0CE217A
:100070003203856F7E4F3E0A856F6E61E921E69BF4
:100080007EFE15CAF601C35A0021E69B7EFE15CA04
:10009000070200C35D004FCDAF00DB01FE00C84783
:1000A00051C90E063E01CDAF00870DC8C3A600F5AD
:1000B000D3037ED301D91100011B7AB3C2B900D991
:1000C00023F1C90E003E01BACADC00870E08BACA85
:1000D000DC00870E10BACADC00C3170051C91E0825
:1000E0000E003E01B8CAF1000C871DC2E400C31720
:1000F0000079824700C921E69B70C90E0621E69B64
:10010000361721E79B36FF230DC205013600233643
:1001100000233600C3170021EE9B78ED6F23ED6FAF
:10012000CD5A01C31700CD480121E69B361821EFB7
:100130009BCD5A01C31700CD480178ED6F7E122187
:10014000EF9BCD5A01C3170021EE9B5E23561A2B5D
:100150002B77E521E69B3618E1C901E79BCD7601B7
:100160002BCD76012BCD7601C921EE9B7323722B0B
:100170002B1A77C9FFFF7EE521F09B77AFED6FCD9E
:100180008E010203AFED6FCD8E010203E1C9D511DF
:100190009701835F1AD1C9C0F9A4B0999282F880FF
:1001A000908883C6A1868ECD480113CD690121EFC9
:1001B0009BCD5A01C31700CD48011BCD690121EF2A
:1001C0009BCD5A01C31700FFFFFF3EFFD3033E7FC5
:1001D000D30121ED9B36C331F89BF5E5D5C531E45C
:1001E0009BC3ED9B21E59B36FEC3F60121E79B36C1
:1001F000FF2336FF23C911060321E59B34347B8698
:100200005F1A6F131A67E921E59B111D037B86C3F3
:100210000002CDEC0136882336B721F99BC32002BA
:1002200001EB9BCD7601C3170021F99B78ED6FC3DD
:100230002002CDEC0136832336B721FF9BC3200279
:1002400021FF9B78ED6FC32002CDEC0136C623362B
:10025000B721FE9BC3200221FE9B78ED6FC32002D5
:10026000CDEC0136A12336B721FD9BC3200221FD31
:100270009B78ED6FC32002CDEC0136862336B72183
:10028000FC9BC3200221FC9B78ED6FC32002CDECC8
:100290000136892336B721FB9BC3200221FB9B78C3
:1002A000ED6FC32002CDEC0136C72336B721FA9B90
:1002B000C3200221FA9B78ED6FC32002CDEC0136FA
:1002C0008E2336B721F89BC3200221F89B78ED6F6F
:1002D000C32002ED5721F79B77CDEC0136F9233689
:1002E000B721F79BC3200221F79B78ED6F7EED4786
:1002F000C3200201F29B3EC3020321EE9B7E020358
:10030000237E02C317001202320249026002770202
:100310008E02A502BC02D3021A03C3E401290240E3
:100320000257026E0285029C02B302CA02E702FF74
:10033000FFFF0000000000000000000000000000BF
:10034000000000010101010102010100FB26B7A725
:10035000CAE4F31737170000000000000000000097
:10036000000000000000000000000000000000008D
:10037000000000000000000000000000000000007D
:10038000000000000000000000000000000000006D
:10039000000000000000000000000000000000005D
:1003A000000000000000000000000000000000004D
:1003B000000000000000000000000000000000003D
:1003C000000000000000000000000000000000002D
:1003D000000000000000000000000000000000001D
:1003E000000000000000000000000000000000000D
:1003F00000000000000000000000000000000000FD
:1004000000000000000000000000000000000000EC
:1004100000000000000000000000000000000000DC
:1004200000000000000000000000000000000000CC
:1004300000000000000000000000000000000000BC
:1004400000000000000000000000000000000000AC
:10045000000000000000000000000000000000009C
:10046000000000000000000000000000000000008C
:10047000000000000000000000000000000000007C
:10048000000000000000000000000000000000006C
:10049000000000000000000000000000000000005C
:1004A000000000000000000000000000000000004C
:1004B000000000000000000000000000000000003C
:1004C000000000000000000000000000000000002C
:1004D000000000000000000000000000000000001C
:1004E000000000000000000000000000000000000C
:1004F00000000000000000000000000000000000FC
:1005000000000000000000000000000000000000EB
:1005100000000000000000000000000000000000DB
:1005200000000000000000000000000000000000CB
:1005300000000000000000000000000000000000BB
:1005400000000000000000000000000000000000AB
:10055000000000000000000000000000000000009B
:10056000000000000000000000000000000000008B
:10057000000000000000000000000000000000007B
:10058000000000000000000000000000000000006B
:10059000000000000000000000000000000000005B
:1005A000000000000000000000000000000000004B
:1005B000000000000000000000000000000000003B
:1005C000000000000000000000000000000000002B
:1005D000000000000000000000000000000000001B
:1005E000000000000000000000000000000000000B
:1005F00000000000000000000000000000000000FB
:1006000000000000000000000000000000000000EA
:1006100000000000000000000000000000000000DA
:1006200000000000000000000000000000000000CA
:1006300000000000000000000000000000000000BA
:1006400000000000000000000000000000000000AA
:10065000000000000000000000000000000000009A
:10066000000000000000000000000000000000008A
:10067000000000000000000000000000000000007A
:10068000000000000000000000000000000000006A
:10069000000000000000000000000000000000005A
:1006A000000000000000000000000000000000004A
:1006B000000000000000000000000000000000003A
:1006C000000000000000000000000000000000002A
:1006D000000000000000000000000000000000001A
:1006E000000000000000000000000000000000000A
:1006F00000000000000000000000000000000000FA
:1007000000000000000000000000000000000000E9
:1007100000000000000000000000000000000000D9
:1007200000000000000000000000000000000000C9
:1007300000000000000000000000000000000000B9
:1007400000000000000000000000000000000000A9
:100750000000000000000000000000000000000099
:100760000000000000000000000000000000000089
:100770000000000000000000000000000000000079
:100780000000000000000000000000000000000069
:100790000000000000000000000000000000000059
:1007A0000000000000000000000000000000000049
:1007B0000000000000000000000000000000000039
:1007C0000000000000000000000000000000000029
:1007D0000000000000000000000000000000000019
:1007E0000000000000000000000000000000000009
:1007F00000000000000000000000000000000000F9
:100800003E0032599B214B0A115A9B010600EDB064
:10081000215A9B06001E063E01CD960079871D20B9
:10082000F878FE0028EA215A9BCDA2007AD303DB98
:1008300001FE0020F1CDC300CDDE00FE14CA640825
:10084000FE103810FE132803C310083A599BFE000F
:10085000CA5B09C73A599BFE00282FFE012830FECB
:10086000022831C73A599BFE002809FE012810FED4
:10087000022844C721510A3E0132599BC30808216E
:10088000570A3E0232599BC3080821509B18082181
:10089000529B180321549B3EFF325E9B325F9B7834
:1008A000E5ED6F23ED6F015C9BE1CD760123015AED
:1008B0009BCD7601C310083EFFD3033EF7D301CD95
:1008C000EC08DA2F0A32569B21A00FCD43092150A4
:1008D0009B010700CD0C0921D007CD4709CDF908B0
:1008E000CD0C0921A00FCD4709C3370ACDF908D88F
:1008F000AF86EDA1EAF108B7C921529B5E235623CA
:100900004E236669B7ED524D4403EBC95ECD16091F
:10091000EDA1EA0C09C91608B7CD2909CB1BCD29D1
:10092000091520F837CD2909C9D9260038092E081C
:10093000CD47092E0218072E04CD47092E04CD43BA
:1009400009D9C90E9A18020E40291101003EFFD3A1
:10095000044110FEEE01ED5220F5C93EFF325E9BD0
:10096000325F9B2A509B22579B3EFFD3033EBFD34F
:100970000121E803CDD70938F02B7CB520F6CDD77F
:100980000930FB21509B010700CDF40938DB015CE5
:100990009B21509BCD760123015A9BCD7601ED5BC7
:1009A000509B0620215A9BCDA20010F82A579B008D
:1009B000B7ED52C269093EFFD3033EFED301CDF924
:1009C00008DA2F0ACDF409DA2F0ACDEC0821569B5C
:1009D000BEC22F0AC3370A110000DB0213CB1F3837
:1009E000F93E00D304DB0213CB1F30F93EFFD304E2
:1009F0007BFE42C9AF08CD010A73EDA1EAF60908F2
:100A0000C9CD120A1608CD120ACB1B1520F8CD123B
:100A10000AC9D9210000CDD70938062D2DCBC4181D
:100A2000F52CCB4428F0CB15D9C9083708D9C921F2
:100A30003F0ACDA20018F821450ACDA20018F88679
:100A4000CECEC0FFFF8EF9C8FFFFFF87F987C1C771
:100A5000C08EC0C88786FF8EF9C888C7FF00000017
:100A60000000000000000000000000000000000086
:100A70000000000000000000000000000000000076
:100A80000000000000000000000000000000000066
:100A90000000000000000000000000000000000056
:100AA0000000000000000000000000000000000046
:100AB0000000000000000000000000000000000036
:100AC0000000000000000000000000000000000026
:100AD0000000000000000000000000000000000016
:100AE0000000000000000000000000000000000006
:100AF00000000000000000000000000000000000F6
:100B000000000000000000000000000000000000E5
:100B100000000000000000000000000000000000D5
:100B200000000000000000000000000000000000C5
:100B300000000000000000000000000000000000B5
:100B400000000000000000000000000000000000A5
:100B50000000000000000000000000000000000095
:100B60000000000000000000000000000000000085
:100B70000000000000000000000000000000000075
:100B80000000000000000000000000000000000065
:100B90000000000000000000000000000000000055
:100BA0000000000000000000000000000000000045
:100BB0000000000000000000000000000000000035
:100BC0000000000000000000000000000000000025
:100BD0000000000000000000000000000000000015
:100BE0000000000000000000000000000000000005
:100BF00000000000000000000000000000000000F5
:100C000000000000000000000000000000000000E4
:100C100000000000000000000000000000000000D4
:100C200000000000000000000000000000000000C4
:100C300000000000000000000000000000000000B4
:100C400000000000000000000000000000000000A4
:100C50000000000000000000000000000000000094
:100C60000000000000000000000000000000000084
:100C70000000000000000000000000000000000074
:100C80000000000000000000000000000000000064
:100C90000000000000000000000000000000000054
:100CA0000000000000000000000000000000000044
:100CB0000000000000000000000000000000000034
:100CC0000000000000000000000000000000000024
:100CD0000000000000000000000000000000000014
:100CE0000000000000000000000000000000000004
:100CF00000000000000000000000000000000000F4
:100D000000000000000000000000000000000000E3
:100D100000000000000000000000000000000000D3
:100D200000000000000000000000000000000000C3
:100D300000000000000000000000000000000000B3
:100D400000000000000000000000000000000000A3
:100D50000000000000000000000000000000000093
:100D60000000000000000000000000000000000083
:100D70000000000000000000000000000000000073
:100D80000000000000000000000000000000000063
:100D90000000000000000000000000000000000053
:100DA0000000000000000000000000000000000043
:100DB0000000000000000000000000000000000033
:100DC0000000000000000000000000000000000023
:100DD0000000000000000000000000000000000013
:100DE0000000000000000000000000000000000003
:100DF00000000000000000000000000000000000F3
:100E000000000000000000000000000000000000E2
:100E100000000000000000000000000000000000D2
:100E200000000000000000000000000000000000C2
:100E300000000000000000000000000000000000B2
:100E400000000000000000000000000000000000A2
:100E50000000000000000000000000000000000092
:100E60000000000000000000000000000000000082
:100E70000000000000000000000000000000000072
:100E80000000000000000000000000000000000062
:100E90000000000000000000000000000000000052
:100EA0000000000000000000000000000000000042
:100EB0000000000000000000000000000000000032
:100EC0000000000000000000000000000000000022
:100ED0000000000000000000000000000000000012
:100EE0000000000000000000000000000000000002
:100EF00000000000000000000000000000000000F2
:100F000000000000000000000000000000000000E1
:100F100000000000000000000000000000000000D1
:100F200000000000000000000000000000000000C1
:100F300000000000000000000000000000000000B1
:100F400000000000000000000000000000000000A1
:100F50000000000000000000000000000000000091
:100F60000000000000000000000000000000000081
:100F70000000000000000000000000000000000071
:100F80000000000000000000000000000000000061
:100F90000000000000000000000000000000000051
:100FA0000000000000000000000000000000000041
:100FB0000000000000000000000000000000000031
:100FC0000000000000000000000000000000000021
:100FD0000000000000000000000000000000000011
:100FE0000000000000000000000000000000000001
:100FF00000000000000000000000000000000000F1
:00000001FF



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



sexta-feira, 5 de dezembro de 2014

Coleção de Microprocessadores

Coleção de Microprocessadores


No passado eu colecionei fascículos de uma enciclopédia da antiga Rio Gráfica Editora - Microcomputador Curso Prático, que depois se tornaram dois volumes muito interessantes e ricamente ilustrados. Num dos artigos, sobre a história dos microprocessadores, havia um quadro evolutivo (até então) dos principais microprocessadores usados, quadro do qual eu tirei uma foto que é a abaixo:




Tem gente que coleciona computadores velhos, mas isso demanda muito espaço e dinheiro (tá eu tenho alguns computadores velhos ... :o)  ), então é mais fácil e barato colecionar apenas as CPUs usadas nos computadores antigos.  Dos que serviam para computadores pessoais, eu consegui os mais importantes e que contam  a história da microcomputação dos anos 1970 e 1980. Vejam a foto das minhas CPUs:


Bom, seguindo a ordem do quadro da enciclopédia, mostro as fotos das minhas CPUs e descrevo alguns equipamentos onde elas foram usadas:


Esse era o Motorola MC6800, um processador de 8 bits. Foi usado no MITS Altair 680.  O MC6800 foi projetado em 1974, mesma época do processador a seguir.


O Intel 8080 foi o segundo microprocessador de 8 bits da Intel. Esse processador influenciou toda uma família de CPUs, incluindo o Z80 da Zilog e os seus sucessores na Intel.  O 8080 foi usado no MITS Altair 8800, um dos primeiros computadores pessoais e também nos videogames Arcade, incluindo o jogo Space Invaders. Com o 8080 foi desenvolvido o sistema operacional CP/M.



Acima tenho dois 6502, que foram as CPUs dos Apple 1, Apple II, Commodore PET e eram as CPUs mais baratas na época (por isso a Apple o escolheu). Aqui no Brasil foi usado no TK2000.
A CPU menor 6507 era uma versão encolhida do 6502 e foi o processador dos videogames ATARI 2600. 




O processador seguinte da Intel foi o 8085, que era compatível com o 8080 em software, mas melhor em hardware. O 8085 foi usado no TRS-80 model 100, um precursor dos micros portáteis.



A evolução da Motorola se deu com o MC6809. Esse processador foi usado pelos TRS - Color Computer (aqui CP400).



Talvez o mais famoso dos processadores de 8 bits, o Zilog Z80 foi o processador usado em muitos computadores da época: TRS-80 (clone CP300), Sinclair ZX80, ZX81 (e os clones nacionais TK82C, TK83, TK85, Ringo, CP200), ZX Spectrum (TK90X e TK95), CP500, os MSX (aqui Hotbit e Expert) e em diversos videogames (Gameboy com LR35902 da Sharp similar ao Z80, Master System, Mega Drive). Por ser compatível com o 8080 em software, podia usar o CP/M e até no Apple II foi usado com uma placa com Z80.




Entrando na era dos 16 bits, a Intel lançou a família 8086. Na foto eu tenho os 8088 que foram os processadores dos IBM Personal Computers (PC, XT) e que levaram a Intel à liderança de mercado até os dias de hoje. O Chip com o quadrado dourado é um 8087, coprocessador matemático usado com os 8088 e 8086.  O NEC V20 era uma versão mais avançada do 8088, tinha uma performance melhor e podia emular o funcionamento do 8080. Eu tenho um laptop Toshiba T1000 com um 80C88, versão CMOS do 8088.



A Motorola também desenvolveu de processadores de maior desempenho e lançou esse chipão de 64 pernas, o MC68000 de 16 e 32 bits. Junto na foto, o MC68008 com 48 pernas, uma versão mais simples do 68000.  O 68000 foi o processador dos Apples Lisa e MacIntosh, Atari ST, Amiga e também muito usado em Workstations Unix. Foi o processador do videogames Mega Drive (junto com o Z80). O 68008 foi usado no Sinclair QL (Quantum Leap).


Esses dois processadores não estão no quadro da enciclopédia, mas eu tenho esses chips da RCA e da Harris, que são o processador CDP1802 ACE de 8 bits e tecnologia CMOS, o que faz com que eles tenham um baixo consumo de energia. Por isso foram usados em sondas espaciais e num computador chamado COSMAC ELF que saiu na revista Popular Electronics.

quarta-feira, 15 de outubro de 2014

Irrigador automático programável

Sistema para Irrigação Automática de Plantas

Precisei bolar um sistema para regar automaticamente alguns pés de pimenta que plantei, enquanto estiver viajando, já que as pimenteiras precisam ser regadas todos os dias. Isso é um equipamento baseado em timers que ligariam uma bomba elétrica por determinado tempo e somente depois de um intervalo voltariam a ser acionados. Esses equipamentos existem comercialmente, mas são muito caros e não seriam difíceis de serem montados. 
O circuito em si não tem nada de novo, apenas um microcontrolador PIC com alguns botões para programar os tempos, um relé para ligar o motor da bomba e um display para enxergar as coisas (programação de tempos, contagem, etc).
A bomba escolhida foi dessas de fontes decorativas, que trabalham submersas na água e tem alimentação diretamente na rede elétrica (127Vac ou 220Vac). Comprei uma com vazão de 220 litros por hora com pressão para até 0,5 metro de diferença. Ela tem também um ajuste de vazão e saída para mangueira de 5 mm interna.  Comprei também alguns Ts (divisores de ar para aquários) com torneirinha que ajudam a regular a quantidade de água que vai para cada derivação nas mangueiras siliconadas de diâmetro 5 mm externo.

Acima o esquema elétrico. O display é um desses de 16 x 2 linhas comum, o relé é um de 5V ou de 12V (dependendo de onde o ligamos na fonte) As chaves podem ser do tipo push-buttons normalmente abertas, eu usei chaves alavanca spdt que fica NA,  onde a primeira serve como duplo comando (reset e botão 1) e as demais apenas para um comando. Usei uma placa universal, portanto não desenhei um layout para uma placa de circuito impresso. 

Acima uma foto do controlador timer com a bomba de água, as mangueiras e os divisores de ar. Essa configuração me permite 6 saídas de água. 

Detalhe dos divisores de ar e das 6 saídas de água.

O controlador dentro de uma caixa de plástico Patola PB112, mostrando o menu inicial (setup: configura o tempo de acionamento da bomba, o intervalo entre as regas e se inicia regando)

Display indicando que a bomba está acionada (led aceso). Na tomada devemos ligar o plugue da bomba de água. 

O código Hexa para o PIC (16F628) é o seguinte:
:10000000B20147290408A70006108610861083163F
:100010000610861086100F30860583122708B21846
:100020002E283A30A100FC30DF203330A6004220D9
:100030001030A1006830DF2042206430DE20223002
:10004000A600422028302D200C302D2001302D20FC
:1000500006302D20B21427082E283214A600321C98
:100060003C288610033C031C412841200730A10096
:10007000D030DF20031408003214FE3C031942295B
:100080008614321C321006140F3086052608F0390B
:1000900086040610A60E321842283230DE200314E1
:1000A0000800B31329080319B3170530A800273037
:1000B000A300103067200330A300E8306720A301BD
:1000C00064306720A3010A30672024086E28A2004C
:1000D0002508A1002408A0000B212008A000A803E7
:1000E0000319B313290803197828280203180800F4
:1000F0002008031DB313B31B0800303E3D29A300A5
:10010000360884008417340980058413A308031972
:100110004229F030A50022088038A400F030A50361
:100120000319A5000319A303031942299728AE2038
:10013000030120183408A21F3408A2080319030180
:10014000A40FA42880068B28A52800008E288317DA
:100150008001840AFF3E031DA828422921082004AB
:100160000319A00A8030201AA1062019A106A018A0
:10017000A106210DA00DA10D422983161C141A08F9
:1001800083169B0A4229030183169A001C155530D9
:100190009D00AA309D009C149C18CC281C119B0A21
:1001A0004229A301A200FF30A207031CA307031CDE
:1001B00042290330A100DF30DF20D328A101E83E2F
:1001C000A000A109FC30031CE828A0070318E528BB
:1001D000A0076400A10FE5282018EE28A01CF22833
:1001E0000000F2280800A2000130FB28A20006301F
:1001F000FB28A2000530A80023082102031D0229C4
:1002000022082002043003180130031902302805A7
:10021000031DFF304229A501A4011030A600210DC5
:10022000A40DA50D2208A4022308031C230FA50278
:10023000031821292208A40723080318230FA50760
:100240000310A00DA10DA60B0F2920084229103084
:10025000A800A101A001A70CA60C031C35292208A7
:10026000A00723080318230FA107A10CA00CA50CBD
:10027000A40CA80B2B2924084229840031088A00E9
:10028000300882008313031383126400080083166E
:10029000FE3085008601831207309F0020308400E5
:1002A0006030A820A03084005030A8202030840086
:1002B0003030A720FE3003200130032049300320D6
:1002C000723003207230032069300320673003202E
:1002D00061300320643003206F300320723003202C
:1002E0002030032061300320753003207430032058
:1002F0006F3003206D30032020300320FE300320B8
:10030000C0300320613003207030032065300320AB
:100310007230032074300320653003202030032026
:100320003130032020300320703003202F30032091
:10033000203003206D300320653003206E30032011
:100340007530032064008518A829FA30D120D629F9
:10035000C20A0319C30A6030A000EA30A1004308B2
:10036000A3004208F920031DD32983169B018312A1
:10037000BD20C900831601309B008312BD20BE0042
:10038000831602309B008312BD20BF00831603300A
:100390009B008312BD20BA00831604309B00831299
:1003A000BD20BB00732C6430DE20A2290630B600CD
:1003B0000830B4006430A2000A307F2083169B010D
:1003C0008312BD20C900831601309B008312BD201B
:1003D000BE00831602309B008312BD20BF0083162F
:1003E00003309B008312BD20BA00831604309B00AB
:1003F0008312BD20BB00FE300320013003205330A8
:1004000003206530032074300320753003207030E2
:100410000320203003203D3003203E3003202030D5
:100420000320623003206F300320743003206130DA
:1004300003206F3003202030032031300320FE30B2
:100440000320C0300320493003206E300320693080
:1004500003206330032069300320613003203D30E6
:1004600003203E30032020300320623003206F3011
:10047000032074300320613003206F3003202030CC
:1004800003203230032064008518492AFA30D12035
:10049000502A640005194F2AFA30D120732C432AC0
:1004A000BE01BF01FE300320013003205430032081
:1004B000653003206D300320703003206F3003203F
:1004C0002030032069300320723003207230032073
:1004D000693003206730032061300320633003203C
:1004E000613003206F30032020300320FE300320D2
:1004F000C0300320A9013E08A4003F08A500023037
:10050000B000B1015120203003207330032065304A
:10051000032067300320753003206E3003206430E1
:1005200003206F300320733003206430D120640037
:100530008519BF2AFA30D1200A30BE070318BF0A36
:10054000FE300320C0300320A9013E08A4003F086C
:10055000A5000230B000B1015120203003207330DB
:1005600003206530032067300320753003206E3090
:100570000320643003206F300320733003206400B5
:100580000519E62AFA30D120BE0A0319BF0AFE3047
:100590000320C0300320A9013E08A4003F08A500A5
:1005A0000230B000B101512020300320733003200D
:1005B0006530032067300320753003206E30032040
:1005C000643003206F3003207330032064008518EB
:1005D0000C2BFA30D120BE01BF01FE300320C03009
:1005E0000320A9013E08A4003F08A5000230B00086
:1005F000B1015120203003207330032065300320E7
:1006000067300320753003206E30032064300320F0
:100610006F300320733003206400051A1E2BFA305C
:10062000D120831601309B0083123E08C42083161C
:1006300002309B0083123F08C4201F2B972ABA0167
:10064000BB01FE300320013003205430032065300D
:1006500003206D300320703003206F3003202030E2
:100660000320693003206E3003207430032065308E
:1006700003207230032076300320613003206C3079
:1006800003206F3003203A300320FE300320C030B7
:100690000320A9013A08A4003B08A5000230B000DD
:1006A000B1015120203003206D3003206930032038
:1006B0006E30032075300320743003206F30032028
:1006C000733003206430D120640085197C2BFA300C
:1006D000D1203A08A0003B08A100A3013B30F6203E
:1006E000031D772B3C30BA070318BB0A7B2B0A305B
:1006F000BA070318BB0AAE2364000519932BFA301E
:10070000D1203A08A0003B08A100A3013B30F6200D
:10071000031D8F2B0530BA070318BB0A922BBA0AA8
:100720000319BB0AAE23640085189B2BC830D12067
:10073000BA01BB01AE236400051AAD2BC830D1202D
:10074000831603309B0083123A08C42083160430BA
:100750009B0083123B08C420112C642B3A08A00094
:100760003B08A1003C30A200A3010B21B8002108E6
:10077000B9003808A6003908A7003C30A200A30140
:100780002721C0002508C10040083A02BC004108EA
:10079000031C013E3B02BD00FE300320013003205C
:1007A00054300320653003206D3003207030032067
:1007B0006F30032020300320693003206E30032087
:1007C000743003206530032072300320763003201C
:1007D000613003206C3003206F3003203A30032057
:1007E000FE300320C0300320A9013808A4003908D6
:1007F000A5000230B000B101512068300320203044
:100800000320A9013C08A4003D08A5000230B00067
:10081000B10151206D300320693003206E30032078
:100820000800FE30032001300320493003206E30E1
:1008300003206930032063300320693003206130D6
:1008400003202030032061300320673003207530FF
:100850000320613003206E300320643003206F30AA
:100860000320203003203F300320FE300320C0301F
:10087000032033300320203003203D30032020307C
:10088000032073300320693003206D3003202030B3
:1008900003202030032034300320203003203D305B
:1008A0000320203003206E300320613003206F309E
:1008B000032064008519662CFA30D1200130C9006C
:1008C00083169B0183124908C420D6296400051AA7
:1008D000722CFA30D120C90183169B01831249087A
:1008E000C420D629592C0630B6000830B400643034
:1008F000A2000A307F2064004908013C031D812CBE
:100900001C25C201C3014208A0004308A1003B0806
:10091000A3003A08F320031D1A2D42083A02C6002C
:100920004308031C013E3B02C7004608A0004708DD
:10093000A1003C30A200A3010B21B8002108B9009E
:100940003808A6003908A7003C30A200A3012721DF
:10095000C0002508C10040084602BC004108031C35
:10096000013E4702BD00FE30032001300320463027
:100970000320613003206C30032074300320613089
:1009800003206E300320643003206F3003202030BA
:10099000032020300320203003202030032020308B
:1009A0000320203003202030032020300320FE309D
:1009B0000320C0300320A9013808A4003908A5008D
:1009C0000230B000B10151206830032020300320F4
:1009D000A9013C08A4003D08A5000230B000B10107
:1009E00051206D300320693003206E300320C40194
:1009F000C5014408A0004508A100A3013B30F32035
:100A0000031D162D06150130A300F330D22064001B
:100A1000051A0D2DFA30D120D62906110130A30078
:100A2000F330D220C40A0319C50FF92CC20A0319E6
:100A3000C30F832C1C25812C0630B6000830B4006F
:100A40006430A2000A307F20051400000615C201A0
:100A5000C3014208A0004308A1003F08A3003E08CC
:100A6000F320031D8A2DFE3003200130032049307E
:100A70000320723003207230032069300320673076
:100A80000320613003206E300320643003206F3078
:100A900003202E3003202E3003202E3003202E3052
:100AA00003202E3003202E3003202E300320FE3072
:100AB0000320C0300320A9014208A4004308A50078
:100AC0000230B000B10151202030032073300320E8
:100AD0006530032067300320753003206E3003201B
:100AE000643003206F300320733003202030032054
:100AF00020300320203003200330A300E730D22031
:100B000064008518862DFA30D120D629C20A03192F
:100B1000C30F292D051000000611080063008E2D5B
:02400E00613F10
:00000001FF

O funcionamento é simples, ao ligarmos o controlador na tomada, ele inicia mostrando a opção para entrar no menu de opções e se nada for feito, ele entra em modo de operação automaticamente após alguns segundos (para o caso de faltar energia). No menu podemos selecionar o tempo de rega, com o botão 2 aumentando o tempo de 1 em 1s e o botão 3 aumenta em 10s. O botão 1 limpa o tempo e o botão 4 aceita o tempo. A seguir escolhemos o tempo de intervalo, o botão 2 aumenta de 1 minuto e o botão 3 aumenta 10 min e depois passa para horas (o botão 2 passa a aumentar de 5 minutos). De novo o  botão 1 limpa o tempo e o botão 4 aceita o intervalo. Finalmente se tem a opção para iniciar os ciclos com uma rega inicial ou não.  O botão reset sempre reinicializa o controlador, enquanto o botão 4 interrompe o ciclo e volta para o menu. No menu temos a opção para iniciar o ciclo.  Os tempos programados são guardados na memória EEPROM do PIC e portanto são recuperados mesmo com falta de energia.