راه اندازی نمایشگر گرافیکی 64×128 با کتابخانه U8g2

0
34
راه اندازی نمایشگر گرافیکی 64×128 با کتابخانه U8g2
راه اندازی نمایشگر گرافیکی 64×128 با کتابخانه U8g2

در این مطلب به نحوه راه‌اندازی کتابخانه u8g2 در محیط نرم‌افزار Atmel Studio 7.0 با نمایشگر تک‌رنگ گرافیکی 64×128 با میکروکنترلر Atmeag128A خواهیم پرداخت. U8g2 یک کتابخانه گرافیکی است و برای ایجاد رابط گرافیکی بر پایه نمایشگرهای تک‌رنگ و OLED طراحی‌شده است. این کتابخانه توسط آقای الیور کروس (Oliver Kraus) نوشته‌شده و به‌صورت متن‌باز در اختیار عموم قرار داده‌شده. این کتابخانه حجم کمی دارد و به‌راحتی می‌توان در سیستم‌های نهفته که محدودیت حافظه  و سخت‌افزار وجود دارد بکار برد. درنتیجه  می‌توان با میکروکنترلر های هشت بیتی همانند میکر وکنترلرهای AVR سری ATmega مورداستفاده قرار گیرد. یکی از محبوبیت‌های u8g2 پشتیبانی از رنج وسیعی از نمایشگرهای موجود در بازار می‌باشد. به‌عنوان مثال این کتابخانه قادر به پشتیبانی از درایورهای پرکاربرد همانند KS0108,SSD1306, ST7920 و خیلی از نمایشگرهای دیگر است. برای دستیابی به لیست کامل درایورهای پشتیبانی شده از لینک اینجا استفاده کنید. این کتابخانه به زبان C/C++ نوشته‌شده است. بنابراین می‌توانید آن را با تمام بردهای اردینو استفاده کنید. بعلاوه این کتابخانه را می‌توان با  معماری‌های دیگر همانند ARM بکار برد.

از قابلیت‌های u8g2 می‌توان به مورد زیر اشاره کرد:

  • قابلیت ترسیم اشکال هندسی همانند خط، چهار ضلعی، دایره، باکس، دکمه و غیره.
  • بسیاری از فونت‌ها را پشتیبانی می‌کند، (تقریباً) هیچ محدودیتی در ارتفاع فونت وجود ندارد.
  • نمایش رشته‌ای که به‌صورت UTF-8 کدگذاری شده است.

آموزش‌های زیادی در مورد نحوه به‌کارگیری u8g2 با استفاده از اردوینو وجود دارد، اما اطلاعاتی چندانی در مورداستفاده از این کتابخانه در محیط Atmel Studio و استفاده از AVR سری Atmega وجود ندارد. لذا در این مطلب سعی شده نحوه به‌کارگیری این کتابخانه در محیطی غیر از اردینو توضیح و تشریح شود. در این مقاله سعی شده که به‌صورت مرحله‌به‌مرحله و با یک مثال کاربردی نحوه استفاده از کتابخانه در محیط Atmel Studio توضیح داده شود تا اینکه به‌راحتی بتوان از این کتابخانه در پروژه‌های صنعتی مبتنی بر میکروکنترلرهای AVR استفاده کرد.

این مطلب از سه قسمت تشکیل‌شده، در قسمت اول اتصال نمایشگر با کنترلر توضیح داده‌شده است. در قسمت دوم به نحوه پیکربندی کتابخانه u8g2 در محیط نرم‌افزار Atmel Studio 7.0 پرداخته‌شده است. در قسمت پایانی این مقاله یک مثال ساده برای تست نمایشگر فراهم‌شده. باما همراه باشید.

سخت افزار و اتصال نمایشگر به میکروکنترلر
شکل 1. اتصال میکروکنترلر با نمایشگر.
سیگنال ریست میکروکنترلر .
شکل 2. سیگنال ریست میکروکنترلر .
اتصالات مورد نیاز نمایشگر.
شکل 3. اتصالات مورد نیاز نمایشگر.

تغذیه مدار از یک مبدل 5 ولت و 2.4 آمپر فراهم‌شده است. مطابق شکل 1 میکروکنترلر با فرکانس 8MHz کار می‌کند و همچنین از طریق سوئیچ S1 ریست می‌شود. هشت بیت درگاه E به پایه‌های دیتا نمایشگر وصل شده و از طریق چهار بیت اول درگاه B میکروکنترلر می‌توان نمایشگر را کنترل کرد. بیت صفرم درگاه G میکروکنترلر و ترانزیستور Q1 برای کنترل نور پس‌زمینه نمایشگر در نظر گرفته‌شده است. کنتراست نمایشگر با مقاومت R1 قابل تنظیم می‌باشد.

 

