اطلاعیه

Collapse
No announcement yet.

تابع i2c_init چگونه کار میکند؟

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

    تابع i2c_init چگونه کار میکند؟

    سلام.

    خواستم بدونم تابع i2c_init چطور کار میکنه و اصلاً چی کار میکنه ؟ توی محیط کدویژن جزئیات این تابع در دسترس نیست و تابع هم از نوع void هستش !

    راستش مشکلم اینکه می خوام بدونم کی باس i2c وصل میشه و یا مثلاً چه موقع ای سی EEprom at24cxx به باس وصل میشه و از وجود و یا عدم وجودش اطلاع پیدا کنم.


    خیلی ممنون بابت وقتی که میزارید.

    #2
    پاسخ : تابع i2c_init چگونه کار میکند؟

    متاسفانه منم نتونستم چیزی گیر بیارم. ولی فکر میکنم:
    • [li]باید ریجستر TWBR رو مقدار دهی کنه[/li]
      [li]TWCRهمین طور[/li]
      [li]TWSR همین طور[/li]

    توی دیتاشیت گفته چطور استفاده میشن.

    دیدگاه


      #3
      پاسخ : تابع i2c_init چگونه کار میکند؟

      نوشته اصلی توسط Rohalamin
      متاسفانه منم نتونستم چیزی گیر بیارم. ولی فکر میکنم:
      • [li]باید ریجستر TWBR رو مقدار دهی کنه[/li]
        [li]TWCRهمین طور[/li]
        [li]TWSR همین طور[/li]

      توی دیتاشیت گفته چطور استفاده میشن.
      مرسی که جواب دادید . کسی نظر دیگه ایی و یا نمونه کدی و یا اصلاً طرز کار این تابع رو سراغ نداره؟

      ممنون

      دیدگاه


        #4
        پاسخ : تابع i2c_init چگونه کار میکند؟

        نوشته اصلی توسط ashkimkata
        مرسی که جواب دادید . کسی نظر دیگه ایی و یا نمونه کدی و یا اصلاً طرز کار این تابع رو سراغ نداره؟
        توی ویزادش چیا هست؟
        احتمال زیاد همش هموناست.

        دیدگاه


          #5
          پاسخ : تابع i2c_init چگونه کار میکند؟

          ببین دوست من اصولا کدویژن بین i2c و twi فرق گذاشته .بدین ترتیب که i2c یک حالت bit banged نرم افزاری هستش ولی twi اینطوری نیست .
          شما اگر دقت کرده باشید پایه های i2c رو به راحتی می تونید روی هر پینی تنظیم کنید ولی پایه های TWI برای هر میکرو مشخصه وقابلیت تغییر نداره.
          پس تاحالا فهمیدیم i2c همون twi هستش اما درایور نرم افزاری برای ارتباط با اسلیو هست و معمولا نمی تونه مستر باشه.
          این هم کد اسمبلی مربوط به i2c_init که خودش گویای همه چیزه.
          کد:
          	.global i2c_init
          	.func i2c_init
          i2c_init:
          	cbi SDA_DDR,SDA		;release SDA
          	cbi SCL_DDR,SCL		;release SCL
          	cbi SDA_OUT,SDA
          	cbi SCL_OUT,SCL
          	ret
          	.endfunc
          براي جوينده ي علم محدوديتي نيست. "ولو بالسين"

          دیدگاه


            #6
            پاسخ : تابع i2c_init چگونه کار میکند؟

            کار این تابع در واقع تعیین جهت پینهای میکرو هست.
            برای اتصال حافظه EEPROM میتونید از نتیجه تابع I2C_start استفاده کنید

            while(!i2c_start()) //wait here until bus becomes free
            {#asm("wdr&quot}

            دیدگاه

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