اطلاعیه

Collapse
No announcement yet.

مشکل در برقراری ارتباط i2c با ماژول GY-271

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

    مشکل در برقراری ارتباط i2c با ماژول GY-271

    سلام به همگی بعد خیلی وقت.

    میخواستم ماژول قطب نمای GY-271 رو راه بندازم پس رقتم دیتاشیت تو بخش نحوه ارتباط.

    راستش درباره ارتباط با ماژول مشکلی ندارم. پایه و اساس ارتباط i2c رو هم بلدم. مشکل اصلی من با دستورات بسکامه.

    اول ارتباط با ماژول رو توضیح بدم که کاملا براتون روشن باشه.

    این ماژول 13 تا رجیستر داره که شما میتونید تو سه تا از اونا بنویسین و بخونین. و بقیه فقط قابل خوندن هستن.
    این عکس موضوع رو روشن میکنه:


    آدرس 7 بیتی ماژول 0x3E هست ( که تو بسکام میگن &H3E ) بعلاوه یه بیت که نشون میده میخای بخونی یا بنویسی.
    پس اگه بخوای بنویسی آدرس میشه 0x3C اگه بخوای بخونی آدرس 0x3D رو باید انتخاب کنی.
    پس دو تا آدرس داریم.

    برای نوشتن در یک رجیستر اینارو باید پشت سر هم بفرستی:

    کد:
    0x3C (write address) 0x05(register number - here points to the sixth register) 0x00 (the data to be written into the register)
    لازم به ذکره که اگه محتوای یه رجیستر کامل خونده بشه register pointer (که یادش میمونه با کدوم رجیستر کار داری) محتواش رو یه دونه اضافه میکنه. و دیگه لازم نیست دوباری بگی با کدوم رجیستر کار داری.

    برای تنظیم محتوای register pointer مثل بالایی مینویسی ولی دیتا (اون سومیه) رو نمینویسی.

    برای خوندن اینارو میفرستی:

    کد:
    0x3D (read address) 0x06 (number of the bytes to read)
    ولی قبلش باید register pointer رو اون رجیستری که میخوای شروع بکنی به خوندن تنظیم کنی.

    __________________________________________________ ____________

    و اما مشکل:

    من اگه میتونستم به این بسکام بفهمونم که همونایی که بالا گفتم رو رو باس i2c بفرسته بعد بگم 6 بایت بخون خیلی خوب میشد.

    ولی من نمیدونم چجوری بهش بگم:

    1- فلان بایت رو ارسال کن. ( مثلا همون 0x05 که گفتم )
    2- فلان تعداد بایت رو بگیر رو تو این متغیر بریز.

    قربون همتون اگه این دوتا رو برام روشن کنین.

    در ضمن بهتره یه نگاهی هم به دیتاشیت بندازین. شایت اینایی که من گفتم رو اشتباهی متوجه شده باشم و تا آخرش راه رو غلط بریم.
    اگر هم دیتاشیت خواستین برین تو گوگل بزنین : HMC5883L datasheet
    [glow=green,2,300][b]بشر ممکن الخطاست
    درخت هرچه پربار تر سر به زیر تر[/glow]

    #2
    پاسخ : مشکل در برقراری ارتباط i2c با ماژول GY-271

    کسی اطلاعی نداره؟
    [glow=green,2,300][b]بشر ممکن الخطاست
    درخت هرچه پربار تر سر به زیر تر[/glow]

    دیدگاه


      #3
      پاسخ : مشکل در برقراری ارتباط i2c با ماژول GY-271

      مطالبی که درباره ارتباط i2c و ماژول GY-271 گفتید کاملا درسته

      برای برقراری ارتباط i2c در بسکام اول باید پایه های SDA و SCL رو config کنید و i2cinit کنید

      کد:
      Config Scl = Portb.4
      Config Sda = Portb.5
      I2cinit
      البته پورت ها رو طبق مدار خودتون تغییر بدید

      بعد از این هر بار که خواستید روی یک رجیستر چیزی بنویسید :

      کد:
      I2cstart
      I2cwbyte (Slave Address)
      I2cwbyte (Register Address)
      I2cwbyte (Value)
      I2cstop
      و هر بار که خواستید یک رجیستر رو بخونید و توی یه متغیر بریزید . یادتون باشه که متغیر از نوع byte رو تعریف کنید

      کد:
      Dim Value As Byte
      و بعدش کد زیر رو هر بار اجرا کنید :

      کد:
      I2cstart
      I2cwbyte (Slave Address)
      I2cwbyte (Register Address)
      I2cstart
      I2cwbyte (Slave Address+1)
      I2crbyte Value , Nack
      I2cstop
      در صورتی که بخواهید چند تا رجیستر پشت سر هم رو توی یه ارتباط بخونید :

      کد:
      I2cstart
      I2cwbyte (Slave Address)
      I2cwbyte (Register Address)
      I2cstart
      I2cwbyte (Slave Address+1)
      I2crbyte Value1 , ack
      I2crbyte Value2 , ack
      I2crbyte Value3 , ack
      I2crbyte Value4 , ack
      I2crbyte Value5 , ack
      I2crbyte Value6 , Nack
      I2cstop

      دیدگاه

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