پیکربندی کتابخانه u8g2 در محیط نرم افزار Atmel Studio 7.0

قبل از شروع پیکربندی لازم می‌دانم مقدمه کوتاهی از کتابخانه‌ای موردنظر ارائه دهم. کتابخانه u8g2 نسبتاً کم‌حجم است که به زبان C/C++ نوشته‌شده است. این کتابخانه برای پروژه‌هایی با سیستم‌های نهفته با منابع سخت‌افزاری محدود مناسب می‌باشد. U8g2 منبع باز بوده و می‌توان از لینک زیر دانلود کرد.

لینک کتابخانه

برای پیکربندی کتابخانه در محیط Atmel Studio مراحل زیر بایستی انجام شود:

مرحله 1: ایجاد یک پروژه در زبان C به شکل 4 مراجعه شود.

پیکربندی کتابخانه در محیط Atmel Studio
شکل 4. ایجاد پروژه جدید.

مرحله 2: انتخاب میکروکنترلر Atmega128A به شکل 5 مراجعه شود.

شکل 5 انتخاب میکروکنترلر.
شکل 5 انتخاب میکروکنترلر.

مرحله3 : دو پوشه به نام‌های lib و csrc در پروژه طبق شکل 6 ایجاد کنید.

 درست کردن پوشه های موردنیاز.
شکل 6. درست کردن پوشه های موردنیاز.

مرحله 4: فایل‌های موردنیاز از پوشه csrc از کتابخانه u8g2 طبق شکل‌های زیر به پروژه اضافه کنید. برای اضافه کردن فایل‌های موردنیاز روی پوشه  csrc در پروژه کلیک راست کنید و روی گزینه Add/Existing Item کلیک کنید. حال وارد پوشه کتابخانه که قبلاً دانلود کردید بشوید و تمامی فایل‌های درون پوشه csrc را انتخاب کنید و به‌صورت Add as link به پروژه اضافه کنید(به شکل 8 مراجعه کنید).

اضافه کردن فایل
شکل 7. اضافه کردن فایل های مورد نیاز از پوشه csrc
لینک کردن فایل های csrc.
شکل 8. لینک کردن فایل های csrc.

مرحله 5: فایل‌های موردنیاز از پوشه avr_libc از کتابخانه u8g2 طبق شکل‌های زیر به پروژه اضافه کنید. برای اضافه کردن فایل‌های موردنیاز روی پوشه lib در پروژه کلیک راست کنید و روی گزینه Add/Existing Item کلیک کنید. و فایل‌های u8x8_avr.c و u8x8_avr.h از پوشه u8g2-master\sys\avr\avr-libc\lib انتخاب کرده و به‌صورت Add as link به پروژه اضافه کنید (به شکل 9 مراجعه کنید).

اضافه کردن فایلهای مورد نیاز
شکل 9. اضافه کردن فایلهای مورد نیاز از پوشه lib .

مرحله 6: در این مرحله فرکانس میکروکنترلر را در پروژه مشخص می‌کنیم. بنابراین در Solution  Explorer روی پروژه کلیک راست کرده و بعد روی گزینه Properties کلیک کنید، (به شکل 10 مراجعه کنید) حال طبق شکل 11 روی گزینه Toolchain\AVR GNU C Compiler\Symbols کلیک کنید. سپس در قسمت Define Symbols (-D) روی Add Item کلیک کنید و فرکانس میکروکنترلر را به پروژه اضافه کنید. به شکل‌های 12 و 13 برای اطلاعات بیشتر مراجعه کنید.

 گزینه Properties
شکل 11. گزینه Properties
گزینه Symbols
شکل 10. گزینه Symbols

 

اضافه کردن سیمبل به پروژه.
شکل 12. اضافه کردن سیمبل به پروژه.

لازم به ذکر است فرکانس میکروکنترلر می‌تواند متغیر باشد و همراهان عزیز می‌توانند فرکانس موردنیاز خود را به پروژه اضافه کنند.

اضافه کردن فرکانس 8Mhz به پروژه
شکل 13.اضافه کردن فرکانس 8Mhz به پروژه

مرحله 7: در مرحله پیشین فایل‌های کتابخانه که خارج از پوشه پروژه قرار داشتند به پروژه اضافه شد. بنابراین نیاز است که محل فایل‌های اضافه‌شده برای کامپایلر (Compiler) مشخص شود. طبق مرحله قبل در منوی <Project> Properties روی گزینه Toolchain/Directories کلیک کنید (به شکل 14 مراجعه کنید).
تعیین مسیر کتابخانه
شکل 14. تعیین مسیر کتابخانه

