دماسنج دیجیتال با GLCD

نامينيك

عضو جدید
دماسنج دیجیتال با GLCD

هدف پروژه :
هدف از انجام این پروژه نحوه راه اندازی و استفاده از ال سی دی های گرافیکی می باشد ، ضمن اینکه در این مسیر با ADC و نحوه راه اندازی و استفاده از آن آشنا خواهیم شد .


شرح پروژه :

خواندن دما از سنسور LM35 و نمایش دما به صورت دیجیتالی به سانتی گراد و فارنهایت بر روی LCD گرافیکی .


سخت افزار مورد استفاده :
برای انجام این پروژه از برد آموزشی ARM شرکت نامینیک استفاده شده است ، همچنین نیاز به یک LCD گرافیکی 20 پین استاندارد می باشد . LCD بر روی پین هدر 20 پین روی برد سوار می شود که با علامت P12 بر روی برد مشخص است . با استفاده از مقاومت متغییر R84 می توان کنتراست LCD را کنترل نمود .


ساختار برنامه :
در این پروژه از ساختار های استاندار ارایه شده از سوی شرکت اتمل استفاده شده است به نحوی که فایل اصلی پروژه در آدرس ProjectProject-keilprojectuv2 موجود می باشد ، همچنین تمامی فایل های کتابخانه ای مربوطه در آدرس Projectat91lib قابل دسترس می باشند .


