تمرین .
بر نامه ای بنویسید که در آن دما توسط سنسور lm35 اندازه گرفته شود و بر روی lcd نمایش داده شود . با زیادتر شدن دما از 35 درجه بر روی lcd عبارت high و با کمتر شدن آن از 25 درجه بر روی lcd عبارت low نمایش داده شود
حل :
قبلا با نحوه ی راه اندازی lcd و نحوه نمایش خروجی اون بر روی lcd آشنا شدیم . در این پروژه باید داده دریفاتی از سنسور lm35 رو به مقدار دما تبدیل کنیم و بعد با دستور if شروط خواسته شده رو انجام بدیم .
lm35 یک سنسور دمای سه پایه هست که خروجی اون به ازای هر درجه 10 میلی ولت تغییر میکنه ، همچنین خروجی به ازای دمای 0 درجه برابر با صفر است .
با این حساب مقدار ولتاژ خروجی به ازای 150 درجه که بیشترین مقدار اندازه گیری شده توسط این سنسور هست برابر با 1.5 ولت میباشد .
ما میدونیم که adc در ارم به ازای 3.3 ولت عدد 1023 رو برمیگردونه ، پس با یک تناسب بندی ساده میشه فهمید که به ازای ولتاژ 1.5 ولت که نماینگر دمای 150 درجه هست ، عدد 465 بر میگرده . عدد 465 به ازای دمای 150 درجه و ولتاژ 1.5 هست ، ما میخواییم که بر روی lcd عدد 150 نمایش داده بشه .
پس با تقسیم کردن متغییری که عدد 465 در اون ذخیره شده به 3.1 ، مقدار دیجتال نمایش داده شده متناسب با دمای محیط خواهد بود :
#include "AT91SAM7X256.h"
#include "lib_AT91SAM7X256.h"
#include "lcd.h"
#include "delay.h"
#include "adc.h"
int main (void){
unsigned int a ;
config_adc(0xc0);
lcd_rs(2,0x1);
lcd_e (2,0X2 );
lcd_data(2,0X3FC);
while(1)
{
start_adc();
lcd_gotoxy(1,1);
lcd_putsf("adc=");
a = read_adc(6);
a=a/3.1;
lcd_gotoxy(2,1);
lcd_puts(a);
delay_ms(500);
}
}برنامه بالا مقدار دما رو اندازه گیری میکنه و بر روی lcd که به صورت 8 بیت پیکربندی شده ، نمایش میده . برای اینکه شروط در برنامه بیاریم ، باید ببینم که به ازای دمای 35 و 25 درجه ، چه مقدار ولتاژ انالوگ به adc اعمال میشه و مقدار دیجتال برگردونده شده چقدر هست :
به ازای دمای 35 درجه ، خروجی سنسور 350 میلی وبت هست ، با یک تناسب ساده میشه فهمید که به ازای این ولتاژ adc عدد 108.5 رو برمیگردونه
به ازای دما ی 25 درجه خروجی سنسور 250 میلی ولت هست ، در این حالت مقدار دیجیتال که توسط adc ایجاد میشه برابر 77.5 است .
با اضافه کردن یک شرط ساده برنامه به پایان میرسه :
#include "AT91SAM7X256.h"
#include "lib_AT91SAM7X256.h"
#include "lcd.h"
#include "delay.h"
#include "adc.h"
int main (void){
unsigned int a ;
config_adc(0xc0);
lcd_rs(2,0x1);
lcd_e (2,0X2 );
lcd_data(2,0X3FC);
while(1)
{
start_adc();
lcd_gotoxy(1,1);
lcd_putsf("adc=");
a = read_adc(6);
a=a/3.1;
lcd_gotoxy(1,5);
lcd_puts(a);
delay_ms(500);
if (a==108)
{
lcd_gotoxy(2,1);
lcd_putsf("high");
}
else if (a==77)
{
lcd_gotoxy(2,1);
lcd_putsf("low ");
}
}
}توی این برنامه از کتابخونه های lcd هشت بیت و adc و تاخیر استفاده شده ، شما باید این کتابخونه ها رو در پوشه ای که پروژه رو در اون ذخیره میکنیدیا محل نصب کیل داشته باشید .
برنامه زیر مخصوص lcd چهار بیت هست
#include "AT91SAM7X256.h"
#include "lib_AT91SAM7X256.h"
#include "lcd.h"
#include "delay.h"
#include "adc.h"
int main (void){
unsigned int a ;
config_adc(0xc0);
lcd_pin(2,0,1,2,3,4,5);
while(1)
{
start_adc();
cursor_off();
lcd_gotoxy(1,1);
lcd_putsf("adc=");
a = read_adc(6);
a=a/3.1;
lcd_gotoxy(1,5);
lcd_puts(a);
delay_ms(500);
if (a==108)
{
lcd_gotoxy(2,1);
lcd_putsf("high");
}
else if (a==77)
{
lcd_gotoxy(2,1);
lcd_putsf("low ");
}
}
}توی این پروژه پایه ی rs به پین b.0 و پایه ی e به پین b.1 و پایه ی db4 به پین b.2 و...... پایه ی db7 به پین b.4 متصل میشه . سنسور به adc شش متصل میشه و ولتاژ تغذیه ی اون باید 5 ولت باشه تا کار کنه .
برای راه اندازی موارد بالا به کتابخاه های زیر نیاز خواهید داشت:
http://dl.ir-manup.com/files/d/lt/pmm/AllProjectsPmm1-4.rarمنبعدوستان این sample ها که واسه 7s هست، میشه با 7x هم اجرا کرد؟؟؟ چه جوری؟
کافیه نام میکرو و کتابخاونه ی اون رو به میکرو کنترلر مورد نظر تغییر بدید ، همچنین ممکنه توی برنامه ی قبلی از پایه های استفاده شده باشه که توی میکرو کنترلر جدید موجود نباشه ، که باید این مورد رو هم حل کنید .