Pesquisar este blog

sábado, 5 de setembro de 2015

Uso de memórias I2C

Editor/Leitor de memórias EEPROM I2C

Precisei ler algumas memórias EEPROM do tipo I2C e resolvi aproveitar uma placa de desenvolvimento MCLAB2 da Mosaico que já tem um soquete de 8 pinos para memórias 24LCXX, um PIC 16F877A e um LCD de 16x2.

As memórias EEPROM 24LC usam comunicação serial I2C (ou IIC) que utiliza 2 sinais: um clock de até 400kHz e uma via de dados bidirecional. Isso economiza bastante as portas de um microcontrolador e por isso diversos aparelhos e sistemas usam essas memórias para armazenar dados de configuração ou de monitoramento coletados por sensores.

As memórias que incluí no programa são:
24LC01 de 1kbits (8 x 128)
24LC02 de 2kbits (8 x 256)
24LC04 de 4 kbits (8 x 512)
24LC08 de 8 kbits (8 x 1024)
24LC16 de 16 kbits (8 x 2048)
24LC32 de 32 kbits (8 x 4096)
24LC64 de 64 kbits (8 x 8192)
24LC128 de 128 kbits (8 x 16384)
24LC256 de 256 kbits (8 x 32768)
24LC512 de 512 kbits (8 x 65536)

A vantagem é que todas essas memórias usam a mesma pinagem e encapsulamento DIP 8.

A parte do circuito aproveitada da placa MCLAB2 é a seguinte e pode ser montada em protoboard:

A MCLAB2 possui 4 botões de contato momentâneo, assim designei-os de botões 1 a 4, sendo que B1 tem a função de decremento, B2 de incremento, B3 de avanço e B4 de enter ou saída.

Ao ligar, aparece um Menu com as seguintes opções:
1 - Seleciona dispositivo: escolhe qual a memória a editar ou ler.
2 - Leitura da memória: apenas se consegue ver os dados gravados nos endereços
3 - Edição da memória: pode-se ver os dados e alterá-los
4 - Apagamento da memória: seta todas as posições de memória com o valor $FF (255 em decimal).

Para escolher uma das opções, aperta-se o botão correspondente à desejada.

Ao escolher a opção 1, devemos a seguir escolher qual o modelo de memória a ser usada. Os botões B1 e B2 selecionam na lista de modelos e o botão B4 aceita a seleção e volta ao menu inicial.

Na opção de leitura, devemos entrar com o endereço inicial a ser lido. Iniciando pelo digito hexadecimal mais significativo (o primeiro da esquerda, de 4) podemos mudá-lo de 0 a F com os botões B1 e B2. Aparecendo o dígito desejado, aperta-se B3 e passamos ao segundo dígito e assim por diante até o último dígito menos significativo. Se o endereço for maior do que a capacidade da memória escolhida, aparece uma mensagem de erro e volta-se para a seleção do endereço. A qualquer momento também aparece o valor do endereço em decimal. Ao final já se apresenta o valor do dado (em hexadecimal e decimal) naquela posição de memória:

Para passar para o endereço seguinte, aperta-se B2, para voltar uma posição, aperta-se B1.  Para sair da leitura, aperta-se B4.

Na opção de edição/gravação (3), também devemos entrar com o endereço inicial a ser editado. Depois de entrado o endereço, aparece o valor atual do dado naquela posição de memória. Para alterar o valor usamos B1 para modificar o valor do dígito (nibble) hexadecimal mais significativo e B2 para o nibble menos significativo. Para gravar e avançar para o próximo endereço usamos o botão B3. Para terminar a edição e voltar para o menu, aperta-se B4.


A última opção apaga a memória por inteiro, gravando o valor $FF em todas as posições. Memórias com grande capacidade demoram um certo tempo para terem todas posições apagadas. Ao final do processo aparece uma mensagem informando o final do apagamento e pedindo para apertar B4 para voltar ao menu.

O firmware para o 16F877A é o seguinte:

