راه‌اندازی LCD Nokia سریال به کمک واحد SPI در STM32 | قسمت هجدهم آموزش STM32 با توابع LL

blog
۱۴۰۰-۱۰-۱۵
2 دقیقه

در بخش قبلی واحد SPI را راه‌اندازی کردیم و با جزییات آن تا حدودی آشنا شدیم. در این بخش می‌خواهیم به کمک این واحد، یک LCD سریال (Nokia 5110) را راه‌اندازی کنیم. در تصویر زیر نمونه LCD موردنظر و ترتیب پایه‌های آن نشان داده شده است.

برای اطلاع از نحوه صحیح اتصال پایه‌های LCD به میکروکنترلر و تنظیم اولیه آن باید به دیتاشیت دستگاه مراجعه کنیم. طبق شکل نشان داده شده و اطلاعات موجود در دیتاشیت Nokia 5110 ، پایه‌های Gnd و CE باید به پایه Gnd میکرو وصل شوند. پایه‌های Vcc و BL نیز به 5v یا 3.3v میکرو متصل می‌شوند. پایه‌های Reset و DC به ترتیب به  A3 و A4 (که باید در پروژه به‌عنوان پین خروجی تعریف کنیم) و همچنین پایه‌های CLK و DIN به ترتیب به A5 و A7 متصل می‌شوند.

برای شروع کار همانند گذشته پروژه را در Cube MX ایجاد می‌کنیم و تنظیمات دیباگ و کلاک را انجام می‌دهیم. واحد SPI را نیز مانند بخش قبل تنظیم می‌کنیم. پایه‌های A3 و A4 نیز باید به‌عنوان خروجی تعریف شوند. بقیه تنظیمات را مثل قبل انجام می‌دهیم، کد پروژه را ایجاد می‌کنیم و وارد محیط KEIL می‌شویم.

 

نوشتن کد پروژه

در ابتدا، تابع send_SPI که در بخش قبل نوشتیم را در این پروژه نیز تعریف می‌کنیم و آن را به‌صورت زیر تغییر می‌دهیم:

مانند قبل، واحد SPI را فعال میکنیم (قبل از حلقه while(1)) :

حالا باید با توجه به توضیحات دیتاشیت،  LCD Nokia را راه‌اندازی کنیم. بدین منظور، باید ابتدا از طریق پایه A3 که به Reset LCD متصل است، یک ریست اولیه انجام دهیم، سپس از طریق پایه A4، LCD به حالت کدهای دستوری ببریم و 4 دستور مربوط به تنظیم نمایشگر را بفرستیم و در آخر دوباره LCD را به حالت داده برگردانیم:

همان‌طور که در توضیحات دستورات نوشته شده، اولین دستور مربوط به تنظیم اولیه LCD است که مشخص می‌کند که در حالت توان پایین باشد یا نه، و همچنین حرکت افقی یا عمودی موقعیت نوشتن را تعیین می‌کند (بدین‌صورت که 0x20 اطلاعات را افقی و 0x22 اطلاعات را عمودی نمایش می‌دهد). دستور دوم نیز تعیین می‌کند که نمایشگر در چه حالتی نمایش دهد. دستور سوم و چهارم نیز برای تعیین موقعیت اولیه‌ی نوشتن هستند.

اکنون می‌توانیم اطلاعات دلخواهمان را روی LCD Nokia نمایش دهیم. به‌عنوان‌مثال می‌خواهیم پیکسل یا خانه‌های صفحه‌نمایش را به‌صورت یکی در میان سیاه‌وسفید کنیم، با نوشتن کد زیر در حلقه while(1)، خانه‌ها یکی در میان خاموش و روشن می‌شوند و جای آن‌ها عوض می‌شود.

مقدار تعریف‌شده برای تکرار حلقه‌های for، یعنی 6 X 84 تعداد پیکسل‌های LCD را مشخص می‌کند که 6 ردیف و 84 ستون هستند. اگر اتصالات و تنظیمات گفته شده به درستی انجام شده باشد، می‌بینیم که تصویر موردنظر رو نمایشگر ظاهر می‌شود.

 

نمایش یک عکس دلخواه روی LCD

بدین منظور باید عکس موردنظرمان را به ابعاد 6 در 84 (6 ردیف و 84 ستون) درآوریم. سپس آن را فرمت سیاه‌وسفید یا Grayscale درآوریم و به یک آرایه 8 بیتی با اندازه 6 X 84 در آوریم که هر درایه یک پیکسل را مشخص می‌کند. حالا می‌توانیم این آرایه را در کد به‌عنوان یک ثابت تعریف کنیم و در تابع اصلی، به کمک send_SPI به نمایش در آوریم:

باید توجه کرد که آرایه تولید شده و نحوه نمایش اطلاعات از نظر افقی یا عمودی بودن تطابق داشته باشند.

در بخش بعدی در مورد نحوه استفاده از فونت برای نوشتن روی LCD Nokia صحبت خواهیم کرد.

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

اطلاعات
6
0
لینک و اشتراک
profile

سیاوش

متخصص الکترونیک

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

مقالات بیشتر
slide

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند. فروش در پالت
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد. جستجو در آیسی
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند. پرسش در سیسوگ فرم
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
خانواده سیسوگ

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند.
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد.
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند.
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند.
family

دیدگاه ها

profile
میثم گفت :
۱۴۰۱-۱۰-۲۲ ۲۳:۲۸

سلام و خسته نباشید
به نظر شما چرا lcd راه اندازی نمیشه ؟؟حتی کارهای زیر رو هم انجام دادم
spi رو عوض کردم از شماره 2 استفاده کردم
کابل ها کانکتورها چک شدن
lcd با اردینو تست کردم ، روشن میشه
تنها تفاوت اینه با cubeide انجام دادم.

profile
میثم گفت :
۱۴۰۱-۱۱-۰۲ ۰۹:۵۸

مشکل رو بعد از کلی کلنجار رفتن پیدا کردیم. دستورات بالا ال سی دی ما ور روشن نکرد ،باید اول به درستی، طبق دیتاشیت راه اندازی بشه(یه چندتا دستور بیشتر از اون 4تا لازم هست که باید اضافه بشه) و اینکه حدودا یه زمان 60 الی 70 میلی ثانیه برای پایه ریست در لحظه راه اندازی باید در نظر گرفت.بعد از این کارها ال سی دی داده های بالا رو نشون داد.

profile
داود گفت :
۱۴۰۰-۱۰-۲۰ ۱۷:۵۰

LL_GPIO_TogglePin(GPIO_Port_1, Pin_1);
LL_mDelay(1);

چرا وقتی کد بالا را تو حلقه while مینویسم به جای اینکه هر 1 میلی ثانیه تاگل کنه هر 2 میلی ثانیه تاگل میکنه؟

profile
سیاوش گفت :
۱۴۰۰-۱۰-۲۶ ۱۱:۰۴

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

profile
محسن گفت :
۱۴۰۰-۱۰-۱۷ ۲۲:۳۸

سلام ممنون و عالی بود

profile
سیاوش گفت :
۱۴۰۰-۱۰-۲۶ ۱۱:۰۵

سلام دوست عزیز. خوشحالم که آموزش‌هارو دنبال میکنی.

become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله