در این بخش به آموزش نحوهی استفاده از LCD کاراکتری با استفاده از میکروکنترلر PIC میپردازیم و همزمان بخش ADC میکروکنترلر را نیز راهاندازی کرده و به صورت ساده نتایج تبدیل ADC را روی LCD نمایش میدهیم.
بخش اول، راهاندازی ADC
برای این برنامه از میکروکنترلر PIC16F877A استفاده میکنیم. مطابق آموزشهای جلسات قبلی این میکروکنترلر را در بخش تنظیمات انتخاب کرده و فرکانس کلاک میکروکنترلر را روی 8MHZ تنظیم میکنیم. از سمت چپ بخش Analog را انتخاب میکنیم.
در بخش Analog Input پایههای ورودی که قصد استفاده به عنوان ورودی آنالوگ را داریم و همچنین پایههای مرجع را (در صورتی که میخواهیم مرجعی غیر از تغذیه میکروکنترلر برای مبدل ADC در نظر بگیریم) تعیین میکنیم.
در بخش Unites تعیین میکنیم که نتایج چند بیتی باشد و در بخش پایین آن کلاک بخش ADC را تعیین میکنیم.
بخش دوم راهاندازی LCD کاراکتری
برای استفاده از LCD کاراکتری توسط میکروکنترلر PIC ، از سمت چپ پنجره تنظیمات بخش LCD(External) را انتخاب میکنیم. با زدن تیک Use LCD میتوانیم تعیین کنیم که پایههای LCD به کدامیک از پایههای میکروکنترلر وصل میشود.
با زدن تیک Include Example یک برنامه نمونه برای کار با LCD تولید میشود که میتوانید برای یادگیری بیشتر از آن استفاده کنید.
بخش سوم، نمایش نتایج تبدیل 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 به دست آمده است. نتایج شبیه سازی در نرم افزار پروتئوس:
امیدوارم این بخش از آموزش میکروکنترلر PIC و کامپایلر CCS C برایتان مفید واقع شده باشد. سربلند و پیروز باشید.
منبع: میکرودیزاینرالکترونیک