راه‌اندازی LCD کاراکتری و ADC در میکروکنترلر PIC

0
117
راه اندازی LCD کاراکتری و ADC در میکروکنترلر PIC
راه اندازی LCD کاراکتری و ADC در میکروکنترلر PIC

در این بخش به آموزش نحوه‌ی استفاده از LCD کاراکتری با استفاده از میکروکنترلر PIC می‌پردازیم و همزمان بخش ADC میکروکنترلر را نیز راه‌اندازی کرده و به صورت ساده نتایج تبدیل ADC را روی LCD نمایش می‌دهیم.

بخش اول، راه‌اندازی ADC

برای این برنامه از میکروکنترلر PIC16F877A استفاده می‌کنیم. مطابق آموزش‌های جلسات قبلی این میکروکنترلر را در بخش تنظیمات انتخاب کرده و فرکانس کلاک میکروکنترلر را روی 8MHZ تنظیم می‌کنیم. از سمت چپ بخش Analog را انتخاب می‌کنیم.

 

راه اندازی LCD کاراکتری و ADC در میکروکنترلر PIC
راه اندازی LCD کاراکتری و ADC در میکروکنترلر PIC

در بخش Analog Input پایه‌های ورودی که قصد استفاده به عنوان ورودی آنالوگ را داریم و همچنین پایه‌های مرجع را (در صورتی که می‌خواهیم مرجعی غیر از تغذیه میکروکنترلر برای مبدل ADC در نظر بگیریم) تعیین می‌کنیم.

در بخش Unites تعیین می‌کنیم که نتایج چند بیتی باشد و در بخش پایین آن کلاک بخش ADC را تعیین می‌کنیم.

بخش دوم راه‌اندازی LCD کاراکتری

برای استفاده از LCD کاراکتری توسط میکروکنترلر PIC ، از سمت چپ پنجره تنظیمات بخش LCD(External) را انتخاب می‌کنیم. با زدن تیک  Use LCD می‌توانیم تعیین کنیم که پایه‌های LCD به کدامیک از پایه‌های میکروکنترلر وصل می‌شود.

با زدن تیک Include Example یک برنامه نمونه برای کار با LCD تولید می‌شود که می‌توانید برای یادگیری بیشتر از آن استفاده کنید.

 

راه اندازی LCD کاراکتری و ADC در میکروکنترلر PIC
راه اندازی LCD کاراکتری و ADC در میکروکنترلر PIC

بخش سوم، نمایش نتایج تبدیل ADC بر روی LCD

کد زیر ولتاژ آنالوگ روی پایه A0 میکروکنترلر را توسط واحد ADC خوانده و بر روی LCD کاراکتری نمایش می‌دهد.

// Belec.ir PIC CCS C courses
#define LCD_RS_PIN PIN_C0
#define LCD_RW_PIN PIN_C1
#define LCD_ENABLE_PIN PIN_C2
#define LCD_DATA4 PIN_C3
#define LCD_DATA5 PIN_C4
#define LCD_DATA6 PIN_C5
#define LCD_DATA7 PIN_C6
#include <16F877A.h>
#device ADC=10
#use delay(crystal=8000000)
#include <lcd.c>
void main()
{
float32 ADC_result;
  lcd_init(); 
  lcd_gotoxy(1,1);
  lcd_putc("Belec.ir Courses");
    lcd_gotoxy(1,2);                 
  lcd_putc("ADC reading:");
    setup_adc(ADC_CLOCK_DIV_32);      
  setup_adc_ports(AN0);             
  set_adc_channel(0);               
   while(TRUE)
  {
    ADC_result = read_adc();
    lcd_gotoxy(13,2);                
    printf(lcd_putc,"%4f",( ADC_result *0.0049));
    delay_ms(10);                   
  }
}

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

  • یک متغیر به نام ADC_result برای ذخیره سازی نتایج تبدیل ADC ایجاد شده است. برای نمایش مقدار اعشاری ولتاژ این متغیر را از نوع float تعریف کرده‌ایم.
  • توسط تابع ()lcd_init که توسط خود نرم‌افزار ایجاد می‌شود تنظیمات اولیه LCD انجام می‌شود.
  • توسط تابع lcd_gotoxy(x, y) می‌توان محل نوشتن متن مورد نظر بر روی LCD را در سطر y و ستون x تنظیم کنیم.
  • توسط تابع lcd_putc(“String”) می‌توانیم عبارت نوشته شده به جای String را روی LCD نمایش دهیم.

به عنوان مثال برای نمایش متن Bele.ir در سطر اول و ستون سوم به بعد LCD :

در ادامه سه تابع نوشته شده برای تنظیمات ADC است که توسط خود نرم افزار با انجام تنظیمات بخش‌های قبلی ایجاد می‌شوند.

تابع setup_adc فرکانس کلاک میکروکنترلر را تعیین می‌کند.

توابع setup_adc_ports و set_adc_channel پایه ورودی ADC میکروکنترلر را تعیین می‌کنند که در این مثال پایه A0 به عنوان ورودی آنالوگ تنظیم شده است.

در حلقه‌ی while(TRUE) که حلقه‌ی دائمی برنامه است، ابتدا توسط تابع read_adc  نتایج تبدیل ADC را خوانده و در متغیر ADC_result ذخیره سازی می‌کنیم، سپس مقدار متغیر ADC_result را با ضرب در عدد 0.0049 توسط تابع استاندارد printf به شکل یک رشته در آورده و توسط تابع lcd_putc بر روی LCD نمایش می‌دهیم.

عدد 0.0049 به صورت تقریبی است و از تقسیم عدد 5 بر عدد 1024 به دست آمده است. نتایج شبیه سازی در نرم افزار پروتئوس:

 

راه اندازی LCD کاراکتری و ADC در میکروکنترلر PIC
راه اندازی LCD کاراکتری و ADC در میکروکنترلر PIC

 

امیدوارم این بخش از آموزش میکروکنترلر PIC و کامپایلر CCS C برایتان مفید واقع شده باشد. سربلند و پیروز باشید.

 

 

منبع:  میکرودیزاینرالکترونیک

 

مطلب قبلیعدم قطعیت سنسور
مطلب بعدیUART در میکروکنترلرهای LPC1768

پاسخ دهید

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