کتابخانه های استفاده شده :
علاوه بر کتابخانه های معمول استفاده شده در تمامی پروژه جهت راه اندازی هسته ارم و مقداردهی IO ها از کتابخانه های زیر استفاده گردیده است .
کتابخانه ( Periodic Interval Timer (PIT : جهت پیاده سازی تابع Delay در برنامه از واحد PIT هسته ارم استفاده شده است تا در زمان مشخص یک interrupt سخت افزاری به سیستم بدهد.

کتابخانه (Advanced Interrupt Controller( AIC : جهت مدیریت interrupt های ایجاد شده از این فایل کتابخانه ای استفاده می گردد.

کتابخانه (Analog-to-Digital Converter(ADC : جهت خواندن مقدار سنسور LM35 استفاده شده است .LM35 یک سنور دما با خروجی ولتاژ پیوسته می باشد که برای محاسبه مقدار دما نیاز است تا خروجی آنالوگ سنسور اندازه گیری شود.

کتابخانه GLCD : جهت راه اندازی LCD گرافیکی از این کتابخانه استفاده شده است ، لازم به توضیح است کتابخانه های مشابه دیگری نیز برای این منظور یافت می شود که البته این کتابخانه تمامی توابع سطح پایین را پیاده سازی نموده و این قابلیت را دارد تا از تمامی امکانات GLCD ها استفاده گردد.
در ارتباط با LCD های گرافیکی لازم به توضیح است که این LCD ها به صورت Pixel accessible می باشند ، به این معنا که جهت استفاده از آنها باید هر Pixel را به صورت جداگانه مقدار دهی نمود ، از اینرو توابع سطح پایین جهت مقدار دهی و initialize کردن LCD پیاده سازی می گردند که با استفاده از آنها می توان توابع مفید دیگری مانند نوشتن و کشیدن بر روی LCD ها را پیاده سازی نمود .


تشریح کد :

در ابتدای برنامه ابتدا واحد های PIT و AIC و ADC مقدار دهی اولیه می شوند


کد:
 TRACE_CONFIGURE(DBGU_STANDARD, 9600, BOARD_MCK);
کد:
[SIZE=3]  printf("GLCD By Naminic Group);"[/SIZE]

[SIZE=3]    //Pit and AIC init[/SIZE]
[SIZE=3]    PIT_Init(1000,BOARD_MCK/1000000);[/SIZE]
[SIZE=3]  AIC_DisableIT(AT91C_ID_SYS);[/SIZE]
[SIZE=3]  AIC_ConfigureIT(AT91C_ID_SYS, AT91C_AIC_PRIOR_LOWEST, pitIntrupt);[/SIZE]
[SIZE=3]  AIC_EnableIT(AT91C_ID_SYS);[/SIZE]
[SIZE=3]  PIT_EnableIT();[/SIZE]
[SIZE=3]  PIT_Enable();[/SIZE]

[SIZE=3]// ADC init[/SIZE]
[SIZE=3] PIO_Configure(pinsADC, PIO_LISTSIZE(pinsADC));[/SIZE]
[SIZE=3] ADC_Initialize( AT91C_BASE_ADC,[/SIZE]
[SIZE=3]                    AT91C_ID_ADC,[/SIZE]
[SIZE=3]                    AT91C_ADC_TRGEN_DIS,[/SIZE]
[SIZE=3]                    0,[/SIZE]
[SIZE=3]                    AT91C_ADC_SLEEP_NORMAL_MODE,[/SIZE]
[SIZE=3]                    AT91C_ADC_LOWRES_10_BIT,[/SIZE]
[SIZE=3]                    BOARD_MCK,[/SIZE]
[SIZE=3]                    BOARD_ADC_FREQ,[/SIZE]
[SIZE=3]                    10,[/SIZE]
[SIZE=3]                    1200);[/SIZE]

[SIZE=3]  ADC_EnableChannel(AT91C_BASE_ADC, 7);[/SIZE]
[SIZE=3]    AIC_EnableIT(AT91C_ID_ADC)[/SIZE]][SIZE=3]; 
[/SIZE]


سپس LCD گرافیکی راه اندازی می شود ، پس از آن لوگوی گروه صنعتی نامینیک بر روی LCD نمایش داده خواهد شد .


کد:
کد:
[SIZE=3]//GLCd init[/SIZE]
[SIZE=3]glcd_init();[/SIZE]

[SIZE=3]    //load Bit map[/SIZE]
[SIZE=3]GLCD_ClearScreen();[/SIZE]
[SIZE=3]GLCD_GoTo(0,0);[/SIZE]
[SIZE=3]GLCD_Bitmap(logo,0,0,128,64);[/SIZE]
[SIZE=3]GLCD_WriteString_farsi("",1);[/SIZE]
[SIZE=3]delay_ms(3000[/SIZE]][SIZE=3]);
[/SIZE]


آنگاه در یک حلقه بی نهایت به طور پیوسته مقدار سنسور LM35 خوانده می شود و به mv تبدیل می گردد ، طبق Datasheet این سنور به ازای افزایش یا کاهش هر درجه سلسیوس دما ، خروجی ان 10mv تغییر خواهد کرد ، از اینرو با محاسبه دما به سانتیگراد با استفاده از فرمول زیر دما به فراهایت نیز اندازه گیری می شود و بر روی LCD نمایش داده می شود .
(°C × [SUP]9[/SUP]/[SUB]5[/SUB]) + 32 = °F


کد:
[SIZE=3]// Infinite loop[/SIZE]
[SIZE=3]while (1) [/SIZE]
[SIZE=3]{[/SIZE]

[SIZE=3]    ADC_StartConversion(AT91C_BASE_ADC);[/SIZE]
[SIZE=3]    delay_ms(10);             [/SIZE]
[SIZE=3]    temp =  ConvHex2mV(ADC_GetConvertedData(AT91C_BASE_ADC, 7)) / 10;[/SIZE]
[SIZE=3]    sprintf(s,"Temp = %f C",temp);[/SIZE]
[SIZE=3]    GLCD_GoTo(0,0);[/SIZE]
[SIZE=3]    GLCD_WriteString(s);[/SIZE]
[SIZE=3]    GLCD_GoTo(0,7);[/SIZE]
[SIZE=3]    temp = temp * 9 / 5 + 32 ;[/SIZE]
[SIZE=3]    sprintf(s,"Temp = %f F",temp);[/SIZE]
[SIZE=3]    GLCD_WriteString(s);[/SIZE]
[SIZE=3]    delay_ms(200);[/SIZE]
[SIZE=3]}
[/SIZE]



دانلود سورس کد

در اینجا شما میتوانید سورس برنامه را دریافت ،کامپایل و پروگرم نمایید و شاهد عملکرد برنامه باشید.

براي اطلاعات بيشتر به www.naminic.com مراجعه كنيد.



 
بالا