- شروع کننده موضوع
- #1
- ارسالها
- 3,981
- امتیاز
- 32,624
- نام مرکز سمپاد
- فرزانگان امین
- شهر
- اصفهان
- سال فارغ التحصیلی
- 1390
ارتباط با رابط I2C:
حوصله ندارم کل i2c رو توضیح بدم! فقط دستورات برنامه نویسیشو برای ارتباط و تنظیمات ویزاردشو توضیح میدم:
هر device یک آدرس منحصر به فرد و مخصوص به خودش داره. آدرس i2c هفت بیتیه.
برای ارتباط بارابط i2c دوتا ماژول SCL و SDA هست که باید تو ویزارد تعیین کنیم که کدوم پین میکرو، معادل SCL و کدوم پین معادل SDA هست:
1) برای اعلام انتقال داده جدید به master از دستور زیر استفاده میکند:
i2c_start();
2) آدرس device مورد نظر را صدا می زند و اعلام می کند که می خواهد از آن deviceبخواند یا در آن بنویسد. یعنی آدرس آن device را با 0 (برای نوشتن) یا 1 (برای خواندن) or می کند:
i2c_write(آدرس|(بیت خواندن یا نوشتن
3) اگر ثبات مشخصی از آدرس device، موردنظر است، دوباره آدرس آن را می فرستد:
I2c_write(شماره ثبات هدف)
4) اگر قرار است داده در ثبات نوشته شود، به ارسال داده ادامه می دهدولی اگر قرار است داده از ثبات خوانده شود باید یک ارتباط خواندن جدید برقرار شود.از مرحله 1 شروع می شود.
مثال می زنم:
1) می خواهیم داده ‘150’را در ثبات 3 از حافظه ای که آدرس آن C0 است، نوشته شود:
i2c_start(); //اعلام انتقال داده جدید
i2c_write((C0)|0); //ارسال آدرس
i2c_write(3); //ارسال آدرس ثبات موردنظر
i2c_write(150); //نوشتن داده در ثبات موردنظر
i2c_stop(); //پایان ارتباط
2) میخواهیم عدد داخل ثبات 3 از حافظه ای که آدرس آن C0 است، خوانده شود:
i2c_start(); //اعلام انتقال داده جدید
i2c_write((C0)|0); //ارسال آدرس
i2c_write(3); //ارسال آدرس ثبات موردنظر
i2c_start(); //اعلام انتقال داده جدید
i2c_write((C0)|1); //ارسال آدرس
x= i2c_read(0); // خواندن از ثبات مورد نظر
i2c_stop(); //پایان ارتباط
درمورد تابع i2c_read() آرگومان ورودی اگر 0 باشد، یعنی خواندن از device موردنظر ادامه ندارد و اگر 1 باشد، یعنی خواندن از device موردنظر ادامه دارد.
بچه ها ببخشید که کدها جابجا شدن و اینا!خودتون شکل درستشو میدونین دیگه!
اینو هم حتما ببینین.یه پرزنتیشنه درمورد رابط I2c که مطالب خوبی داره:
een.iust.ac.ir/profs/Shahri/Computer%20Buses_84/I2C%20BUS.ppt
حوصله ندارم کل i2c رو توضیح بدم! فقط دستورات برنامه نویسیشو برای ارتباط و تنظیمات ویزاردشو توضیح میدم:
هر device یک آدرس منحصر به فرد و مخصوص به خودش داره. آدرس i2c هفت بیتیه.
برای ارتباط بارابط i2c دوتا ماژول SCL و SDA هست که باید تو ویزارد تعیین کنیم که کدوم پین میکرو، معادل SCL و کدوم پین معادل SDA هست:
1) برای اعلام انتقال داده جدید به master از دستور زیر استفاده میکند:
i2c_start();
2) آدرس device مورد نظر را صدا می زند و اعلام می کند که می خواهد از آن deviceبخواند یا در آن بنویسد. یعنی آدرس آن device را با 0 (برای نوشتن) یا 1 (برای خواندن) or می کند:
i2c_write(آدرس|(بیت خواندن یا نوشتن
3) اگر ثبات مشخصی از آدرس device، موردنظر است، دوباره آدرس آن را می فرستد:
I2c_write(شماره ثبات هدف)
4) اگر قرار است داده در ثبات نوشته شود، به ارسال داده ادامه می دهدولی اگر قرار است داده از ثبات خوانده شود باید یک ارتباط خواندن جدید برقرار شود.از مرحله 1 شروع می شود.
مثال می زنم:
1) می خواهیم داده ‘150’را در ثبات 3 از حافظه ای که آدرس آن C0 است، نوشته شود:
i2c_start(); //اعلام انتقال داده جدید
i2c_write((C0)|0); //ارسال آدرس
i2c_write(3); //ارسال آدرس ثبات موردنظر
i2c_write(150); //نوشتن داده در ثبات موردنظر
i2c_stop(); //پایان ارتباط
2) میخواهیم عدد داخل ثبات 3 از حافظه ای که آدرس آن C0 است، خوانده شود:
i2c_start(); //اعلام انتقال داده جدید
i2c_write((C0)|0); //ارسال آدرس
i2c_write(3); //ارسال آدرس ثبات موردنظر
i2c_start(); //اعلام انتقال داده جدید
i2c_write((C0)|1); //ارسال آدرس
x= i2c_read(0); // خواندن از ثبات مورد نظر
i2c_stop(); //پایان ارتباط
درمورد تابع i2c_read() آرگومان ورودی اگر 0 باشد، یعنی خواندن از device موردنظر ادامه ندارد و اگر 1 باشد، یعنی خواندن از device موردنظر ادامه دارد.
بچه ها ببخشید که کدها جابجا شدن و اینا!خودتون شکل درستشو میدونین دیگه!
اینو هم حتما ببینین.یه پرزنتیشنه درمورد رابط I2c که مطالب خوبی داره:
een.iust.ac.ir/profs/Shahri/Computer%20Buses_84/I2C%20BUS.ppt