Je suis actuellement en train d'effectuer pas mal de test avec un pic 16f876a et un modile eeprom 24c02.
Pas de probléme pour lire et ecrire dans l'eeprom.
La ou ca se complique et que je veux effectué plusieur enregistrement dans l'eeprom comme je l'ai deja expliqué dans un autre poste qui porté sur la capacité de l'eeprom du type :
DATE : JJ/MM/AA
HEURE : HH/MM
CODE : xxxxxx
Voici ma question, comment faire pour que les enregistrement ne s'ecrase pas au fur et a mesure qu'ils sont validés.
J'aimerais pouvoir recupérer dans mon eeprom au format texte si possible les infos comme ceci:
DATE : JJ/MM/AA
HEURE : HH/MM
CODE : xxxxxx
DATE : JJ/MM/AA
HEURE : HH/MM
CODE : xxxxxx
etc etc
Voici le code que j'utilise actuellement qui est sur la base du code fournie avec le module eeprom de la station easypic 3.
Code:program I2c_Eeprom include "Eeprom_24c02.pbas" dim someText as string[20] dim someData as char[20] dim otherData as char[20] dim ii as byte dim tmpData as char sub procedure delay2S delay_ms(2000) end sub main: EEPROM_24C02_Init Glcd_Init(PORTB, 2, 3, 4, 5, 7, 6, PORTD) Glcd_Fill(0x00) someData = "123456789" 'Example for single-byte write ii = 0 tmpData = 2 while tmpData <> 0 tmpData = someData[ii] Inc(ii) EEPROM_24C02_WrSingle(ii, tmpdata) Glcd_Set_Font(@FontSystem5x8, 5, 8, 32) Glcd_Write_Char(tmpData, 5, 8, 1) wend ' Example for single-byte read ii = 1 tmpData = 2 ' Example for sequential data read EEPROM_24C02_RdSeq(1, otherData, 20) Glcd_Set_Font(@FontSystem5x8, 5, 12, 32) Glcd_Write_Text(otherData, 5, 12, 1) end.
Code:module Eeprom_24c02 ' EEPROM 24C02 read/write library implements '--------------- Performs 24C02 Init sub procedure EEPROM_24C02_Init I2C_Init(100000) end sub '--------------- Writes data to 24C02 EEPROM - signle location sub procedure EEPROM_24C02_WrSingle(dim wAddr as byte, dim wData as byte) I2C_start ' issue I2C start signal I2C_Wr($A2) ' send byte via I2C (command to 24cO2) I2C_Wr(wAddr) ' send byte (address of EEPROM location) I2C_Wr(wData) ' send data (data to be written) I2C_Stop end sub '--------------- Reads data from 24C02 EEPROM - single location (random) sub function EEPROM_24C02_RdSingle(dim rAddr as byte) as byte I2C_Start ' issue I2C start signal I2C_Wr($A2) ' send byte via I2C (device address + W) I2C_Wr(rAddr) ' send byte (data address) I2C_Repeated_Start ' issue I2C signal repeated start I2C_Wr($A3) ' send byte (device address + R) result = I2C_Rd(0) ' Read the data (NO acknowledge) while I2C_Is_Idle asm NOP ' Wait for the read cycle to finish end asm wend I2C_Stop end sub '--------------- Reads data from 24C02 EEPROM - sequential read sub procedure EEPROM_24C02_RdSeq(dim rAddr as byte, dim byref rdData as char[20], dim rLen as byte) dim i as byte I2C_Start ' issue I2C start signal I2C_Wr($A2) ' send byte via I2C (device address + W) I2C_Wr(rAddr) ' send byte (address of EEPROM location) I2C_Repeated_Start ' issue I2C signal repeated start I2C_Wr($A3) ' send byte (device address + R) i = 0 while i < rLen rdData[i] = I2C_Rd(1) ' read data (YES acknowledge) Delay_ms(20) Inc(i) wend rdData[i] = I2C_Rd(0) ' last data is read WITH ack I2C_Stop end sub end.
-----