انجمن های گفتگوی روبوایکیو

لطفا به سیستم وارد یا ثبت‌نام کنید.

لطفا برای ورود نام کاربری و رمز عبورتان را وارد نمایید

لطفا برای استفاده بهتر از انجمن، ثبت نام کنید!

نویسنده موضوع: اتصال چند اسیلو به مستر از طریق پروتوکل i2c  (دفعات بازدید: 2388 بار)

0 کاربر و 1 مهمان درحال دیدن موضوع.

آفلاین sa6565

  • کاربر جدید
  • *
  • ارسال: 10
  • امتیاز: 0
    • ديدن مشخصات
با سلام خدمت عزیزان و سروران مکرم
من در حین برنامه نویسی هام به این مشکل بر خوردم که مثلا اگه بخواهیم چند سنسور که از پروتوکل i2c پشتیبانی می کنند استفاده کنیم یا اینکه مثلا چند میکرو رو به عنوان اسلیو درنظر داشته باشیم و بخواهیم دستورات و اطلاعاتی رو به هر کدام به طور مشخص ارسال و یا دریافت کنیم چه باید کرد؟ و
2- این آدرس از کجا قابل دریافت هست؟
3- آیا میشضه به هر اسلیوی به طور دلخواه آدرس داد؟
لطفا عزیزانی که اطلاع دارند هم در بسکام و هم در کدویژن راه حل رو مطرح کنند
ممنون
در پناه حق تعالی

آفلاین محمد پورخلیلی

  • یه دنگ از سایت به نامشه
  • *****
  • ارسال: 893
  • امتیاز: 628
    • ديدن مشخصات
    • سپهر تراشه پارس
سلام به هر تعداد که خاستی میتونی SLAVE وصل کنی فقط باید ادرسها با هم یکسان نباش و ظرفیت خازنی از یه حدی بیشتر نشه، سنسورهایی مثل MPU6050 که ادرس ثابت دارن با روش اتصال معمول نمیشه بیش از یکی به کار برد، برای میکروها هم که خودتون میتونین ادرس بدین. راستی برای اون سوالتم SHT10 اگر اشتباه نکنم STANDARD I2C نیست TWO WIRE هست که ادرس نداره و شما بجای ادرس دستور رو میفرستین و ماژول به شما جواب میده، صفحات 6 و 7 دیتاشیت نحوه ارتباط رو گفته.
چطور بپرسیم ؟    http://forum.roboeq.ir/index.php?topic=1902

آفلاین sa6565

  • کاربر جدید
  • *
  • ارسال: 10
  • امتیاز: 0
    • ديدن مشخصات
پاسخ : اتصال چند اسیلو به مستر از طریق پروتوکل i2c
« پاسخ #2 : 01 اردیبهشت, 1395, 10:39:14 »
با سلام و تشکر از همه عزیزان خصوصا آقای پور خلیلی که زحمت کشیدند و سوالم رو پاسخ دادند و با عرض تبریک ولادت مولی علی (ع) و آرزوی توفیقات روز افزون زیر سایه رحمت الهی
من ممنونم راهنماییتون خیلی خوب بود و باز با عرض شرمندگی سوال دیگری داشتم
من می خوام با آی سی ds1307 رو از طریق فرامین i2csend  و i2creceive کار کنم اگه ممکنه راهنماییم کنید . من در زیر فرامین مربوط به این آی سی که از طریق باس i2c کار هست رو می نویسم اگه ممکنه برای توضیح و مثال معادل اینها رو ذکر کنید تا بهتر متوجه بشم.من با بسکام کار می کنم
i2cstart
I2cwbyte &hd0
I2cwbyte 0
I2cstart
I2cwbyte &hd1
I2crbyte _sec , Ack
I2crbyte _min , Ack
I2crbyte _hour , Ack
I2crbyte Weekday , Ack
I2crbyte M_day , Ack
I2crbyte M_month , Ack
I2crbyte _year , Nack
I2cstop

ممنون
موفق و منصور و سلامت باشید ان شاءالله
در پناه حق تعالی

آفلاین محمد پورخلیلی

  • یه دنگ از سایت به نامشه
  • *****
  • ارسال: 893
  • امتیاز: 628
    • ديدن مشخصات
    • سپهر تراشه پارس
پاسخ : اتصال چند اسیلو به مستر از طریق پروتوکل i2c
« پاسخ #3 : 02 اردیبهشت, 1395, 09:14:58 »
سلام کار با این ای سی خیلی ساده ، طبق جدول 2 دیتاشیت 8 تا رجیستر مهم داره که به ترتیب از چپ به راست 7 تا اولی به این صورت هستن:
second    minute    hour    dayOfWeek    dayOfMonth    month    year
رجیستر هشتم برای تنظیمات ای سی که صفحه 9 دیتاشیت توضیح داده.
با این 3 دستور (که بیت هشتم ادرس 0 هست => 0xd0 به منظور نوشتن) نشانگر رجیستر ها رو روی 0 یا همون ثانیه قرار میدی:
i2cstart
I2cwbyte &hd0
I2cwbyte 0

با دستورات بعدی (که بیت هشتم ادرس 1 هست => 0xd1 به منظور خواندن ) 7 بیت دیتا رو به ترتیب از ماژول میخونیم که با هر بار خوندن از ماژول و فرستادن دستور ack یک شماره به نشانگر رجیسترها افزوده میشه. در اخر هم دستور توقف.

I2cstart
I2cwbyte &hd1
I2crbyte _sec , Ack
I2crbyte _min , Ack
I2crbyte _hour , Ack
I2crbyte Weekday , Ack
I2crbyte M_day , Ack
I2crbyte M_month , Ack
I2crbyte _year , Nack
I2cstop

پیشنهاد من اینه اگر میخاین الکترونیک رو ادامه بدین اردوینو کار کنین. فایلی که پیوست کردم برای خوندن ماژول با اردوینو هست. اگر قصد خرید اردوینو ندارین برنامه رو با کامپایلر اردوینو روی مگا 8 بریزین.
به راحتی با یک خط دستور زمان رو میخونین:
  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
و یا با این دستور ساعت رو تنظیم میکنین:
  setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
« آخرين ويرايش: 02 اردیبهشت, 1395, 09:21:07 توسط محمد پورخلیلی »
چطور بپرسیم ؟    http://forum.roboeq.ir/index.php?topic=1902

آفلاین sa6565

  • کاربر جدید
  • *
  • ارسال: 10
  • امتیاز: 0
    • ديدن مشخصات
پاسخ : اتصال چند اسیلو به مستر از طریق پروتوکل i2c
« پاسخ #4 : 03 اردیبهشت, 1395, 06:51:29 »
با سلام و عرض تشکر بابت توضیحات عالیتون
ممنونم از توضیحات عالیتون منتها بنده می خوام که دستوراتی که در پیام بالا نوشته شده و اطلاعات رو به باس i2c میفرسته و از اون دریافت می کنه رو طوری بنویسم که آدرس اسلیو معین بشه من در قسمت اول که فرمان نوشتن ارسال میشه و بعد آدرس رجیستری حافظه ارسال میشه مشکلی ندارم منتها هر چی دیتاشیت رو خوندم و سعی کردم از مرحله ارسال دستور خواندن ببعد نشد که از دستورات i2csend و i2creceive استفاده کنم.اگه ممکنه این قسمت رو راهنمایی کنید
ممنون موفق و منصور و سلامت باشید ان شاءالله
در پناه حق تعالی

آفلاین محمد پورخلیلی

  • یه دنگ از سایت به نامشه
  • *****
  • ارسال: 893
  • امتیاز: 628
    • ديدن مشخصات
    • سپهر تراشه پارس
پاسخ : اتصال چند اسیلو به مستر از طریق پروتوکل i2c
« پاسخ #5 : 03 اردیبهشت, 1395, 10:44:32 »
سلام من بسکام کار نکردم اما تصویر زیر برای خوندن از ای سی هست :




به ترتیب از چپ:
1- استارت ارتباط
2- 7 بیت ادرس ای سی ds1307 + یک بیت که مشخص کننده خواندن یا نوشتن هست. در اینجا برای خواندن ساعت باید 1 باش.
3- ای سی ack میفرسته
4- و سپس ای سی شروع میکنه به ارسال دیتا، دیتا ها رو از مکان رجیستر پوینتر میفرسته و با هر بایت ارسالی یه شماره به رجیستر پوینتر اضاف میشه، برای اینکه اطلاعات ای سی رو کامل بخونی لازمه که قبل از خوندن ساعت رجیستر پوینتر رو طبق روش پایین روی 0 قرار بدی.
5- بعد از دریافت اخرین بایت مثلا ثانیه میکروکنترلر نباید ack بفرسته تا بفهمونه دیتا کافیه و در انتها دستور stop بفرسته.

خب اینم برای ارسال دیتا از میکروکنترلر به ای سی هست که برای تنظیم شمارنده رجیستر پوینتر و تنظیم ساعت و تنظیمات کاربرد داره.



که بر خلاف خوندن دیتا بیت هشتم ادرس 0 هست.
از چپ میکروکنترلر بعد از ارسال ادرس ای سی یه پیغام ack میفرسته
بعد میکروکنترلر یه بایت دیتا ارسال میکنه که مشخص کننده رجیستر پوینتر هست
اگر میکروکنترلر همینجا ارتباط رو قطع کنه دیگه ای سی همون یه بایت رو به عنوان شمارنده رجیستر پوینتر ذخیره میکنه
مثلا اگر بایت رجیستر پوینتر 0 باش و پس از اون شما از دستور خواندن دیتا استفاده کنین میتونین تمام دیتا تاریخ
و ساعت رو از ای سی بخونین.
و اگر میکروکنترلر ارتباط رو متوقف نکنه میتونین با ارسال 8 بایت پشت سر هم تاریخ و ساعت رو تنظیم کنین ، همچنین تنظیمات رو.
چطور بپرسیم ؟    http://forum.roboeq.ir/index.php?topic=1902

آفلاین EHSANMICRO

  • کاربر جدید
  • *
  • ارسال: 1
  • امتیاز: 0
    • ديدن مشخصات
سلام در باب راه اندازی همین آی سی ساعت 1307 سوالی در کار برام به وجود اومده
من الان از یه هدر آماده سنسور SHT دارم استفاده میکنم و روی باسI2C بصورت جدا راه اندازیش کردم و جواب هم گرفتم و دما و رطوبت رو دقیق هم بهم نشون داد
الان ک هم این سنسور و هم ساعت1307 رو   روری باس I2C راه اندازی میکنم و توابع READ  وGET برا ساعت و توابع خواندن دما و رطوبت رو توی حلقه وایل میخونم و میخوام روی LCD نشون بدم هیچی نشون نمیده
ایراد کجاست؟؟؟؟نمیشه این دوتارو روی باس خوند وباید مثل با دوتامیکرو بخونم ؟