ايران ويج

نسخه‌ی کامل: دماسنج ديجيتال با GLCD
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
هدف پروژه :

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


شرح پروژه :


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


سخت افزار مورد استفاده :

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


ساختار برنامه :

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


کتابخانه های استفاده شده :

علاوه بر کتابخانه های معمول استفاده شده در تمامی پروژه جهت راه اندازی هسته ARM و مقداردهی 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 مقدار دهی اولیه می شوند


کد:
[size=medium]TRACE_CONFIGURE(DBGU_STANDARD, 9600, BOARD_MCK);
  printf("GLCD By Naminic Group");
    
    //Pit and AIC init
    PIT_Init(1000,BOARD_MCK/1000000);
  AIC_DisableIT(AT91C_ID_SYS);
  AIC_ConfigureIT(AT91C_ID_SYS, AT91C_AIC_PRIOR_LOWEST, pitIntrupt);
  AIC_EnableIT(AT91C_ID_SYS);
  PIT_EnableIT();
  PIT_Enable();

// ADC init
PIO_Configure(pinsADC, PIO_LISTSIZE(pinsADC));
ADC_Initialize( AT91C_BASE_ADC,
                    AT91C_ID_ADC,
                    AT91C_ADC_TRGEN_DIS,
                    0,
                    AT91C_ADC_SLEEP_NORMAL_MODE,
                    AT91C_ADC_LOWRES_10_BIT,
                    BOARD_MCK,
                    BOARD_ADC_FREQ,
                    10,
                    1200);
    
  ADC_EnableChannel(AT91C_BASE_ADC, 7);
    AIC_EnableIT(AT91C_ID_ADC[/size]
);


سپس LCD گرافیکی راه اندازی می شود ، پس از آن لوگوی گروه صنعتی نامینیک بر روی LCD نمایش داده خواهد شد .
کد:
//[size=medium]GLCd init
glcd_init();

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


آنگاه در یک حلقه بی نهایت به طور پیوسته مقدار سنسور LM35 خوانده می شود و به mv تبدیل می گردد ، طبق Datasheet این سنور به ازای افزایش یا کاهش هر درجه سلسیوس دما ، خروجی ان 10mv تغییر خواهد کرد ، از اینرو با محاسبه دما به سانتیگراد با استفاده از فرمول زیر دما به فارنهایت نیز اندازه گیری می شود و بر روی LCD نمایش داده می شود .

(°C × 9/5) + 32 = °F

کد:
// [size=medium]Infinite loop
while (1)
{

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

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

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

براي اطلاعات بيشتر اينجا كليك كنيد.




[/size]