نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه

راه اندازی نمایشگر nokia 5110 با stm32 جلسه 2

سلام وقتتون بخیر : با یکی دیگه از سری مطالب میکروکنترلر stm32 در خدمت شما هستم؛ بریم سر سراغ ادامه ی کتابخونه؛ اول دوتا فایل برای کتابخونه میسازیم یکی h. و یکی هم c. ؛ دوم باید یکسری تابع بنویسیم برای اجرای تنظیملت یکیش اینه که پایه های LCD رو تعریف کنیم ( راه اندازی نمایشگر nokia 5110 با stm32 جلسه 2 )؛ مطلب جلسه قبل : راه اندازی نمایشگر nokia 5110 با stm32 جلسه 1
راه اندازی نمایشگر nokia 5110 با stm32 جلسه 2

راه اندازی نمایشگر nokia 5110 با stm32 جلسه 2


برای راحتی کار، استراکچر براش میسازیم که پورت ها و پینها داخلش ذخیره بشن اینجوری :

حالا ازش استفاده میکنیم و استراکچر دوم که تعریف پروت ها هست رو مینویسیم :

پس توی استراکچر دوم ما برای پایه مثلا ریست هم پورت رو داریم و هم پین رو …. پایه های میکرو که RST ,CS ,DC ,DIN ,SCK باشه رو اینجا تعریف کردیم ولیکن اون دوتا پارامتر پایانی بمونه بعدا توضیح میدم راحبشون؛ حالا باید پایه ها رو کانفیگ کنیم و خروجی تعریف کنیم و با چنتا تابع بتونیم پین به پینشو کنترل کنیم؛ برای کنترل پین پین LCD این دیفاین ها رو مینویسیم :

الان اینجوری شد که هر جا بخوایم مثلا پایه CS ال سی دی رو 0 کنیم کافیه بنویسیم :

و هر کجا بخوایم پایه CS رو 1 کنیم اینو مینویسیم :

این روند برای تمام پایه های ال سی دی هست و از اینجا به بعد تو کتابخونه پایه ها رو با این کنترل میکنیم؛ این دیفاین ها رو توی فایل h. مینویسیم و استراکچر هایی که بالا تعریف شد هم توی فایل h. مینویسیم؛ حالا لازمه چندتا لایبرری از STM32 هم وارد کنیم داخل فایل h. ؛ اینجوری مینویسم :

خب چند دیفاین دیگه هم لازم داریم برای ال سی دی مثلا طول و عرض LCD رو دیفاین میکنیم :

یک تابع هم مینویسیم برای اتصال کلاک به پورت هایی که LCD بهشون وصل شده؛ این موضوع بر میگرده به آموزش STM32 که توی یکی از جلسه ها توضیح دادم چی به چیه؛ به این صورت عمل میکنیم که توی تابع مقدار پورت LCD رو میگیریم و با تابع :

کلاک میکرو رو به اون پورت اتصال میدیم؛ این تابع یک ورودی پوینتر داره؛ تابع رو اینجوری منویسم :

میاد بررسی میکنه که ورودی با کدوم شرط برابر هست بعد همون شرط رو اجرا میکنه که توی زیر مجموعه اون شرط کلاک رو به همون پورت شرط متصل کردیم؛ چندتا پورت هم بالا تر گذاشتیم برای میکرو های بزرگتر؛ خب دیگه همه زمینه سازی ها شد که یک تابع بنویسیم که ال سی دی رو پیکر بندی یا ایشنال کنه (یعنی کلاک پورت ها رو وصل کنه و پورت هارو خروجی کنه و کلا تنظیملتی که ال سی دی برای شروع کار لازم داره رو بهش بده)؛ من اسم تابع ایشنال LCD رو میزارم :

خب توی این تابع چی مینویسیم؟ این بر میگرده به اموزش های STM32 که میایم پایه ها رو خروجی میکنیم و کلاک پایه ها رو وصل میکنیم (البته برای شروع اینه بعدا تغیرش میدیم )؛ خب :
1) استراکچر GPIO ها رو اول تابع لود میکنیم :

2) با تابعی که برای اتصال کلاک به پورت ها نوشته بودیم کلاک رو به تک تک پورت های ال سی دی وصل میکنیم (یعنی اگه کل پایه های ال سی دی به یک پورت وصل هست فقط کلاک همون پورت رو وصل میکنیم ولی اگه هر کدم از پایه ها به صورت پراکنده روی یک پورت بود باید کلاک رو به تمام پورت ها وصل کنیم )

پس ما اینجوری مینویسم.
3) حالا باید پایه ها رو خروجی کنیم برای اینکار باید مقدار استراکچر GPIO رو تغیر بدیم و داخل استراکچر بریزیم ( توضیح بیشتر در آموزش STM32 )
خب برای خروی کردن پورت ها اینجوری مینویسیم :

اول که مد خروجی رو با

تعیین میکنیم که روی

تنظیم شده حالا میایم سرعت GPIO رو با

تنظیم میکنیم که این رو هم روی 50 مگاهرتز تنظیم میکنیم

خب حالا برای تک تک پین های ال سی دی خروجی تعریف میکنیم با مشخصاتی که بالا دادیم

حالا میریم سراغ یکی پارامتر های بالا که توی استراکچر بود یعنی :

ببنید ما توی کتابخونه لازم داریم تابع دیلا داشته باشیم برای اینکه دیلا توی برنامه وقتی که کتابخونه رو به برنامه اضافه کردید دوتا نشه و دقیق تر بودن دیلای ها و کم شدن حجم برنامه میایم تابعی رو در قالب استراکچر از کابر میگیریم که به عنوان تابع دیلای از اون توی برنامش نوشته شده؛ خب توضیحات کافیه حالا لازمه LCD رو ریست کنیم تا اگه از قبل چیزی داخلش بوده بپره؛ این وسط سایر پایه ها رو هم در وضعیت 1 قرار میدیم؛ پس پایه Res رو برای ریست LCD 0 میکنیم و با استفاده از تابعی که توی استراکچر از کابر گرفته بودیم یکم تاخیر ایجاد میکنیم و ال سی دی رو ریست در میاریم :

به همین سادگی  laugh طبق توضیحات گذشته میدونیم الگوریتم کار این LCD چجوریه ولی حالا میخوایم بهش دیتا بدیم؛ برای دیتا دادن به ال سی دی ما 3 تا پایه داریم
نکته : دیتا دادن به LCD دو نمونه هست، یکیش کامند یکی هم دیتا برای نمایش.
CS : که برای مشخص کردن کامند بودن یا دیتا بودن دیتایی که الان وارد ال سی دی شده استفاده میشه
SDA : پایه دیتا برایI2C
SCL : پایه کلاک برای I2C
حالا باید یک تابع بنویسیم که بیاد دیتایی که بهش میدیم رو بفرسته رو ال سی دی من اسمشو اینجوری میزارم :

یک پونتر و یک دیتا و یک مد برای دیتاهای ورودی تابع در نظر میگیریم

  1. پوینتر وقتی کاربرد داره که بخوایم چند ال سی دی به یک میکرو بزنیم
  2. دیتا هم 8 بیت دیتاییکه میفرسته
  3. مد هم مشخص کننده نوع دیتا هست که دیتا هست یا کامند

خب چجوری بفهمیمی که چجوری دیتا بفرستیم؟ اینجاشو با دقت بخونید؛ دیتاشیت صفحه 12 گفته که :
راه اندازی نمایشگر nokia 5110 با stm32 جلسه 2
1) برای دیتا دادن به ال سی دی اول پایه CS رو 0 کنید ( CS مخفف chip select هستش و با 0 کردن این پایه کنترلر ال سی دی اماده دریافت دیتا از کابر میشه )
2) تعیین کنید که این دیتایی ارسال میکنید دیتا هست یا کامند (اگر دیتا بود خب میاد روی ال سی دی نمایش داده میشه ولیکن اگر کامند بود به عنوان دستوری برای کنترلر شناخته میشه (اگر پایه DC مقدار high یا 1 داشته باشد دیتای ورودی به عنوان دیتایی برای نمایش یه کنترلر فرستاده میشود و اگر مقدار low یا 0 داشته باشد به عنوان کامند یا دستوری به کنترلر ال سی دی ) پس ما دوتا دیفاین به اول کتابخونه برای این موضوع اضافه میکنیم :

خب حالا یک شرط میزاریم که اگه MOD دیتای ورودی به تابع 1 بود پایه DC رو high کن و اگر دیتای ورودی کامند یا 0 بود DC هم low بشه؛ پس مینویسیم :

نکته : بعد از اتمام 8 بیت دیتای ارسالی باید این پایه رو 0 کنیم.
حالا چون دیتا ها 8 بیتی ارسال میشه به ال سی دی پس یک فور لازم داریم تا دونه دونه بیت ها رو ارسال کنه؛ پس یک متغیر برای FOR تعریف میکنیم 8 بیتی هم باشه من اسمشو میزارم i :

حالا باید یک for بنویسیم که 8 بار تکرار بشه :

توی این فور اول برا یک شرط داریم که یک بیت از دیتای ورودی رو انتخاب میکنه و مقدارشو روی SDA میریزه :

حالا برای تکرار دوم باید بره سراغ بیت بعدی دیتا پس یکی شیفت میدیم دیتا رو :

خب حالا ما یک بیت از دیتا رو به ال سی دی فرستادیم ولی کلاک رو که SCL باشه برای این بیت به LCD ارسال نکردیم؛ پس SCL رو 0 و 1 میکنیم تا کلاک هم برای این بیت ارسال بشه :

خب با تکرار 8 بار برای این FOR 8 بیت دیتا و 8 کلاک به ال سی دی ارسال میشه؛ پس کل for میشه این :

خب موقع خروج از تابع هم CS رو 1 میکنیم که چیپ ال سی دی از سلکت در بیاد :

پس کل تابع اراسال دیتا به ال سی دی میشه :

 
خب دیگه قسمت سخت کار همین بود از اینجا به بعد سادس همش کار با همین تابعی هست که نوشیم؛ به امید داشتن ایرانی اباد تر bb لایق دونستید برای من هم دعا کنید  smile هزینه این اموزش ها هم نشر اون هست پس تا میتونید به دیگران برای یادگیری کمک کنید heart موفق باشید smile

پسورد فایل های سایت :
www.dmf313.ir
به شما توصیه میکنم سربازی نرید / با این قیمت دلار نمیشه الکترونیک کار کرد / برای مهاجرت به USA با لاتاری سال 2020 برنامه هایی دارم افرادی که در این ضمینه با من موافق هستن (تحقیقات کامل خودتون رو از اینترنت انجام بدید و سوالت رو از من نپرسید) برای ایجاد کمپین و مهاجرت دسته جمعی مشخصات ارتباطی خودتون برای من ایمیل کنید zamanimahdi@icloud.com در سابجکت ایمیل حتما بنویسید "لاتاری" به امید موفقیت :)
ارسال دیدگاه
11

