جلسه پانزدهم : رسم نمودار ( پلات ) با استفاده از آردوینو

سلام
تو این جلسه قصد دارم بهتون یاد بدم چجوری با استفاده از آردوینو نمودار رسم کنید. چیزی که شاید خیلی از جاها به دردتون بخوره . ورژنای قدیمی نرم افزار آردوینو این امکان رو نداشت که بتونیم باهاش پلات کنیم (نمودار رسم کنیم ) ولی خب تو ورژنای جدید (از 1.6.6 به بالا) شکر خدا عقلشون کار کرده و این آیتم رو گذاشتن. یعنی ما تنها با استفاده از نرم افزار آردوینو و بدون نیاز به نصب هیچ نرم افزاری می تونیم نمودار تغییرات رو ببینیم.

یه توضیح کلی: اول بزارید ببینیم این امکانی که داریم ازش حرف می زنیم کجای نرم افزاره . از منوی Tools وارد Serial plotter میشیم:
2016-01-24_13-07-57
همونطور که می بیند اسم این آیتم سریال پلاتر هست و ما هم از این به بعد به این آیتم پلاتر میگیم. یه نمای کلی هم بخواید ازشکل رسم نمودارش ببینید این شکلیه:
2016-01-24_13-12-32

همونطور که از اسم این آیتم معلومه سریال پلاتر هست یعنی مبنای کاری اون ارتباط سریال میشه. در نتیجه اون متغیری که نمودارش رو میخوایم رسم کنیم باید از طریق ارتباط سریال به کامپیوتر بفرستیم تا نرم افزار بتونه رسمش کنه. محور عمودی دیاگرام ما همون داده ای هست که برای پلات کردن فرستادیم. محور افقی برعکس اون چیزی که تصور می کنید زمان نیست. بلکه یه واحد خاصه . توی این محور 1 واحد یعنی یک داده سریال دریافت شده. یعنی به ازای هر داده سریالی که دریافت میشه یک واحد روی محور افقی میریم جلو. حالا تو ادامه بحث دقیق تر درکش می کنید.

ما هم نمودار دیجیتال رو رسم می کنیم هم نمودار آنالوگ رو.
اول سوئیچ مدار و کد جلسه سیزدهم رو آماده کنید. مدار آخر رو ببندید که با دیبانس نوشتیم. همچین کدی داشتیم اگه یادتون باشه (البته من برای این که کد کوتاه بشه خط های کامنت ها رو پاک کردم)
2016-01-24_13-33-50

ما تو این کد برای این که ارتباط سریال داشته باشیم لازمه یه تغییراتی رو توی کد نویسیمون اعمال کنیم.
2016-01-24_13-39-31
چون لازم داشتیم ارتباط سریال استفاده کنیم خب تو تابع setup کانفیگش کردیم. اگه یادتون باشه گفتیم اساس کار سریال پلاتر ارتباط سریال هست که خدارو شکر تو آردوینو ایجاد ارتباط سریال بین آردوینو و کامپیوتر فقط با یک خط کد انجام میشه یعنی دستور Serial.print. هر آرگومانی که توی این دستور نوشته بشه عینا به صورت سریال (از طریق همون کابل USB که بین آردوینو و کامپیوتر هست ) به کامپیوتر شما ارسال میشه. بنابراین توی این کد هر جا منطق پین دیجیتال شماره 2 صفره ما هم 0 رو سریال پرینت می کنیم هر جا منطق پین یکه ما هم 1 رو سریال پرینت می کنیم.

خب کد رو آپلود کنید و از همون مسیری که گفتم سریال پلاتر رو باز کنید.
با همچین صفحه ای مواجه میشید که به محض فشار دادن کلید به تغییر تو نمودار به وجود میاد.


دقت کنید در فیلم جاهایی که یهو یه تغییر دامنه داریم لحظاتی هست که کلید رو فشار دادیم.

این مدل دیجیتالش حالا مدل آنالوگ.
جلسه چهاردهم رو یادتونه ؟ همون مدار و همون کد رو عینا بیارید.
اگه یادتون باشه تو اون جلسه داده های پتانسیومتر رو روی کنسول سریال می دیدیم پس هیچ احتیاجی به تغییر کد نخواهیم داشت. همون کد رو آپلود کنید و سریال پلاتر رو باز کنید.

همونطور که می بینید دقیقا داره متناسب با تغییر ولوم پتانسیومتر (که دست من بود و شما نمی دیدید) نمودار تغییر می کنه.

اما این سریال پلاتر عزیز ما یه مشکل داره و اونم اینه که همزمان که سریال پلاتر بازه کنسول سریال قبلی رو نمیشه باز کرد . در عین واحد فقط یکیش می تونه کار کنه که امیدواریم یه راه حلی واسه این مشکل بعدا پیدا کنن.

پایان جلسه

جلسه سوم : سخت افزار آردوینو

به نام خدا موضوع این جلسه، آموزش سخت افزار آردوینو هست که بیس آموزش، آردوینو UNO است.

ArduinoUno_R3_Front (1)

متاسفانه تو این آموزش نمی تونیم به صورت خیلی جزئی به آموزش الکترونیکی بپردازیم ولی جاهایی که ممکنه تو مفهوم مشکل وجود داشته باشه لینک دادیم به صفحه های فارسی که بچه های دیگه زحمت کشیدن. عکس زیر نمایش قسمت های مختلف آردوینو به تفکیک رنگه:

1
USB connector(قسمت زرد رنگ):
با این پورت آردوینو با کابل USB به کامپیوتر وصل می شه. حالا چه احتیاجی به این کابل USB وجود داره؟
1. تامین ولتاژ مصرفی آردوینو، به زبان ساده تر یعنی روشن کردن آردوینو.
2.پروگرام کردن آردوینو با همین کابل انجام میشه یعنی فقط کافیه کد رو داشته باشیم کابل USB رو وصل می کنیم و آپلود می کنیم.
3.ارتباط سریال بین کامپیوتر و آردوینو (این قسمت مربوط به بخش برنامه نویسی است که در جلسات آینده مورد بحث قرار می گیرد.)

سوکت آداپتور (قسمت صورتی رنگ) :
هروسیله ای برای روشن شدن به ولتاژ یا به اصلاح عامیانه تر برق احتیاج داره. آردوینو هم از این قاعده جدا نیست. برای روشن کردن آردوینو چند تا راه داریم. اولین راه همون کابل USB بود. حالا فرض کنید یه مدار با آردوینو بستیم که قراره توی یه مطب یا توی بانک ازش استفاده بشه. اگه قرار باشه تنها راه روشن کرد آردوینو کابل USB باشه، باید همه جا دنبال خودمون لپتاپ هم ببریم که منطقی نیست. حالا اومدن توی بردهای آردوینو یه سوکت قرار دادن که میشه به اون سوئیچ آداپتور وصل کرد و با همون ولتاژ مصرفی آردوینو فراهم میشه.
آداپتور-مودم-12-ولت-2-آمپر-شارژر-منبع-تغذیه-12v-2a-آداپتور-مودم-آدپتور-سوئیچ-هاب-آداپتور-هارد-آداپتور-12-اداپتور آداپتور ها ولتاژها وجریان های متفاوتی دارن. حواستون باشه اینطوریا هم نیست که هر ولتاژی دوست داشته باشیم به آردوینو بدیم. معمولا آداپتورهای 5 ولت یا 9 ولت به آردوینو وصل کنید. شدیدا پیشنهاد میکنیم که 12 ولت به آردوینو وصل نکنید چون در طولانی مدت مجبور می شید باهاش خداحافظی کنید.
حالا اومدیم یه بنده خدایی پیدا شد می خواست مدارشو برداره ببره وسط صحرا باهاش کار کنه و لپتاپ هم نتونه ببره. وسط صحرا ؟ پریز برق واسه آداپتور ؟راه حل: پایه vin (در مورد این پایه بعدا توضیح داده میشه).

منبع تغذیه (قسمت نارنجی رنگ):

Untitled
برای توضیح پین های این قسمت با مثال میریم جلو. فرض کنید دو تا سنسور داریم یکی دما یکی فشار. سنسور دما 5 ولت و سنسور فشار 3.3 ولت برای روشن شدن احتیاج دارن(همون VCC). از کجا ولتاژ بیاریم؟
اگه با avr کار کنیم باید دوتا رگولاتور 5 ولت و3.3 ولت بزاریم تا از خروجی این رگولاتورها به سنسورها ولتاژ بدیم ( اگه ولتاژ بیشتر از حد تحملشون بهشون داده بشه می سوزن).