حال در قسمت AVR/GNU C Compiler/Directories روی دکمه Add Item کلیک کنید و پوشه‌های lib و csrc را برای کامپایلر تعیین کنید. مراحل در شکل 15 نشان داده‌شده است.

اضافه کردن مسیر فایلهای استقاده شده
شکل 15. اضافه کردن مسیر فایلهای استقاده شده

سپس تغییرات ایجادشده را ذخیره کنید، در قسمت بعدی روش استفاده از کتابخانه با یک مثال ساده نشان خواهیم داد.

 

آزمایش عملی کتابخانه u8g2 با میکروکنترلر Atmega128A و نمایشگر گرافیکی

بعد از پیکربندی مراحل استفاده از کتابخانه عبارت‌اند از:

مرحله 1: هدر فایل‌های زیر را به فایل main.c اضافه کنید.

#include <u8g2.h>
#include <util/delay.h>
#include <u8x8_avr.h>
#include <avr/power.h>

مرحله 2: ایجاد یک تابع برای تنظیم پین‌های ورودی و خروجی و ایجاد تأخیر لازم برای کنترل پین‌های میکروکنترلر.

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

 uint8_t u8x8_avr_gpio_and_delay(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)

 

مرحله  3: استفاده از تابع زیر برای تنظیمات نمایشگر.

void u8g2_Setup_ks0108_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)

 

برای راه‌اندازی نمایشگر طبق تابع بالا به چهار آرگومان نیاز است.

  • یک استراکچر خالی.
  • چرخش روی نمایشگر برای اطلاعات بیشتر به جدول 1 مراجعه کنید.
  • نوع ارتباط با نمایشگر به‌عنوان‌مثال ارتباط سریال SPI, I2C و غیره. برای اطلاعات بیشتر به جدول 2 مراجعه کنید.

تابعی که در مرحله‌ای دوم برای تنظیم پین‌های ورودی و خروجی ساخته شد.

چرخش روی نمایشگر

مرحله 4: در این مرحله یک اپلیکشن ساده فراهم شده که چند عبارت را روی صفحه نمایش نشان دهد.

 

int main(void)
{

/************************************************************************/
/* Initialised the back light for LCD and turn it on. */
/************************************************************************/
DDRG |=(1<<DDRG0);
PORTG |= (1<<PORTG0);


/************************************************************************/
/* Select set up function for driver KS0108. */
/************************************************************************/
u8g2_Setup_ks0108_128x64_f(&u8g2, U8G2_R0, u8x8_byte_ks0108, u8x8_avr_gpio_and_delay);
u8g2_InitDisplay(&u8g2);
u8g2_SetPowerSave(&u8g2, 0);
/************************************************************************/
/* full buffer example */
/************************************************************************/
u8g2_ClearBuffer(&u8g2);

/************************************************************************/
/* Set the font and clear display screen. */
/************************************************************************/
u8g2_SetFont(&u8g2, u8g2_font_ncenB10_te );
u8g2_ClearDisplay(&u8g2); 

/************************************************************************/
/* Write some texts on the display. */
/************************************************************************/
u8g2_DrawStr(&u8g2, 0, 15, "www.sisoog.com");
u8g2_SendBuffer(&u8g2);
u8g2_SetFont(&u8g2, u8g2_font_ncenB08_te );
u8g2_DrawStr(&u8g2, 0, 32, "u8g2 on Atmega128A");
u8g2_DrawStr(&u8g2, 0, 49, "with Atmel Studio 7");
u8g2_SendBuffer(&u8g2);
_delay_ms(1000);


while(1)

 

 

نمونه کامل کد مربوطه در لینک زیر پیوست شده است.

لینک گیت هاب

مرحله 5: بعد از دانلود کد و تنظیم پروژه طبق مراحل پیشین آن را کامپایل و سپس میکروکنترلر را پروگرم کنید. نتیجه در شکل 16 نمایش داده‌شده است.

نمایش عبارت با u8g2
شکل 16. نمایش عبارت با u8g2

 

 

منبع: سیسوگ

 

مطلب قبلیمبدل دیجیتال به آنالوگ R-2R
مطلب بعدیآموزش STM32 با توابع LL قسمت سی‌ و چهارم: رابط گرافیکی برای wave player

پاسخ دهید

لطفا نظر خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید