آموزش راه اندازی ال سی دی کاراکتری با ARM

در این مطلب، چگونگی راه اندازی ال سی دی کاراکتری ۱۶×۲ (HD44780U) را با استفاده از ARM و یک میکروکنترلر LPC1768 وصل کنیم.

ARM یا Advanced RISC Machine یک پردازنده است که توسط  شرکت ARM‌ توسعه پیدا می‌کند. شرکت‌های تولید چیست‌ها می‌توانند از نسخه شرکتی آن استفاده کنند. ARM فقط طراحی معماری را انجام می‌دهد.

ال سی دی ۱۶×۲ یکی از از ابتدایی‌ترین  و اصلی‌ترین ماژول‌ها برای نمایش عدد و متن است که مبتدیان هنگام یادگیری استفاده از ماژول‌ها در سیستم‌های مختلف، از این نوع صفحه نمایش استفاده می‌کنند و یادگیری چگونگی راه اندازی ال سی دی کاراکتری می‌تواند کمک زیادی به مبتدیان بکند.

در هر دو خط، به طور همزمان ۱۶ کاراکتر قابلیت نمایش دارند. هر کدام از این کاراکترها با استفاده از پیکسل های کوچک ۵×۷ به نمایش درمی‌آیند.

ویژگی‌ها

  • این ماژول ال سی دی دارای ۱۶ پین است
  • می‌توان برای استفاده از آن از کاراکترهای ۸ بیتی یا ۴ بیتی استفاده کرد. استفاده از کاراکترهای ۴ بیتی، ۴ پین را در هر دوره ذخیره می‌کند.
  • بعد از هر بار روشن شدن، کنترلر و درایور به صورت اتوماتیک ریست می شوند.
  • توابع دستوری قابل پشتیبانی: پاکسازی صفحه نمایش، مکان‌نما، روشن و خاموش کردن صفحه نمایش، فعال و غیر فعال کردن مکان‌نما، چشمک زدن کاراکتری که بر صفحه نمایش داده می‌شود، تغییر مکان‌نما و تغییر صفحه‌نمایش.

عملکردهای پین

در ادامه لیستی از عملکردهای پین و اطلاعات لازم وجود دارد که می‌توانید برای استفاده از عملگرهای مختلف از آن‌ها استفاده کنید.

رجیسترها

برای ال سی دی‌ها HD44780U فقط دو رجیستر ۸ بیتی زیر لازم هستند:

  • رجیستر دستوری (IR)
    رجیسترهای دستوری از میکروکنترلر درون رجیستر برای رم اطلاعات نمایشی (DDRAM) و رم سازنده کاراکتر (CGRAM) نوشته می‌شوند.
  • رجیستر اطلاعات (DR)
    این رجیستر به طور موقت تا زمانی که اطلاعات در DDRAM و CGRAM میکروکنترلر نوشته می‌شوند، این اطلاعات را در خود نگه می‌دارد. این رجیستر همچنین اطلاعاتی که توسط رجیسترهای دیگر به صورت همزمان خوانده می‌شوند را در خود نگه می‌دارد.

برنامه‌نویسی

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

آموزش راه اندازی ال سی دی گرافیکی با میکروکنترلر ARM
خواندن این مقاله

در ادامه، ما رابط ۸ بیتی را به میکروکنترلر LPC1768 وصل خواهیم کرد. ال سی دی ما فقط  یک متن را به نمایش در خواهد آورد.

تعریف‌ها

//*****************************************************************************************************

// Default DATA PORT in OpenLab is PORTB. P0[16:23]

// Default CONTROL PORT in OpenLab is PORTC  P1[16:23]

//*****************************************************************************************************

#define DATA_BUS                              LPC_GPIO0->FIODIR

#define CONTROL_BUS                           LPC_GPIO1->FIODIR

//*****************************************************************************************************

//*****************************************************************************************************

// Control Port definitions

//*****************************************************************************************************

#define CONTROL_SET                           LPC_GPIO1->FIOSET

#define CONTROL_CLEAR                         LPC_GPIO1->FIOCLR

#define RS              ۱۸

#define RW              ۱۷

#define EN           ۱۶

