I2C مخفف کلمه Inter Integrated Circuit است و یک پروتکل ارتباطی سریال بین مدارات مجتمع می باشد. همچنین نام دیگر آن TWI(Two Wire Interface) می باشد. از این پروتکل برای ارتباط میکروکنترلر و وسایل جانبی نظیر حافظه ها ، سنسورهای دما و ... استفاده می شود.
این ارتباط تنها از طریق دو سیم برقرار می شود: SDA (Serial Data) و SCL (Serial Clock)
هر دستگاهی که از طریق این پروتکل کار می کند یک آدرس 7بیتی منحصر به فرد دارد. 4 بیت بالا ثابت بوده و نشان دهنده نوع وسیله هستند به عنوان مثال کد 1010 نشان دهنده EEPROM می باشد. سه بیت کم ارزش، آدرس دستگاه جانبی می باشد.با این نوع آدرس دهی می توان تا 8 وسیله یکسان و 128 وسیله جانبی را از طریق یک پورت I2C به میکروکنترلر وصل کرد.
آدرس I2C در بایت اول فرستاده می شود که بیت کم ارزش بایت اول تقاضای خواندن و یا نوشتن master را نشان می دهد. 0 برای نوشتن و 1 برای خواندن.
در اینجا دستگاهی که اطلاعات را میفرستد Master و دستگاهی که اطلاعات را میگیرد Slave نامیده میشود. Master با فرستادن یک سیگنال بر روی خط SDA انتقال اطلاعات را آغاز و با فرستادن سیگنالی دیگر بر روی همین خط انتقال اطلاعات را متوقف می کند. در هنگام ارسال سیگنالهای Start و Stop سیگنال SCL یک میباشد. هنگامی که Master انتقال اطلاعات را آغاز کرد بایت Device address را در Slave مینویسد. Slave یک بیت Acknowledge بعد از دریافت اطلاعات خواهد فرستاد.
سخت افزار:
EEPROM مدل AT24C32 و میکروکنترلر مدل AT2313 وصل شده است. همچنین از یک LCD برای نشان دادن اطلاعات استفاده شده است. AT2313 دارای 4096 بایت حافظه است. SCL و SDA به پین های D.0 و D.1 وصل شده اند.
نرم افزار:
از کامپایلر BASCOM-AVR برای برنامه نویسی استفاده شده است. در زیر فرمانهای این کامپایلر آورده شده است:
Command |
Description |
Config SDA |
Configure the SDA line e.g. PORTB.0 |
Congif SCL |
Configure the SCL line e.g. PORTB.1 |
I2cstart |
generates a start condition |
I2cstop |
generates a stop condition |
I2cwbyte |
writes a byte to the target device |
I2crbyte |
reads a byte from the target device |
BASCOM I2C commands |
در این نرم افزار شما ابتدا باید پورتهای استفاده شده برای SDA و SCL را Configure کرد. سپس برای انتخاب EEPROMی که متصل شده آدرس مورد نظر را ارسال کرد. سپس با فرستادن دو بایت به EEPROM آدرس مورد نظر برای نوشتن را انتخاب کرده و در نهایت دیتای مورد نظر را نوشت.
در زیر کد این برنامه را خواهید دید. در این برنامه مقدار متغیر D_wr در آدرس صفر EEPROM نوشته شده و سپس بایت صفر از EEPROM خوانده شده و در متغییر D_rd نوشته می شود و در LCD نمایش داده میشود.
*******************************************************************
' * Title : EEPROM 24C32.bas
' * Last Updated : 05.03.2006
' * Target device: At90s2313, 24C32
' * Author : www.avrprojects.net
' * Program code : BASCOM-AVR
' * Hardware req. :
' * Description :
' * This application reads and write a byte to an 24c32 EEPROM connected to an
' * AT2313 microcontroller.
' *******************************************************************
Dim D_w As Byte , D_r As Byte
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.6 , Rs = Portb.7
Config Lcd = 16 * 2
Cls
Cursor Off
Config Scl = Portd.0 'assign the SCl line to PORTD.0
Config Sda = Portd.1 'assign the SDA line to PORTD.1
D_w = 100
'********** 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 10
'********** 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 'generate stop
Lcd "D_w= "
Lcd D_w 'show byte on LCD
Lowerline
Lcd "D_r= "
Lcd D_r
End
دانلود کد Bascom