اطلاعیه

Collapse
No announcement yet.

استفاده از SRF02 از طریق پروتکل I2C در بسکام

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

    استفاده از SRF02 از طریق پروتکل I2C در بسکام

    سلام به همگی
    تقریبا یه ماهه که سر این موضوع علافم!!!! هیچ جای اینترنت هم چیزی راجبش که به دردم بخوره پیدا نکردم. هرچی هم که پیدا کردم یا با سریال ارتباط برقرار کرده بود یا با یه زبان برنامه نویسی دیگه. :angry: حالا برنامه کامل رو به همراه یه سری توضیح(که فکر کنم ناقصه و شما هم باید کمک کنید تا کاملشون کنیم) براتون میزارم تا شما هم مثل من بیخودی علاف نشید. بازم میگم که شاید توضیحات ناقص یا شایدم غلط باشه، پس اگه کسی میتونه توضیحات رو تصحیح یا کامل بکنه، حتما این کار رو بکنه.
    1. این تیکه احتیاجی به توضیح نداره.
    $regfile = “m32def.dat"
    $crystal = 1000000
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , Rs = Portb.5 , E = Portb.6
    2. اینجا پایه های دیتا و کلاک I2C رو تعریف میکنیم. البته باید حتما همون پایه هایی باشن که تو دیتا شیت آی سی به عنوان sda و scl هستند و نمیشه به فرض تو اینجا به porta.0 و porta.1 تعریف کرد.

    Config Sda = Portc.0
    Config Scl = Portc.1
    3. احتیاجی به توضیح نداره
    Dim X As Integer , Y As Integer , Z As Word
    Cursor Off
    Do
    4. قبل از هر چیزه دیگه ای باید I2C رو به راه بندازید که با این دستوره
    I2cstart
    5. اینجا برای ارتباط با ماژول، آدرس ماژول رو به صورت یک بایت به خط I2C ارسال میکنیم که در SRF02 به صورت پیش فرض آدرس &HE0 هست
    I2cwbyte &HE0
    6. حالا باید با بخش کنترل ماژول ارتباط برقرار کنیم که بتونیم بهش دستور بدیم
    I2cwbyte &H00
    7. حالا باید به بخش کنترل ماژول بگیم واحد اطلاعاتی که قراره برامون بفرسته چی باشه؟ (سانتی متر، اینچ یا میکرو ثانیه) که تو اینجا سانتی متره
    I2cwbyte &H51
    8. هر چه قدر که فکر کردم فلسفه این تیکه رو نفهمیدم که چرا باید باشه؟ اول که ننوشتم کار نکرد و مأیوس شدم ولی بعد که استفاده کردم کار کرد!!! اگه کسی میدونه بگه تا ما هم خبردار بشیم
    I2cstop
    I2cstart
    9. حالا دوباره با ماژول ارتباط برقرار میکنیم، چون تو 2 تا خط قبل ارتباط رو قطع کردیم و دوباره وصل کردیم
    I2cwbyte &HE0
    10. الآن دیگه با بخش کنترل ماژول ارتباط برقرار نمیکنیم چون فقط برای اینکه به ماژول بگیم فاصله رو اندازه بگیره ازش استفاده میکنیم. حالا باید بریم از رو ماژول اطلاعات رو بخونیم، اما یه مشکلی هست! اونم اینه که ماژول اطلاعات رو در قالب بایت ارسال میکنه و متغیر بایتی محدودیت با کران بالای (حداکثر) 255 داره و برای مثال اگه فاصله 3 متر یا همون 300 سانتی متر باشه توی اطلاعاتی که ماژول ارسال میکنه جا نمیشه. بنابراین ماژول اطلاعات رو در قالب دو بایت به ما میده. پس باید اطلاعات رو از 2 تا آدرس روی ماژول بخونیم و بعد با استفاده از یک فرمول که فکر کنم مختص این ماژول هست اون تا عدد رو به فاصله تبدیل میکنیم. فرقی نمیکنه که اول از روی کدوم آدرس اطلاعات رو بخونید حتی تو فاصله های کم فقط دومی رو بخونید کافیه. اول این دستور رو، که آدرس حافظه ای رو که یکی از اون اعداد توشه به خط I2C ارسال میکنیم بعد منتظر میمونیم تا ماژول اون عدد رو برامون ارسال کنه که تو اینجا توی X ذخیره میکنه و میتونه هر چیز دیگه ای هم باشه. تو دیتا شیت نوشته باید 65 میلی ثانیه صبر کنید بعد اطلاعات رو بگیرید اما چون دستور I2creceive تا وقتی که اطلاعات رو نگیره نمیره خط بعدی، دیگه از تأخیر استفاده نکردم. فقط توجه کنید که اطلاعات با نام ماژول ارسال میشه و به خاطر اونه که تو خط دریافت اطلاعات آدرس ماژول رو نوشتم
    I2cwbyte &H02
    I2creceive &HE0 , X
    11. ؟؟؟؟؟؟؟؟؟
    I2cstop
    I2cstart
    12. حالا اون یکی عدد رو از روی ماژول میخونیم و توی Y قرار میدیم. چون تو بخشه قبلی فقط یکی از اعداد رو خوندیم. این عددی که اینجا میگیریم همونیه که میگم تو فاصله های کم جوابمون رو میده
    I2cwbyte &H03
    I2creceive &HE0 , Y
    13.
    I2cstop
    Cls
    14. این دو خط همون فرمول تبدیل اون تا عددی که گرفتیم به فاصله است
    Z = X * 256
    Z = Z + Y
    15. اینجا هم که فاصله رو روی LCD اعلام میکنه و بعد از نیم ثانیه دوباره همه مراحل رو تکرار میکنه
    Lcd Z
    Waitms 500
    Loop
    چون برنامه تیکه تیکه بین متن پراکنده شده اینجا یه جا گذاشتم تا اگه خواستید کپی کنید
    $regfile = ”m32def.dat”
    $crystal = 1000000
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , Rs = Portb.5 , E = Portb.6
    Config Sda = Portc.0
    Config Scl = Portc.1
    Dim X As Integer , Y As Integer , Z As Word
    Cursor Off
    Do
    I2cstart
    I2cwbyte &HE0
    I2cwbyte &H00
    I2cwbyte &H51
    I2cstop
    I2cstart
    I2cwbyte &HE0
    I2cwbyte &H02
    I2creceive &HE0 , X
    I2cstop
    I2cstart
    I2cwbyte &H03
    I2creceive &HE0 , Y
    I2cstop
    Cls
    Z = X * 256
    Z = Z + Y
    Lcd Z
    Waitms 500
    Loop
    اینم شماتیک مدار

    این همه چیزی بود که میتونستم بگم. البته شاید برای یه عده زیادی حوصله سر بر باشه، اما باید این نکته رو در نظر گرفت که ممکنه یکی باشه که این چیزایی که گفتم براش تازه باشه. دیتا شیت رو هم یه نگاهی بندازید.
    http://www.robot-electronics.co.uk/htm/srf02techI2C.htm
    به هر حال امیدوارم که به دردتون خورده باشه.

    #2
    پاسخ : استفاده از SRF02 از طریق پروتکل I2C در بسکام

    سلام دوست عزیز
    من خودم دارم AVR را از صفر یاد میگیرم.کتاب علی کاهه را گرفتم و میخونم ولی درمورد I2c هیچ چیز نفهمیدم.مثالهای خود کتاب هم خیلی ساده است و بطور عملی میشه برام توضیح بدی ازت ممنونم

    تو چند جای دیگه تو انجمن مطرح کردم ولی کسی جوابمو نداد.حقیقتش I2C میدونم چیه.ولی اینکه چه جوری ارتباط پیدا کردن میکرو با تجهیز نحوه دریافت و ارسال دیتا و اون ادرسها را نمیدونم چه جوری هستش

    دیدگاه

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