برد STM نمایشگر LCD

راه اندازی LCD کاراکتری با رابط I2c در میکروکنترلرهای STM32

نوشته شده توسط علی زاهدی

در پروژه هایی که نیاز به نمایش نمایش اطلاعات به کاربر وجود دارد، همیشه اولین نمایشگری که به آن فکر می‌کنیم. LCD های کاراکتری هستند. اما این نمایشگر ها مشکلات مخصوص خود را نیز دارند. یکی از مشکلات نمایشگر های LCD کاراکتری که در این آموزش قصد رفع آن را داریم تعداد پایه های زیادی است که از میکروکنترلر اشغال می‌کند. برای راه اندازی LCD کاراکتری در حالت عادی نیاز به ۷ عدد GPIO است. این مورد در انتخاب میکروکنترلر، طراحی PCB و قیمت تمام شده پروژه بسیار تاثیر گذار است.یکی از راه حل های رفع این مشکل استفاده از LCD کاراکتری با رابط I2C است که تنها ۲ پایه میکروکنترلر را برای برقراری ارتباط استفاده می‌کند. در این آموزش قصد داریم تا LCD کاراکتری ۱۶*۲ با رابط I2C را به کمک میکروکنترلر STM32 راه اندازی کنیم. در ادامه با مرجع تخصصی بردهای امبدد به زبان فارسی، دیجی اسپارک همراه باشید.

 


نمایشگر LCD کاراکتری ۱۶*۲