:10000000B2017C29B216B21EB212B2190B28B21577
:100010004420031832280830A3005920A20DA30B56
:100020000D28B21E3D2063205F20B21A32203720F7
:10003000220803107729B216B21EB21232192528EF
:10004000FE39B300321503107729321A2D28A60085
:10005000321644200318322826084C200318322870
:10006000B21E77293D20632032113212B2113608B8
:100070008400340884178004432836088400340937
:100080008005841780057729372063207B213D2058
:100090005F203308B2190138A2000830A300A20D76
:1000A00003183720031C3D2063205F20A30B4F283B
:1000B000372063203608840034080005FF3E3708E7
:1000C0008400350940283708840035083A28040898
:1000D000A70089100910091083168910091009104A
:1000E000880183122708B21890283A30A100FC300A
:1000F00002213330A600A3201030A1006830022175
:10010000A32064300121A32038308F200C308F20B1
:1001100001308F2006308F20B21427089028321427
:10012000A600321C9E280910033C031CA328A32010
:100130000730A100D0300221031408003214FE3C25
:1001400003197729091489142608880032108910A8
:100150003230012103140800B31329080319B3171F
:100160000430A800250EB9202508B920240EB92096
:1001700024080F39F63E0318073E0A3EDC28B31365
:1001800029080319B3170530A8002730A300103041
:10019000D5200330A300E830D520A3016430D5205A
:1001A000A3010A30D5202408DC28A2002508A100DC
:1001B0002408A00040212008A000A8030319B313BD
:1001C00029080319E6282802031808002008031D3F
:1001D000B313B31B0800303E722983178001840AD1
:1001E000FF3E031DEE287729A301A200FF30A207DE
:1001F000031CA307031C77290330A100DF30022171
:10020000F628A101E83EA000A109FC30031C0B293F
:10021000A00703180829A0076400A10F08292018C7
:100220001129A01C1529000015290800A101A3010E
:10023000A20001302529A20006302529A101A30131
:10024000A20004302529A2000530A80023082102BD
:10025000031D2C2922082002043003180130031941
:1002600002302805031DFF3077290038031DFF30B9
:100270000405031DFF3077290404031DFF3077298F
:10028000A501A4011030A600210DA40DA50D220882
:10029000A4022308031C230FA502031856292208D1
:1002A000A40723080318230FA5070310A00DA10D11
:1002B000A60B4429200877291030A800A101A0012D
:1002C000A70CA60C031C6A292208A0072308031800
:1002D000230FA107A10CA00CA50CA40CA80B60294E
:1002E00024087729840031088A00300882008313AB
:1002F00003138312640008008316DF3085000F307B
:100300008600913087008801890106309F00073000
:100310009C00831207112030840060308A01EE2097
:10032000A030840050308A01EE201030840060300C
:100330008A01ED209030840060308A01ED20FE308B
:100340008A01682001308A01682050308A016820C3
:100350006C308A01682061308A01682063308A012C
:10036000682061308A01682020308A0168204D3081
:100370008A01682043308A0168204C308A01682055
:1003800041308A01682042308A01682032308A0177
:10039000682020308A01682020308A0168202030BF
:1003A0008A01682020308A016820FE308A01682096
:1003B000C0308A0168204C308A01682065308A018B
:1003C00068202F308A01682067308A0168207230E7
:1003D0008A01682061308A01682076308A016820AD
:1003E00061308A01682020308A01682049308A0102
:1003F000682032308A01682043308A01682020302A
:100400008A01682020308A01682020308A01682013
:10041000FE308A0168200F308A0168200730A3006F
:10042000D0308A01F520FE308A01682001308A012F
:10043000682031308A0168202D308A0168207330AD
:100440008A01682065308A0168206C308A01682042
:1004500020308A01682064308A01682065308A0172
:10046000682076308A01682020308A016820323086
:100470008A0168202D308A01682072308A01682044
:1004800065308A01682061308A01682064308A0101
:100490006820FE308A016820C0308A01682033302D
:1004A0008A0168202D308A01682077308A0168200F
:1004B00072308A01682069308A01682074308A01AC
:1004C000682065308A01682020308A016820343035
:1004D0008A0168202D308A01682065308A016820F1
:1004E00072308A01682061308A01682073308A0185
:1004F000682065308A01682064008A110A12061893
:10050000892AFA308A01F4200130C6008A110A12C1
:10051000AC2A64008A110A128618942AFA308A01D9
:10052000F4208A150A122E2A64008A110A1206196A
:100530009F2AFA308A01F4208A150A126B2B640074
:100540008A110A128619AA2AFA308A01F4208A1519
:100550000A12C92D8A017C2AFE308A0168200130E6
:100560008A01682053308A01682065308A0168203A
:100570006C308A01682065308A01682063308A0106
:10058000682074308A01682020308A016820643035
:100590008A01682065308A01682076308A016820E7
:1005A00069308A01682063308A01682065308A01D9
:1005B00068203A308A01682020308A016820203083
:1005C0008A016820FE308A016820C0308A016820D4
:1005D0003D308A0168208A110A12242364008A119E
:1005E0000A120618022BFA308A01F420C6036400AE
:1005F0004608003C8A110A12031D002B0B30C6006E
:100600008A01E22A64008A110A128618162BFA302F
:100610008A01F420C60A640046080C3C8A110A12BA
:10062000031D142B0130C6008A01E22A64008A11DE
:100630000A128619222B0130A3005E308A01F520B0
:100640008A019F298A01EE2A64004608013C8A112A
:100650000A12031D542BFE308A016820C0308A0123
:1006600068203D308A01682032308A0168203430A9
:100670008A0168204C308A01682043308A01682052
:1006800030308A01682031308A01682020308A01A8
:10069000682020308A01682020308A016820A0303C
:1006A000C4007F30BA00BB0164004608023C8A11D6
:1006B0000A12031D842BFE308A016820C0308A0193
:1006C00068203D308A01682032308A016820343049
:1006D0008A0168204C308A01682043308A016820F2
:1006E00030308A01682032308A01682020308A0147
:1006F000682020308A01682020308A016820A030DC
:10070000C400FF30BA00BB0164004608033C8A11F4
:100710000A12031DB52BFE308A016820C0308A0101
:1007200068203D308A01682032308A0168203430E8
:100730008A0168204C308A01682043308A01682091
:1007400030308A01682034308A01682020308A01E4
:10075000682020308A01682020308A016820A0307B
:10076000C400FF30BA000130BB0064004608043CFE
:100770008A110A12031DE62BFE308A016820C03060
:100780008A0168203D308A01682032308A01682061
:1007900034308A0168204C308A01682043308A0155
:1007A000682030308A01682038308A016820203083
:1007B0008A01682020308A01682020308A01682060
:1007C000A030C400FF30BA000330BB00640046080C
:1007D000053C8A110A12031D172CFE308A0168207D
:1007E000C0308A0168203D308A01682032308A0199
:1007F000682034308A0168204C308A0168204330F8
:100800008A01682031308A01682036308A016820E8
:1008100020308A01682020308A01682020308A0137
:100820006820A030C400FF30BA000730BB0064006D
:100830004608063C8A110A12031D482CFE308A0124
:100840006820C0308A0168203D308A01682032303B
:100850008A01682034308A0168204C308A0168207F
:1008600043308A01682033308A01682032308A019F
:10087000682020308A01682020308A0168202030DA
:100880008A016820A030C400FF30BA000F30BB00DE
:1008900064004608073C8A110A12031D792CA03017
:1008A000C400FE308A016820C0308A0168203D30D3
:1008B0008A01682032308A01682034308A01682039
:1008C0004C308A01682043308A01682036308A0122
:1008D000682034308A01682020308A016820203066
:1008E0008A01682020308A016820FF30BA001F305A
:1008F000BB0064004608083C8A110A12031DA82C9C
:10090000FE308A016820C0308A0168203D308A01AB
:10091000682032308A01682034308A0168204C30E7
:100920008A01682043308A01682031308A016820BA
:1009300032308A01682038308A01682020308A01EC
:10094000682020308A016820FF30BA003F30BB00A9
:1009500064004608093C8A110A12031DD72CFE3098
:100960008A016820C0308A0168203D308A016820F1
:1009700032308A01682034308A0168204C308A0184
:10098000682043308A01682032308A01682035307F
:100990008A01682036308A01682020308A01682068
:1009A00020308A016820FF30BA007F30BB0064002D
:1009B00046080A3C8A110A12031D062DFE308A01E0
:1009C0006820C0308A0168203D308A0168203230BA
:1009D0008A01682034308A0168204C308A016820FE
:1009E00043308A01682035308A01682031308A011D
:1009F000682032308A01682020308A016820203047
:100A00008A016820FF30BA00FF30BB00640046084E
:100A10000B3C8A110A12031D312DFE308A01682019
:100A2000C0308A0168203D308A01682073308A0115
:100A3000682070308A01682065308A016820633040
:100A40008A01682069308A01682061308A01682043
:100A50006C308A01682020308A01682020308A01A9
:100A600068200800FE308A0168200F308A01682063
:100A7000FE308A01682001308A01682045308A01F1
:100A800068206E308A01682074308A0168206530E1
:100A90008A01682072308A01682020308A0168202B
:100AA00061308A01682064308A01682064308A01DC
:100AB000682072308A01682065308A0168207330AE
:100AC0008A01682073308A0168203A308A016820E0
:100AD00020308A01682020308A016820A601103069
:100AE000A7004C08A200A3018A015C21BC002508D4
:100AF000BD00A6010130A7004B08A200A3018A0196
:100B00005C21BE002508BF003C08BE073D08031855
:100B1000013EBF071030A600A7014A08A200A301AA
:100B20008A015C21C0002508C1003E08C0073F08BB
:100B30000318013EC10749084007B80041080318DF
:100B4000013EB900FE308A016820C0308A01682069
:100B50003D308A0168200430A9003808A400390813
:100B6000A5006730B000B1018A01AC2020308A01B5
:100B700068200530A9003808A4003908A5006730AE
:100B8000B000B1018A01BF20FE308A016820C13067
:100B90008A01682064008A110A120618382EFA3079
:100BA0008A01F420CC0364004C08FF3C8A110A122D
:100BB000031DDC2D0F30CC00A6011030A7004C081F
:100BC000A200A3018A015C21BC002508BD00A6018A
:100BD0000130A7004B08A200A3018A015C21BE00DE
:100BE0002508BF003C08BE073D080318013EBF07AB
:100BF0001030A600A7014A08A200A3018A015C21C7
:100C0000C0002508C1003E08C0073F080318013E88
:100C1000C10749084007B80041080318013EB90060
:100C2000FE308A016820C0308A0168203D308A0188
:100C300068200430A9003808A4003908A5006730EE
:100C4000B000B1018A01AC2020308A016820053053
:100C5000A9003808A4003908A5006730B000B10128
:100C60008A01BF20FE308A016820C1308A016820D5
:100C700064008A110A128618A52EFA308A01F4201F
:100C8000CC0A64004C08103C8A110A12031D492E3C
:100C9000CC01A6011030A7004C08A200A3018A01D4
:100CA0005C21BC002508BD00A6010130A7004B084F
:100CB000A200A3018A015C21BE002508BF003C08F8
:100CC000BE073D080318013EBF071030A600A7016C
:100CD0004A08A200A3018A015C21C0002508C100C6
:100CE0003E08C0073F080318013EC10749084007F6
:100CF000B80041080318013EB900FE308A0168209F
:100D0000C0308A0168203D308A0168200430A90083
:100D10003808A4003908A5006730B000B1018A0185
:100D2000AC2020308A0168200530A9003808A400D2
:100D30003908A5006730B000B1018A01BF20FE303C
:100D40008A016820C1308A01682064008A110A1271
:100D50000619B62EFA308A01F420FE308A01682086
:100D600014308A0168208A110A12B82E8A01CA2D0D
:100D700064008A110A120618262FFA308A01F4201C
:100D8000CB0364004B08FF3C8A110A12031DCA2ED4
:100D90000F30CB00A6011030A7004C08A200A30121
:100DA0008A015C21BC002508BD00A6010130A70016
:100DB0004B08A200A3018A015C21BE002508BF00E8
:100DC0003C08BE073D080318013EBF071030A600CF
:100DD000A7014A08A200A3018A015C21C0002508DE
:100DE000C1003E08C0073F080318013EC10749087B
:100DF0004007B80041080318013EB900FE308A01DF
:100E00006820C0308A0168203D308A0168200430A3
:100E1000A9003808A4003908A5006730B000B10166
:100E20008A01AC2020308A0168200530A9003808EA
:100E3000A4003908A5006730B000B1018A01BF20C5
:100E4000FE308A016820C2308A01682064008A115D
:100E50000A128618932FFA308A01F420CB0A640014
:100E60004B08103C8A110A12031D372FCB01A60133
:100E70001030A7004C08A200A3018A015C21BC002D
:100E80002508BD00A6010130A7004B08A200A30160
:100E90008A015C21BE002508BF003C08BE073D0852
:100EA0000318013EBF071030A600A7014A08A200A0
:100EB000A3018A015C21C0002508C1003E08C007CB
:100EC0003F080318013EC10749084007B800410820
:100ED0000318013EB900FE308A016820C0308A0143
:100EE00068203D308A0168200430A9003808A40039
:100EF0003908A5006730B000B1018A01AC2020306C
:100F00008A0168200530A9003808A4003908A50026
:100F10006730B000B1018A01BF20FE308A0168202D
:100F2000C2308A01682064008A110A120619A42FAF
:100F3000FA308A01F420FE308A01682014308A01D8
:100F400068208A110A12A62F8A01B82E64008A1519
:100F50000A1206181428FA308A01F420CA03640021
:100F60004A08FF3C8A110A12031DB82F0F30CA002D
:100F7000A6011030A7004C08A200A3018A015C2141
:100F8000BC002508BD00A6010130A7004B08A20047
:100F9000A3018A015C21BE002508BF003C08BE07F2
:100FA0003D080318013EBF071030A600A7014A08FC
:100FB000A200A3018A015C21C0002508C1003E08EF
:100FC000C0073F080318013EC10749084007B800A1
:100FD00041080318013EB900FE308A016820C03084
:100FE0008A0168203D308A0168200430A900380851
:100FF000A4003908A5006730B000B1018A01AC2017
:1010000020308A0168200530A9003808A40039087A
:10101000A5006730B000B1018A01BF20FE308A010F
:101020006820C3308A01682064008A150A12861875
:101030008128FA308A01F420CA0A64004A08103C68
:101040008A150A12031D2528CA01A6011030A7001F
:101050004C08A200A3018A015C21BC002508BD0048
:10106000A6010130A7004B08A200A3018A015C2160
:10107000BE002508BF003C08BE073D080318013E1E
:10108000BF071030A600A7014A08A200A3018A01E9
:101090005C21C0002508C1003E08C0073F080318B6
:1010A000013EC10749084007B80041080318013E46
:1010B000B900FE308A016820C0308A0168203D30C6
:1010C0008A0168200430A9003808A4003908A50066
:1010D0006730B000B1018A01AC2020308A0168205D
:1010E0000530A9003808A4003908A5006730B00011
:1010F000B1018A01BF20FE308A016820C3308A0115
:10110000682064008A150A1206199228FA308A01AA
:10111000F420FE308A01682014308A0168208A1584
:101120000A1294288A01A62F64008A150A1206184A
:101130000229FA308A01F420C90364004908FF3CFF
:101140008A150A12031DA6280F30C900A601103007
:10115000A7004C08A200A3018A015C21BC0025085D
:10116000BD00A6010130A7004B08A200A3018A011F
:101170005C21BE002508BF003C08BE073D080318DF
:10118000013EBF071030A600A7014A08A200A30134
:101190008A015C21C0002508C1003E08C0073F0845
:1011A0000318013EC10749084007B8004108031869
:1011B000013EB900FE308A016820C0308A016820F3
:1011C0003D308A0168200430A9003808A40039089D
:1011D000A5006730B000B1018A01AC2020308A013F
:1011E00068200530A9003808A4003908A500673038
:1011F000B000B1018A01BF20FE308A016820C430EE
:101200008A01682064008A150A1286186F29FA304C
:101210008A01F420C90A64004908103C8A150A12A0
:10122000031D1329C901A6011030A7004C08A20014
:10123000A3018A015C21BC002508BD00A601013084
:10124000A7004B08A200A3018A015C21BE0025086B
:10125000BF003C08BE073D080318013EBF07103021
:10126000A600A7014A08A200A3018A015C21C000D0
:101270002508C1003E08C0073F080318013EC1070A
:1012800049084007B80041080318013EB900FE3084
:101290008A016820C0308A0168203D308A016820B8
:1012A0000430A9003808A4003908A5006730B00050
:1012B000B1018A01AC2020308A0168200530A900E4
:1012C0003808A4003908A5006730B000B1018A01D0
:1012D000BF20FE308A016820C4308A016820640083
:1012E0008A150A1206198029FA308A01F420FE3084
:1012F0008A01682014308A0168208A150A1283291D
:101300008A150A129428A6011030A7004C08A200E2
:10131000A3018A015C21BC002508BD00A6010130A3
:10132000A7004B08A200A3018A015C21BE0025088A
:10133000BF003C08BE073D080318013EBF07103040
:10134000A600A7014A08A200A3018A015C21C000EF
:101350002508C1003E08C0073F080318013EC10729
:1013600049084007B80041080318013EB900380891
:10137000A0003908A1003B08A3003A088A011B21FC
:101380008A150A12031D2D2AFE308A0168200130B9
:101390008A01682049308A0168206E308A016820FD
:1013A00076308A01682061308A0168206C308A01B9
:1013B000682069308A01682064308A016820203002
:1013C0008A01682061308A01682064308A016820BF
:1013D00064308A01682072308A01682065308A0191
:1013E000682073308A01682073308A0168202030B9
:1013F0008A016820FE308A016820C0308A01682096
:101400004D308A01682061308A01682078308A0175
:10141000682020308A01682061308A0168206430A9
:101420008A01682064308A01682072308A0168204D
:101430003D308A0168200530A9003A08A4003B0825
:10144000A5006730B000B1018A01BF200B30A300B6
:10145000B8308A01F5208A01322D08008A01322530
:101460004414FE308A01682001308A01682061300E
:101470008A01682064308A01682064308A0168200B
:1014800072308A0168203D308A0168200430A9004A
:101490003808A4003908A5006730B000B1018A01FE
:1014A000AC2020308A0168200530A9003808A4004B
:1014B0003908A5006730B000B1018A01BF2064007F
:1014C000033046028A150A120318772A0730B6003D
:1014D0001030B4000730B7000830B50044088A0166
:1014E0001D2038088A011D208A010220CD004608EF
:1014F000033C031DFF30FF3ABC004608043C031DBB
:10150000FF30FF3ABE003C0884003E088A013C21BF
:10151000BE00BF004608053C031DFF30FF3AC00077
:101520003E083F04840040088A013C21C000C100FD
:101530006400400841048A150A120319BC2A3918AC
:10154000C414391CC410B9184415B91C44113919F4
:10155000C415391DC4110730B6001030B40007306F
:10156000B7000830B50044088A011D2038088A01F8
:101570001D208A010220CD004608A00005308A0106
:101580001621BC004608A0000B308A011E21BE00B7
:101590003C0884003E088A013521BE00BF0064007B
:1015A0003E083F048A150A120319EA2A0730B600DA
:1015B0001030B4000730B7000830B50044088A0185
:1015C0001D2039088A011D2038088A011D208A0142
:1015D0000220CD00FE308A016820C0308A016820D8
:1015E00064308A01682061308A01682074308A0181
:1015F000682061308A0168203D308A01682002300D
:10160000A9004D08A400A5016730B000B1018A010E
:10161000AC2020308A0168200330A9004D08A400C6
:10162000A5016730B000B1018A01BF2064008A15AE
:101630000A1206183F2BFA308A01F4200130B80252
:101640000030031C013EB902FF30A000FF30A100B2
:101650003908A30038088A0123218A150A12031DBC
:101660003C2B64000A3046028A150A1203183C2BF0
:101670003A08B8003B08B9008A150A12302A6400FB
:101680008A150A1286185C2BFA308A01F420B80AEF
:101690000319B90A3808A0003908A1003B08A300C3
:1016A0003A088A011B218A150A12031D592BB80119
:1016B000B9018A150A12302A64008A150A1286199D
:1016C000682B0130A3005E308A01F5208A019F2932
:1016D0008A150A12162B8A01322514308A01F42049
:1016E0004414FE308A01682001308A01682061308C
:1016F0008A01682064308A01682064308A01682089
:1017000072308A0168203D308A0168200430A900C7
:101710003808A4003908A5006730B000B1018A017B
:10172000AC2020308A0168200530A9003808A400C8
:101730003908A5006730B000B1018A01BF206400FC
:10174000033046028A150A120318B72B0730B60079
:101750001030B4000730B7000830B50044088A01E3
:101760001D2038088A011D208A010220CD0046086C
:10177000033C031DFF30FF3ABC004608043C031D38
:10178000FF30FF3ABE003C0884003E088A013C213D
:10179000BE00BF004608053C031DFF30FF3AC000F5
:1017A0003E083F04840040088A013C21C000C1007B
:1017B0006400400841048A150A120319FC2B3918E9
:1017C000C414391CC410B9184415B91C4411391972
:1017D000C415391DC4110730B6001030B4000730ED
:1017E000B7000830B50044088A011D2038088A0176
:1017F0001D208A010220CD004608A00005308A0184
:101800001621BC004608A0000B308A011E21BE0034
:101810003C0884003E088A013521BE00BF006400F8
:101820003E083F048A150A1203192A2C0730B60015
:101830001030B4000730B7000830B50044088A0102
:101840001D2039088A011D2038088A011D208A01BF
:101850000220CD00FE308A016820C0308A01682055
:1018600064308A01682061308A01682074308A01FE
:10187000682061308A0168203D308A01682002308A
:10188000A9004D08A400A5016730B000B1018A018C
:10189000AC2020308A0168200330A9004D08A40044
:1018A000A5016730B000B1018A01BF20FE308A0176
:1018B000682010308A016820FE308A0168201030CC
:1018C0008A016820FE308A01682010308A01682071
:1018D000FE308A01682010308A0168204D08A0007F
:1018E000A1011030A200A3018A014021C8004808CC
:1018F000A600A7011030A200A3018A015C21BC0050
:101900002508BD003C084D02C70064008A150A1274
:101910000618992CFA308A01F420C80A6400480895
:10192000103C8A150A12031D962CC8018A150A124A
:10193000762564008A150A128618AD2CFA308A01C1
:10194000F420C70A64004708103C8A150A12031DD8
:10195000AA2CC7018A150A12762564008A150A1274
:101960000619672D4410FA308A01F4201030A600C1
:10197000A7014808A200A3018A015C21BC00250838
:10198000BD003C084707CD006400033046028A15BD
:101990000A120318DC2C0730B6001030B4000730F0
:1019A000B7000830B50044088A011D2038088A01B4
:1019B0001D204D088A011B204608033C031DFF30F3
:1019C000FF3ABC004608043C031DFF30FF3ABE004E
:1019D0003C0884003E088A013C21BE00BF00460846
:1019E000053C031DFF30FF3AC0003E083F04840061
:1019F00040088A013C21C000C10064004008410445
:101A00008A150A120319212D3918C414391CC4105F
:101A1000B9184415B91C44113919C415391DC4111C
:101A20000730B6001030B4000730B7000830B500FA
:101A300044088A011D2038088A011D204D088A01AA
:101A40001B204608A00005308A011621BC0046086C
:101A5000A0000B308A011E21BE003C0884003E0815
:101A60008A013521BE00BF0064003E083F048A158C
:101A70000A1203194F2D0730B6001030B40007309A
:101A8000B7000830B50044088A011D2039088A01D2
:101A90001D2038088A011D204D088A011B20B80A24
:101AA0000319B90A3808A0003908A1003B08A300AF
:101AB0003A088A0123218A150A12031D612DB801F3
:101AC000B90114308A01F4208A150A126D2B6400C2
:101AD0008A150A128619732D0130A3005E308A011F
:101AE000F5208A019F298A150A12852C1030A6003C
:101AF000A7014808A200A3018A015C21BC002508B7
:101B0000BD003C084707CD00FE308A016820C03088
:101B10008A01682064308A01682061308A01682067
:101B200074308A01682061308A0168203D308A0162
:101B300068200230A9004D08A400A5016730B0005C
:101B4000B1018A01AC2020308A0168200330A9004D
:101B50004D08A400A5016730B000B1018A01BF2083
:101B6000FE308A01682010308A016820FE308A0128
:101B7000682010308A016820FE308A016820103009
:101B80008A016820FE308A01682010308A016820AE
:101B900008004410FE308A01682001308A01682064
:101BA00045308A01682072308A01682061308A01DC
:101BB000682073308A01682069308A0168206E309D
:101BC0008A01682067308A01682020308A016820F5
:101BD0006D308A01682065308A0168206D308A0185
:101BE00068206F308A01682072308A01682079305D
:101BF0008A01682020308A01682020308A0168200C
:101C0000FE308A016820C0308A01682043308A0192
:101C100068206F308A0168206E308A016820663043
:101C20008A01682069308A01682072308A01682040
:101C30006D308A01682020308A0168203F308A0197
:101C4000682020308A01682042308A01682075307F
:101C50008A01682074308A01682031308A01682046
:101C600020308A01682020308A01682064008A15AB
:101C70000A120618412EFA308A01F4208A150A1237
:101C80004E2E64008A150A1286184B2EFA308A01ED
:101C9000F4208A019F298A150A12362EFE308A0105
:101CA000682001308A01682045308A01682072303E
:101CB0008A01682061308A01682073308A016820B7
:101CC00069308A0168206E308A01682067308A0195
:101CD000682020308A0168206D308A0168206530D4
:101CE0008A0168206D308A0168206F308A0168207F
:101CF00072308A01682079308A01682020308A0198
:101D0000682020308A016820FE308A016820C030B7
:101D10008A01682057308A01682061308A01682072
:101D200069308A01682074308A01682020308A0175
:101D3000682020308A01682020308A016820203005
:101D40008A01682020308A01682020308A016820BA
:101D500020308A01682020308A01682020308A01E2
:101D6000682020308A01682020308A0168202030D5
:101D70008A016820C201C3014208A0004308A100F3
:101D80003B08A3003A088A0118218A150A12031D8C
:101D9000602FFF30CD006400033046028A150A121E
:101DA0000318E32E0730B6001030B4000730B70038
:101DB0000830B50044088A011D2042088A011D2010
:101DC0004D088A011B204608033C031DFF30FF3AE3
:101DD000BC004608043C031DFF30FF3ABE003C082F
:101DE00084003E088A013C21BE00BF004608053C35
:101DF000031DFF30FF3AC0003E083F048400400846
:101E00008A013C21C000C1006400400841048A15D9
:101E10000A120319282F4318C414431CC410C318F2
:101E20004415C31C44114319C415431DC411073084
:101E3000B6001030B4000730B7000830B5004408D1
:101E40008A011D2042088A011D204D088A011B209D
:101E50004608A00005308A011621BC004608A000F3
:101E60000B308A011E21BE003C0884003E088A0116
:101E70003521BE00BF0064003E083F048A150A12E7
:101E80000319562F0730B6001030B4000730B700E2
:101E90000830B50044088A011D2043088A011D202E
:101EA00042088A011D204D088A011B2014308A0136
:101EB000F420C20A0319C30A8A150A12031DBC2E94
:101EC000FE308A01682001308A0168204D308A0185
:101ED000682065308A0168206D308A0168206F3083
:101EE0008A01682072308A01682079308A0168206E
:101EF00020308A01682065308A01682072308A01AA
:101F0000682061308A01682073308A01682065305A
:101F10008A01682064308A01682020308A016820A4
:101F200020308A01682020308A016820FE308A0132
:101F30006820C0308A01682050308A0168207230E1
:101F40008A01682065308A01682073308A01682020
:101F500073308A01682020308A01682042308A016B
:101F6000682075308A01682074308A0168207430D6
:101F70008A0168206F308A0168206E308A016820EB
:101F800020308A01682034308A01682020308A019C
:101F9000682020308A01682064008A150A12861998
:101FA000D82F0130A30090308A01F5208A019F29A3
:0E1FB0008A150A12CC2F63008A150A12DB2F45
:02400E00313F40
:00000001FF


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.

quinta-feira, 9 de abril de 2015

Relógio binário de leds

Relógio Binário com PIC


Em 2004 eu bolei esse relógio binário usando um PIC 16F628 já que começaram a aparecer alguns projetos semelhantes e eu quis ter o meu. A ideia era usar leds pra representar os bits que representam números binários pra apresentar a hora e dia da semana. Passado esse tempo todo eu resolvi publicar aqui no blog pra deixar documentado e  deixar mais um projetinho bacana usando PIC.

Eu usei uma placa de acrílico transparente para servir de suporte como se fosse um painel. Tive que dobrar um pedaço usando uma pequena tocha de algodão e álcool pra amolecer a dobra e fazer a base. No fim uns furos nos cantos pra prender com os espaçadores de tubo de alumínio e parafuso. O resultado final foi esse:



Ao todo são 23 leds dispostos em uma matriz de 7 linhas por 4 colunas com acendimento multiplexado.
A leitura do relógio segue essa lógica:

Aqui um detalhe do relógio e a parte traseira:

Para ajustar o relógio, ele conta com 3 botões: set, select e incrementa. O botão set entra em modo de ajuste, o botão select escolhe qual linha vai ser ajustada (dezenas de horas, unidades de horas, dezenas de minutos, etc) e o último botão de incremento altera o valor da linha. Ao final do ajuste, aperta-se novamente o set para o relógio começar a funcionar. A alimentação é a partir de uma fonte de parede de 7 a 12Vdc.

A precisão é obtida a partir do cristal de 4MHz do oscilador principal do PIC. Muitos relógios e RTCs usam um cristal de 32768Hz no oscilador auxiliar do PIC. Eu optei por pegar a base de tempo a partir do próprio oscilador principal. Pra isso uma rotina em assembly usa o Timer1 do PIC pra gerar um estouro e uma interrupção a cada meio segundo e incrementar a variável de segundo (na verdade de meio segundo = halfsec). O resultado é que o relógio tem uma excelente precisão e depende apenas do cristal.

MOVWF wsave
SWAPF STATUS,W
CLRF STATUS
MOVWF ssave
MOVF PCLATH,W
MOVWF psave
MOVLW 221
MOVWF TMR1L
MOVLW 11
MOVWF TMR1H 'carrega valor 11x256+221=3037 no contador TMR1, falta 62499 contagens x8us=0,5s
BCF PIR1,0
INC halfsec 'o contador TMR1 estoura a cada 0,5s e incrementa a variavel
BTFSS halfsec,1
GOTO xxx
CLRF halfsec
INC unseg
xxx MOVF psave,W
MOVWF PCLATH
SWAPF ssave,W
MOVWF STATUS
SWAPF wsave,F
SWAPF wsave,W
BSF interr,0
RETFIE 

Aqui o código hexadecimal para gravar no PIC:
:02000000B42822
:10000800CA28A400400884003E082620841300055E
:100018002C1C3E06031923282408031D1B282A0824
:10002800FF3E031C24280A3030202A082428240AEA
:10003800FF3003192328240B23282B082428AD0973
:10004800AD0CAF2884178004AF2883178001840A79
:10005800FF3E031D2A28AF28A301A200FF30A207F4
:10006800031CA307031CAF280330A100DF303E2088
:100078003228A101E83EA000A109FC30031C472852
:10008800A00703184428A0076400A10F44282018DB
:100098004D28A01C5128000051280800013EA70047
:1000A8000A30A200A3017D20A70B572824080800C6
:1000B800A101A301A20002306628A101A301A200A8
:1000C80001306628A80023082102031D6D28220894
:1000D8002002043003180130031902302805031DDB
:1000E800FF30AF280038031DFF300405031DFF3023
:1000F800AF28A501A4011030A600210DA40DA50D5F
:100108002208A4022308031C230FA502031893281E
:100118002208A40723080318230FA5070310A00D1E
:10012800A10DA60B81282008AF281030A800A10136
:10013800A001A70CA60C031CA7282208A0072308C7
:100148000318230FA107A10CA00CA50CA40CA80B45
:100158009D282408AF288313031383126400080022
:1001680007309F008316F830850086012030840010
:10017800603083122A20A030840050302A2020309A
:100188008400303029200130C300E228D400030E57
:100198008301CE000A08CD00DD308E000B308F00C1
:1001A8000C10C90AC91CDA28C901D30A4D088A00EB
:1001B8004E0E8300D40E540E4C1409000330A300D5
:1001C800E8303120C0308B003530900083160C1495
:1001D8006400831253080A3C031DF428D3013F210D
:1001E80064008519F9288B13B8296400051AFD28BD
:1001F800802A7C214408A00045085C20B2004F08F2
:10020800A00050085C20B40032088400340876202E
:10021800B400B5004608A00047085C20B6003408C2
:100228003504840036087620B600B7005108A000CF
:1002380052085C20B8003608370484003808762055
:10024800B800B9004208A00001305C20BA003808A4
:10025800390484003A087620BA00BB0064003A08E2
:100268003B040319392905153A2905116400851A33
:100278003E29C201E628C80A64004808063C031D56
:100288004729C80148210800D10A640051080A3CDE
:10029800031D5029D10151210800C60A64004608EF
:1002A800063C031D5929C6015A210800CA0A05152A
:1002B800C8303020051164004A08183C031D66291F
:1002C800CA0173214A08A000A10100305220CF00C2
:1002D8004A08A000A10101305220C4000800C30A46
:1002E80064004308083C031D7B290130C300080053
:1002F800D5016400C93055020318B72964004C08B9
:10030800013C031D8929CC01E62853088600851481
:10031800023030208510480886000514023030204D
:100328000510510886000000861702303020861319
:100338000000460886000000061702303020061329
:1003480000004F0886000000861602303020861212
:10035800000044088600000006160230302006120D
:100368000000D50F7D2908004408860001303020A0
:100378000616C83030206400851AD629C40A6400DD
:100388004408033C031DD629C4010A30A600A7016E
:100398004408A200A3019920B2002508B3004F0821
:1003A8003207CA006400051ADB290612EB2905305A
:1003B800C0000830BE00AC016430AA00AB010130B7
:1003C800AD0056080520D6000318E228B8294F08C2
:1003D8008600013030208616C83030206400851A27
:1003E800122ACF0A64004F080A3C031DFC29CF01DA
:1003F8004F08A00003306120B2004408A00002307A
:100408005C20B4003208840034087620B400B500BB
:100418006400340835040319122ACF010A30A600F3
:10042800A7014408A200A3019920B2002508B3003F
:100438004F083207CA006400051A242A8612342A93
:100448000530C0000830BE00AC016430AA00AB0122
:100458000130AD0056080520D6000318E228EB2924
:1004680046088600013030200617C8303020640066
:10047800851A452AC60A64004608063C031D452A13
:10048800C6016400051A4A2A06135A2A0530C00014
:100498000830BE00AC016430AA00AB010130AD00E9
:1004A80056080520D6000318E228342A5108860089
:1004B800013030208617C83030206400851A6B2A36
:1004C800D10A640051080A3C031D6B2AD10164005B
:1004D800051A702A0613B8290530C0000830BE0076
:1004E800AC016430AA00AB010130AD00560805200C
:1004F800D6000318E2285A2A0130A300F43031202C
:100508000130C20045088600013030200616C83088
:1005180030206400851AA42AC50A64004508033CF3
:10052800031DA42AC5010A30A600A7014508A20098
:10053800A3019920B2002508B30050083207CB0068
:100548006400051AA92A0612B92A0530C000083025
:10055800BE00AC016430AA00AB010130AD00560802
:100568000520D6000318E228802A500886000130AA
:1005780030208616C83030206400851AE02AD00A58
:10058800640050080A3C031DCA2AD0015008A00084
:1005980003306120B2004508A00002305C20B4009E
:1005A8003208840034087620B400B50064003408AA
:1005B80035040319E02AD0010A30A600A70145082E
:1005C800A200A3019920B2002508B3005008320701
:1005D800CB006400051AF22A8612022B0530C000EF
:1005E8000830BE00AC016430AA00AB010130AD0098
:1005F80056080520D6000318E228B92A47088600BD
:10060800013030200617C83030206400851A132BBB
:10061800C70A64004708063C031D132BC701640082
:10062800051A182B0613282B0530C0000830BE0009
:10063800AC016430AA00AB010130AD0056080520BA
:10064800D6000318E228342A5208860001303020E8
:100658008617C83030206400851A392BD20A640006
:1006680052080A3C031D392BD2016400051A3E2B9F
:100678000613802A0530C0000830BE00AC01643083
:10068800AA00AB010130AD0056080520D6000318BA
:08069800E228282B63004E2B21
:02400E00053F6C
:00000001FF

E o esquema elétrico do relógio:

E um filminho mostrando o relógio contando o tempo:





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