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

saalek110

Well-Known Member

آموزش راه اندازی LCD کاراکتری در اتمل استودیو​


تاپیک زیر ، تاپیک راه اندازی lcd در کدویژن است.... برای توضیح راجع به سیم ها تاپیک زیر را هم ببینید ، چون سیم ها فرقی ندارد ، فقط کدها عوض شده:


 

saalek110

Well-Known Member
LCD کاراکتری یکی از ارزان ترین و ساده تریم ماژول های LCD است که در محصولات و پروژه های زیاد استفاده می شود. ۲*۱۶ یعنی LCD دارای ۲ سطر که هرکدام توانایی نشان دادن ۱۶ کاراکتر را دارند.LCD هایی با تعداد سطر و ستون مختلفی در بازار یافت می شود.مثل: ۱*۱۶ یا ۴*۱۶ در این LCD هر کاراکتر با دات ماتریس ۸*۵ یا ۱۰*۵ نمایش داده می شود.

از سایتی که در پست قبل ذکر شد.
 

saalek110

Well-Known Member
برای راه اندازی LCD با میکروکنترلر در محیط اتمل استودیو نیاز داریم تا در مورد سخت افزار این LCD اطلاعاتی داشته باشیم. این LCD ها عموما از IC کنترلر HD44780 استفاده میکنند. پس باید برای اطلاع از چگونگی عملکرد این IC به دیتاشیت این IC مراجعه کرد. ولی ما در این آموزش نیاز به این کار نداریم و از کدهای آماده استفاده خواهیم کرد و شما برای استفاده از LCD کاراکتری کافی است به نحوه کارکرد این کدها آشنایی داشته باشید. این کتابخانه که در اختیار شما قرار می دهیم شامل عملکرد هایی رایجی است که برای استفاده از LCD مورد نیاز می باشد.
 

saalek110

Well-Known Member

نکاتی برای راه اندازی LCD در اتمل استودیو:​

– دو پین اول GND و VCC (یا همان VSS و VDD) برای تغذیه ی LCD به کار میروند.

– پین سوم VEE برای کنترل کنتراست LCD استفاده می شود. برای تنظیم کنتراست باید از یک پتانسیومتر ۱۰k اهم که یک پایه ی آن به VCC و پایه دیگر آن به GND وصل است استفاده کرد پین متغییر پتانسیومتر را به پین VEE وصل می کنیم.

– میکروکنترلر یا میکروپروسور باید دو نوع داده برای کنترل LCD ارسال کند اطلاعات دیتا و اطلاعات Command اطلاعات دیتا شامل کد اسکی کاراکترهایی است که باید بر روی LCD نمایش داده شوند. و اطلاعات کامند اطلاعاتی است که برای سایر عملیات در LCD مثل تعیین جهت LCD یا پاک کردن LCD به کار می رود. اطلاعات دیتا و کامند از یک مسیر دیتا به LCD ارسال می شوند پین های (DB0 تا DB7) که به وسیله ی پین RS مولتیپلکس می شود. به این صورت که وقتی این پین High می شود اطلاعات دیتا بر روی LCD نمایش داده می شود. و وقتی در وضعیت LOW قرار می گیرد دستورات کنترلی را اجرا می کند.

– ولتاژ High بر روی پایه E بهLCD می گوید که پین های (DB0 تا DB7) شامل اطلاعات درست برای دریافت اطلاعات است.

– پین R/W برای کنترل انتخاب نوشتن یا خواندن بر روی LCD است ما به طور معمول نیاز داریم تا اطلاعاتی را روی LCD بنویسیم بنابر این ما معمولا این پین را به زمین وصل می کنیم.

– پایه های +led و -led برای روشن کردن بک لایت LCD کاربرد دارد که بهتر است با یک مقاومت ۳۳۰ اهم سری شود.

می توانیم LCD را به دو صورت ۸ یا ۴ بیتی به میکروکنترلر وصل کنیم در اتصال ۸ بیتی باید دیتا از طریق پایه های DB0-DB7 ارسال شود و فرمت ارسالی دیتا و کامندها به صورت ۸ بیتی باشد. در اتصال ۴ بیتی از پین های DB4-DB7 استفاده می کنیم و باید فرمت دیتای ارسالی به صورت ۴ بیت باشد. در صورت استفاده از حالت ۴ بیتی در پین های میکروکنترلر صرفه جویی می شود. شاید به نظر برسد که سرعت حالت ۴ بیتی کمتر است بله در حقیقت سرعت در حالت ۴ بیتی کمتر است ولی اهمیتی برای ما ندارد زیرا LCD برای نمایش اطلاعت به سرعت بالا نیاز ندارد چون اطلاعات باید توسط چشم خوانده شود و چشم قابلیت تشخیص سرعت بالا را ندارد.
 

saalek110

Well-Known Member

کتابخانه ی LCD کاراکتری برای اتمل استودیو:​

Lcd8_Init & Lcd4_Init:

این تابع ماژول LCD را با پین هایی که به صورت زیر تعریف کردید راه اندازی می کند :

مثال برای حالت 8 بیتی:
PHP:
#define D0 eS_PORTD0
#define D1 eS_PORTD1
#define D2 eS_PORTD2
#define D3 eS_PORTD3
#define D4 eS_PORTD4
#define D5 eS_PORTD5
#define D6 eS_PORTD6
#define D7 eS_PORTD7
#define RS eS_PORTC6
#define EN eS_PORTC7

مثال برای حالت 4بیتی:

PHP:
#define D4 eS_PORTD4
#define D5 eS_PORTD5
#define D6 eS_PORTD6
#define D7 eS_PORTD7
#define RS eS_PORTC6
#define EN eS_PORTC7
 

saalek110

Well-Known Member
Lcd8_Clear & Lcd4_Clear :

برای پاک کردن LCD در دو حالت 8 بیتی و 4 بیتی کاربرد دارد بسته به اینکه lcd را به چه صورتی راه اندازی کرده اید می توانید از دستورات مربوطه استفاده کنید. مثلا در حالت 4 بیتی:
PHP:
Lcd4_Clear();


Lcd8_Set_Cursor & Lcd4_Set_Cursor :

این تابع محل مکان نما را تغییر می دهد همچنین می توان به وسیله ی این تابع محل نمایش متن در LCD را تغییر داد.مثلا در حالت 4 بیتی:

PHP:
Lcd4_Set_Cursor(int row, int column)

Lcd8_Write_Char & Lcd4_Write_Char

برای نمایش یک کاراکتر در LCD نمایش داده می شود.

PHP:
Lcd4_Write_String("electrolab LCD Hello World");

تابع Lcd_Shift_Right:

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

تابع Lcd_Shift_Left:

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

saalek110

Well-Known Member

نمونه برنامه لازم برای راه اندازی LCD کاراکتری در اتمل استودیو:​


PHP:
#ifndef F_CPU
#define F_CPU 16000000UL // 16 MHz clock speed
#endif
#define D4 eS_PORTD4
#define D5 eS_PORTD5
#define D6 eS_PORTD6
#define D7 eS_PORTD7
#define RS eS_PORTC6
#define EN eS_PORTC7

#include <avr/io.h>
#include <util/delay.h>
#include "lcd.h" //Can be download from the bottom of this article

int main(void)
{
  DDRD = 0xFF;
  DDRC = 0xFF;
  int i;
  Lcd4_Init();
  while(1)
  {
    Lcd4_Set_Cursor(1,1);
    Lcd4_Write_String("electrolab LCD Hello World");
    for(i=0;i<15;i++)
    {
      _delay_ms(500);
      Lcd4_Shift_Left();
    }
    for(i=0;i<15;i++)
    {
      _delay_ms(500);
      Lcd4_Shift_Right();
    }
    Lcd4_Clear();
    Lcd4_Set_Cursor(2,1);
    Lcd4_Write_Char('e');
    Lcd4_Write_Char('L');
    _delay_ms(2000);
  }
}

سالک: فایل lcd.h به شکل فشرده ضمیمه پست شد.

منبع آموزش اینه:

طرز اضافه کردن فایل هدر به پروژه:
  1. Right Click on your project folder on the solution explorer on the right side.
  2. Add >> Existing Item
  3. Then Browse lcd.h
  4. Click Add
  5. ترجمه: داخل اتمل استودیو .... اون جایی که داخل پنجره کوچک فایلها و پوشه های پروژه هست ... روی پوشه پروژه کلیک راست کنید و از منوی باز شده گزینه add را بزنید و در زیرمنوی باز شده existing item را بزنید.
 

پیوست ها

  • lcd.zip
    1.5 کیلوبایت · بازدیدها: 2
آخرین ویرایش:

saalek110

Well-Known Member
دانلود شبیه سازی راه اندازی LCD کاراکتری اتمل استودیو در پروتیوس

با تشکر فراوان از آقای علی عزتی بابت این آموزش.
 

پیوست ها

  • Interfacing-LCD-with-Atmega32-Microcontroller-with-Atmel-Studio.zip
    441.2 کیلوبایت · بازدیدها: 0

saalek110

Well-Known Member
سالک: من کد اون سایت ایرانی که از اون سایت خارجی ترجمه کرده بود را کمی تغییر دادم
البته فقط پورت A را انتخاب کردم به جای پورت هایی که سایت اصلی و دوست ایرانی انتخاب کرده بود
PHP:
/*
 * lcd1.c
 *
 * Created: 11/9/2023 4:56:29 AM
 * Author : Javid
 */
#ifndef F_CPU
#define F_CPU 1000000UL // 1 MHz clock speed
#endif


#define D4 eS_PORTA4
#define D5 eS_PORTA5
#define D6 eS_PORTA6
#define D7 eS_PORTA7
#define RS eS_PORTA0
#define EN eS_PORTA2


#include <avr/io.h>
#include <util/delay.h>
#include "lcd.h"

int main(void)
{
     DDRA = 0xFF;
     int i;
     Lcd4_Init();
    
    /* Replace with your application code */
    while (1)
    {
        
        
        Lcd4_Set_Cursor(1,1);
        Lcd4_Write_String("electroSome LCD Hello World");
        for(i=0;i<15;i++)
        {
            _delay_ms(500);
            Lcd4_Shift_Left();
        }
        for(i=0;i<15;i++)
        {
            _delay_ms(500);
            Lcd4_Shift_Right();
        }
        Lcd4_Clear();
        Lcd4_Set_Cursor(2,1);
        Lcd4_Write_Char('e');
        Lcd4_Write_Char('S');
        _delay_ms(2000);
        
        
    }
}

و باید بگم وقتی کد را تبدیل به هگز کردم و ریختم داخل میکروکنترلر
انتظار اذیت و خطا داشتم ولی بی نقص اجرا شد.
یک نوشته متحرک دارد.
 

saalek110

Well-Known Member
دیگه هم وطن عزیز همه چیز را توضیح داده و فکر نمی کنم چیزی برای توضیح مونده باشه.

حالا اگر متن چرخشی نخواهیم و متن ساده بخواهیم باید چه کار کنیم؟
PHP:
#ifndef F_CPU
#define F_CPU 1000000UL // 1 MHz clock speed
#endif


#define D4 eS_PORTA4
#define D5 eS_PORTA5
#define D6 eS_PORTA6
#define D7 eS_PORTA7
#define RS eS_PORTA0
#define EN eS_PORTA2



#include <avr/io.h>
#include <util/delay.h>
#include "lcd.h"

int main(void)
{
     DDRA = 0xFF;
  
     Lcd4_Init();
 
    /* Replace with your application code */
    while (1)
    {
     
     
        Lcd4_Set_Cursor(1,1);
        Lcd4_Write_String("Majidonline");

    //    Lcd4_Clear();
        Lcd4_Set_Cursor(2,1);
        Lcd4_Write_Char('s');
        Lcd4_Write_Char('a');
        _delay_ms(1000);
     
     
    }
}

عکس از lcd بعد اجرای برنامه بالا:

۲۰۲۳۱۱۰۹_۲۰۰۵۲۶.jpg
اون متغیر i را حذف کردم از داخل تابع main
و اون کدهای شیفت دادن را از داخل while حدف کردم.

یک نگاهی هم داخل فایل lcd.h بکنید تا بفهمید چه کدی داخلش هست.
 
آخرین ویرایش:

saalek110

Well-Known Member
کد بالا کار می کنه و فعلا خوبه
ولی بعدا خودتون می توانید کدهایی برای خودتون بنویسید.

بعدا شاید بیشتر اینجا کار کردیم. فعلا باید به تاپیکهای دیگه برسم.
 

saalek110

Well-Known Member
در تاپیک زیر با هدرهای یک سایت دیگر lcd را راه انداختیم..... اون را هم ببینید شاید از اون کدها بیشتر خوشتان بیاید:
با هدر های سایت اکسپلور امبدد

 

جدیدترین ارسال ها

بالا