این یه نمونه کد برای کار با ایسی های TWI ساخت اتمل البته بیشتر ایسی ها مثل هم هستن
خود کد توضیخاتم داده
یه مدل با ظرفیت بالا بگیرید مشکل حل میشه
البته بهتر هست محاسبه کنید چقدر ظرفیت نیاز دارید چون ایسی بزرگ هاش گرون هستن
اگه خیلی داده زیاده و ایسی با این ظرفیت پیدا نشد باید برید سراغ MMC که دردسرش بیشتر هست.
کد:
'-----------------------------------------------------------------------------------------
'name : i2c.bas
'copyright : (c) 1995-2005, MCS Electronics
'purpose : demo: I2CSEND and I2CRECEIVE
'micro : Mega48
'suited for demo : yes
'commercial addon needed : no
'-----------------------------------------------------------------------------------------
$regfile = "m32def.dat" ' specify the used micro
$crystal = 8000000 ' used crystal frequency
$baud = 19200 ' use baud rate
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40
' default use 40 for the frame space
Config Portd = Output
Config Portb = Output
Config Portc = Output
Config Porta = Input
Config Scl = Portd.3
Config Sda = Portd.2
Config Lcdpin = Pin , Db4 = Pinc.4 , Db5 = Pinc.5 , Db6 = Pinc.6 , Db7 = Pinc.7 , E = Pinc.2 , Rs = Pinc.0
Config Lcd = 16 * 2
Declare Sub Write_eeprom(byval Adres As Byte , Byval Value As Byte)
Declare Sub Read_eeprom(byval Adres As Byte , Value As Byte)
Const Addressw = &B10100000 'slave write address
Const Addressr = &B10100001 'slave read address
Dim Adres As Byte , Value As Byte 'dim byte
Cls
Lcd "EEPROM SAMPLE"
Waitms 700
'*************************************************************************************
Cls
Lcd "WRITING IN EEPROM"
Lowerline
Lcd "CELL:"
Value = 255
For Adres = 0 To 50
Call Write_eeprom(adres , Value )
Decr Value
Next
Cls
'&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Do
'now read from external eeprom
For Adres = 0 To 50
Call Read_eeprom(adres , Value)
Lcd "Adres:" ; Adres
Lowerline
Lcd "Value:" ; Value
Wait 1
Cls
Next
Loop
'&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
'*************************************************************************************
'sample of writing a byte to EEPROM AT2404
Sub Write_eeprom(byval Adres As Byte , Byval Value As Byte)
I2cstart 'start condition
I2cwbyte Addressw 'slave address
I2cwbyte Adres 'asdress of EEPROM
I2cwbyte Value 'value to write
I2cstop 'stop condition
Waitms 10 'wait for 10 milliseconds
End Sub
'sample of reading a byte from EEPROM AT2404
Sub Read_eeprom(byval Adres As Byte , Value As Byte)
I2cstart 'generate start
I2cwbyte Addressw 'slave adsress
I2cwbyte Adres 'address of EEPROM
I2cstart 'repeated start
I2cwbyte Addressr 'slave address (read)
I2crbyte Value , Nack 'read byte
I2cstop 'generate stop
End Sub
' when you want to control a chip with a larger memory like the 24c64 it requires an additional byte
' to be sent (consult the datasheet):
' Wires from the I2C address that are not connected will default to 0 in most cases!
' I2cstart 'start condition
' I2cwbyte &B1010_0000 'slave address
' I2cwbyte H 'high address
' I2cwbyte L 'low address
' I2cwbyte Value 'value to write
' I2cstop 'stop condition
' Waitms 10
به همه عشق بورز، به معدودی اعتماد کن و در حق کسی بدی نکن.
ویلیام شکسپیر
نباید ایمان به انسانیت را از دست دهید. انسانیت یک اقیانوس است؛ اگر قطرات اندکی از اقیانوس کثیف است، اقیانوس کثیف نمیشود.
مهاتما گاندی
يَا أَيُّهَا الَّذِينَ آمَنُواْ اسْتَعِينُواْ بِالصَّبْرِ وَالصَّلاَةِ إِنَّ اللّهَ مَعَ الصَّابِرِينَ