Autor: Eng David M Risnik dmrsp@terra.com.br * * 2003 * *
MEMORIA - 24C04
2 WIRE SERIAL CMOS EEPROM
Uma prática rotina de teste com o 8031
A série 24Cxx - EEPROM de baixo custo - baixo consumo e tamanho reduzido (8 ppiinos) são excelentes para aplicação em desenvovimentos compactos . Utilizando a tecnologia I2C (serial) leitura / escrita , emprega somente 2 pinos neste controle (veja texto I2C na pagina inicial):
SERIAL DATA = SDA
SERIAL CLOCK = SCL
O tamanho desta memoria é especificado em K-bits (isto mesmo , bits) . Assim a memoria 24C01 possue 1K bits (1024 bits que são armazenados em um bloco de 128 bytes , ou 8 x 128 bits). A memoria 24C04 possue 4K bits , armazenados em 512 bytes ( 8 x 512 bits ).
A posição de armazenagem é definida pelo ENDEREÇO , que vai desde 00 (primeira posição) até o máximo suportada memoria .
Podemos "testar" estas posições (ou um bloco) de memoria , atraves de uma rotina que "escreva" um determinado valor num endereço , e na sequencia faça a "leitura" do valor contido neste endereço , que obviamente deverá ser o mesmo escrito para confirmação operação. Para facilitar a escrita / leitura , estas memorias permitem ainda o acesso direto a um "bloco" de até 8 bytes , tornando mais rapida a operação .
ROTINA ASSEMBLER
A tÍtulo de exemplo apresento uma rotina simples desenvolvida para os "kits" 8031 (com RAM externa de código) que executa os seguinte procedimentos:
1 - Grava um bloco de dados (8 bytes) pre-definidos (tabela 1) no endereço (40~49H) da 24C04
2 - Procede a leitura desta mesma faixa de endereço
3 - Executa uma comparação entre os dados escritos e lidos
4 - Emite uma mensagem no display confirmando (OK) ou não (erro) a exatidão da operação .
DETALHES: os pinos A1/A2/A3 da 24c04 devem ser aterrados , correspondendo ao endereço 00 que identifica o dispositivo (pinos 1-2-3-4). O pino 7 (WP = write protec) deve também estar aterrado , permitindo a escrita na memoria. As linhas SDA e SCL (pinos 8 e 9) são conectadas aos pinos 0 e 1 da porta P1 (P1.0 - P1.1). O pino 8 de Vcc é conectado a alimentação de +5V.
Eu utilizei um display LCD de 40 caracteres por duas linhas , mas vc podera utilizar sem problemas os displays de 16 caracteres , pois os comandos de inicialização são identicos (sub-rotina ini_disp) . A linha de dados para o display é fornecida pela porta P2 , enquanto que os sinais de controle (EN , RS) pela porta P3 do micro . Estas caracteristicas vc pode alterar de acordo com sua conveniencia , bastando identificar no software . Aqueles que ja possuem uma certa pratica não encontrarão problemas nesta configuração .
DISPLAY X LED
A saída de informação atraves de um display é interessante pois permite emitir "mensagens" , de qualquer forma o teste poderá também ser implementado sem o display , bastando por exemplo , acionar um LED que identifique um ERRO e outro que identifique R/W = OK Para isto nomeie um pino de saida (exmplo P1.3 e P1.4) que servira de driver aos leds . As conclusões do software , ao inves de enviar mensagens ao display , deverão neste caso acionar os respectivos pinos ( CLR ou SETB , para "0" ou "1"). Normalmente utilizamos o anodo do Led conectado ao +5V e o catodo atraves de um resistor de 150R ao pino de controle , que ao ser levado a nivel logico ZERO (CLR) acendo o led.
A rotina batizada por "eetst.asm" esta neste site , faça o download no seu editor de texto preferido . Sugestão: para melhora-la , amplie o teste para varrer todas as posições de memoria ! Tente ..."boa sorte" !
Importante: caso deseje "rodar" esta rotina nos micros com ROM interna (87C55 ou 89C55 (flash) observe que alguns comandos deverão ser alterados