1) تعداد حروف فارسی از حروف غیر فارسی بیشتر باشه دیدگاه جفنگ/اسپم محسوب میشه.

2) به موارد درخواست پروژه/کد آماده و سوالاتی که بلد نباشم پاسخ داده نمیشه.

3) برای گزاشتن کدهاتون از این سایت استفاده کنید : debian

  1. مهمان

    STM8S

    سلام
    تا همین جاش هم خیلی مفید بود
    خیلی ممنون

    1396/06/04
    06:18
  2. مهمان

    علی

    good

    1396/05/02
    10:31
  3. نویسنده این مطلب

    مهدی زمانی

    استقبالی از مطالب نمیشه ؟ ادامه بدم ؟ sad

    1396/03/30
    10:34
    • مهمان

      احمد

      خیلی توقع نداشته باشید که به سرعت مطلبتون خونده بشه؛ مطلب شما از اون دسته مطلبایی هست که تصادفی توی جستجوی یک نفر پیدا میشه و به قول معروف دلش رو شاد میکنه و اینا good

      1396/03/31
      12:15
    • مهمان

      علیرضا آهنی

      چرا؟
      خیلی خوبه

      1396/03/31
      12:01
    • مهمان

      محمد

      سلام ، بله ادامه بدید،
      ما الکترونیکی نیستیم ولی الکترونیکی ها رو دوست داریم laugh
      نمیدونم چرا نظر دادن اینقدر سخته
      ولی یه پیشنهاد
      یه دکمه تشکری چیزی بزارید برای کسی که می خونه خیلی راحت تره نسبت به نظر دادن،البته این نظر من بود حالا خوبه یا که بد بود laugh

      1396/03/31
      11:42
    • مهمان

      مسعود

      سلام.
      خیلی ممنون بابت مطلب.
      خیلی هم استقبال میشه. ادامه بدید. طریقه استفاده رو نگفتی مهندس؟

      1396/04/03
      11:47
      • نویسنده این مطلب

        مهدی زمانی

        با تمام شدن نوشتن کتابخونه میشه ازش استفاده کرد smile
        البته من این کتابخونه رو توی ی طرح هایی بزرگتر میخواستم استفاده کنم برای همون نوشتم

        1396/04/09
        12:22
  4. مهمان

    محمد

    نقل قول از مهدی دمرچیلو:
    خب بسم الله – بیا یاد بده.
    باشه سورس کدش رو میزارم.

    1396/03/27
    08:26
  5. مهمان

    محمد

    من ال سی دی نوکیا ۱۲۰۰ رو راه اندازی کردم که هم کم مصرف تر از ۵۱۱۰ هستش هم پیکسل های بیشتری داره.با stm32

    1396/03/25
    07:39
    • مدیر سایت

      مهدی دمرچیلو

      خب بسم الله – بیا یاد بده.

      1396/03/25
      09:22