LCD کاراکتری ۱۶*۲ یکی از پایه‌ای ترین نمایشگرهای الکترونیکی می‌باشد. این LCD در بسیاری از مدارها کاربرد دارد. یکی از دلایل پر مصرف بودن این مدل LCD در مقابل نمایشگرهایی همچون سون سگمنت، عدم محدودیت در نمایش کاراکترها می‌باشد. همچنین توانایی ساختن کارکترهای دلخواه را دارند. این نوع LCD دارای ۲ سطر و ۱۶ ستون است. که در هر یک از این ۳۲ بخش یک کاراکتر جای میگیرد. LCD کاراکتری ۱۶*۲ دارای ۱۶ پایه است. که در تصور زیر میتوانید این پایه ها را مشاهده کنید. که این پایه ها عبارتند؛

  • VSS = زمین  GND
  • VCC = تغذیه ۵ ولت
  • (V0 (Display Contrast Pin = تنظیم شدت نور صفحه
  • (RS (Register Select = انتخاب رجیستر ( برای ارسال دستور یا دیتا)
  • (RW (Read/Write = پایه Read و Write
  • E = پایه Enable (این پایه بایستی به میکروکنترلر متصل شود و همیشه High باشد)
  • D0 – D7 = پایه های دیتا
  • A = پایه Anode
  • K = پایه Cathode

ال سی دی کاراکتری 2x16 - دیجی اسپارک

در آموزش های مختلفی این نوع LCD را با انواع میکروکنترلر ها راه اندازی کردیم. همچنین در آموزش راه اندازی LCD کاراکتری با بردهای میکروکنترلر STM32 به توضیح کامل نحوه پیکربندی و استفاده از توابع کتابخانه مربوط به LCD کاراکتری پرداخیتم. در ادامه با نحوه راه اندازی این LCD با رابط I2C خواهیم شد.

 


درایور I2C برای LCD کاراکتری


مدل دیگری از ال سی دی کاراکتری با درایور راه انداز I2C ارائه شده است. ماژول راه انداز LCD با تراشه PCF8574 و رابط I2C مناسب برای مدیریت ال سی دی‌های کاراکتری است. همچنین به دلیل استفاده از تنها ۴ پایه باعث کاهش حجم سیم کشی در طی پروژه شده است. راه انداز LCD کاراکتری با رابط I2C دارای ۴ پایه SCL , SDA, VC , GND است. این درایور به صورت جداگانه نیز در بازار موجود است. میتوانید این درایور را با قیمت کمتری از بازار تهیه کنید و به LCD کاراکتری که موجود دارید اضافه کنید.

I2C LCD

 


اتصالات مدار


همانطور که از نام این نوع LCD مشخص است. برای راه اندازی از رابط I2C استفاده می‌کند. بنابر این پایه های SDA و SCL ماژول LCD بایستی به پایه های پایه های SDA و SCL یکی از I2C های موجود میکروکنترلر STM32 متصل کنیم. پایه های VCC و GND نمایشگر LCD کاراکتری بایستی به یک ولتاژ ۵ ولت متصل شود. در این آموزش برای راه اندازی LCD پایه VCC ماژول LCD را به پایه  ۵V برد BluePill متصل شده. و همچنین پایه های SDA و SCL ماژول LCD را به ترتیب به پایه های PB7 و PB6 شده است.

Schematic I2C LCD

 


پیکربندی در نرم افزار STM32Cube


پس از ساخت پروژه جدید در نرم‌افزار STM32CubeMX و انتخاب میکروکنترلر STM32F103C8T6 بایستی بخش SYS و RCC را تنظیم کنید. در صورتی که با تنظیمات مربوط به این بخش ها آشنایی کافی ندارید. ابتدا بخش آول آموزش میکروکنترلر های STM32 را مطالعه کنید. سپس مطالعه این آموزش را ادامه دهید. برای راه اندازی این نوع LCD نیاز است که بخش I2C در میکروکنترلر فعال شود. برخی از میکروکنترلر های STM32 دارای چند رابط I2C هستند. در این آموزش برای راه اندازی LCD از I2C1 میکروکنترلر STM32 استفاده شده است. برای فعال کردن بخش I2C در نرم افزار STM32CubeMX وارد بخش I2C1 شده و گزینه I2C را فعال کنید. پارامتر های تنظیم شده توسط نرم افزار برای راه اندازی LCD مناسب است. در آموزش بررسی و شناخت پروتکل I2C در میکروکنترلر STM32 با برد STM32F103C8T6 نحوه عملکرد رابط I2C را به صورت کامل توضیح داده ایم. برای اطلاعات بیشتر میتوانید این آموزش را مطالعه کنید.

I2C Parameter Settings

سپس بایستی وارد بخش Clock Configuration شده و کلاک میکروکنترلر را بر روی ۷۲ مگاهرتز تنظیم کنید. در آخر در قسمت Project Manager ابتدا نام پروژه و مسیر مورد نظر برای ذخیره پروژه را مشخص کنید. سپس گزینه Toolchain را بروی MDK-ARM و ورژن آن را بر روی ۵ تنظیم کرده و بر روی گزینه GENERATE CODE در قسمت نوار بالایی کلیک کنید تا پروژه ساخته شود.

 


نصب کتابخانه


برای نصب کتابخانه I2C LCD بایستی ابتدا آن را از این لینک دانلود کنید. برای اضافه کردن کتابخانه به پروژه در نرم‌افزار KEIL، بایستی پس از ساخت پروژه فایل مربوط به کتابخانه به پوشه پروژه اضافه کنید (بهتر است که فایل های مربوط به هر کتابخانه داخل پوشه ای جداگانه‌ای قرار گیرند). سپس بایستی وارد نرم افزار KEIL شده و از منو Project گزینه Options for Target را انتخاب کنید.

نرم افزار KEIL و روش نصب کتابخانه

سپس در پنجره باز شده صفحه ++C/C را باز کنید. سپس بر روی گزینه مشخص شده در تصویر زیر کلیک کنید. در پنجره باز شده بر روی گزینه New و سپس بر روی قسمت … کلیک کنید و آدرس پوشه مربوط به کتابخانه مورد نظر را وارد کنید. سپس با کلیک بر روی گزینه OK تمامی پنجره هارا ببندید.

افزودن کتابخانه در نرم افزار کیل options for target - دیجی اسپارک

حالا بایستی از نوار سمت چپ (Project) از چارت درختی که فایل های پروژه را نمایش میدهد، بر روی اولین پوشه راست کلیک کرده و گزینه New Group را انتخاب کنید. سپس در این چارت درختی یک New folder ایجاد میشود. نام این New folder را تغیر دهید و سپس بر روی آن دابل کلیک کنید. در صفحه باز شده وارد پوشه کتابخانه شوید و تمامی فایل های مربوط به کتابخانه را به این Group اضافه کنید. سپس با با اضافه کردن هدر فایل هدر کتابخانه به ابتدای کد می‌توانید از توابع موجود در کتابخانه در کد خود استفاده کنید.

 


بررسی توابع کتابخانه I2C LCD


برای راه اندازی ال سی دی کاراکتری با درایور I2C در بردهای میکروکنترلر STM32 از کتابخانه معرفی شده استفاده می‌کنیم. این کتابخانه توابع زیر را در اختیار شما میگذارد. که در ادامه کاربرد هر یک از این توابع را توضیح داده شده است.

void lcd_init (void);
void lcd_gotoxy(int col, int row);
void lcd_putchar (char ch);
void lcd_puts (char *str);
void lcd_clear (void);
  • void lcd_init(void)

این تابع LCD را اماده به کار می‌کند. محل قرار گیری این تابع داخل اصلی (main) قبل از while(1) است. توجه داشته باشید که این تابع بایستی قبل از توابع دیگر LCD قرار گیرد.

  • void lcd_gotoxy(int col, int row)

این تابع نشانگر را به آدرس داده شده انتقال میدهد. ورودی های این تابع بدون علامت هستند. ورودی اول که برای مشخص کردن ستون است میتواند یک عدد صحیح بین ۰ تا ۱۵ باشد. ورودی دوم برای مشخص کردن سطر است و میتواند یک عدد صحیح بین ۰ و ۱ باشد.

  • void lcd_putchar(char ch)

با استفاده از این تابع میتوانید یک کاراکتر را بر روی LCD نمایش دهید. این تابع زمانی کاربرد دارد که شما قصد چاپ یک کاراکتر را بر روی LCD دارید.

  • void lcd_puts(char *str)

این تابع همانند تابع قبل عمل میکند. تنها با این تفاوت که این تابع برای چاپ رشته بر روی LCD است.

  • void lcd_clear(void)

با استفاده از این تابع تمام رشته ها و کاراکتر هایی که بر روی LCD چاپ شده است، پاک می‌شود.

 


کدنویسی در نرم‌افزار KEIL


برای استفاده از این کتابخانه و نمایش اطلاعات مورد نظر بر روی LCD بایستی ابتدا فایل هدر این کتابخانه را به فایل main اضافه کنید. در ادامه مطابق توضیحات بالا ابتدا تابع lcd_init را در تایع main قبل از حلقه while(1) اضافه کنید. سپس با توجه نیاز پروژه خود از توابع دیگر این کتابخانه استفاده کنید. برای نمایش اعداد بر روی LCD بایستی کد اسکی آن هارا در دستور چاپ LCD قرار دهید. برای مثال برای چاپ عدد صفر بر روی LCD بایستی عدد ۴۸ را داخل دستور lcd_putchar قرار دهید. تابع sprintf که در کتابخانه Stdio.h قرار دارد. عملیات تبدیل عدد به کد اسکی را برای ما انجام می‌دهد. در صورتی که با کتابخانه Stdio.h آشنایی کافی ندارید. آموزش تحلیل و بررسی کتابخانه STDIO.h در زبان C و ++C را مطالعه کنید.

در ادامه کدی برای درک بهتر مطالب گفته شده در این آموزش قرار داده شده است. حالا برای اجرای این پروژه کافیست که کد زیر را به پروژه خود اضافه کنید. توجه داشته باشید که نرم افزار STM32CubeMX قسمت هایی از فایل main.c را برای کد نویسی کاربر تعین کرده است. بهتر است که کد زیر را در این بخش ها قرار دهید.

#include "i2c-lcd.h"
#include <stdio.h>

char buffer[16];
int counter;

int main(void)
{
  lcd_init();
  while (1)
  {
		lcd_gotoxy(0,0);
		lcd_puts("DIGISPARK.ir");
		sprintf(buffer,"COUNTER = %4d",counter);
		lcd_gotoxy(0,1);
		lcd_puts(buffer);
		counter++;
		HAL_Delay(1000);
  }
}

در آخر بایستی برنامه را کامپایل کرده و بر روی برد Bluepill پروگرام کنید. در صورتی که با نحوه پروگرام کردن میکروکنترلر های Stm32 آشنا نیستید. لطفا بخش اول آموزش های میکروکنترلر Stm32 را مطالعه نمایید. پس از دانلود کد بر روی برد BluePill بایستی یک بار کلید reset را بر روی برد فشار دهید. در صورت که اتصالات را به طور صحیح متصل کرده باشید. LCD عبارت DigiSpark.ir را در سطر اول نمایش داده و در سطر دوم شمارنده ای شروع به شمارش خواهد کرد که هر ۱ ثاینه به عدد آن اضافه می‌شود.

I2C LCD to STM32

 


جمع بندی


روش های مختلفی برای نمایش داده های پردازش شده در میکروکنترلر وجود دارد. یکی از آسان ترین راه های نمایش داده های پردازش شده در میکروکنترلر ، استفاده از LCD های کاراکتری است. که در آموزش های پیشین این نوع LCD را با میکروکنترلر های ختلف ره اندازی کرده ایم. اما همانطور که گفته شد. این نوع LCD برای راه اندازی پایه های زیادی از میکروکنترلر را اشغال می‌کند. استفاده از درایور I2C برای LCD کاراکتری این مشکل را رفع میکند. و این امکان را به شما می دهد که با استفاده از ۲ پایه SDA و SCL نمایشگر LCD کاراکتری را راه اندازی کنید.

 


لوازم مورد نیاز


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

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی از وبسایت دیجی اسپارک حمایت کنید.

درباره نویسنده

علی زاهدی

برنامه نویس و طراح سیستم های مبتنی بر میکروکنترلر

دانسته هایتان را مانند یک ساعت مچی در دست کنید، نه صرفا به این خاطر که نشان دهید آن را دارید. بلکه به این خاطر که اگر کسی از شما ساعت را پرسید، برایش بگویید.
لرد چسترفیلد

تبادل نظر و رفع عیب با ثبت دیدگاه

۱۶ دیدگاه

  • سلام و وقت بخیر آقای مهندس
    ممنونم از آموزش های خیلی خوب تون. بی زحمت چند تا پروژه هم در زمینه ESP32-CAM آموزش بدهید.با تشکر

    • با سلام
      لینک دانلود مشکلی ندارد! و پس از کلیک بر روی عبارت “این لینک” داخل متن آموزش فایل کتابخانه دانلود می شود.

  • سلام من همه این کارارو کردم ولی هیچ نوشته ای نمیاره گفتم شاید پایهام خوب وصل نشده ولیبا ESP32 تست کردم قشنگ مینویسه ولی وقتی با STM32 با KILE مینویسم کار نمیکنه مشکل از چیه؟

    • با سلام
      لطفا اتصالات و همچنین میکروکنترلری که مورد استفاده قرار داده اید را مشخص کنید.

      • با سلام واحترام
        از stm32f103c8 استفاده میکنم و پایه ی B6 را بهSCL دادم و پایه ی B7 را به SDA دادم ولی هیچی روی LCD نشان نداد، امکانش هست راهنمایی کنید

        • با سلام
          لطفا اتصالات، تنظیمات نرم افزار STM32Cube و همچنین کد داخل نرم افزار را مجددا بررسی فرمایید. در صورت درست بودن این موراد از سالم بودن ماژول LCD اطمینان حاصل فرمایید.

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

    • باسلام
      ایا برنامه ای که در آموزش قرار داده شده است را استفاده می‌کنید یا تغیراتی در کد ایجاد میکند و این مشکل ایجاد می‌شود؟