حالا اگه با آردوینو کار کنیم این دوتا رگولاتوری که ازشون حرف زدیم به صورت پیش فرض روی خود برد قرار گرفته و خروجی 5 ولت و 3.3 ولت آماده و حاضر وجود دارن. یعنی اگه شما با یکی از راه های قبلی (کابل USB یا آداپتور) خود آردینو رو روشن کرده باشین روی این دو تا پایه ولتاژهای 5 ولت و 3.3 ولت آماده استفاده هستن (شک دارید ولتمتر بزارید).
علاوه بر این، دو تا پایه زمین (GND) هم داره. برای روشن شدن سنسور علاوه بر ولتاژ دادن باید پایه گراند هم متصل باشه در غیر این صورت با وجود وصل بودن vcc سنسور روشن نمیشه.

تا الان تکلیف 4 تا پایه روشن شد حالا میریم سراغ پایه Vin. تو قسمت سوکت آداپتور یه اشاره کوچیکی کردیم. فرض کنید یه پروژه داریم که باید دمای هوای صحرا در طول یک روز اندازه گیری بشه و به ایستگاهی در فاصله یک کیلومتری فرستاده بشه. پس باید به مدت یک روز آردوینو و سنسور دما و فرستنده بی سیم توی صحرا کار گذاشته بشن. وسط صحرا نمی تونیم با آداپتور آردوینو رو روشن کنیم (پریز برق نداریم خب) میریم سراغ کابل USB. برای استفاده از کابل باید لپتاپ ما بتونه به مدت یک روز شارژ نگه داره! عملا با دو روش قبلی کاری از پیش نمیبریم.
یعنی پروژه کنسل ؟ خیر میریم سراغ پایه Vin. میشه با باتری هم آردوینو رو روشن کرد . باتری دو تا خروجی داره : ولتاژ و زمین. کافیه خروجی ولتاژ باتری به پایه Vin و گراندش به گراند آردوینو وصل بشه. البته مثل آداپتور اینجا هم مجاز نیستیم هر ولتاژی بهش بدیم. سایت سازنده خودش پیشنهاد کرده ماکزیمم 12 ولت بهش بدید ( زیر 5 ولت هم قاعدتا نباید بهش ولتاژ داد).
البته پایه Vin یه کاربرد دیگه هم داره. وقتی ولتاژ آردوینو با آداپتور فراهم بشه روی این پایه همون ولتاژ آداپتور میوفته یعنی اگه آداپتور 9 ولت وصل کرده باشید روی این پایه ولتاژی حدود 9 ولت میوفته. زمانی هم که آردوینو با کابل USB روشن بشه روی پایه Vin تقریبا 5 ولت میوفته.

و اما پایه IOREF. سطح منطقی ای که برد باهاش کار میکنه روی این پایه میفته. مثلا آردوینو UNO روی پین های ورودی خروجیش با سطح منطقی 5 ولت کار میکنه ولی آردوینو DUE با ولتاژ 3.3 ولت کار می کنه.

در مورد پایه ریست پایان همین جلسه در قسمت کلید ریست توضیح میدیم.

ورودی و خروجی های دیجیتال (قسمت سبز رنگ):

Untitled
قبل از این که وارد موضوع اصلی بشیم شاید یه عده معنی دیجیتال و آنالوگ رو ندونن .اون دوستان برن اینجا یه دوری بزنن و بیان.
آردوینو 14 تا پین دیجیتال داره از D0 تا D13. این پین ها هم به عنوان ورودی هم به عنوان خروجی تعریف میشن. یه موقع دنبال این هستیم که رله خاموش روشن کنیم پس پین به عنوان خروجی در نظر گرفته میشه. بعضی موقع ها یه سنسور دیجیتال داریم (مثل سنسور تشخیص حرکت) در این شرایط پین به عنوان ورودی تعریف میشه.
یه نکته ظریفی این وسط وجود داره. درسته موتورها هم با پایه های دیجیتال کار میکنن ولی هر پایه آردوینو فقط 40 میلی آمپر جریان داره پس عملا موتور راه انداختن با آردوینو به تنهایی کار جالبی نیست و باعث سوختنش می شه.نه تنها موتور، هر سنسوری که جریانی بیشتر از تحمل آردوینو بکشه باعث سوختنش میشه. روی هر پین آردوینو هم PULL UP داخلی وجود داره که اگه پایه به عنوان ورودی در نظر گرفته بشه با برنامه نویسی میتونیم ازش استفاده کنیم.
بعضی از این 14 تا پین آردوینو علاوه بر دیجیتال بودن ویژه گی های دیگه ای هم دارن که توضیحشون همینجاست و جلسه های بعدی روی هر کدوم ازاونها پروژه انجام میدیم.
1- پایه های سریال (Rx & Tx) : پایه های D0 و D1 آردوینو به صورت پیش فرض به عنوان پایه های ارتباط سریال در نظر گرفته شدن. پروگرام کردن آردوینو از طریق کامپیوتر هم از طریق همین 2 تا پین صورت میگیره. طوری که وقتی آردوینو در حال پروگرام شدنه این دو تا پایه که به دو تا led وصل هستن شروع به چشمک زدن می کنن. خیلی کم پیش میاد از این دو تا پایه به عنوان پین های دیجیتال در حین انجام پروژه استفاده بشه. مثلا فرض کنید بیایم به پایه های D0و D1 رله وصل کنیم و با کد نویسی اون ها رو خاموش و روشن کنیم، در حین مسیر آپلود کردن کد تو نرم افزار آردوینو یه ارور میده چرا که پین هایی که برای پروگرام کردن لازم داره ما بهشون رله وصل کردیم و استفاده شدن. بنابراین اول رله ها رو جدا می کنیم بعد پروگرام می کینم و دوباره رله ها رو وصل می کنیم. خب چه کاریه؟ از اول به دو تا پین دیگه وصل می کردیم تا این مکافات کندن و وصل کردن رو نداشته باشیم.
حالا اومدیم و مجبور شدیم با ماژولی(مثل بلوتوث) کار کنیم که ار تباطش با آردوینو از نوع TTL بود، یعنی مجبور بودیم از پایه های Rx و Txاستفاه کینم. واقعا باید برای هر بار کد آپلود کردن دائم سیم جدا کنیم و وصل کنیم؟ جواب منفیه
شما میتونید به صورت نرم افزاری پین های ارتباط سریال رو اضافه کنید. البته نمیتونید از هر پین دلخواهی هم استفاده کنید. بسته به اینکه روی کدوم نوع آردوینو کار می کنید این پین ها متفاوت هستن. به این ترفند SoftwareSerial میگن که در آینده نزدیک روش مانور خواهیم داد.

2- اینتراپت (وقفه):
اول بخونید ببینید اینتراپت چیه.
در مورد کیس خاص ما یعنی آردوینو UNO دو تا وقفه خارجی روی پین های D2و D3 وجود داره که میشه با برنامه نویسی ازاونها استفاده کرد. روال کلی وقفه اینطوریه که وقتی روی پین D2 سیگنال بیفته (به عبارتی trigger بشه) میکرو دست از اجرای هر کاری بکشه و بره یه عملیات مخصوص وقفه انجام بده(اصطلاحا میگن تابع  وقفه رو انجام بده). برای مثال فرض کنید کد اصلی روی میکرو شمارش اعداد باشه، حالا ما یه وقفه تعریف کنیم که اگه پایه D2 توسط یه رله خارجی تحریک شد پیغام “Relay ” رو چاپ کنه روی lcd. برنامه رو استارت می کنیم. میکرو شروع میکنه به شمارش 1 ، 2 ،3 و همینطوری میره جلو روی عدد 8 رله را روشن میکنیم بنابراین در اون لحظه پایه D2 تحریک شده وتابع مربوط به وقفه باید انجام باشه بنابراین در عدد 8 متوقف میشه میره پیغام “Relay ” رو روی lcd نشون میده و بر میگرده در ادامه شروع میکنه 9 ،10 ،11 و….
شکل کلی یک پالس به صورت زیره:

clk
همونطور که از شکل معلومه هر پالس لبه بالارونده و لبه پایین رونده داره. وقتی از وقفه صحبت می کنیم می تونیم تعیین کنیم پالسی که به پایه D2 داده میشه روی کدوم لبه حساس باشه. یعنی اگه به لبه بالارونده پالس رسید زیر برنامه وقفه اجرا بشه یا روی لبه پایین رونده. حتی میشه تعیین کرد به ازای هر تغییری که در سطح منطقی بوجود میاد زیر برنامه اجرا بشه.

3- 6 تا پین از 14 پین دیجیتال آردوینو UNO به صورت PWM هم کار میکنن. پین های 3، 5، 6، 9، 10 و 11. وقتی از PWM صحبت می کنیم یاد راه اندازی موتورهای DC می افتیم. ما میتونیم با استفاده از مد کاری PWM به موتورهای DC سرعت چرخش متفاوتی بدیم. با نحوه عملکرد این مد توجلسات آینده با جزئیات بیشتر و دقیق تر آشنا میشیم.

4- هر سنسوری برای برقراری ارتباط با پردازنده از یه پروتکل استفاده میکنه. بعضی ها از SPI و بعضی ها از I2C استفاده می کنن (البته یه سری از سنسورها هم ساده تر ازاین حرفا راه اندازی میشن که بعدا می بینیم). روی برد آردوینو برای هر کدوم از این دوتا پروتکل ارتباطی، پین های مشخصی در نظر گرفته شده.
اول در مورد ارتباط I2C حرف میزنیم. کلا اگه بخواهیم تشخیص بدیم سنسوری که قراره باهاش کار کنیم I2C هست یا نه کافیه به پین هاش نگاه کنیم اگه SCL و SDA داشت زدیم وسط خال. قدم بعد از تشخیص پروتکل ارتباطی سنسور، اینه که وصلش کنیم به آردوینو. برای آردوینو UNO از پین های آنالوگ A4 و A5(تو همین جلسه میگیم کجاس) استفاده میکنیم ولی بقیه مدل های آردوینو دقیقا پین هایی به اسم های SCL و SDA دارن. در آینده نزدیک با راه اندازی یه سنسور I2C کامل متوجه میشید داستان از چه قراره.

میایم سراغ SPI .برای تشخیص سنسور SPI دنبال دو تا پین تابلو برگردین: MOSI و MISO. روی برد آردوینو پین های دیجیتال 10 و 11 و 12 و 13 مخصوص پروتکل SPI هستن. ما گفتیم دنبال دوتا پین بگردین الان 4 تا پین باید وصل کنیم چی شد؟ MOSI و MISO پین هایی بود که با دیدنشوم مطمئن می شدیم سنسور از نوع SPI هست ولی در حقیقت این روش ارتباطی با 4 تا سیم داده رد و بدل میکنه به خاطر همین ما هم 4 تا پین معرفی کردیم.

5- پین دیجیتال شماره 13. این پین تو آردوینو خاصه چرا که یه led بهش وصله. گهگاهی توی پروژه هایی که داریم انجام میدیم لازمه برای آلارم یا حتی چک کردن یه LED رو روشن خاموش کنیم. مثلا فرض کنید یا سنسور تشخیص حرکت داریم و هدف اینه که به محض تشخیص هر نوع حرکتی یه آلارم به ما بده. میتونیم از این led داخلی استفاده کنیم تا به محض تشخیص جا به جایی این led روشن بشه.

پین AREF در قسمت آنالوگ توضیح داده خواهد شد.

• ورودی آنالوگ (قسمت آبی رنگ):
Untitled
6 پین بالا ورودیهای آنالوگ برد آردوینو است که با نام های A0 تا A5 مشخص شده اند. بعضی سنسورها مثل فوتوسل انالوگ هستن یعنی داده هاشون به صورت پیوسته تغییر میکنه. بدون شک نمیشه داده این سنسورها رو با پایه دیجیتال خوند پس میایم سراغ پایه آنالوگ.  خروجی سنسور وارد یه مبدل آنالوگ به دیجیتال (ADC) ده بیتی میشه و عددی بین 0 تا 1023 به عنوان داده سنسور مورد استفاده قرار می گیره. این در شرایطی هست که سنسور با ولتاژ 5 ولت کار کنه ( یعنی ماکزیم ولتاژ قابل تحمل اون 5 ولت باشه). وقتی ولتاژ قابل تحمل سنسور پایین تر باشه(مثلا 3.3 ولت) لازمه اون ولتاژ به پایه AREF هم داده بشه تا ولتاژ ورودی مرجع آنالوگ به 3.3 ولت تبدیل بشه. با اینکار رزولوشن تبدیل آنالوگ به دیجیتال بالاتر میره.

حالا یه بنده خدایی پیدا شده توی پروژش اصلا سنسور آنالوگ نداره ولی 15 تا سنسور دیجیتال باید راه بندازه. بالاتر گفتیم که کلا 14تا پین دیجیتال داریم که پین 0 و 1 هم عملا قابل استفاده نیست. بنابراین فقط 12 تا پین دیجیتال باقی میمونه در حالی که ما 15 تا سنسور داریم. یا باید بریم سراغ یه آردوینو دیگه که تعداد پایه هاش بیشتر باشه یا از یه تریک جدید استفاده کنیم . تریک جدید اینه که اون 6 تا پایه آنالوگ میتونن به عنوان دیجیتال هم استفاده بشن. یعنی چی؟
یعنی ما میتونیم به پایه A0 بگیم پایه شماره 14 دیجیتال و تا آخر به A5 بگیم پایه دیجیتال 19. با این کار دقیقا 20 تا پایه دیجیتال داریم که با کم کردن پایه 0 و 1 (به خاطر آپلود کردن کد) عملا 18 تا پایه دیجیتال داریم (هورا شدیم).

کلید ریست (قسمت آبی رنگ):

Untitled

گاهی اوقات در روند اجرای یه پروژه لازم میشه برنامه از اول اجرا بشه. مثلا فرض کنید پروژه شمارش تعداد نفراتی باشه که روزانه وارد یه محیط اداری میشن. اگه قرار باشه برنامه ریست نشه هر روز به تعداد نفرات شمارش شده اضافه میشه و داده دقیقی در دسترس نیست بنابراین لازمه روزانه مدار ریست بشه. حالا یا میتونیم یه صورت سخت افزاری ریست کنیم یعنی کلید ریست رو فشار بدیم یا میتونیم از پین ریست (RESET) استفاده کنیم. پین ریست که توی قسمت منبع تغذیه قرار داره به محض دریافت سطح منطقی 0 مدار رو ریست میکنه و برنامه از اول شروع میکنه به انجام شدن. از هر روشی که استفاده کنیم برنامه از اول اجرا میشه.

جلسه اول : آشنایی با میکروکنترلر

میکروکنترلر چیست؟
قطعه ای که این روزها دارد جای خود را در خیلی از وسایل الکتریکی باز میکند .از تلفن گرفته تا موبایل از ماوس لیزری که الان دستتان روی آن است و دارین باهاش کامپیوتر رو کنترل میکنید تا هر وسیله ای که بتوان پیچیدگی رو در اون دید میتونید یک میکروکنترلر رو ببینید .
کلمه میکروکنترلراز دو کلمه میکرو و کنترلر تشکیل شده است.
میکرو : میدونین که این یک واحد یونانی است و برابر با 10 به توان منفی 6 متر است. یعنی یک ملیونیوم متر….
کنترلر : یعنی کنترل کننده به تعبیری یعنی “مغز ” البته بدون تفکر فقط دستوراتی که به اون داده میشه به نحو احسن انجام میده.
کلمه میکرو به دو منظور استفاده شده منظور اول و مهم ،سرعت عمل میکروکنترلر است که میتواند تا یک ملیونیوم ثانیه باشد یعنی میتواند در یک ثاینه یک میلیون عملیات رو انجام بده به همین خاطر واژه میکرو رو به اون اختصاص دادن . معنی دوم آن شاید کوچیکی این قطعه باشد که تا یک ملیونیوم متر کوچیک شده شاید باور کردنی نباشه ولی در یک تراشه ممکنه بیش از یک میلیون تراتزیستور به کار رفته باشه. این کلمه وقتی اهمیتش کامل میشه که با واژه کنترلر عجین بشه تا معنیش کامل بشود .

نحوه انجام دادن کار میکروکنترلر:
تا حالا همه شما با ماشین حساب کار کردین تا حالا به نحوه کار کردنش فکر کردین شما اطلاعاتتون را که همون عملیات ریاضی هست به وسیله صفحه کلید به اون میدید بعد ماشین حساب این اطلاعات رو بر مبنای دستوراتی که قبلا به اون داده شده پردازش میکند و جواب را روی lcd نمایش میدهد. در واقع یک میکروکنترلر برنامه ریزی شده به عنوان مغز ماشین حساب این اطلاعات رو از صفحه کلید میگیره روشون پردازش انجام میده و بعد بر روی lcd نمایش میده.
کار میکروکنترلر دقیقا مشابه این است میکرو کنترلر بر مبنای یک سری ورودی که به اون داده میشه مثلا این ورودی از یک سنسور دما باشه که درجه حرارت رو میگه یا از هر چیز دیگه مثل صفحه کلید ، بر مبنای این ورودی ها و برنامه ای که قبلا ما به اون دادیم خروجیشو تنظیم میکنه که ممکنه خروجیش یک موتور باشه یا یک lcd یا هر چیز دیگری که با الکتریسیته کار بکند.

