آموزش STM32 با توابع LL قسمت بیستم: راه‌اندازی LCD Nokia به کمک واحد SPI بخش سوم (نمایش انیمیشن روی LCD Nokia)

آموزش STM32 با توابع LL قسمت بیستم: راه‌اندازی LCD Nokia به کمک واحد SPI بخش سوم (نمایش انیمیشن روی LCD Nokia)

آموزش STM32 با توابع LL قسمت بیستم: راه‌اندازی LCD Nokia به کمک واحد SPI بخش سوم (نمایش انیمیشن روی LCD Nokia)
آموزش STM32 با توابع LL قسمت بیستم: راه‌اندازی LCD Nokia به کمک واحد SPI بخش سوم (نمایش انیمیشن روی LCD Nokia)

در دو بخش قبل، یک LCD را به کمک واحد SPI را راه‌اندازی کردیم و تصویر و فونت روی آن نمایش دادیم. در این بخش قصد داریم یک انیمیشن روی LCD Nokia نمایش دهیم.

با سیسوگ همراه باشید.

 

در ابتدا باید یک عکس متحرک پیدا کنیم و آن را به فریم‌های جداگانه تقسیم کنیم. یا اینکه فریم‌های انیمیشن خودمان را بسازیم. برای راحتی کار ما راه اول را می‌رویم و از یک عکس متحرک آماده استفاده می‌کنیم. بعد از تقسیم فایل Gif به فریم‌های جداگانه، باید ابعاد عکس‌ها را به اندازه LCD Nokia 5110 یعنی 84×48 پیکسل تغییر دهیم. همچنین چون این نمایشگر تنها قابلیت تصاویر سیاه و سفید را دارد و برای هر پیکسل نیز یک بیت تعریف می‌شود، باید فرمت عکس‌ها را به Monochorme Bitmap یا همان Bitmap (bmp)  تغییر دهیم. در آخر نیز هر عکس را به آرایه 504 بایتی تبدیل می‌کنیم.

خلاصه مراحلی که باید طی کنیم:

  • یک انیمیشن (ترجیحا یک فایل گیف ساده)
  • تقسیم به عکس یا فریم‌های جداگانه
  • تغییر ابعاد و فرمت عکس‌ها
  • تبدیل هر عکس به آرایه

بعد از این مراحل، آرایه‌های مذکور را به صورت یک ماتریکس در یک هدر فایل ذخیره کردیم تا بتوانیم در پروژه از آن استفاده کنیم.

برای شروع پروژه مانند بخش قبلی پروژه را در Cube MX می‌سازیم و دقیقا مانند همان بخش، واحدهای مختلف را تنظیم می‌کنیم. با این تفاوت که برای واحد SPI، DMA را نیز در حالت Circular تنظیم می‌کنیم. مجددا مانند قبل درایورها را روی LL تنظیم می‌کنیم و بعد از ایجاد پروژه وارد محیط Keil می‌شویم.

 

نوشتن کد برای اجرای انیمیشن بر روی LCD Nokia

همانطور که اشاره شد، باید هدرفایلی که درست کردیم را به پروژه اضافه کنیم (چگونگی انجام این کار در بخش قبلی گفته شد). ماتریکسی که درست کرده‌ایم، باید چیزی شبیه به تصویر زیر باشد:

حالا باید به سراغ فایل main.c برویم و کد پروژه را بنویسیم. در ابتدای کد، هدرفایل‌های مورد نیاز از جمله هدرفایل انیمیشنی که درست کردیم را به کد اضافه می‌کنیم؛

سپس مانند پروژه DMA به USART، یک بافر حافظه با اندازه مشخص (تعداد پیکسل‌های LCD Nokia ) تعریف می‌کنیم؛

همچنین کدی که برای تنظیم و راه‌اندازی DMA در آن پروژه تعریف کرده بودیم را به صورت یک تابع، و این بار برای انتقال اطلاعات به SPI می‌نویسیم؛

حالا باید واحد SPI و همچین LCD و DMA را راه‌اندازی کنیم و سپس بافری که ساختیم را مقداردهی کنیم؛

اکنون  همه چیز برای نمایش انیمیشن ما آماده است. در حلقه while(1) کد زیر را می‌نویسیم:

تعداد تکرارهای حلقه for به اندازه تعداد فریم‌های انیمیشنی است که در نظر گرفته‌ایم. اگر همه مراحل را به درستی انجام داده باشیم نمایش انیمیشن را روی LCD Nokia می‌بینیم.

خطاهای احتمالی :

  • عدم نمایش صحیح فریم‌ها به دلیل اشتباه در ایجاد آریه‌ها(به صورت عمودی یا افقی) و حالت نمایش آن‌ها(عمودی یا افقی)
  • استفاده از وقفه؛ توصیه می‌شود در این پروژه از وقفه استفاده نکنید.
  • استفاده از توابع تغییر موقعیت یا پاک کردن LCD Nokia بعد از راه اندازی DMA. این عمل موجب خطا در نمایش صحیح فریم‌ها می‌شود.

در سه بخش اخیر با نمایش اطلاعات مختلف روی LCD آشنا شدیم، در بخش بعدی در مورد نحوه راه‌اندازی تایمر در حالت PWM صحبت خواهیم کرد.

لینک پروژه در گیت هاب

 

0 نفر

پــــســنــدیـده انـد

توجه

سیاوش
سیاوش

کارشناس ارشد الکترونیک دیجیتال، علاقه‌مند به یادگیری

دیدگاه ها

0 دیدگاه

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 3 سال پیش
راه اندازی LCD گرافیکی Nokia 1661

راه اندازی LCD گرافیکی Nokia 1661

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش
ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است....

Zeus ‌ Zeus ‌
  • 5 سال پیش
همه چیز درباره ریموت کنترل‌های هاپینگ

همه چیز درباره ریموت کنترل‌های هاپینگ

امنیت همیشه و در همه‌ی اعصار، مقوله‌ی مهم و قابل‌توجه‌ ای بوده و همیشه نوع بشر به دنبال امنیت بیشتر، دست به ابداعات و اختراعات گوناگونی زده است. ریموت کنترل یکی از این اختراعات است. در این مقاله، به بررسی امنیت انواع ریموت‌های کنترل خواهیم پرداخت....

Zeus ‌ Zeus ‌
  • 5 سال پیش
مسابقه سوم: استخراج داده از رشته ها در زبان C

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش
مسابقه ششم: بزن میکروکنترلر را بسوزون!

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 12 ماه پیش
آموزش قدم به قدم راه اندازی NRF24L01

آموزش قدم به قدم راه اندازی NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش
ساخت ماینر با FPGA و ARM

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش
کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش
مسابقه چهارم: کدام حلقه سریع‌تر است؟

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 2 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک