سلام
بلاخره من اومدم ( فکر کنم دیگه نا امید شده بودین ، یه مقدار گرفتارم )
تمرین شماره 1 :
بر نامه ای بنویسید که در ان دما توسط سنسور 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 ولت باشه تا کار کنه .
پروژه ی بعدی که ساخت ساعت تقویم هست در مجله ی شماره 4 اورده شده بود ، برای اینکه کار دوباره تکرار نشه ، همون پروژه رو جوری تغییر میدیم که بشه ساعت و تقوسم رو با استفاده از سه تا کلید تنظیم کرد . شما روش کار کنید تا چند روز دیگه جوابش رو میزارم .
پروژه ی 3 در پست بعدی