تكميل if-else، ساختار while، آشنايي با مبدل آنالوگ به ديجيتال(ADC) و ...
به نام خدا
با عرض سلام و خسته نباشيد خدمت همهي دوستان خوبم
اميدوارم مطالب ارائه شده تا به اينجا داراي سطح كيفي مناسبي بوده باشند و و دوستان عزيز ما بهرهوري مناسب را از اين مطالب كرده باشند. اگر پيشنهاد يا نظري در مورد اين بخش داريد حتماً با ما در ميان بگذاريد تا انشاالله بتوانيم با الهامگيري از نظرات سازنده شما دوستان عزيز، اين بخش را پربارتر كنيم.
در اين جلسه هم بحث برنامه نويسي زبان C را دنبال ميكنيم و در ادامهي مبحث جلسهي قبل، شما را با 2 ساختار كنترلي ديگر آشنا ميكنيم.
ابتدا يك نكتهي ديگر در مورد ساختار if() و else:
الزامي براي نوشتن قسمت else نيست، يعني ميتوان فقط if را بدون داشتن else استفاده كرد. همانطور كه ميدانيد، از else زماني استفاده ميكنيم كه بخواهيم در صورت نادرست بودن شروط ، دستورات مشخصي اجرا شوند(به جلسهي 31 مراجعه شود)
عملكرد اين ساختار به اين صورت است كه ما شرط يا شروطي را براي آن تعريف ميكنيم و تا زمانيكه اين شرط يا شروط برقرار باشند، دستوراتي كه تعيين ميكنيم دائماً اجرا شوند و مكرراً تا زمانيكه شروط برقرار هستند اين دستورات تكرار ميشوند.
اين ساختار به صورت زير نوشته ميشود.
while( شرط يا شروط )
{
دستور1 ;
دستور2 ;
دستور3 ;
…
}
دستورات 1 تا 3 و كلاً هر دستوري كه در قسمت مشخص شده نوشته شده باشد، مكرراً تازمانيكه شروط داخل پرانتز برقرار باشند اجرا ميشوند.
نكات مهم در مورد اين ساختار: |
تمام نكاتي كه در مورد ساختار else-if در جلسهي گذشته مطرح كرديم در مورد سختار while هم صادق هستند.
همانطور كه قبلاً هم گفته شد، زبان C يك زبان "Case Sensitive" است، يعني در اين زبان بين حروف بزرگ و كوچك تفاوت است. while، if، else همگي با حروف كوچك نوشته ميشوند و اگر با حروف بزرگ نوشته شوند كار نميكنند.
همانطور كه قبلاً گفته شد، دستور while(1) يك حلقهي بي نهايت است و دستورات داخل آن تا زمانيكه ميكروكنترلر روشن باشد مكرراً اجرا خواهند شد.
در ادامهي اين جلسه قصد داريم يكي از مهمترين و پركاربردترين قابليتهاي ميكروكنترلر ATmega16 به نام ADC يا همان A to D را معرفي كنيم.
ADC مخفف "Analog-Digital Converter" و به معناي مبدل آنالوگ به ديجيتال است.
اگر بخواهيم اين قابليت را به صورت ساده توصيف كنيم، يك ولت متر ديجيتال است كه بر روي پايههاي ميكروكنترلر نصب شده است و به وسيلهي آن ميتوان ولتاژ پايههاي ورودي را با دقت مناسبي اندازهگيري كرد. همانطور كه ميدانيد ما تا به حال در هيچ آي سي نميتوانستيم شدت ولتاژ ورودي را به دقت اندازه گيري كنيم و فقط ميتوانستيم بدانيم آيا ولتاژ ورودي بالاي 2.5 ولت است يا زير 2.5 ولت، و وروديهايمان را به صورت 0 و 1 برسي ميكرديم.(آي سي ها وروديهاي خود را منطقي ميكنند)
اما به كمك اين قابليتِ ميكروكنترلرهايِ خانوادهي AVR، ما ميتوانيم با دقت مناسبي ولتاژ ورودي خود را بررسي كنيم.
يكي از كاربردهاي مهم ADC ميتواند در رباتهاي امدادگر دانشاموزي براي تشخيص رنگ باشد. همانطور كه ميدانيد هر رنگ، ميزان مشخصي از نور را بازتاب ميدهد و بقيه را جذب ميكند، ما با اندازهگيري مقدار نور بازتاب شده، ميتوانيم رنگ را تشخيص دهيم. در اينجا ما براي اندازهگيري ميزان شدت نور بازتاب شده، بايد از ADC ميكروكنترلر استفاده كنيم تا بتوانيم ولتاژ خروجي سنسور نوري خود را به دقت اندازهگيري كنيم.
ADC يكي از مهمترين و پر كاربردترين قابليتهاي ميكروكنترلرهاي خانوادهي AVR است كه به تدريج با كاربردهاي فراوان آن در بخشهاي مختلف آشنا خواهيد شد.
در اين جلسه ما نحوهي انجام تنظيمات اوليهي CodeWizard براي راهاندازي ADC را آموزش ميدهيم.
ابتدا CodeWizard را باز كرده و در آن، لبهي ADC را انتخاب ميكنيم، و در لبهي ADC، گزينهي "ADC Enabled" را تيك ميزنيم و سپس مانند شكل زير تنظيمات را انجام ميدهيد :
همانطور كه ميبينيد، دومين قسمتي كه تيك زده شده "Use 8 bits" است.در ادامه در مورد دليل اين كار توضيح داده شده است.
همانطور كه گفته شد، وظيفهي ADC، اندازه گيري ولتاژي است كه بر روي پايهي ورودي قرار گرفته است. اما ADC عددي را كه مولتي متر به ما نشان ميدهد گزارش نميكند، بلكه متناسب با ولتاژ پايهي ورودي، عددي را در بازهي 0 تا 255 به ما گزارش ميكند. يعني عدد 0 را به ولتاژ 0ولت اختصاص ميدهد، و 255 را به 5 ولت؛ و هر ولتاژي بين 0 تا 5 ولت را، متناسباً، با عددي بين 0 تا 255 گزارش ميكند. در حقيقت براي سهولت در محاسبه، مي توانيد فرض كنيد اندازهي ولتاژ ورودي بر حسب ولت، ضربدر 51، برابرست با عددي كه ADC براي آن ولتاژ مشخص، به ما گزارش ميكند.
به عنوان مثالي ديگر، اگر خروجي مدار يك سنسور نوري را به پايهي ورودي ADC متصل كرده باشيد، و خروجي مدار سنسور 2 ولت باشد،ADC عدد 102 را به ما گزارش ميكند.
اگر تيكِ گزينهي "Use 8 bits" را برداريم، بازهي ما به 0 تا 1024، گشترش پيدا خواهد كرد و در حقيقت دقت اندازهگيري ما 4 برابر خواهد شد. يعني 5 ولت ما، به جاي 255، با عدد 1024 گزارش خواهد شد، و ولتاژهاي بين 0 و 5 ولت نيز متناسباً با عددي بين 0 تا 1024 گزارش خواهند شد. اما در كارهاي ما نيازي به اين دقت بالا نيست و معمولاً "Use 8 bits" را تيك ميزنيم تا بازهي ما بين 0 تا 255 باشد.
دربارهي تنظيمات ADC مطالب زيادي وجود دارد كه ما از مطرح كردن تمام آنها در اين بخش ميپرهيزيم، دوستاني كه علاقهمند هستند، ميتوانند از طريق كتابهاي مرجع و ديگر مراجع موجود، مطلب را پي بگيرند، اما در همين حدي كه مطالب در اينجا مطرح ميشوند، براي كار ما تقريباً كافيست و الزامي در مطالعهي منابع جانبي نيست.
در جلسهي آينده در مورد نحوهي دريافت اين عددي كه قرار است ADC به ما گزارش دهد توضيح خواهيم داد.
تا جلسهي آينده خدا نگه دار
دوست شما، فراز اميرغياثوند