>>>3-ارتباط سریال i2c یا 2-wire
ویژگی های این ارتباط به شرح زیر است:
1-
در این ارتباط از دوسیم همرا با گراند و VCC ، که درمجموع چهار سیم میشود ، برای انتقال دیتا استفاده میشود
2-
بالا ترین فرکانس کلاک 400 کیلو هرتز است
3-
در این ارتباط میتوان تعداد نامحدود وسیله جانبی با ادرس سخت افزاری مختلف را به هم متصل کرد
4-
حداکثر طول کابل ارتباطی باسیم شیلد 80 سانتی متر است
5-
کلاک ارتباط I2C به شدت به کلاک سیستم (فرکانس کریستال ) وابسته است
برای ارتباط I2C از دو پایه SCL و SDA (PORTC.0 و PORTC.1 میگرو مگا 16) استفاده میشود که پایه SDA پایه داده و پایه SCL پایه کلاک میباشد.( دو پایه مزکور پایه های پیش فرض میباشند ، شما میتوانید با دستوراتی که گفته میشود انها را به پایهای دلخواه خود تغییر دهید)
دستورات مربوط به راه اندازی I2C در محیط بسکام:
>تعیین کلاک I2C :
X میتواند از 1 تا 255 باشد ، رابطه ای بین کلاک و عدد وجود ندارد ، مثلا برای عدد 10 کلاک 100 کیلو وبرای عدد 5 کلاک 200 کیلو و برای عدد 1 کلاک 400 کیلو هرتز است ( کلاک I2C به فرکانس کریستال وابسته است ، در این ارتباط باید کریستال نوشته شده در برنامه با کریستال استفاده شده یکی باشد ، همچنین کلاک هر دو دستگاه باید مساوی باشد)
>تعیین پایه های داده و کلاک I2C :
با دستور زیر پایه SCL (پایه کلاک) تعیین میشود :
Pin نام یکی از پایه های دلخواه میکرو میباشد .
با دستور زیر پایه SDA (پایه داده) تعیین میشود :
Pin نام یکی از پایه های دلخواه میکرو میباشد .
بعد از انکه I2C پیکر بندی شد با استفاده از دستور زیر میتوان ارتباط را اغاز کرد
با این دستور ارسال ودریافت داده شروع میشودشما همچنین میتوانید
با دستور زیر به ارسال ودریافت داده خاتمه دهید:
با استفاده از دستور زیر میتوان داده ای را به باس I2C فرستاد:
کد php:
I2CSEND slave, var , bytes
Slave :ادرس گیرنده اطلاعات است که میتواند به فرم یک عدد ثابت یا متغییر باشد
Var : عدد ثابت یا متغییری است که میخواهیسم ان را ارسال کنیم
: bytesبا این گزینه شما میتوانید تعداد بایت دلخواه را به باس ارسال کنید (این گزینه اختیاری است)
فرم خلاصه شده این دستور به شکل زیر است:
Val : عدد ثابت یا متغییری است که کد دریافت شده در ان قرار میگیرد .مثال:
برنامه فرستنده:
کد php:
$regfile = "m32def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Pinb.2 , Db5 = Pinb.3 , Db6 = Pinb.4 , Db7 = Pinb.5 , Rs = Pinb.0 , E = Pinb.1
Config Kbd = Porta
Config I2cdelay = 5
Config Sda = Portc.1
Config Scl = Portc.0
Dim A As Byte
I2cstart
W:
A = Getkbd()
If A > 15 Then
Goto W
End If
I2csend &H40 , A
Locate 2 , 1
Lcd A
Goto W
End
در مثال با کلاک I2C ، 200کیلو هرتز انتخاب شده است همچنین پایهSCL (پایه کلاک)به پورت c.0 ( پایه22 مگا16)و پایه SDA (پایه داده) به پین c.1 (پایه 23 مگا 16) متصل شده است.با دستور I2cstartپروتکل i2c شروع به کار کرده وعدد گرفته شده از کیپد را بخ باس i2c میفرستد ، برای گیرنده ادرس &h40 در نظر گرفته شده است ، برای درک بیشتر موضوع متغیر ارسالی بر روی یک lcd به نمایش در میاید.
با استفاده از دستور زیر میتوان داده ای را از باس I2C دریافت کرد:
کد php:
I2CRECEIVE slave, var , b2W, b2R
Slave :ادرس فرستنده اطلاعات است که میتواند به فرم یک عدد ثابت یا متغییر باشد.
Var : عدد ثابت یا متغییری است که کد دریافت شده در ان قرار میگیرد
: bytesبا این گزینه شما میتوانید تعداد بایت دلخواه را از باس دریافت کنید (این گزینه اختیاری است).(توجه داشته باشید که تعداد بایت دریافتی و ارسالی باید با هم برابر باشند در غیر اینصورت اطلاعات دریافتی ناقص خواهد بود.)
فرم خلاصه شده این دستور به شکل زیر است:
Var : عدد ثابت یا متغییری است که کد دریافت شده در ان قرار میگیرد
ack/nack :زمانی که بخواهیم بیشتر از یک بایت را از باس بخوانیم باید از ack استفاده کنیم و زمانی که میخواهیم اخرین بایت را از باس بخوانیم از nack استفاده میکنیم.مثال:
این برنامه مربوط به گیرنده مداری است که برنامه ان را در بالا مشاهده فرمودید:
کد php:
$regfile = "m32def.dat" : $crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Pina.0 , Db5 = Pina.1 , Db6 = Pina.2 , Db7 = Pina.3 , Rs = Pina.4 , E = Pina.5
Config I2cdelay = 5
Config Sda = Portc.1
Config Scl = Portc.0
Dim A As Byte
I2cstart
W:
I2creceive &H40 , A
If A < 16 Then : Locate 1 , 1 : Lcd A : End If
Goto W
End
در مثال بالا کلاک I2C ، 200 کیلو هرتز(Config I2cdelay = 5) انتخاب شده است همچنین پایهSCL (پایه کلاک)به پورت c.0 ( پایه22 مگا16)و پایه SDA (پایه داده) به پین c.1 (پایه 23 مگا 16) متصل شده است.با دستور I2cstartپروتکل i2c شروع به کار کرده وعدد گرفته شده از باس را بر روی lcd نمایش میدهد ، برای فرستنده ادرس &h40 در نظر گرفته شده است
منبع : کتاب بسکام BASCOM