ساختمان داخلی میکروکنترلر:
کامپیوتری که الان بر روی اون دارین کار انجام میدین دارای یک پردازنده مرکزیه به نام cpu که از کنار هم قرار گرفتن چندین ملیون ترانزیستور تشکیل شده و بر روی اطلاعات پردازش انجام میده . میکرو کنترلر هم عینا دارای یک پردازنده مرکزی به نام cpu است که دقیقا کار cpu کامپیوتر رو انجام میده با این تفاوت که قدرت و سرعت پردازشش از cpu کمتره که به اون میکروپرسسور میگن.
میکروکنترلر علاوه بر cpu دارای حافظه است که ما برنامه ای که بهش میدیم در اون قرار میگیره .در کنار حافظه در میکروکنترلرهای امروزی تایمرها برای تنظیم زمان کانتر ها برای شمردن کانال های آنالوگ به دیجیتال پورت های برای گرفتن و دادن اطلاعات و امکاناتی تشکیل شده و همه اینها در یک چیپ قرار گرفته که تکنولوژی جدید اونو تو یک تراشه به اندازه یک سکه قرار داده.

تمام میکروکنترلرها جزء این 4 قسمت هستنند:
8051(1
Pic(2
Avr(3
Arm(4
خوشبختانه همه میکروکنترلر هایی که جزء هر کدام از 4 نوع بالا باشند از یک برنامه پیروی میکنند. بدین معنا که اگر شما کار با یکی از مدل های آن میکرو را یاد گرفته باشید مثل اینکه کار با تمام میکروکنترلرهای آن نوع را یاد گرفته اید.مثلا شما اگر با یکی از مدل های میکروکنترلر avr مثلا atmega8 را یاد گرفته باشید دیگر با صد ها مدل دیگر میکروکنترلر avr مشکلی ندارید وتقریبا بدون هیچ مشکلی میتوانید با دیگر مدل های این میکرو کار کنید.
اما یه مشکل که در میکروکنترلر ها وجود دارد این است که این4 نوع از لحاظ برنامه نویسی به هیچ وجه با هم دیگر سازگاری ندارند . به طور مثال اگر شما میکروکنترلر های avr و 8051 را کامل یاد گرفته باشید حتی ساده ترین برنامه رو روی یک میکروکنترلر pic نمیتوانید اجرا کنید. واین یکی از بزرگترین عیب و مشکل برای یاد گیری میکرو است .بنابراین از همون اول باید یک انتخاب درست داشته باشید و میکروکنترلر مناسب را برگزینید تا با یادگیری آن میکروکنترلر بتوانید بعدا به سادگی پروژه های خود را اجرا کنید .

8051 :
اولین میکروکنترلری بود که به دست بشر ساخته شد . ابتدا این میکروکنترلر توسط شرکت بزرگ intel ساخته شد .اما بعدا intel این امکان را به دیگر شرکت ها داد که این میکروکنترلر را تولید کنند و شرکت هایی مانند ATMEL , PHILIPS , SIEMENS , DALLAS و… به تولید این میکروکنترلر پرداختنند. یکی از شرکت هایی که به صورت گسترده به تولید این تراشه پرداخت ATMEL بود. اما اگربخواهیم به صورت کلی سیر پیشرفت این نوع میکروکنترلر رو در نظر بگیریم اولین میکروکنترلر هایی که ساخته شد با جدیدترین میکروکنترلرهای 8051 که الان تولید میشود با توجه به این پیشرفت شگفت در تمام زمینه ها که صنایع دیگر در دنیا دارند پیشرفت زیادی ندارد به طور مثال AT89S5X که میکروکنترلر 8051 جدید ساخت ATMEL است نسبت به مدل های اولیه 8051 پیشرفت آنچنانی ندارد . امکانات این میکرو نسبت به AVR و PIC قابل مقایسه نیست . به صورتی که که همین مدل جدید 8051 تقریبا حافظه ای برابر یک صدم (0.01 ) میکروکنترلر های AVR را دارد و سرعتش 4 برابر کمتر از میکروکنترلر های PIC و 12 بار کمتر از میکروکنترلر های AVR است . از لحاظ امکانات دیگر هم چنین ضعفی احساس میشود. اما برای کارهای ساده تر که پیچیدگی زیادی در آن نباشد به خاطر قیمت بسیار پایینی که این میکروکنترلر دارد بسیار مناسب است . قیمت همین مدل جدید AT89S5X حول و حوش 1000 تومان است که قیمت بسیار مناسبی است.
این میکرو کنترلر از زبان اسمبلی و C پشتیبانی میکند که زبان برنامه نویسی اصلی آن اسمبلی است که واقعا نوشتن با این زبان برنامه نویسی نسبت به زبان های برنامه نویسی دیگر هم مشکل تر و هم طولانی تر است. در کل این میکروکنترلر امروزه دیگر توانای رقابت با AVR و PIC رو ندارد و امروزه رقابت اصلی بین این دو میکروکنترلر است.

PIC :
واقعا میکروکنترلر خیلی قوی است که بر اساس بعضی آمار ها بیشترین کاربر را به خود اختصاص داده است البته متذکر شوم که در ایران این آمار به نفع AVR است. این میکروکنترلر ساخت شرکت میکرو چیپ است که PIC رو در مدل های خیلی زیادی با امکانات مختلف برای کارهای مختلف میسازد .چون بحث اصلی ما روی AVR هست از توضیح بیشتر این میکروکنترلر میگذریم.

AVR :
به میکروکنترلر AVR میرسیم .اول از همه سرعت این میکروکنترلر بسیار بالاست و به قولی دستوراتی که بهش داده میشه در یک سیکل کلاک انجام میده. AVR از زبان های برنامه نویسی سطح بالا یا به اصطلاح (HIGH LEVEL LANGUAGE) HLL پشتیبانی میکند که باعث تولید کدهای بیشتری میشود که در کل برنامه نوشته شده نسبت به برنامه هایی که برای 8051 و PIC نوشته میشود کوتاهتر است. امکانات جانبی این میکروکنترلر بسیار مناسب است و شما را از خرید بعضی لوازم جانبی مانند چیپ های آنالوگ به دیجیتال (ADC) , مقایسه گر آنالوگ و… راحت میکند .در ضمن AVR از بسیاری از استاندارد های ارتباطی مانند SPI,UART,12C,JTAG پشتیبانی میکند که به راحتی میتوان این میکروکنترلر را با میکروکنترلر دیگر یا و سایل دیگر وصل کرد و با وسایل دیگر به راحتی ارتباط برقرار کند. قیمت این میکروکنترلر هم به نسبت امکانات فراوانی که داره بسیار پایین است به طوری که یک میکروکنترلر AVR تقریبا پیشرفته رو با قیمت حول و حوش 3 تا 4 هزار تومان خرید .
AVRها به پنج گروه تقسیم شده اند:
tinyAVR (1
megaAVR (2
AVR (3 XMEGA
AVR32 UC3 (4
AVR32 AP7 (5

ARM :
ARM یک میکرو کنترلر قدرتمند با کاربردهای متنوع است. ARM ها بیشتر در جاهایی که ظاهر زیبای کار مورد توجه است استفاده می شوند چرا که این میکروکنترلرها می توانند سیستم عامل های لینوکس و ویندوز رو راه اندازی کنند.
پروگرام میکروکنترلر :
شاید تا حالا به نظرتون رسیده باشه که این میکروکنترلر رو چگونه میشه برنامه ریزی کرد تا کار مورد نظرمان را انجام بده در صورتی که یک میکروکنترلر برنامه ریزی نشده هیچ کاری رو نمیتونه انجام بده و هیچ کاربردی نداره در واقع برنامه هر میکرو روح وجانی است که در اون دمیده میشه و اون رو زنده میکنه.
برای برنامه ریزی میکروکنترلر نیاز به دستگاه یا بردی هست به نام پروگرامر که یه پل ارتباطیه بین کامپیوتر و میکروکنترلر . پروگرامر را هم میشه از بازار تهیه کرد و هم میشه اون رو ساخت.
البته پروگرامرهای مختلفی در بازار هستنند که متانسب با کاربردشان قیمت های مختلفی دارند بعضی ها فقط چند مدل رو پروگرام میکنند بعضی از پروگرامر ها همه فن حریفند و تمام میکروکنترلر های 8051AVR ,ARM, PIC , رو برنامه ریزی میکنند به طبع قیمت زیادتری دارند.

لینک فروم جلسه اول برای پرسش و پاسخ.
به ما سر بزنید دوستان.