نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
أَللّهُمَّ ارْزُقْنی شَفاعَةَ الْحُسَیْنِ یَومَ الْوُرُودِ
مهدی دمیرچیلو

آموزش پروژه محور lpc1768 مبحث i2c master mode

363

به نام خدا : بعد گذشت 2 ماه تقریبا مطلب I2C تموم شده تقریبا ( 1/4 امش البته تموم شده تا کنون )، تو این مطلب میخوام به آموزش پروژه محور lpc1768 مبحث i2c master mode بپردازم، آموزش I2C ک میکرو در مد MASTER هستش، آموزش خود I2C بر مبنای دیتاشیت رو هم دارم نواقصش رو رفع میکنم ( چون طی 2 ما نوشته شده، ممکنه مشکلاتی داشته باشه و هنوز بعضی متن ها هستن که ترجمه نکردم و بعضی اصطلاحات رو دقیقا کاربردشون رو نمیدونم )؛ تو این مطلب فقط کتابخونه رو قرار میدم و توضیح توابع و نحوه استفاده و …

آموزش پروژه محور lpc1768 مبحث i2c master mode

آموزش پروژه محور lpc1768 مبحث i2c master mode


این کتابخونه شامل توابع زیر هستش :

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

I2C0Init - I2C1Init - I2C2Init
اولین تابعی که باید ازش استفاده کنید، همین تابع راه اندازی i2c هستش، که چون 3 تا i2c داریم، لذا 3 تا هم تابع راه انداز هم داریم، این توابع یدونه پارامتر داره که اونم برا تعیین این هستش که میخواین از وقفه استفاده کنید یا خیر، که ساده ترین راه استفاده از وقفه هستش، تمام کارها به صورت خودکار انجام میشه ولی خب اگه کسی بخواد کتابخونه ای بنویسه و یا تابعی به یه کتابخونه اضافه کنه و ... یکم براش شاید سخت باشه که از توابع وقفه بخواد استفاده کنه مگه این که بخواد خود توابع وقفه این کتابخونه ( i2c ) رو تغییر بده که این نیازمند آشنایی کامل با مبحث i2c در lpc1768 هستش.
نکته : همون طور که در مطالب آموزش i2c میکرو 1768 توضیح دادم، I2C1 دارای 2 جفت پایه هستش در میکروکنترلر 1768 که از هر کدوم که دوست داشتین میتونید استفاده کنید، در حالت عادی از پایه های P0_19 و P0_20 استفاده میشه ولی اگه دوست داشتین از پایه های P0_0 و P0_1 استفاده کنید باید برین به کتابخونه و تابع I2C1Init وبعد کدی شبیه کد زیر میبینید و بعد جای اون 0 و 1 ها رو فقط عوض کنید - فقط همین.

توابع راه اندازی I2C در مد MASTER فرستنده گیرنده با وقفه

I2C0_IRQHandler - I2C1_IRQHandler - I2C2_IRQHandler
اینم از توابع وقفه، ما با این توابع وقفه کاری نداریم، فقط خواستم بگم یه همچین توابعی هستن، که داخل خود کتابخونه تعریف شدن، ولی اگه شما نیاز داشتن میتونید این توابع رو تغییر بدین ( حالا بسته به کتابخونه ای که دارین مینویسینش )
I2CEngine
بعد از راه اندازی i2c، نوبت به ارسال داده میرسه، برای این کار شما اول باید کد زیر رو در فایل اصلی پروژتون ( همون فایلی که تابع main داخلش هستش ) قرار بدین، یا اگه دارین کتابخونه مینویسین داخل کتابخونه قرار بدین، کلا هر جا که از توابع وقفه i2c استفاده میکنید باید کدهای زیر رو داخلش قرار بدید ( البته این تابع برا وقتی هستش که میخواین از وقفه استفاده کنین ) :
که آرایه I2CMasterBuffer به آرایه دو بعدی هستش که 3 در 64 هستش، برای هر i2c یه بافر 64 تایی تعریف کرده، BUFSIZE هم یه ماکرو هستش که داخل کتابخونه تعریف شده و مقدارش 64 هستش؛ تو این آرایه اطلاعاتی که میخوایم ارسال بشه رو قرار میدیم؛ مثلا نحوه استفاده ازش به صورت زیر هستش ( البته من I2C0 رو مثال زدم در کد زیر و 3 تا دیتا میخوام ارسال بشه، لذا کد زیر رو نوشتم، مثلا اگه میخواستم از I2C2 استفاده کنم باید اون 0 های خونه اول رو 2 میکردم ) :
آرایه 2 بعدی I2CSlaveBuffer هستش که اطلاعات دریافتی داخلش ذخیره میشه و ما میخونیمش.
آرایه I2CReadLength برا تعیین تعداد دیتاهایی که باید خونده بشه هستش، مثلا 2 بهش بدید، 2 بایت دیتا خونده میشه فقط.
آرایه بعدی I2CWriteLength هستش که برا تعیین تعداد دیتا هایی هستش که باید نوشته بشن ( تعداد دیتاهایی که داخل بافر I2CMasterBuffer  نوشتیم )
توجه : در دو آرایه I2CReadLength  و I2CWriteLength اگه از I2C0 استفاده میکنید باید به خونه اول دیتا بدید، اگه از I2C1 باید به خونه دوم و اگه از I2C2 استفاده میکنید باید به خونه سوم دیتا بدید، برای مثال در کد زیر چون من از I2C0 استفاده میکنم، به خونه اول دیتا دادم :
بعد از این که طول دیتای دریافتی و ارسالی رو تعیین کردین و دیتاهای مد نظرتون رو داخل آرایه 2بعدی I2CMasterBuffer نوشتین، نوبت به فراخونی تابع I2CEngine میرسه، که این تابع دارای یه پارامتر به نام I2Cnumber هستش که شماره I2C یی که ازش استفاده میکنید رو باید بهش بدید؛ اگه میخواین از I2C0 استفاده کنید باید 0 بهش بدین و اگه از I2C1 میخواین استفاده کنین باید 1 بدین و برا I2C2 هم باید 2 بدین.
نحوه استفاده از این تابع و 4 آرایه فوق رو در ادامه با یک مثال توضیح میدم:
حالت 1) 4 بایت ارسال میکنیم ( 1 بایت آدرس اسلیو و 3 بایت دیتا )، دیتایی دریافت نمیکنیم :
حالت 2) 4 بایت ارسال میکنیم و 1 بایت دریافت میکنیم، نکته ای که هستش اینه که تعداد دیتاهایی که مینویسیم 4 تا هستش ولی به متغییر I2CWriteLength میگیم 3 تا بنویس - کلا دیتایی بخواین بخونین، این مورد رو باید حواستون باشه.

توابع راه اندازی I2C در مد MASTER فرستنده گیرنده بدون وقفه

I2CGetStatus
همونطور که از اسم تابع معلوم هستش، مقدار رجیستر وضعیت رو برا ما ارسال میکنه، پارامتر I2Cnumber هم شماره I2C هستش.
I2CStart - I2CRepeatedSTART - I2CStop
I2CStart : ارسال یه وضعیت START
I2Cnumber : شماره I2C
SlaveAddressWriteBit : آدرس SLAVE به همراه بیت WRITE

I2CRepeatedSTART : ارسال یه وضعیت Repeated START
I2Cnumber : شماره I2C
SlaveAddressReadBit : آدرس SLAVE به همراه بیت READ

I2CStop : ارسال یه وضعیت STOP
I2Cnumber : شماره I2C

I2CWrite - I2CRead

I2CWrite : ارسال 1 بایت.
I2Cnumber : شماره I2C
Data : دیتایی که میخوایم ارسال بشه.

I2CRead : دریافت 1 بایت، دیتای خونده شده return میشه.
I2Cnumber : شماره I2C
isLastDataRead : آیا آخرین بایتی هستش که میخویم بخونیم؟

I2CACK - I2CNACK

توابع I2CACK و I2CNACK : تعیین این که وضعیت ACK ارسال بشه یا NACK
I2Cnumber : شماره I2C

برای تمرین، میتونید به لینکهای زیر برید، که با همین کتابخونه نوشته شده اند :

  1. آموزش راه اندازی eeprom خارجی با lpc1768 ( تو این مطلب از I2C سخت افزاری و نرم افزاری استفاده کردم که پروژه نرم افزاریش بدرد شما نمیخوره و اون پروژه سخت افزاریش رو بخونید )
  2. پروژه ساعت ds3231 با میکروکنترلر آرم lpc1768 ( تو این مطلب از I2C نرم افزاری فقط استفاده کردم که بدرد این مطلب نمیخوره ولی خب دیدنش ظرر نداره )

فعلا یا علی.

حدیث تصویری

کلیپ زیر رو هم ببینید؛ خیلی قشنگه؛ پاسخ زیبای جانباز مدافع حرم به سوال میگن چرا رفتی؟

http://www.aparat.com/v/dvNu9

تعداد مطالب : 367 تا
جنگ ما فتح قدس را به همراه خواهد داشت. [ امام خمینی (ره) ]
بقیه جلسات :
این مطلب هیچ طبقه بندی یی ندارد!
ارسال دیدگاه
5
نظرات این مطلب بسته شده است.
  1. سجاد

    مهمان

    سجاد

    سلام وقتتون بخیر
    میشه برای راه اندازی سنسور sht20 با هدر بردLPC1768 راهنماییم کنید
    ممنون

  2. حجت

    مهمان

    حجت

    اقا مهدی می شه لطفاً در مورد راه اندازی sht20 با lpc1768 مطلب بزاری

    مشاهده پاسخ ها (1)
    • مهدی دمیرچیلو

      نویسنده این مطلب

      مهدی دمیرچیلو

      نه پولشو دارم، نه حالشو، نه انگیزشو حقیقتا.

  3. حجت

    مهمان

    حجت

    من نمی دونم سرّش چیه ولی کتاب خونه برا من کار نمی کنه داش به چند تا از توابع گیر میده مثلاً PINSEL_FUNC_3 نمی شناسه

  4. میلاد

    مهمان

    میلاد

    سلام ممکنه آموزش راه اندازی ds2331 رو با سخت افزاری بزارید
    ممنون