اطلاعیه

Collapse
No announcement yet.

کمک i2c

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کمک i2c

    سلام ..خسته نباشید
    یک سوال فوری فوتی داشتم
    برای پروتکل 2 سیمه i2c فرم دستور برای ارسال به این صورته : i2csend slave ,var
    من در تمام مثال ها دیدم آدرس اسلیو را یک عدد هگز مثلh40& قرار می دهند.

    1-) اول اینکه مقدار این آدرس را از کجا می آورند

    2-) دوم اینکه من می خواهم ارتباط بین یک میکرو به عنوان (master )با دو میکرو دیگر به عنوان (slave)
    برقرار کنم بدون اینکه تداخلی رخ دهد(یعنی چیزی را که برای میکروی شماره 1 میفرستم میکروی شماره ی 2 دریافت نکند وبلعکس)
    **بطور کلی یک بار چیزی را که می خواهم برای میکرو گیرنده ی شماره1بفرستم مثلا با آدرس H40& هم برای گیرنده و هم برای فرستنده وبعد از یک توقف کوتاه چیز دیگری را برای میکروی گیرنده ی 2 مثلا با آدرس Hea& هم برای گیرنده ی 2 وهم فرستنده.(((ولی این کار را که می کنم جواب نمیده)))
    اگه با یک مثال عملی برام توضیح بدی خیلی ممنون میشم..
    با تشکر
    ehmidreza@yahoo.com

    #2
    پاسخ : کمک i2c

    سلام دوست عزیز اول میکروتونو مشخص کنید دوم باید بگم که شما ظاهرا پروتوکل ارتباطی رو نمیدونید.توی پست های دیگه بچه ها توضیح دادن :job: اما من دوباره به صورت کلی براتون نحوه ارتباطو میگم.
    transmit:

    start;
    -ack
    send address
    ack
    send register
    ack
    send data
    ack
    stop
    شما نمیتونید بیشتر از یک مستر داشته باشید(البته روش های هست که شرکت فیلیپس یا ان ایکس پی و.. ارایه دادن به صورت مولتی مستر) اما بسیار مشکل هستش.همونطور که در بالا گفتم شما ابتدا باید استارت رو توسط مستر که میکروتونه بزنید بعد آدرس 7 بیتی اسلیو(اگه آیسی یا سنسوره به شیتش مراجعه کن)و اگر یک میکرو دیگه است خودت باید مقدار دهی کنی و بهش بفهمونی که اسلیو هستش.خوب آدرس 7 بیتی رابایدبا یک بیت اضافه تر که نشون دهنده رید و رایت هستش بفرستی(8بیت)فرض کن آدرس 7 بیتی اسلیو 0x68هگز هستش اگه بخوای فرمان رایت بفرستی باید 0xd0ورید 0xd1روبفرستی که بیت اول نشونه رایت ویا ریدینگ هستش.حالا بعد از دریافت ackباید آدرس رجیستر داخلی سنسورت فرضا رو بفرستی و دوباره مقداری که میخوای داخل رجیسترت بنویسی رو بفرستی ودرآخر فرمان استوپ.برای خوندن هم راههای مختلفی هستش :nice:
    k

    دیدگاه


      #3
      پاسخ : کمک i2c

      سلام خسته نباشید
      قبل از هر چیز بابت پاسختون ممنون
      میکروی فرستنده(مستر)atmega16
      2میکروی گیرنده (اسلیو) atmega8
      ارتباط بین یک میکرو با دو میکروی دیگر هست
      سوال من این هست که این آدرس slave که توی بعضی از مثال ها هست طبق چه چیزی گذاشته شده اند(از کجا آمدند)

      همین چیزای را که گفتید ((((مقدار دهی کنی و بهش بفهمونی که اسلیو هستش.خوب آدرس 7 بیتی رابایدبا یک بیت اضافه تر که نشون دهنده رید و رایت هستش بفرستی(8بیت)فرض کن آدرس 7 بیتی اسلیو 0x68هگز هستش اگه بخوای فرمان رایت بفرستی باید 0xd0ورید 0xd1روبفرستی که بیت اول نشونه رایت ویا ریدینگ هست)))) را بی زحمت یک مثال عملی بزنی ممنون می شم.

      دیدگاه


        #4
        پاسخ : کمک i2c

        دوست عزیز فایل ds1307.lib رو با نوت پد باز کن.البته اگه با کدویژن کارمیکنید.
        این واسه رایت کردن(البته در حالت مستر رایتینگ)

        void rtc_write(unsigned char address,unsigned char data)
        {
        i2c_start(); پالس استارت
        i2c_write(0xd0); ارسال 0xd0
        i2c_write(address); ارسال رجیستر داخلی اسلیو مد نظر ما
        i2c_write(data); ارسال دیتایی که میخواهیم درون رجیستر قرار گیرد
        i2c_stop(); پالس استاپ
        }

        اینم واسه ریدینگ (البته در حالت مستر ریدینگ)

        unsigned char rtc_read(unsigned char address)
        {
        unsigned char data;
        i2c_start(); پالس استارت
        i2c_write(0xd0); ارسال 0xd0
        i2c_write(address); ارسال رجیستر داخلی اسلیو مد نظر ما
        i2c_start(); دوباره ارسال پالس استارت
        i2c_write(0xd1); ارسال 0xd1 برای خوندن
        data=i2c_read(0); خواندن و ذخیره کردن
        i2c_stop(); استاپ
        return data; برگرداندن اطلاعات به ما
        }

        البته برای اسلیوتون موقع درست کردن برنامه به قسمت twi رفته وگزینه های
        two wire enable
        generate ack puls
        slave address آدرس اسلیو رو اینجا بده خودت 1آدرس 7 بیتی انتخاب کن اما برای میکرو دومت باید آدرس دیگه ای بدی که قاطی نشن با هم
        ودرنهایت سرعت انتقال اطلاعات یا حتی میتونی وقفه هم فعال کنی
        البته قبل از این کارا میتونی یک سرچ کوچولو تو نت بزنی که اصلا i2c چطور کار میکنه بعد خیلی راحت میتونی براش برنامه بنویسی.اگه با سنسور کار میکنی که مشکلی نیست اما واسه انتقال دیتای میکرو به میکرو میتونی از رابطه های ساده تری مثل uart استفاده کنی

        اینایی که گفتم کسی زیاد به این واضحی نمیگه باید دیتاشیت ومنوال ها رو مطالعه کنی البته انتقال اطلاعات بالا درحالت مستر هستش کلا اگه از اسلیو بخوای بخوونی که دیگه بازم.......................... مطالعه :biggrin:
        امیدوارم کارساز بوده باشه :mrgreen:
        k

        دیدگاه

        لطفا صبر کنید...
        X