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

 آموزش  رباتیک برای دانش آموزان و همه علاقمندان علوم رباتیک و الکترونیک

آموزشگاه رباتیک در تهران     تلفن    :  77422883

 

 

 

درس بیست و سه : مقدمه برنامه نویسی

از اين جلسه ما وارد مبحث آموزش مقدماتي زبان C مي شويم تا دوستان کمي با مقدمات برنامه نويسي آشنا بشوند. در استفاده از ميکروکنترلرها براي ساخت ربات هاي مقدماتي مثل مسير ياب و آتش نشان و ... ما نيازي به آموختن برنامه نويسي در حد حرفه اي نداريم و کمي آشنايي با مقدمات براي ما کافيست!!!

بدون مقدمه بيشتر وارد بحث مي شويم.

همانطور که مي دانيد، کوچک ترين واحد ذخيره سازي اطلاعات در حافظه، Bit   ( بیت ) است. (جلسه ي شانزدهم در مورد يک Bit توضيح داده شده).
هر 8 بيت را يک
Byte   ( بایت )مي گويند. در حقيقت يک بايت اطلاعات، 8 تا 0 يا 1 است که در مجمع 256 حالت مختلف را پديد مي اورند.

توضيح بيشتر:
يک بيت، فقط 2 حالت دارد، 0 يا 1. وقتي 2 بيت در کنار هم قرار مي گيرند، هر کدام 2 حالت را پديد مي اورند و در مجموع طبق اصل ضرب، 4 حالت به وجود مي آيد. يعني:
1 و 1
1 و 0
0 و 1
0 و 0

اصل ضرب:


به مثال زير توجه کنيد


در شکل بالا، براي رفتن از
A به B، 3 مسير وجود دارد؛ 5 مسير هم براي رفتن از B به C وجود دارد. طبق اصل ضرب، براي رفتن از A به C مجموعاً 15=5*3 حالت وجود دارد.

در اينجا، در حقيقت تعداد کل حالت ها، برابر است با حاصل ضرب حالت هاي هر بيت (که 2 حالت مي باشد) مي باشد. به عنوان مثال براي محاسبه ي تعداد حالت هاي 3 بيت اطلاعات، داريم: 8=3^2=2*2*2.

طبق همين رابطه، يک بايت، 256=8^2 حالت مختلف مي تواند باشد.

هر 1024 بايت را 1 کيلوبايت مي گويند و هر 1024 کيلو بايت، يک مگابايت است. هر 1024 مگا بايت هم يک گيگابايت و هر 1024 گيگا بايت هم يک ترابايت نام دارد.( 1024=10^2)

حافظه هاي کامپيوترهاي خانگي امروزي، مي تواند تا چند صد گيگابايت هم باشد.

کد ASCII چيست:

موسسه ي استاندارد آمريکا، استانداردي براي ذخيره سازي اطلاعات معرفي کرد. اين استاندارد 256 کاراکتر (يک کاراکتر عبارتست از يک عدد، رقم يا يک علامت مثل + و -) را کد گذاري کرد و به هر کدام يک عدد 8 رقمي در مبناي 2(يعني يک بايت) نسبت داد. اين کارکترها شامل همه ي حروف الفباي لاتين، اعداد 0 تا 9، علامت هاي مختلف مثل نماد جمع(+) و تفريق(-) و ... هستند.

در حقيقت طبق اين استاندارد، براي ذخيره سازي هر کاراکتر، يک بايت از حافظه به آن اختصاص ميابد. مثلاً براي ذخيره سازي کلمه ي"ALI" به 3 بايت حافظه نياز داريم. جدول کدهاي ASCII را مي تونيد در کتاب هاي برنامه نويسي يا با جستجو در اينترنت به راحتي ببينيد. 

انواع زبان هاي برنامه نويسي:

زبان ماشين:
سطح پايين ترين زبان برنامه نويسي زبان ماشين است. در اين زبان شما بايد به جاي گذاشتن علامت + براي جمع کردن مقدار 2 عدد، بايد از کد 00 استفاده کنيد. اين زبان، زبان قابل فهم براي کامپيوتر است، به همين خاطر به آن زبان ماشين مي گويند. برنامه هاي ما در هر زبان برنامه نويسي ديگري، حتي اسمبلي، بايد توسط کاپايلر مخصوص آن زبان، به زبان قابل فهم براي کامپيوتر يعني زبان ماشين ترجمه شود.

زبان اسمبلي:
اين زبان کمي پيشرفته تر از زبان ماشين است و کارکردن با آن خيلي راحت تر از زبان ماشين است. به عنوان مثال براي جمع کردن 2 مقدار با يکديگر مي توان از دستور
ADD استفاده کرد. در اين زبان سيستم کد گذاري ASCII هم تعريف شده است و کاربر به عنوان مثال فقط کافيست کلمه ي ALI را تايپ کند، کامپايلر در اينجا کدهاي مربوط به اين کلمه را از جدول استخراج کرده و جايگزين مي کند.

بعد از اين ها نوبت به زبان هاي برنامه نويسي سطح بالا مي رسد. اين زبان ها سعي کرده اند تا حد امکان به زبان گفتار انسان نزديک شوند. زبان C يکي از زبان هاي سطح بالا مي باشد.

يک برنامه، شامل چندين دستور مختلف هستش که ما آنها را پشت سرهم با ترتيب مشخصي مي نويسيم. در زبان C دستورات بايد حتماً داخل توابع باشند. يک تابع عبارتست از چند دستور که در داخل يک آکولاد ({}) نوشته مي شوند و نام مشخصي هم براي ان ها گذاشته مي شود. همچنين توابع مي توانند اطلاعاتي را به عنوان ورودي و خروجي از برنامه دريافت و به آن بازگردانند.

در زبان C وجود تابعي با نام main الزاميست. يعني ما بايد حتماً تابعي با نام main در برنامه ي خود داشته باشيم و اجراي برنامه هم از تابع main شروع مي شود.

در Codevision، بعد از انجام تنظيمات اوليه، خود برنامه براي شما قالبي را آماده مي کند که در آن تنظيمات اوليه ي پورت ها و .... همچنين بعضي تعاريف اوليه مثل تابع main انجام شده است. فقط کافيست شما دستورات خود را در داخل آن فضاي مشخص شده (در داخل تابع main) تايپ کنيد.

در جلسه آينده براي آشنايي با نحوه ي برنامه نويسي در فضاي Codevision بعد از تعريف متغيرها، برنامه ي يک ربات مسير ياب بسيار ساده را با هم خواهيم نوشت.

 

درس بیست و چهارم : آشنایی مقدماتی با پورتهای AVR


همونطور که گفته شد AT Mega16 داراي پايه هاي متعددي براي تبادل اطلاعات با مدار است. هر 8پايه ي مجاور که اين وظيفه را دارند يک پورت ناميده مي شوند (به شکل نگاه کنيد) . AT Mega16 داراي 4 پورت با نام هاي A ، B ، C و D مي باشد. پايه هاي هر پورت به اين شکل نمايش داده مي شود:

شماره ي پايه  "."   نام پورت

مثلاً اولين پايه ي پورت D به اين صورت نشان داده مي شود: D.0
و پايه ي سوم پورت
C به صورت : C.2
حال به ترتيب پايه هاي
ATMEGA16L دقت کنيد

 

دقت کنيد که شماره گذاري پايه ها در پورت ها از 0 شروع مي شود.
همچنين گفته شد، پايه هاي ميکروکنترلر مي توانند به صورت ورودي يا خروجي تنظيم شوند، مثلاً در يک ربات مسيرياب ميتوان چند پايه را تنظيم کرد که ورودي باشند و اطلاعات سنسورها را دريافت کنند، يا انها را تنظيم کرد تا خروجي باشند و موتورها را هدايت کنند. اين تنظيم به صورت نرم افزاري و با تنظيم رجيستر
DDRx انجام مي گيرد. اما ابتدا بايد رجيستر را تعريف کنيم.

رجيستر چيست؟
رجيسترها توعي حافظه هستند که به طور مستقيم با بخشش پردازشگر ميکروکنترلر در ارتباط هستند. هر رجيستر يک بايت يا 8 بيت است. يکي از ويژگي هاي رجيسترها اين است که به خاطر ارتباط نزديک با پردازنده، سرعت بسيار بالاتري نسبت به ساير خانه هاي حافظه دارند.

رجيستر DDRx:
رجيستر DDRx (Data Direction) براي تنظيم ورودي يا خروجي بودن پايه هاي ميکروکنترلر است.

براي تنظيم پايه ها در برنامه، بايد به جاي x بايد آدرس پايه ي مورد نظر(مثل B.3) را بنويسيم. اگر بخواهيم آن پايه خروجي باشد بايد بيت رجيستر مربوط به آن را 1 کنيم، و اگر بخواهيم آن پايه ورودي باشد، بايد بيت رجيستر مربوط به آن را 0 کنيم. به عنوان مثال اگر بخواهيم پايه17 يعني D.3 خروجي باشد بايد اين جمله را بنويسيم: DDRD.3=1;
و اگر بخواهيم اين پايه ورودي باشد:
DDRD.3=0;

رجيستر PORTx:
در صورتي که پايه ها به صورت خروجي تنظيم شده باشند، هر چه در اين رجيستر نوشته شود سطح منطقي پايه ي متناظر را تعيين مي کند، مثلاً اگر بنويسيم PORTB.3=1 پايه B.3 يعني پايه ي 4، 1 منطقي خواهد شد(يعني ولتاژ 5 ولت بر روي اين پايه قرار مي گيرد). و اگر بنويسيم PORTC.1=0، پايه ي C.1 يعني پايه ي 23، 0 منطقي خواهد شد (يعني ولتاژ اين پايه 0 مي شود.).

رجيستر PINx:
در صورتي که پايه ها به صورت ورودي تنظيم شده باشند، محتويات اين رجيستر حاوي اطلاعات دريافتي از پايه هاي ميکروکنترلر است. مثلاً اگر PINB.1=0 باشد، يعني بر روي پايه شماره ي 2 يا همان B.1 ؛ 0 منطقي اعمال شده است(مثلاً اگر به سنسوري وصل شده است، خروجي سنسور 0 منطقي بوده است). در حقيقت اين رجيستر براي خواندن وضعيت پايه هاي ورودي مورد استفاده قرار مي گيرد.

نکته ي بسيار مهم: دقت کنيد که در زبان C، بايد در انتهاي هر خط از برنامه يک علامت ";" گذاشته شود. به اين علامت در زبان انگليسي سِمي کالِن مي گويند.

نکته ي مهم:
در حقيقت براي هر پورت 3 رجيستر(حافظه 1 بايتي) در داخل ميکروکنترلر وجود دارد که به مجموع اين 12 رجيستر، رجيسترهاي
I/O (Input/Output) مي گويند.

بسيار خوب، حالا نوبت نوشتن برنامه ي 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 بيشتر آشنا کنيم.

 

 

درس بعدی    درس قبلی

 

درس 4  و 3                درس 6 و 5             درس 8 و 7         درس 10 و 9         درس   12  و  11               درس 14  و 13

 

درس  16 و  15             درس 18 و 17            درس 20 و 19        درس 22 و 21        درس 24 و 23               درس 26 و  25

 

درس 28 و 27                درس 30 و 29          درس 32 و 31        درس 34 و 33          درس 36 و 35               درس 38 و 37   

 

درس 40 و 39                درس 42 و 41           درس 44 و 43          درس 46 و 45          درس 48 و47             درس 50 و 49

 

درس 52 و 51            درس 54 و 53            درس 56 و 55          درس 58 و  57          درس 60 و 59              درس 62 و 61

 

 

 

آموزش رایگان رباتیک برای دانش آموزان و همه علاقمندان

 

آموزش رباتیک برای کودکان 4 تا 9 ساله

 

  آموزش رباتیک برای دانش آموزان

 

 آموزش کامپیوتر برای کودکان 4 تا 9 ساله

 

  آموزش کامپیوتر برای  دانش آموزان 

 

آموزش  کاربردی و عمومی کامپیوتر برای همه

 

 آموزش مهارتهای ICDL1 بصورت کاربردی

 

 آموزش مهارتهای ICDL2 بصورت کاربردی

 

آموزش  تایپ  10  انگشتی  -     تضمینی

 

آموزش کارمند امور دفتری و منشیگری - بخش  IT

 

آموزش سخت افزار کامپیوتر

 

آموزش فتوشاپ PHOTOSHOP

 

آموزش کورل  COREL

 

 آموزش تری دی مکس           3D MAX  

 

    آموزش  اتوکد   AUTOCAD

 

دوره های استاندار  فناوری اطلاعات  و علوم کامپیوتر ( بیش از 250 رشته )

 

 دوره های استاندار    الکترونیک ( بیش از 80 رشته )

 

       دوره های اخذ دیپلم کار دانش

 

آموزش عمومی و کاربردی برای دانش آموزان  

آموزش رباتیک برای دانش آموزان  از سوم دبستان به بالاتر
آموزش کامپیوتر برای دانش آموزان
آموزش اینترنت برای دانش آموزان
آموزش هفت مهارت ICDL برای دانش آموزان
آموزش فتوشاپ برای دانش آموزان

دوره های عمومی کاربردی برای شاغلین و کارجویان

   آموزش  فتو شاپ برای بزرگسالان (فشرده و کوتاه مدت)
آموزش کاربردی کامپیوتر برای بزرگسالان ( کوتاه مدت)
آموزش اینترنت برای بزرگسالان (فشرده و کوتاه مدت)
   آموزش  مهارت ICDL برای بزرگسالان (  کوتاه مدت)
 

آموزش تخصصی رباتیک  و  الکترونیک    

آموزش  اصول الکترونیک ( در چهار سطح )
آموزش نرم افزاری کاربردی الکترونیک (طراحی و آزمایشگاه )  
آموزش رباتیک در 12 ترم  ( و در سه سطح )
آموزش میکروکنترلر AVR ( در سه سطح )
آموزش میکرو کنترل ARM ( در سه سطح )
آموزش مبانی رباتیک ( استاندار فنی و حرفه ای )
آموزش سخت افزار  رباتیک ( استاندار فنی و حرفه ای ) 
آموزش میکروکنترلرها در رباتیک ( استاندار فنی و حرفه ای ) 
آموزش سخت افزار  رباتیک ( استاندار فنی و حرفه ای  
آموزش PSPICE  ( شبیه سازی مدارات الکترونیکی )
آموزش  ORCAD ( تحلیل مدارات )
آموزش PROTEUS ( طراحی فیبر مدارچاپی ) 
آموزش ALTIUM DESIGNER ( طراحی مدارچاپی )  
آموزش PROTEL  DXP (  طراحی مدارچاپی و رسم شماتیک ) 
آموزش  PIC  ( در سه سطح )
آموزش FPGA) VHDL )
آموزش   LABVIEW
آموزش   EWB ( الکترونیک ورک بنج )
آموزش  XMEGA
 

دوره های استاندار  فناوری اطلاعات ( بیش از 250 رشته )

آموزش 7 مهارت  ICDL 1
آموزش 7 مهارت  ICDL 2
مبانی فناوری اطلاعات ( IT  BASICS )
رایانه کار درجه 2
رایانه کار درجه 1
رایانه کار نرم افزار POWER POINT  
شهروند الکترونیکی (کار با اینترنت)
   آموزش   طراحی وب سایت
آموزش دوره کامل طراحی وب سایت
آموزش طراحی وب سایت با JOOMLA ( جوملا)
آموزش طراحی سایت با   WORDPRESS   ( ورد پرس )
آموزش  فروشگاه ساز MAGENTO (  مجنتو )
آموزش طراحی وب سایت  استاتیک

  آموزش    JQUERY   (جی کوئری ) 

    آموزش    SEO   ( سئو )

آموزش  ساخت فروشگاه اینترنتی

آموزش  وب   ASP.NET  -C# - NET-SQL-  

 

  آموزش  برنامه نویسی

آموزش برنامه نویسی  (اندروید ) ANDROID
آموزش برنامه نویسی( جاوا ) JAVA
آموزش برنامه نویسی ( سی پلاس پلاس )  ++C
آموزش برنامه نویسی   ( ای اس پی ) ASP.NET
آموزش برنامه نویسی   ( سی شارپ ) C#.NET
آموزش   SQL  SERVER
آموزش برنامه نویسی  کاربردی  
آموزش برنامه نویسی   ( لینوکس )  LINUX
آموزش  ساختمان داده و الگوریتم 
 

  آموزش شبکه و سخت افزار

آموزش فشرده ( نت ورک پلاس ) +NETWORK
آموزش فشرده شبکه   MCITP
آموزش فشرده شبکه  CCNA
آموزش برنامه نویسی   ( ای اس پی ) ASP.NET
آموزش برنامه نویسی   ( سی شارپ ) C#.NET
آموزش عملی سخت افزار +A
آموزش  امنیت شبکه
 

آموزش گرافیک 

آموزش فتوشاپ PHOTOSHOP   
آموزش کورل  COREL
آموزش ایلوستریتور ILLUSTRATOR   
آموزش ایندیزاین   INDESIGN
 

طراحی سه بعدی 

آموزش تری دی مکس  3D MAX   
آموزش  V-AAY   
آموزش راینو   RHINO   
آموزش ایلوستریتور ILLUSTRATOR   
 

آموزش  فنی و مهندسی  

آموزش کتیا  CATIA   
آموزش سالیدورک   SOLID WORKS
آموزش اتوکد  AUTO CAD   
آموزش متلب   MATLAB