هر دو یکی هستند. ارتباط I2C برای فیلیپس هستش فکر کنم.
اتمل برای کپی رایت و این حرفا اسمشو گزاشته TWI.
شما میخوای با رجیسترای TWI راش بندازی یا اینکه مثلا روی یک پورت دیگه و با کتابخونه دلخواه خودت بازنویسی کنی این ارتباط رو ؟
هر دو یکی هستند. ارتباط I2C برای فیلیپس هستش فکر کنم.
اتمل برای کپی رایت و این حرفا اسمشو گزاشته TWI.
شما میخوای با رجیسترای TWI راش بندازی یا اینکه مثلا روی یک پورت دیگه و با کتابخونه دلخواه خودت بازنویسی کنی این ارتباط رو ؟
من میخوام یه DS1307 رو همزمان با یه EEPROM خارجی که با i2c کار میکنه راه بندازم.
به نظرتون چیکار کنم؟
این فایل رو ببین. باهاش میشه I2C رو روی هر پایه ای که دلت بخواد راه بندازی. پیش فرض باهاش DS1307 رو راه انداخته. شما باهاش کمی کار کن و EEPROM رو هم می تونی راه بندازی و وابسته به پورت I2C سخت افزاری میکرو نباشی.
خود DS1307 هم حدود 60 بایت حافظه داخلی داره. شاید بتونه کمکت کنه که به جای EEPROM از اون استفاده کنی.
این فایل هم مربوط به فایل پروژه Polestar هستش که از کاربرای همین انجمن هستش. http://s3.picofile.com/file/8196341150/RTC_I2C.rar.html
برای اینکه روی یه پایه دیگه بذارم باید از این استفاده کنم دیگه؟
[code=c]
#include <i2c.h>
#asm
.equ __i2c_port=0x12 // PORT D
.equ __sda_bit=1
.equ __scl_bit=0
#endasm
[/code]
ولی کدویژن به 2 تا آندرلاین اون 3 خط گیر میده.
ورژنش CodeVisionAVR V2.05.3
فکر منم درست شد. پس الان میتونم EEPROM رو هم با i2c راه بندازم. فقط یه سوال. باید یه SDA و SCL دیگه واسش تعریف کنم دیگه؟
ببینید داخل میکروی ATmega32 و اکثر میکروهای با پایه کم، فقط یک واحد سخت افزاری برای I2C هستش. اما برای شما مساله ای نیست.
همونطور که میدونید، توی ارتباط I2C میشه 1 مستر و 127 تا اسلیو داشت. یعنی شما می تونی 127 تا قطعه رو با یک واحد سخت افزاری I2C راه انداخت. شما آدرس DS1307 و EEPROM رو داخل برنامت تعریف کن. نیازی نیست 2 تا پایه دیگه استفاده کنی فقط ار همون SDA و SCL استفاده کن.
ببینید داخل میکروی ATmega32 و اکثر میکروهای با پایه کم، فقط یک واحد سخت افزاری برای I2C هستش. اما برای شما مساله ای نیست.
همونطور که میدونید، توی ارتباط I2C میشه 1 مستر و 127 تا اسلیو داشت. یعنی شما می تونی 127 تا قطعه رو با یک واحد سخت افزاری I2C راه انداخت. شما آدرس DS1307 و EEPROM رو داخل برنامت تعریف کن. نیازی نیست 2 تا پایه دیگه استفاده کنی فقط ار همون SDA و SCL استفاده کن.
خب اینجوری اگه آدرس بدم که باید با رجیستر ها کار کنم فقط. با توابع آماده مثلا rtc_get_time نمیشه کار کنم. یعنی بگم اگه ack اینجوری شد اونجوری شد فلان کارو کن :sad:
برای اینکه روی یه پایه دیگه بذارم باید از این استفاده کنم دیگه؟
[code=c]
#include <i2c.h>
#asm
.equ __i2c_port=0x12 // PORT D
.equ __sda_bit=1
.equ __scl_bit=0
#endasm
[/code]
ولی کدویژن به 2 تا آندرلاین اون 3 خط گیر میده.
ورژنش CodeVisionAVR V2.05.3
از کتابخونه کدویژن استفاده نکن خودت یکی براش بنویس.
تو سایت آقای کی نژاد هستش آموزشش. نگاهش کن اگر نتونستی بنویسی بگو من فایل خودم رو برات بزارم. اضافه شده در تاریخ :
نوشته اصلی توسط سامان تقی پور
خب اینجوری اگه آدرس بدم که باید با رجیستر ها کار کنم فقط. با توابع آماده مثلا rtc_get_time نمیشه کار کنم. یعنی بگم اگه ack اینجوری شد اونجوری شد فلان کارو کن :sad:
\
خب خودوتو محدود نکن. یکی از بدی های کدویژن همینه.
ارتباط I2C هم خیلی رجیستر نداره. 2 تا رو اول مقدار میدی. بعدش برحسب مقدار یکی از رجیسترا، اون یکی رو هم مقدار میدی !
دیدگاه