//*****************************************************************************************************

//*****************************************************************************************************

// Data Port definitions

//*****************************************************************************************************

#define DATA_SET                             LPC_GPIO0->FIOSET

#define DATA_CLEAR                           LPC_GPIO0->FIOCLR

#define DATA0      ۱۶

#define DATA1      ۱۷

#define DATA2      ۱۸

#define DATA3      ۱۹

#define DATA4      ۲۰

#define DATA5      ۲۱

#define DATA6      ۲۲

#define DATA7      ۲۳

//*****************************************************************************************************

//*****************************************************************************************************

//Control and Data Mask

//*****************************************************************************************************

#define CONTROL_MASK     ((۱<<RS)|(1<<RW)|(1<<EN))

#define DATA_MASK       ((۱<<DATA7)|(1<<DATA6)|(1<<DATA5)|(1<<DATA4)|(1<<DATA3)|(1<<DATA2)|(1<<DATA1)|(1<<DATA0))

//*****************************************************************************************************

راه‌اندازی پورت‌‌ها

مسیر سه رجیستر راهنمای پین‌ها و ۸ رجیستر اطلاعات موجود، باید به عنوان خروجی (output) تنظیم شوند.

برای انجام این کار بیت های ماسک جدیدی با استفاده از کد زیر تعریف کرده‌ایم.

void INIT_PORTS()

{

    DATA_BUS = DATA_MASK;

    CONTROL_BUS    =    CONTROL_MASK;

    INIT_LCD();

}

عملگرهای دستوری

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

void SEND_CMD(unsigned char cmd)

{

    SEND_BITWISE(cmd);

    CONTROL_CLEAR = (1<<RS)|(1<<RW);

    CONTROL_SET = (1<<EN);

    delay_ms(1);

    CONTROL_CLEAR = (1<<EN);

}

دستورها

دستورهای ساده ای که باید برای راه اندازی ال سی دی کاراکتری نوشته شوند را در ادامه آورده‌ایم. این دستورها ال سی دی را در حالت ۸ بیتی قرار می‌دهند. این کد قابلیت دسترسی به هر هر دو خط و ماتریکس ۵×۷ را دارد.

void INIT_LCD()

{

    SEND_CMD(0x38);              //Initialize LCD in 8-bit mode. 2 Lines. 5*7 mode

    SEND_CMD(0x0C);              //Display ON cursor OFF

    SEND_CMD(0x01);              // Clear display

    SEND_CMD(0x06);              //Shift cursor to the right

    SEND_CMD(0x80);              //Force the cursor to the beginning of the line

}

نوشتن عملگرها

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

نحوه ارتباط بین برد Mojo V3 FPGA با یک ماژول ال سی دی 16x2(شامل بلوک نمودار و کدهای Verilog)
خواندن این مقاله

 void SEND_CHAR_DATA(unsigned char data)

{

    SEND_BITWISE(data);

    CONTROL_CLEAR =  (۱<<RS)|(1<<RW);

    CONTROL_SET = (1<<RS)|(1<<EN);

    delay_ms(1);

    CONTROL_CLEAR = (1<<EN);

    CONTROL_CLEAR = (1<<RS);

}

نمایشگر ال سی دی می‌تواند برای نمایش اطلاعات سنسورها، شمارش مقادیر و نمایش هر گونه کلمه و حرف را به نمایش درآورد.

کد بعدی برای فرستادن استرینگ متشکل از اطلاعات مختلف به نمایشگر ال سی دی کنترلر ساخته شده است.

void SEND_STRING_DATA(char *str)

{

    while(*str!='\0')

    {

        SEND_CHAR_DATA(*str);

        str++;

    }

}

جمع‌بندی

مطلب آموزشی بالا به شما کمک می‌کند تا با استفاده از میکروکنترلر ۳۲ بیتی LPC1768 ARM Cortex M3، راه اندازی ال سی دی کاراکتری ۱۶ * ۲ را انجام دهید. کد نمونه‌ای که در این آموزش از ان استفاده شده است در کتابخانه کدها در بخش ARM موجود است و می‌تاونید از آن استفاده کنید.

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

 

منبع : openlabpro.com

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *