|
آموزش رباتیک برای دانش آموزان و همه علاقمندان علوم رباتیک و الکترونیک آموزشگاه رباتیک در تهران تلفن : 77422883
درس بیست و سه : مقدمه برنامه نویسی از اين جلسه ما وارد مبحث آموزش مقدماتي زبان C مي شويم تا دوستان کمي با مقدمات برنامه نويسي آشنا بشوند. در استفاده از ميکروکنترلرها براي ساخت ربات هاي مقدماتي مثل مسير ياب و آتش نشان و ... ما نيازي به آموختن برنامه نويسي در حد حرفه اي نداريم و کمي آشنايي با مقدمات براي ما کافيست!!! بدون مقدمه بيشتر وارد بحث مي شويم.
همانطور که مي دانيد، کوچک ترين واحد
ذخيره سازي اطلاعات در حافظه،
Bit
( بیت ) است. (جلسه ي شانزدهم در مورد يک
Bit توضيح
داده شده).
توضيح بيشتر:
در اينجا، در حقيقت تعداد کل حالت ها، برابر است با حاصل ضرب حالت هاي هر بيت (که 2 حالت مي باشد) مي باشد. به عنوان مثال براي محاسبه ي تعداد حالت هاي 3 بيت اطلاعات، داريم: 8=3^2=2*2*2. طبق همين رابطه، يک بايت، 256=8^2 حالت مختلف مي تواند باشد. هر 1024 بايت را 1 کيلوبايت مي گويند و هر 1024 کيلو بايت، يک مگابايت است. هر 1024 مگا بايت هم يک گيگابايت و هر 1024 گيگا بايت هم يک ترابايت نام دارد.( 1024=10^2) حافظه هاي کامپيوترهاي خانگي امروزي، مي تواند تا چند صد گيگابايت هم باشد.
موسسه ي استاندارد آمريکا، استانداردي براي ذخيره سازي اطلاعات معرفي کرد. اين استاندارد 256 کاراکتر (يک کاراکتر عبارتست از يک عدد، رقم يا يک علامت مثل + و -) را کد گذاري کرد و به هر کدام يک عدد 8 رقمي در مبناي 2(يعني يک بايت) نسبت داد. اين کارکترها شامل همه ي حروف الفباي لاتين، اعداد 0 تا 9، علامت هاي مختلف مثل نماد جمع(+) و تفريق(-) و ... هستند. در حقيقت طبق اين استاندارد، براي ذخيره سازي هر کاراکتر، يک بايت از حافظه به آن اختصاص ميابد. مثلاً براي ذخيره سازي کلمه ي"ALI" به 3 بايت حافظه نياز داريم. جدول کدهاي ASCII را مي تونيد در کتاب هاي برنامه نويسي يا با جستجو در اينترنت به راحتي ببينيد.
زبان ماشين:
زبان اسمبلي: بعد از اين ها نوبت به زبان هاي برنامه نويسي سطح بالا مي رسد. اين زبان ها سعي کرده اند تا حد امکان به زبان گفتار انسان نزديک شوند. زبان C يکي از زبان هاي سطح بالا مي باشد. يک برنامه، شامل چندين دستور مختلف هستش که ما آنها را پشت سرهم با ترتيب مشخصي مي نويسيم. در زبان C دستورات بايد حتماً داخل توابع باشند. يک تابع عبارتست از چند دستور که در داخل يک آکولاد ({}) نوشته مي شوند و نام مشخصي هم براي ان ها گذاشته مي شود. همچنين توابع مي توانند اطلاعاتي را به عنوان ورودي و خروجي از برنامه دريافت و به آن بازگردانند. در زبان C وجود تابعي با نام main الزاميست. يعني ما بايد حتماً تابعي با نام main در برنامه ي خود داشته باشيم و اجراي برنامه هم از تابع main شروع مي شود. در Codevision، بعد از انجام تنظيمات اوليه، خود برنامه براي شما قالبي را آماده مي کند که در آن تنظيمات اوليه ي پورت ها و .... همچنين بعضي تعاريف اوليه مثل تابع main انجام شده است. فقط کافيست شما دستورات خود را در داخل آن فضاي مشخص شده (در داخل تابع main) تايپ کنيد. در جلسه آينده براي آشنايي با نحوه ي برنامه نويسي در فضاي Codevision بعد از تعريف متغيرها، برنامه ي يک ربات مسير ياب بسيار ساده را با هم خواهيم نوشت.
درس بیست و چهارم : آشنایی مقدماتی با پورتهای AVR
شماره ي پايه "." نام پورت
مثلاً اولين پايه ي پورت
D
به اين صورت نشان داده مي شود:
D.0
دقت کنيد که شماره گذاري پايه ها در
پورت ها از 0 شروع مي شود.
رجيستر چيست؟
رجيستر DDRx:
براي تنظيم پايه ها در برنامه، بايد به
جاي x
بايد آدرس پايه ي مورد نظر(مثل
B.3) را
بنويسيم. اگر بخواهيم آن پايه خروجي باشد بايد بيت رجيستر مربوط به
آن را 1 کنيم، و اگر بخواهيم آن پايه ورودي باشد، بايد بيت
رجيستر مربوط به آن را 0 کنيم. به عنوان مثال اگر بخواهيم پايه17
يعني D.3
خروجي باشد بايد اين جمله را بنويسيم:
DDRD.3=1;
رجيستر PORTx:
رجيستر PINx: نکته ي بسيار مهم: دقت کنيد که در زبان C، بايد در انتهاي هر خط از برنامه يک علامت ";" گذاشته شود. به اين علامت در زبان انگليسي سِمي کالِن مي گويند.
نکته ي مهم: بسيار خوب، حالا نوبت نوشتن برنامه ي 1 ربات مسيرياب ساده است که فقط 2 تا سنسور داره!!! نرم افزاري کمکي به نام Code Wizard در داخل همان Codevision وجود دارد که کار ما را براي انجام تنظيمات اوليه مانند تنظيم ورودي يا خروجي بودن پايه ها آسان مي کند. يعني ديگه نيازي نيست براي هر پايه تک تک با رجيستري DDR سرو کله بزنيم، و به راحتي با چند تا تيک ساده همه ي پايه ها رو تنظيم مي کنيم. البته Code wizard همونطور که از اسمش هم معلومه بسياري امکانات جادويي ديگري هم داره که در جلسات آينده به تدريج با آن ها آشنا خواهيم شد. Code Wizard در حقيقت براي ساده تر کردن و سريع تر کردن برنامه نويسي در فضاي Codevision طراحي شده است و کارش اين است که قسمت هاي زيادي از برنامه را به صورت خود کار و طبق خواسته هاي ما براي ما مي نويسد. پس با اين حساب نيازي نيست تنظيمات رجيستري DDRx رو ما در برنامه خودمون انجام بديم و اين کار رو به Code wizard واگذار مي کنيم. با Code wizard در جلسه ي آينده آشنا خواهيم شد. پس در اين جلسه فرض مي کنيم تنظيمات اوليه مثل رجيستري DDRx و ... انجام شده است. پايه هاي B.0 و B.1 را به صورت ورودي(براي دريافت اطلاعات سنسورها)، و پايه هاي B.2 ،B.3 ، B.4 و B.5را به صورت خروجي (براي کنترل حرکت موتورها) تنظيم کرده مي کنيم. B2 و B.3 براي کنترل موتور سمت راست و B.0 براي سنسور سمت راست! B.4 و B.5 براي کنترل موتور سمت چپ و B.1 براي سنسور سمت چپ! حال مانند ربات قبلي، يک پايه از هر موتور را 0 مي کنيم؛ و روشن و خاموش کردن هر موتور را، با اعمال 0 يا 1 منطقي بر روي پايه ي ديگر کنترل مي کنيم. پايه ي ديگر را هم به صورت هماهنگ با سنسور متناظر آن سمت 0 و 1 مي کنيم، يعني اگر خروجي سنسور 0 بود، پايه ي موتور را 0 مي کنيم و اگر 1 بود ، پايه را 1 کرده و موتور را فعال مي کنيم.(به شرطي که از مدار گيرنده ي شماره 2 استفاده شود(جلسه ي 15)) در زبان C علامت "=" يک عملگر است که عملوند سمت راست خود را خوانده و در عملوند سمت چپ خود مي ريزد. مثلاً وقتي مي نويسيم: PORTB.3=PINB.0; ابتدا مقداري B.0 خوانده مي شود و سپس بر روي B.3 ريخته مي شود. يعتي مثلاً اگر روي B.0 ، 1 منطقي اعمال شده باشد، پايه ي B.3 نيز 1 منطقي مي شود. حال با توضيحات داده شده به برنامه ي ربات مسير ياب ساده دقت کنيد: PORTB.2=0; PORTB.4=0; PORTB.3=PINB.0; PORTB.5=PINB.1; همانطور که مي بينيد اين برنامه بسيار ساده و کوتاه است.حضور در کلاسهای آموزشگاه رباتیک شما را به متخصص خبره تبدیل خواهد نمود. در جلسات آينده سعي مي کنيم شما رو با Code wizard بيشتر آشنا کنيم.
|
|