PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : تمرینهای مجله شماره 3



arsalan681
16-01-2010, 00:30
دوستان کی جواب این تمرینها رو داره؟

arsalan681
18-01-2010, 17:57
دوستان کی جواب این تمرینها رو داره؟
منتظر جوابم

1nafar
06-02-2010, 01:09
سلام
بلاخره من اومدم ( فکر کنم دیگه نا امید شده بودین ، یه مقدار گرفتارم )
تمرین شماره 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 در پست بعدی

1nafar
06-02-2010, 01:49
تمرین شماره 3 :
با استفاده از 10 کلید که به پورت a متصل است ، یک قفل رمز بسازید ( پیغام ها بر روی lcd نمایش داده میشود ) .
حل :
هدف از این تمرین ، انشنایی بیشتر با نحوه کار lcd و استفاده از دستورات شرطی هست .
ما 10 کلید رو به پین های a.0 تا a.9 متصل میکنیم و بعد با استفده از دستور if کلید های مورد نظر رو چک میکنیم و در صورت دسترس بودن انها پیغامی رو بر روی lcd نمایش میدیم :
در این روش که خیلی هم ساده هست ، با استفاده از دستور if پین های رو که صفر شدن چک میکنیم .
فرض کنید رمز ما 1235 باشه ، در این حالت اگه پایه های a.1 و a.2 وa.3 وa.5 که به اونا به ترتیب کلید های شماره 1 و 2 و 3 و5 متصل شده ، صفر بشن ، پس رمز درست هست . ( کلید شماره صفر به پین a.0 و کلید شماره ی 9 به پین a.9 متصل شده . ) .
در برنامه زیر به ازای فشرده شدن کلید های تعیین شده یک مقدار به متغیر ارایه ای a[] تعلق میگیره ، با فشرن کلید تایید که به پایه ی a.10 متصل شده است ، مقدار متغیر های a0 تا a3 که قبلا و با فشرده شدن کلید های 1 و 2 و 3 و 5 مقدار گرفتن ، با هم جمع میشن و در متغیر a4 قرار میگرن ،
بعد از جمع کردن متغیر ها با استفاده از یک دستور شرطی مقدار a4 چک میشه در صورتی که مقدار ان برابر با 10 باشد رمز صحیح است و عبارت pass ok بر روی lcd نمایش داده میشود . به ازای سایر مقادیر عبارت try agenبه نمایش در میاد :

#include "AT91SAM7X256.h"
#include "lib_AT91SAM7X256.h"
#include "lcd.h"
#include "delay.h"
int main (void){
unsigned int a[4] ;
lcd_pin(2,0,1,2,3,4,5);
while(1)
{
if (( AT91F_PIO_GetInput( AT91C_BASE_PIOA) & AT91C_PIO_PA1) == 0)
a[0]=3;
if (( AT91F_PIO_GetInput( AT91C_BASE_PIOA) & AT91C_PIO_PA2) == 0)
a[1]=1;
if (( AT91F_PIO_GetInput( AT91C_BASE_PIOA) & AT91C_PIO_PA3) == 0)
a[2]=2;
if (( AT91F_PIO_GetInput( AT91C_BASE_PIOA) & AT91C_PIO_PA5) == 0)
a[3]=4;
if (( AT91F_PIO_GetInput( AT91C_BASE_PIOA) & AT91C_PIO_PA10) == 0){
a[4]= a[0]+a[1]+a[2]+a[3];
if (a[4]==10)
{
lcd_gotoxy(1,1);
lcd_putsf("pass ok ");
}
else
{
lcd_gotoxy(1,1);
lcd_putsf("try again");
delay_ms(500);
lcd_gotoxy(1,1);
lcd_putsf("@@@@@@@@@");
delay_ms(500);
}
}
}
}

اتصال lcd مانند پروژه ی قبلی هست ، کلید ها باید به زمین متصل بشن ، همچنین پین های میکرو باید با یک مقاومت 10 کیلو به vcc متصل بشن

farhadmz
16-06-2010, 02:38
سلام ==== یه کمک میخواستم در رابطه با اتصال پایه های lcd2*16
مداری که من دارم با sam7s64 هستش اتصال پایه های lcd هم به این ترتیبه :
(rs=pa6)-(e=pa8)-(db0 to db7 = pa11 to pa18 )
این رو چطوری باید تعریفش کنم -- با توضیحاتی که توی pmm3 بود عمل کردم ولی راه نیفاد
ممنون
:0013:

1nafar
17-06-2010, 23:19
سلام
این کتابخونه برای sam7x256 هست و روی میکرو کنترلر دیگه ای تست نشده متاسفانه .
شما باید فایل هدر رو باز کنید و پایه های که برای lcd استفاده شده رو تغییر بدید ، اگه از هدر 4 بیت استفاده کنید راحت تر هستید .
اگه موفق به ویرایش هدر نشدید بگید تا درستش کنم

saeid_ica
27-08-2011, 18:33
اگه میشه همه فایل های پروژه رو یه جا بزارین. من بالاخره نفهمیدم کدوم هدر LCD درستهcry::
اون هدر هایی که توی مجله بود رو من نمیتونم ازش جواب بگیرم.

kavir
28-08-2011, 01:01
سلام
ویرایش دوم مجلات رو دانلود کنید