Mam następujący problem, cały dzień szukam po necie materiałów na temat obsługi eemproma 24c16 po I2C, udało mi się napisać/przerobić programik ale sprzęt nie działa prawidłowo.
Dane zapisane do eeproma i odczytane bywają różne, wnioskujętak na podstawie tego co mi wyświetla na LCD, niektóre liczby są takie same, niektóre inne. Na dodatek po zresetowaniu te liczby się zmieniają, czyli jak dla wpisanej 2 do pamięci wyświetliło 0 , to później np. wyświetli 1 (po resecie).
Dodatkowe informacje: jesli chodzi o adres to znalazłem informację, że nóżki A0 A1 i A2 pozostają niepodłączone dla tego eeproma, próbowałem na podłączonych i niepodłączonych...
Podłączone są rezystory podciągające na liniach SCL i SDA 4,7k.
Program mikrokontrolera (używam ATMEGA32):
Dane zapisane do eeproma i odczytane bywają różne, wnioskujętak na podstawie tego co mi wyświetla na LCD, niektóre liczby są takie same, niektóre inne. Na dodatek po zresetowaniu te liczby się zmieniają, czyli jak dla wpisanej 2 do pamięci wyświetliło 0 , to później np. wyświetli 1 (po resecie).
Dodatkowe informacje: jesli chodzi o adres to znalazłem informację, że nóżki A0 A1 i A2 pozostają niepodłączone dla tego eeproma, próbowałem na podłączonych i niepodłączonych...
Podłączone są rezystory podciągające na liniach SCL i SDA 4,7k.
Program mikrokontrolera (używam ATMEGA32):
$regfile = "m32def.dat" 'informuje kompilator o pliku
'dyrektyw mikrokontrolera
$crystal = 16000000 'informuje kompilator
'o częstotliwości oscylatora
'taktującego mikrokontroler
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
Config Scl = Portc.1 'konfigurowanie linii SCL
Config Sda = Portc.0
Dim D_w As Byte , D_r As Byte
Cls
Cursor Off
'assign the SDA line to PORTD.1
D_w = 0
Do
'********** write byte to EEPROM ***************************************************
I2cstart 'generate start
I2cwbyte &B1010_0000 'send device address
I2cwbyte 0 'H adress of EEPROM
I2cwbyte 0 'L adress of EEPROM
I2cwbyte D_w 'data to EEPROM
I2cstop 'stop condition
Waitms 100
'********** read byte from EEPROM **************************************************
I2cstart 'generate start
I2cwbyte &B1010_0000 'send device adsress
I2cwbyte 0 'H address of EEPROM
I2cwbyte 0 'L address of EEPROM
I2cstart 'repeated start
I2cwbyte &B1010_0001 'slave address (read)
I2crbyte D_r , Nack 'read byte from EEPROM
I2cstop
Waitms 100 'generate stop
Cls
Lcd "D_w= "
Lcd D_w 'show byte on LCD
Lowerline
Lcd "D_r= "
Lcd D_r
Waitms 1000
Incr D_w
Loop
End
