|
آموزش رباتیک برای دانش آموزان و همه علاقمندان علوم رباتیک و الکترونیک آموزشگاه رباتیک در تهران تلفن : 77422883
درس سی و یک : ادامه آموزش کدویژن
در اين جلسه هم بحث برنامه نويسي زبان C را دنبال ميكنيم و در ادامهي مبحث جلسهي قبل، شما را با 2 ساختار كنترلي ديگر آشنا ميكنيم.
الزامي براي نوشتن قسمت else نيست، يعني ميتوان فقط if را بدون داشتن else استفاده كرد. همانطور كه ميدانيد، از else زماني استفاده ميكنيم كه بخواهيم در صورت نادرست بودن شروط ، دستورات مشخصي اجرا شوند(به جلسهي 30 مراجعه شود)
عملكرد اين ساختار به اين صورت است كه ما شرط يا شروطي را براي آن تعريف ميكنيم و تا زمانيكه اين شرط يا شروط برقرار باشند، دستوراتي كه تعيين ميكنيم دائماً اجرا شوند و مكرراً تا زمانيكه شروط برقرار هستند اين دستورات تكرار ميشوند. اين ساختار به صورت زير نوشته ميشود. 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" را تيك ميزنيم و سپس مانند شكل زير تنظيمات را انجام ميدهيد :
همانطور كه گفته شد، وظيفهي 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 به ما گزارش دهد توضيح خواهيم داد.
درس سی و دو : ادامه آموزش مبدل آنالوگ به دیجیتال
در جلسه ی گذشته در مورد ساختار
ADC
یا همان مبدل آنالوگ به دیجیتال توضیحات مفصل داده شد. در این جلسه، نحوه ی
استفاده از ADC
در برنامه را توضیح خواهیم داد.
این
8 پایه،
پایه مربوط به پورت A
هستند که با فعال کردن
ADC در
CodeWizard، این پایه ها
در اختیار ADC
قرار می گیرند. دقت کنید که برای
استفده از ADC
حتماً باید قبلاً تنظیمات را در
CodeWizard انجام داده
باشید.
هنگامیکه شما تنظیمات اولیه را برای فعال سازی ADC در CodeWizard انجام می دهید، به شما این امکان داده می شود که در هر قسمت از برنامه، مقدار هر یک از 8 ADC را بخوانید و از آن استفاده کنید. عبارت" (شماره ي ADC )read_adc " در هر قسمت از برنامه، حاوي مقدار ADC مورد نظر شماست. مثلاً اگر بخواهيم مقدار ADC0 را بررسي كنيم كه آيا از 100 بزرگتر است يا خير، به شكل زير عمل ميكنيم: if(read_adc(0) > 100) يا مثلاً اگر بخواهيم مقدار ADC1 را در داخل يك متغير نگه داري كنيم، به شكل زير عمل مي كنيم:
int a; مبدل آنالوگ به ديجيتال، يكي از مهمترين قابليتهايست كه اكثر ميكروكنترلرهاي خانوادهي AVR آن را دارند. در ميكروكنترلرهاي قديميتر، براي اين كار، بايد يك آي سي به صورت جداگانه بر روي مدار تعبيه ميشد. در جلسهي آينده مبحث بسيار مهم PWM را شروع خواهيم كرد. به وسيلهي اين قابليت بسيار مهم،ما ميتوانيم سرعت موتورها يا هر المان ديگري كه به ميكروكنترلر متصل ميشود را كنترل كنيم. PWM نيز يكي از قابليتهاي مهم خانوادهي AVR است كه در جلسات آينده مفصلاً به آن خواهيم پرداخت.
|
|