Google Translate
جهت دريافت رايگان تازه هاي سايت شماره مويايل خود را به همراه نام و نام خانوادگي به شماره 99009123812060 ارسال كنيد.
· موتور همو پلار در 10 ثانيه | [ 5 نظر - 15792 مشاهده ] |
· نصب برنامه در Slax | [ 9 نظر - 12097 مشاهده ] |
· ورود به محيط Slax | [ 16 نظر - 12540 مشاهده ] |
· خواندن فایلهای MMC و SD با فرمت FAT16 , FAT32 | [ 33 نظر - 26410 مشاهده ] |
· رله کنترل فاز Three Phase Monitor | [ 35 نظر - 30633 مشاهده ] |
تابلوروان: تابلو روان و اندازه گیری دما با SMT160
در این پروژه قصد داریم شما را با نحوه ی کار کردن با نمایشگرهای ماتریسی و همچنین کار کردن با سنسور SMT160 که یک سنسور دما است آشنا کنیم . معرفی سنسور SMT160 این سنسور برای اندازه گیری دما درمحدوده -45C تا +130Cبه کار می رود . مزیت این سنسور نسبت به سنسورهای آنالوگ دما نظیر LM35 این است که خروجی سنسور SMT160 دیجیتال و به صورت مدولاسیون عرض پالس (PWM) است و نیازی به مبدل آنالوگ به دیجیتال ندارد و همچنین خروجی CMOS آن باعث شده تا بتوان سنسور را با کابلی به طول 20 متر به میکرو وصل کرد .در دیاگرام زمانی زیر نمونه ای از پالس خروجی سنسور SMT160 را مشاهده می کنید . این پالس از دو قسمت (T1 سطح مثبت و T2 سطح صفر) تشکیل شده است . در این سنسور زمان کل یعنی T1+T2 ثابت است ولی نسبت یک بودن T1 به T2 متناسب با دما تغییر می کند که به آن D.C (Duty sycle) گفته می شود و ما باید D.C را اندازه گیری کنیم , سپس از فرمول زیر استفاده نماییم . در فرمول زیر temp بر حسب درجه سانتی گراد است سنسوری SMT160 دارای سه نوع بسته بندی است سنسوری که ما در این پروژه استفاده می کنیم از نوع بسته بندی TO – 18 بوده است . ولتاژ کاری SMT160 در محدوده ی 4.75 تا 7 ولت است و حداکثر جریان مصرفی آن 200 میکرو آمپر است . در این برنامه برای خواندن دما باید زمانT1 و T2 موج مربعی خروجی سنسور را اندازه گیری کنیم تا توسط فرمول ذکر شده بتوانیم دما را به دست آوریم . برای اندازه گیری زمان از وقفه خارجی صفر و تایمر یک استفاده می کنیم . موقعیکه لبه پایین رونده پالس سبب وقفه خارجی می شود محتویات تایمر را در متغییرT1 قرار می دهیم و تایمر را Reset و وقفه را حساس به لبه بالا رونده می کنیم و موقعیکه لبه بالا رونده پالس سبب وقفه خارجی می شود محتویات تایمر را در متغییر T2 ذخیره و مجددا وقفه را حساس به لبه پایین رونده می کنیم و تایمر را Reset می کنیم . بدین ترتیب ما هر دو زمان پالس را داریم و می توانیم زمان وظیفه (Duty sycle ) را اندازه بگیریم .
نرم افزار در آوردن کد های ماتریس شاید شما به فکر ساختن یک تابلو روان بوده اید اما مشکل اینجاست که در آوردن کد های ماتریس بدون نرم افزار مشکل و وقت گیر است و ما برای حل این مشکل از نرم افزار زیر استفاده می کنیم . ماتریس های استفاده شده در این پروژه 16*8 است . پس در قسمت Row’s عدد سطر 9 را قرار می دهیم توجه کنید چون اولین سطر ماتریس این نرم افزار جز کدهای تولیدی نمی باشد لذا باید یک واحد بیشتر از سطر ماتریس استفاده تنظیم گردد . همچنین نباید در سطر اول ماتریس این نرم افزار چیزی نوشته شود. در سطر بعدی Col’s=85 است چون ما در این ماتریس فقط می توانیم در هر لحظه 16 ستون را به نمایش در آوریم لذا ما برای نمایش کامل متن آن را به سمت چپ شیفت می دهیم . در قسمت language زبان متن حتما باید در حالت انگلیسی باشد حتی اگر متن شما فارسی باشد و در قسمت number save عدد 1 را انتخاب می کنیم تا صفر های اضافی ما بین کدها ایجاد نشود . همچنین در این نرم افزار شما در قسمت وارد کردن متن کلمه مورد نظر خود را تایپ میکنید و میتوانید توست گزینه ی Change font نوع و اندازه ی متن نوشتاری را تعیین کنید و گزینه text to grid را کلیک کنید تا متن نوشته شده در ماتریس به نمایش درآید و در نهایت برای ایجاد کدهای ماتریس گزینه Save to file را کلیک کنید . برای دانلود کلیک کنید شرح کار پروژه در این پروژه ابتدا متن "میکروکنترولرهایAVR " به صورت شیفت به چپ نمایش داده می شود و سپس کلمه " دما " نمایش داده می شود و دمای خوانده شده را نمایش می دهد مانند "25+" برنامه به گونه ای است که می تواند دمای منفی یا مثبت را اندازه گیری کند و نمایش دهد. حال بهتر است برنامه این پروژه را خط به خط بررسی کنیم تا شما با نحوه برنامه نویسی چنین پروژه ای آشنا شوید . اگر احتمالا شما در عمل با مشکل refresh مواجعه شدید می توانید برخی از تاخیر زمانی های این برنامه را تغییر دهید این تغییر زمانی ها را با علامت @ مشخص می کنیم . برنامه این پروژه با زبان C نوشته شده است. #include <mega16.h> #include <delay.h> #include <math.h> float T1=0.0 , T2=0.0; bit control=0; unsigned char part1=0,part2=0; signed char number=0 ; flash unsigned char number0[]={126,129,129,129,126}; flash unsigned char number1[]={0,130,255,128,0}; flash unsigned char number2[]={198,161,145,137,134}; flash unsigned char number3[]={66,129,137,137,118}; flash unsigned char number4[]={56,36,34,255,32}; flash unsigned char number5[]={79,137,137,137,113}; flash unsigned char number6[]={126,137,137,137,114}; flash unsigned char number7[]={1,255,17,9,7}; flash unsigned char number8[]={118,137,137,137,118}; flash unsigned char number9[]={78,145,145,145,126}; flash unsigned char positive_sign[]={16,56,16,0,0}; flash unsigned char minus_sign[]={16,16,16,0,0}; flash unsigned char text_micro[]= {0,0,0,0,0,0,0,0,0,0,0,128,224,120,46,39, 46,120,224,128,63,127,192,192,127,63,0,254,255,51,51,127, 238,128,0,0,0,120,192,192,220,118,6,0,31,63,48,48, 60,54,58,156,192,112,48,31,159,192,120,50,50,24,48,50, 24,48,55,55,53,29,129,220,116,60,128,192,120,56,48,55, 55,53,29,177,177,56,16,48,56,40,56,0,0,0,0,0,0,0,0,0,0,0,0}; flash unsigned char temp_text[]= {63,96,96,96,32,112,216,112,0,96,192,204,120,0,0,0}; interrupt [EXT_INT0] void ext_int0_isr(void){ TCCR1B=0x00; if (control) { T2=TCNT1; TCNT1=0; MCUCR=0x02; control=0; } else{ T1=TCNT1; TCNT1=0; MCUCR=0x03; control=1; TCCR1B=0x02; } void main () { float DC=0.0; float t=0.0,tp=0.0; signed int loop,refresh,code; PORTA=0x00; DDRA=0xFF; PORTC=0x00; DDRC=0x0F; TCCR1A=0x00; TCCR1B=0x02; TCNT1H=0x00; TCNT1L=0x00; GICR = 0x40; MCUCR=0x02; MCUCSR=0x00; GIFR=0x40; for(code=104;cod>8;code--) { for(refresh=0;refresh<100;refresh++) { for(loop=0,loop<16;loop++) { PORTC=loop; PORTA=~text_micro[abs(code-loop) ] ; delay_us (100); PORTA=0xFF; } } } PORTA=0xFF; asm("sei") for(refresh=0;refresh<250;refresh++) { for(loop=0,loop<16;loop++) { PORTC=~(loop+1); PORTA=~temp_text[loop]; delay_us(500); PORTA=0xFF; } } while(1){ for(loop=0;loop<5;loop++){ DC=T1/(T1+T2); DC+=0.018; t=(DC-0.32)/0.0047; tp=t; part2 = (abs(number) % 10); part1 = (abs(number) / 10); PORTC=~(loop+4); switch (part1) { case 0 : PORTA=~number0[loop];break; case 1 : PORTA=~number1[loop];break; case 2 : PORTA=~number2[loop];break; case 3 : PORTA=~number3[loop];break; case 4 : PORTA=~number4[loop];break; case 5 : PORTA=~number5[loop];break; case 6 : PORTA=~number6[loop];break; case 7 : PORTA=~number7[loop];break; case 8 : PORTA=~number8[loop];break; case 9 : PORTA=~number9[loop];break; default:PORTA=0xFF; } delay_us(1000); PORTA=0xFF; PORTC=~(loop+10); switch (part2) { case 0 : PORTA=~number0[loop];break; case 1 : PORTA=~number1[loop];break; case 2 : PORTA=~number2[loop];break; case 3 : PORTA=~number3[loop];break; case 4 : PORTA=~number4[loop];break; case 5 : PORTA=~number5[loop];break; case 6 : PORTA=~number6[loop];break; case 7 : PORTA=~number7[loop];break; case 8 : PORTA=~number8[loop];break; case 9 : PORTA=~number9[loop];break; default:PORTA=0xFF; } delay_us(1000); PORTA=0xFF; DC=T1/(T1+T2); DC+=0.018; t=(DC-0.32)/0.0047; tp=(tp+t)/2; number=t; if(number >= 0){ PORTC=~(loop); PORTA=~positive_sign[loop]; delay_us(1000); PORTA=0xFF; } else{ PORTC=~(loop); PORTA=~minus_sign[loop]; delay_us(1000); PORTA=0xFF; } } }; }شماتیک و PCB و برنامه پروژه تابلو روان و اندازه گیری دما با SMT160 جهت دانلود کلیک کنید. توضیحات لازم در مورد سخت افزار همان طور که مشاهده می کنید در به وقفه خارجی صفر , سنسور SMT160 را متصل کرده ایم و با یک مقاومت k 10 (مقاومت بالا کش) ورودی وقفه را pull-up نموده ایم . نقش بافر 74LS245 تقویت جریان پورت و همچنین حفاظت پورت میکروکنترلر است . نقش دیکدر 4514 این است که ما می خواهیم هر بار یک ستون را انتخاب کنیم ودیتای مربوط به آن سطر را بفرستیم . بنابراین باید در هر لحظه یک ستون انتخاب شود و این کار را با سرعتی مناسب تکرار کنیم تا بر اساس خطای چشم انسان متن مورد نظر به نمایش در آوریم حسن این دیکدر این است که دارای Latch داخلی است و این کمک می کند برای ماتریس های بزرگتر از 16 ستون بتوان از چند دیکدر به خوبی بهره برد . نقش ترانزیستورهای متصل به خروجی دیکدر تقویت جریان برای نوردهی مناسب LED ها می باشد . شاید سوال شما این باشد که جریان اضافی ناشی از مقاومت های 22 اهمی که در مسیر ترانزیستورها قرار دارند ممکن است به LED ها آسیب برساند اما این طور نیست زیرا LED ها مرتبا خاموش و روشن می شوند وجریان ماکزیمم به صورت لحظه ای به آنها اعمال می شود . شما باید کانکتورهای 8 پایه (Data Row) و 16 پایه (Data column) را به پایه های کانکتور مشابه در ماتریس متصل نمایید .
مرجع :
کتاب میکرو کنترلر AVR
مولف:
مهندس جابر الوندی
ناشر:
نص
کلمات کليدي : LED Sign Board SMT160 تابلوروان سنسوردما دما سنسور ارسال شده در مورخه : چهارشنبه، 3 شهريور ماه ، 1389 توسط lachini
مرتبط با موضوع : مثال تابلو 16 در 128 با مبدل آنلاین [پنجشنبه، 11 شهريور ماه ، 1389]انیمیشن در تابلوروان توسط 74HC595 [پنجشنبه، 7 مرداد ماه ، 1389] تابلوروان با میکرو 8051 [سه شنبه، 5 مرداد ماه ، 1389] نرم افزار آنلاین تبدیل متن به کد هگز [چهارشنبه، 17 تير ماه ، 1388] تابلوروان توسط کیبورد و LCD [پنجشنبه، 8 اسفند ماه ، 1387] تابلوروان قابل اتصال به پورت سریال [سه شنبه، 17 دي ماه ، 1387]
[ ارسال جوابیه ]
[ ارسال جوابیه ]
[ ارسال جوابیه ]
[ ارسال جوابیه ]
[ ارسال جوابیه ]
[ ارسال جوابیه ]
[ ارسال جوابیه ]
[ ارسال جوابیه ]
[ ارسال جوابیه ]
[ ارسال جوابیه ] |
امتیاز دهی به مطلب
تعداد آراء: 25 انتخاب ها
|