کتاب آموزش برنامه نویسی میکروکنترلرهای AVR به زبان C

کتاب عالی برای آموزش برنامه نویسی میکروکنترلرهای AVR به زبان C

Embedded C Programming and the Atmel AVR

2nd Edition

Barnett.

Cox and

O’Cull

از لینک زیر دانلود کنید.

۱۴۱۸۰۳۹۵۹۴

 

پورت USB

USB یک استاندارد برای باس یا گذرگاه سخت افزاری کامپیوتر است که به کاربرها امکان می دهد تا دستگاه های جنبی کامپیوتر را از طریق آن پورت، به کامپیوتر وصل کنند. عمل اتصال و پیکربندی دستگاه به صورت خودکار انجام می شود و بعد از اتصال، دستگاه جانبی آماده استفاده در کامپیوتر خواهد بود.

USB مخفف Universal Serial Bus است که مشکل اتصال دستگاه های جنبی به کامپیوتر را حل کرده و این کار را به صورت خودکار انجام می دهد. مسئله ای که چنین ساده به نظر می رسد تا مدتها یکی از معضلات دنیای کامپیوترهای شخصی محسوب می شد که با معرفی و تکمیل USBها حل شد. هرچند که این روش همیشه به درستی جواب نمی دهد اما زندگی در کنار کامپیوترها را به مراتب ساده تر می کند. اکثر کامپیوترهای تولید شده بعد از سال ۱۹۹۵ میلادی دارای پورتهای USB هستند و ویندوزهای بعد از ۹۵ نیز آن را پشتیبانی می کنند. کامپیوترهای اپل نیز از این پورت پشتیبانی می نمایند. USB سه مشخصه جالب دارد که عبارتند از: سرعت، قدرت و سادگی استفاده.

 

پورت چیست؟

برای آشنایی با پورت USB لازم است اول عبارت پورت را بشناسیم. پورت، در واقع مبادی ورود و خروج اطلاعات به کامپیوتر است. از طریق پورت می توان دستگاه های خارجی را به کامپیوتر وصل کرد. کامپیوترهای شخصی اولیه IBM با دو پورت (سریال و موازی) عرضه شدند. دستگاه هایی مانند مودم به پورت سریال و پرینترها به پورت موازی وصل می شدند.

پورتها نه تنها محلی برای اتصال دستگاه های خارجی به کامپیوتر هستند بلکه سرعت مبادله دیتا را هم بین آنها تعریف می کنند. (برای مطالعه بیشتر دراین مورد به سایر مقالات سایت میکرو رایانه مراجعه نمایید) اینجاست که USB ارزش خود را نشان می دهد. پورت USB بطور متوسط ده بار سریع تر از پورتهای موازی، دیتا را منتقل می کند و بدیهی است که به مراتب سریعتر از پورت سریال است. معنای این گفته آن است که یک اسکنر یا پرینتر دارای اتصال USB، بسیار سریع تر از اسکنر یا پرینتری است که به پورت موازی وصل شده است. متوسط سرعت انتقال پورت سریال معادل ۱۵۰ کیلوبیت در ثانیه است. این سرعت برای پورت موازی ۱٫۲ مگابیت در ثانیه است در حالی که سرعت انتقال دیتا برای پورت USB معادل ۱۲ مگابیت در ثانیه می باشد که البته بستگی به نوع دستگاه اتصالی هم دارد. بعضی از دستگاه ها، مخصوصا پرینترها قابلیت اتصال به دو نوع پورت موازی و USB را دارند. برای پیدا کردن پورت USB در کامپیوتر خود به پشت، جلو یا اطراف آن نگاه کنید. USB، پورت کوچکی است که ممکن است کمتر به چشم آید.

به مرور زمان در پورت های USB تحولی ایجاد شد و پورت USB2 با حداکثر سرعت انتقال ۴۸۰ مگابیت در ثانیه به بازار آمد که توانست ۴۰ بار سریعتر عمل کند و این در حالی است که سازگاری کامل خود با USB1 را نیز حفظ کرد. به عبارت دیگر اگر کامپیوتر جدیدی خریدید که دارای USB2 است، دستگاه قدیمی USB1 شما نیز می تواند به ان متصل شده و با آن کار کند. البته سرعت به USB1 محدود خواهد شد. برای بهره گیری از سرعت بالا، هر دو دستگاه باید مجهز به USB2 باشند. سرعت بالای USB2 برای بسیاری از دستگاه ها مانند دوربین های دیجیتال، هارددیسک ها و درایورهای DVD ارزشمند بوده و مورد استفاده زیاد پیدا کرده است.

از جمله قابلیتهای پورت USB آن است که تعداد ۱۲۷ دستگاه را می توان فقط به یک پورت USB وصل کرد. پورتهای USB، تغذیه را از خودشان تامین می کنند پس دستگاه مربوطه نیازی به منبع تغذیه اضافی ندارد. البته اگر چند دستگاه را با هم به یک پورت وصل کنید برای تغذیه آنها نیاز به HUB دارید. نحوه اتصال دستگاه های USB، اتصال زنجیره ای است. هر دستگاه USB دارای یک پورت USB دیگر هم هست که می توان دستگاه بعدی را به آن وصل کرد. بعضی از کیبوردهای USB دارای چند اتصال USB اضافی برای این کار هستند. بعضی از مونیتورهای USB تا سه اتصال اضافی USB دارند. مثلا یک ماوس USB را می توان به کیبورد یا مانیتور وصل کرد.

دستگاههای USB قابلیت hot swappable دارند یعنی می توان آنها را هنگام روشن بودن کامپیوتر، به آن وصل کرد یا از آن جدا ساخت. آنهایی که در گذشته با کامپیوتر زیاد کار کرده اند ارزش این قابلیت را می دانند. این مشخصه برای دستگاه هایی مانند دوربین ها مهم است.

انواع دستگاههای USB مانند کیبورد، دوربین عکاسی، ماوس، دسته بازی، مودم، پرینتر، اسکنر و حتی بلندگو وجود دارد. به جرات می توان گفت که پورتهای سریال و موازی در کامپیوترهای جدید مرده اند. اگر کامپیوتر شما فاقد پورت USB است و می خواهید یکی اضافه کنید حتما USB2 باشد. کارت های آداپتور ویژه ارزان قیمتی وجود دارند که در اسلات PCI داخل کامپیوتر می نشینند و قابلیت USB را به کامپیوتر شما اضافه می کنند.

برای کامپیوترهای نوت بوک، پورت USB ویژه ای وجود دارد که داخل اسلات کارت جا می شود. فقط بخاطر داشته باشید که پورتهای USB مصرف کننده توان(برق) نوت بوک شما هستند که ممکن است برای نوت بوکها مشکل ساز باشد.

اسیلوسکوپ و سیگنال ژنراتور با کارت صدا

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

روند کار :

ابتدا برای جلوگیری از آسیب رسیدن به مدارات ورودی کارت صدا بایستی تا حد ممکن ولتاژ ورودی را کاهش دهیم و ماکزیمم آنرا به ۰.۵ (نیم) ولت برسانیم. که این کار توسط مدار زیر صورت می گیرد .

نکته ی مهم اینکه در این حالت ماکزیمم ولتاژ ورودی به کارت صدا نباید از ۵ ولت تجاوز نماید.

اسیلوسکوپ                          سیگنال ژنراتور 

نرم افزار KiCad برای طراحی PCB

این نرم افزار یک نرم افزار کد باز (رایگان) جهت طراحی برد مدار چاپی (PCB) هست که کار با آن بسیار ساده بوده و قدرت بالایی دارد. چون کدباز است به راحتی نصب میشه و نازی به کرک و … نداره. قابلیت به روز رسانی هم داره. حجمش هم برای دانلود زیاد نیست و راهنمای کاملی هم داره.

توضیحات: http://kicad.sourceforge.net/wiki/Main_Page

دانلود:  http://kicad.sourceforge.net/wiki/Downloads

تصاویری از نرم افزار: http://kicad.sourceforge.net/wiki/Screenshots

نرم افزار PonyProg

PonyProg جرء کاملترین و بهترین برنامه های پروگرامر میباشد که برای انواع آی سی های AVR & PIC & EEPROM قابل استفاده میاشد این نرم افزار مجانی بوده و دارای سخت افزار بسیار ساده ای میباشد و دارای امکانات کاملی برای پروگرام آی سی میباشد . نرم افزار CodvisionAvr هم با این برنامه سازگاری کامل دارد . طرح سخت افزاری بسیار ساده که به صورت مجانی قرار داده شده و پشتیبانی از اغلب آی سی های قابل برنامه ریزی موجود از بهترین ویژگیهای این نرم افزار میباشد.

نقشه پروگرامر برای انواع AVR :

پروگرامر (Programmer) چیست؟

پروگرامر دستگاهی است که با کمک کامپیوتر یا بتنهایی قادر به انتقال برنامه یا تغییر تنظیمات یک قطعه الکترونیکی برنامه پذیر است.

 

انواع پروگرامر و تفاوتهای آنها؟

 

پروگرامرها در ۲ گروه اصلی طبقه بندی می شوند پروگرامرهای تخصصی و عمومی (یونیورسال)

 

پروگرامرهای تخصصی برای یک گروه خاص از قطعات از یک سازنده مشخص هستند و عموما از طرف شرکتهای سازنده همان قطعات ارائه می شوند.

 

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

 

چه کسانی نیاز به پروگرامر تخصصی دارند؟

 

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

 

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

 

پروگرامر مشابه سازی شده (clone) چیست؟

 

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

 

مشکلات پروگرامرهای کلون.

 

در بعضی موارد مثل پروگرامرهای STK یا بایت بلستر یا کابل پارالل شرکت xilinx ، چون نقشه پروگرامر توسط سازنده برای عموم به رایگان منتشر شده است ، اگر ساخت پروگرامر دقیقا مطابق مشخصات سازنده باشد مشکلی وجود ندارد البته معمولا این پروگرامرها قابلیت بالایی نداشته و از باسهای قدیمی مانند پارالل پورت و سریال پورت استفاده میکنند و نمونه های USB توسط رابطهای USB->Serial انجام میشود.

 

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

 

پروگرامر های یونیورسال کپی شده (غیر اصلی).

 

بخش زیادی از قیمت پروگرامرهای یونیورسال را هزینه مهندسی و برنامه نویسی مداوم برای آی سی های جدید تشکیل می دهد . برخی شرکتهای چینی با کپی سخت افزار دستگاههای معروف و استفاده از نرم افزار این شرکتها قیمت دستگاهها مشابه دستگاه اصلی را به نصف کاهش داده اند و در اثر اینکار با کاهش فروش شرکت اصلی خسارات زیادی به شرکت مادر وارد کرده اند. برای مثال شرکت xeltek سازنده پروگرامر های سوپرپرو به علت کپی محصولاتش در ابتدای سال ۲۰۱۰ مجبور به قطع تولید پروگرامرهای ۲۸۰Uو ۵۸۰U و ۳۰۰۰U شده است و در یک اعلامیه از خریداران درخواست کرده که این مدلها را دیگر خریداری نکنند و اینکار به ضرر خریداران محصول اصلی نیز شده است چون به علت از رده خارج شدن ، اضافه کردن خانواده های جدید قطعات بعد از ۲۰۱۰ نیز دیگر برای این مدلها انجام نمی شود.

 

تفاوت پروگرامر اصلی با کپی در چیست؟

 

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

 

جی تگ (Jtag) چیست؟

 

جیتگ یک پروتکل استاندارد ارتباطی است که در ابتدا برای تست قطعات ابداع شد اما امروزه بیشتر برای پروگرام و دیباگ کردن قطعات استفاده میشود. این ارتباط از ۴ سیگنال به نامهای TDO-TCK-TDI-TMS و یک سیم زمین تشکیل شده است.

 

دیباگر جیتگ چیست ؟

 

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

 

آیا پروگرامر یونیورسال می تواند کار دیباگر را انجام دهد ؟

 

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

 

کانکتور JTAG پروگرامر TNM چه استفاده ای دارد؟

 

این کانکتور علاوه بر استفاده برای حالتهای ISP در حالت JTAG برای پروگرام آی سی های CPLD و FPGA و ATXMEGA استفاده میشود.

 

آی سی تستر چیست و چه تفاوتی با پروگرامر دارد؟

 

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

FPGA چیست؟

FPGA ها نسل جدید مدارهای مجتمع دیجیتال قابل برنامه ریزی هستند که عبارت FPGA از سر کلمه های Field Programmable Logic Gate Array گرفته شده است . سرعت اجرای توابع منطقی در FPGA ها بسیار بالا و در حد نانو ثانیه است . اگر بخواهیم FPGA ها را به طور ساده تشریح کنیم ، عبارت است از یک تراشه که از تعداد بالایی بلوک منطقی – LB (Logic Block) ، خطوط ارتباطی و پایه های ورودی / خروجی (IOB) تشکیل شده است که به صورت آرایه ای در کنار یکدیگر قرار دارند . خطوط ارتباطی که وظیفهء آنها ارتباط بین بلوک های منطقی است از سوئیچ های قابل برنامه ریزی تشکیل شده اند . این سوئیچ ها بسته به نوعی که دارند ، برخی تنها یکبار قابل برنامه ریزی هستند و برخی به تعداد دفعات زیادی برنامه ریزی می شوند .

بلوک های منطقی نیز دارای انواع مختلفی هستند که عموما توسط المانی پایه ، تمامی توابع منطقی را ایجاد می کنند . به عنوان مثال بلوک های منطقی در خانواده ACT-1 از شرکت Actel ، با پایهء مالتی پلکسری عمل می کنند . به این معنا که توسط مالتی پلکسر ، توانایی ایجاد توابع منطقی مختلف را دارند .

البته تعداد ورودی های هر بلوک منطقی متفاوت است و به نوع FPGA مربوط می شود . به عنوان مثال بلوک های منطقی در خانوادهء ACT-1 ، از نوع ۸ ورودی است . البته در برخی موارد به بلوک های منطقی ، سلول های منطقی نیز گفته می شود (LC) .

بلوک دیاگرام یک FPGA به طور ساده در شکل زیر نشان داده شده است .


البته بسیاری از سلول های منطقی بر اساس جداول LUT ساخته می شوند . LUT از تعدادی سلولهای حافظه SRAM تشکیل می شود که در هنگام برنامه ریزی FPGA ، مقدار دهی می شوند . به طور خلاصه LUT عبارت است از تولید توابع آماده برای استفاده در سلول های منطقی .
پیاده سازی توابع مختلف نیز به وسیلهء در کنار هم قرار گرفتن بلوک های منطقی و همچنین تنظیم ارتباط بین هر بلوک و به عهده گرفتن پردازش اطلاعات توسط هر بخش انجام می شود .

نکته :

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

علاوه بر اجزای گفته شده ، ممکن است برخی قسمت های داخلی نیز برای FPGA تعبیه شده باشد ، نظیر ALU و … که بستگی به طراحی شرکت سازنده دارد .

 

کاربرد FPGA :

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

 

برنامه نویسی و طراحی با FPGA :

برنامه نویسی و طراحی مدارات با FPGA ها به طور کلی به ۲ صورت انجام می شود .

- با استفاده از زبان های توصیف سخت افزاری مانند VHDL ، AHDL ، HDL و …

- با استفاده از طراحی مدار

 

این عمل توسط نرم افزارها و ابزارهای برنامه ریزی مختص به هر خانواده انجام می شود که توسط شرکت های سازنده در اختیار طراحان قرار می گیرد . به عنوان نمونه MAX + Plus || و QUARTUS || ابزار های برنامه ریزی FPGA های ساخت شرکت ALTERA هستند .

 

 

پروسسور ARM

ARM چی هست؟

این قطعات پردازنده ای هستند ، از نوع ۳۲ بیتی و دارای معماری RISC هستند و سرعت نسبتا بالایی هم دارند (کلاک از ۳۰۰ تا ۲۰۰۰ مگاهرتز)و مجهز به برخی امکانات داخلی (adc و dac و تایمر وکانتر و pwm و rtc و i2c و spi و dmaو …)وحافظه کش هستند . قابلیت ها و باس های استانداردی که برای این پروسسورها در نظر گرفته شده به همراه سرعت بالا ، حافظه کش مناسب ، مقایسه گرهای داخلی ، تایمرهای ۱۶ بیتی برای پیاده سازی RTC و … ، باعث شده که عملکرد این تراشه ها نسبت به انواع دیگر پروسسورهای هم تراز ، دارای کیفیت و قدرت بالاتری باشه .

چرا قبلا از این پردازنده استفاده نمیشده ، ایا به تازگی وارد بازار شدند؟

این پردازنده قبلا توسط شرکت ARM تولید میشده که این شرکت هم به قیمت بالا این پردازنده رو به مشتریان خاص میفروخته ، اما از اوایل سال ۲۰۰۲ به بعد این شرکت مجوز ساخت این پردازنده رو به شرکتی های همچون ATMEL و Luminary Micro و شرکت Philips و چند تا شرکت دیگه میده .
شرکت های فوق با اضافه کردن امکاناتی مثل انواع مبدل ها (دیجتال به انالوگ و ….)، انواع رابط ها (بلوتوث ، usb )و… این پردازنده رو به یک پردازنده عمومی تبدیل میکنند و اون رو به بازار جهانی عرضه میکنن.

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

برای برنامه نویسی این پردازنده از زبان های c و بیسیک و اسمبلی استفاده میشه .
کلیه کامپایلر های زبان اسمبلی برای این پردازنده رایگان هستند و شما میتونید از لینک های زیر اونا رو دانلود کنید:
http://www.spjsystems.com/traininga.htm
http://www.heyrick.co.uk/assembler
http://www.riscworld.co. uk/ONLINE/BEGINPRG/INDEX.HTM
برای زبان های c مثل خود c و c++ کامپایلر های متعددی ارائه شده که کی از این کامپایلر ها کامپایلر keil uvision هست که در اون میشه به زبان های اسمبلی و c و c++ برنامه نوشت .
نسخه رایگان این کامپایلر در لینک زیر موجود است:
http://www.keil.com/download/docs/324.asp
برای زبان بیسیک نیز کامپایلر بسکام arm وجود داره که هنوز در دسترس عموم قرار نگرفته تا کرک بشه.

ایا این پردازنده cpu هستند یا مانند میکرو کنترلر ها میباشند ، یعنی در در داخل خود ram و i/o و.. دارند یا نه ما خودمان باید این امکانات را بهش اضافه کنیم ؟

این پردازنده در نمونه های گوناگونی ارایه شده است مثلا مدل LPC2138 دارای ۵۱۲ کیلو حافظه فلش ، ۳۲ کیلو حافظه رم ، مبدل آنالوگ به دیجیتال ، مبدل دیجیتال به آنالوگ و … میباشد
یا مدل at76c551 ساخت شرکت اتمل دارای امکانتی همچون بلوتوث ، ارتباط usb و… هست
یا مدل arm7tdmi فقط یک پردازنده است که روی خود فقط خطوط i/o دارد و باید برای ان مانند یک میکرو پروسوسر واحد های rom و ram و کانتر و… تعبیه کرد
این پردازنده در مدل های وسیع ساخته میشوند (بسیار گسترده تر از avr و pic و.. ) و دست شما برای انتخاب باز است برای اطلاعات بیشتر در مورد هر پردازنده به شرکت سازنده مراجعه کنید :
http://www.us.design-reuse.com/articles/…13742.html
http://www.arm.com/products/CPUs
http://www.atmel.com

ایا برای شبیه سازی این میکرو پروسسور ها نرم افزاری وجود دارد ، قیمت انها در چه حدی است ؟

خود نرم افزار kiel دارای قسمت شبیه ساز میباشد ، به علاوه نرم افزار قدرتمند پروتوس نیز از این پروسسور ها پشتیبانی میکند

قیمت این پروسسور ها بسته به امکانات از ۵ تا ۵۰۰ هزار تومان متغییر است،
مثلا قیمت lpc2300 نه هزار تومان است ، این پروسسور دارای امکانات زیر میباشد:
فرکانس کاری ۷۲ مگاهرتز
۵۱۲ کیلو حافظه فلش قابل برنامه ریزی
۸ کیلو sram برای cpu و ۱۶ کیلو برای شبکه و ۸ کیلو هم برای usb
قابلیت اتصال به usb و شبکه lan و…
قابلیت اتصال کارت mmc و sd و…
پشتیبانی از usb 2.0
پورت های spi و i2c و …
۷۰ تا پایه ورودی و خروجی
۶ تا adc ده بیتی
چند تا dac 10 بیتی (توی دیتا شیت تعداد نزده)
۵ عدد تایمر و کانتر که میتونن از بیرون تحریک بشن و …
rtc
ولتاژ تغذیه ۳٫۳ تا ۳٫۶ ولت
نوسان ساز داخلی کریستالی از ۱ تا ۲۴ مگاهرتز
و کلی امکانات دیگه که توی دیتا شیت این پروسسور موجود هست.

ایا کتاب و منبع فارسی یا انگلیسی برای یاد گیری این پروسسور میشناسید ؟

منبع انگلیسی :
help نرم افزار و سایت های زیر:
http://www.arm.com/documentation/books.html
کتاب به زبان اسمبلی:
http://www.arm.com/miscPDFs/9658.pdf

میکروکنترلر های AVR

ساده ترین معماری میکرو کنترلر، متشکل از یک ریز پردازنده، حافظه و درگاه ورودی/خروجی است. ریز پردازنده نیز متشکل از واحد پردازش مرکز (CPU) و واحد کنترل (CU)است.

CPU درواقع مغز یک ریز پردازنده است و محلی است که در آنجا تمام عملیات ریاضی و منطقی ،انجام می شود. واحد کنترل ، عملیات داخلی ریز پردازنده را کنترل می کند و سیگنال های کنترلی را به سایر بخشهای ریز پردازنده ارسال می کند تا دستورالعمل ها ی مورد نظر انجام شوند.

حافظه بخش خیلی مهم از یک سیستم میکرو کامپیوتری است. ما می توانیم بر اساس به کارگیری حافظه، آن را به دو گروه دسته بندی کنیم: حافظه برنامه و حافظه داده . حافظه برنامه ، تمام کد برنامه را ذخیره می کند. این حافظه معمولاً از نوع حافظه فقط خواندنی (ROM) می باشد. انواع دیگری از حافظه ها نظیر EPROM و حافظه های فلش EEPROM برای کاربردهایی که حجم تولید پایینی دارند و همچنین هنگام پیاده سازی برنامه به کار می روند . حافظه داده از نوع حافظه خواندن / نوشتن (RAM) می باشد . در کاربردهای پیچیده که به حجم بالایی از حافظه RAM نیاز داریم ، امکان اضافه کردن تراشه های حافظه بیرونی به اغلب میکرو کنترلر ها وجود دارد.

درگاهها ورودی / خروجی (I/O )به سیگنال های دیجیتال بیرونی امکان می دهند که با میکرو کنترلر ارتباط پیدا کند. درگاههای I/O معمولاً به صورت گروههای ۸ بیتی دسته بندی می شوند و به هر گروه نیز نام خاصی اطلاق می شود. به عنوان مثال ، میکروکنترلر ۸۰۵۱ دارای ۴ درگاه ورودی / خروجی ۸ بیت می باشد که P3, P2, P1, P0 نامیده می شوند. در تعدادی از میکرو کنترلر ها ، جهت خطوط درگاه I/O قابل برنامه ریزی می باشد. لذا بیت های مختلف یک درگاه را می توان به صورت ورودی یا خروجی برنامه ریزی نمود. در برخی دیگر از میکروکنترلرها (از جمله میکروکنترلرهای ۸۰۵۱) درگاههای I/O به صورت دو طرفه می باشند. هر خط از درگاه I/O این گونه میکرو کنترلرها را می توان به صورت ورودی و یا خروجی مورد استفاده قرار داد . معمولاً ، این گونه خطوط خروجی ، به همراه مقاومتهای بالا کش بیرونی به کار برده می شوند.

میکرو کنترلر AVR به منظور اجرای دستورالعملهای قدرتمند در یک سیکل کلاک(ساعت) به اندازه کافی سریع است و می تواند برای شما آزادی عملی را که احتیاج دارید به منظور بهینه سازی توان مصرفی فراهم کند.

میکروکنترلر AVR بر مبنای معماری RISC(کاهش مجموعه ی دستورالعملهای کامپیوتر) پایه گذاری شده و مجموعه ای از دستورالعملها را که با ۳۲ ثبات کار میکنند ترکیب می کند.

به کارگرفتن حافظه از نوع Flash که AVR ها به طور یکسان از آن بهره می برند از جمله مزایای آنها است.

یک میکرو AVR می تواند با استفاده از یک منبع تغذیه ۲٫۷ تا ۵٫۵ ولتی از طریق شش پین ساده در عرض چند ثانیه برنامه ریزی شود یا Program شود.

میکروهای AVR در هرجا که باشند با ۱٫۸ ولت تا ۵٫۵ ولت تغذیه می شوند البته با انواع توان پایین (Low Power)که موجودند.

راه حلهایی که AVR پیش پای شما می گذارد، برای یافتن نیازهای شما مناسب است:

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

توان مصرفی پایین:

* توان مصرفی پایین آنها برای استفاده بهینه از باتری و همچنین کاربرد میکرو در وسایل سیار و سفری طراحی شده که میکروهای جدید AVR با توان مصرفی کم از شش روش اضافی در مقدار توان مصرفی ، برای انجام عملیات بهره می برند.
* این میکروها تا مقدار ۱٫۸ ولت قابل تغذیه هستند که این امر باعث طولانی تر شدن عمر باتری می شود.
* در میکروهای با توان پایین ، عملیات شبیه حالت Standby است یعنی میکرو می تواند تمام اعمال داخلی و جنبی را متوقف کند و کریستال خارجی را به همان وضعیت شش کلاک در هر چرخه رها کند!

نکات کلیدی و سودمند حافظه ی فلش خود برنامه ریز:

* قابلیت دوباره برنامه ریزی کردن بدون احتیاج به اجزای خارجی
* ۱۲۸ بایت کوچک که به صورت فلش سکتور بندی شده اند
* داشتن مقدار متغیر در سایز بلوکه ی بوت (Boot Block)
* خواندن به هنگام نوشتن
* بسیار آسان برای استفاده
* کاهش یافتن زمان برنامه ریزی
* کنترل کردن برنامه ریزی به صورت سخت افزاری

راههای مختلف برای عمل برنامه ریزی:

موازی یا Parallel :

* یکی از سریعترین روشهای برنامه ریزی
* سازگار با برنامه نویس های(programmers) اصلی

خود برنامه ریزی توسط هر اتصال فیزیکی:

* برنامه ریزی توسط هر نوع واسطه ای از قبیل TWI و SPI و غیره
* دارا بودن امنیت صد درصد در بروزرسانی و کدکردن

ISP:

* واسطه سه سیمی محلی برای بروزرسانی سریع
* آسان و موثر در استفاده

واسطه JTAG :

* واسطه ای که تسلیم قانون IEEE 1149.1 است و می تواند به صورت NVM برنامه ریزی کند یعنی هنگام قطع جریان برق داده ها از بین نروند.استفاده از فیوزها و بیتهای قفل.
* بیشتر برای دیباگ کردن آنچیپ و به منظور تست استفاده می شود

مقایسه avr با ۸۰۵۱
مقایسه ما با تمام میکروهای ۸ بیتی هست یعنی در مجموع میشه گفت AVR یه رقیب قدرتمند برای بقیه میکروهای قوی است و یه انقلاب بزرگ هم به شمار میره. هنوز هیچ میکرویی به سرعت بالای AVR در محاسبات دست پیدانکرده .در ضمن AVR قادره که محاسبات ۱۶ بیتی رو هم انجام بده. شهار ATMEL هم اینکه شما پول یه میکرو ۸ بیتی رو میدید ولی میتونید از قایلیتهای یک میکرو ۱۶ بیتی استفاده کنید.
AVR از معماری RISC با تعداد دستورالعمل بالا بهره میبره که دربین میکروها کم نظیر هست. اکثر دستورالعمل های آن باوجود زیاد بودن تعداد دستورالعملها در یک سیکل انجام میشه.
این میکرو از مدهای کاهش توان به خوبی بهره برده و تایید کننده آن زیاد بودن مدهای کاهش توان آن و استفاده از تقسیم کلاک به صورت نرم افزاری است که در کمتر میکرویی دیده میشه.
AVR حتی برعکس میکروهای دیگه هیچ تقسیم کلاکی انجام نمیده(مثلا ۸۰۵۱ کلاک رو بر ۱۲ و PIC که یه میکرو قدرتمند هست کلاک رو بر ۴ تقسیم میکنه). این امر که AVR کلاک رو تقسیم نمیکنه موجب کاهش مصرف انژی و افزایش MIPS شده.

تکنولوژی بکار رفته در AVR موجب شده که حتی میتوان از آن در محیط های صنعتی و پر نویز براحتی از آن استفاده کرد(به گفته خود ATMEL والا هنوز خودم یه تست دقیق انجام ندادم ولی اون رو با یه فیبر یه رو و با یه کابل LCD تقریبا ۲۰ سانتی و یا استفاده از باتری ماشین در کنار شمع پیکان غیر انژکتوری تست کردم ولی فقط در فاصله تقریبا ۵-۶ سانتی از اون صفحه LCD قاتی میکرد ولی نمیدونم میکرو هم ریست میشد یا نه .در ضمن قسمت تغذیه فقط از یک ۷۸۰۵ تشکیل شده بود. و این آزمایش هم برای خودم و هم برای چند تا از دوستانم که کارهای صنعتی انجام میدادن شگفت آور بود). اما به دلیل اینکه هنوز هیچ کسی اون رو تابه حال در محیط صنعتی تست نکرده و به دلیل اطمینان بالای PIC هیچ کسی دوست نداره اعتبار خودش رو به خطر بندازه.
یه جا یه مهندسه میگفت توی یه محط صنعتی که حتی کامپیوتر ریست میکرده PIC به خوبی کار خودشو انجام میداده!!!!!!!!!!

در ضمن AVR مجهز به آخرین امکانات مثل تایمر واچ داگ و برون اوت دیتکتور و مبدل های ADC و PWM است.
یکی از مهمترین بخشی که کمتر در هر میکرویی دیده میشه مقایسه کننده آنالوگ با گین ۱ و ۱۰ و ۲۰۰ و .. است که بسته به میکرو فرق میکنه.
این مقایسه کننده میتونه تو ورودی مبدل ADC قرار بگیره . این بخش برای بعضی طراحان خیلی مهمه و اونا رو مجذوب خودش کرده.

خانواده میکروکنترلرهای AVR شامل طیف گسترده ای از آی سی ها است که از ۸ پایه شروع و به ۶۴ پایه ختم می شود. اما در بین این طیف گسترده تعدادی استفاده عمومی تری دارند مانند ATMEGA32 . که در تمام مثالهای آورده شده از این آی سی استفاده شده است .

مشخصات سخت افزاری ATMEGA32 :

شکل ظاهری و پایه ها:

ATMEGA32 در سه نوع بسته بندی PDIP با ۴۰ پایه و TQFP با ۴۴پایه و MLF با ۴۴ پایه ساخته میشود که در بازار ایران بیشتر نوع PDIP موجود میباشد .

ATMRGA32 دارای چهار پورت ۸بیتی ( ۱ بایتی ) دارد که علاوه بر اینکه بعنوان یک پورت معمولی میتوانند باشند کارهای دیگری نیز انجام میدهند . بطور مثال PORTA میتواند بعنوان ورودی ADC (تبدیل ولتاژ آنالوگ به کد دیجیتال ) استفاده شود که این خاصیت های مختلف پورت در برنامه ای که نوشته میشود تعیین خواهد شد .
ولتاژ مصرفی این آی سی از ۴٫۵ V تا ۵٫۵V میتواند باشد .
فرکانس کار هم تا ۱۶MHz میتواند انتخاب شود که تا ۸MHz نیازی به کریستال خارجی نیست و در داخل خود آی سی میتواند تامین شود . فرکانس کار از جمله مواردی است که باید در برنامه تعیین شود . لازم به ذکر است که این فرکانس بدون هیچ تقسیمی به CPU داده میشود . بنابراین این خانواده از میکروکنترلرها سرعت بیشتری نسبت خانواده های دیگر دارند .
پایه ی شماره ۹ نیز ریست سخت افزاری میباشد و برای عملکرد عادی آی سی نباید به جایی وصل شود و برای ریست کردن نیز باید به زمین وصل میشود .
پایه های ۱۲ , ۱۳ نیز برای استفاده از کریستال خارجی تعبیه شده است .

ساختار داخلی ATMGA32 :
برنامه ای که برای میکروکنترلر در کامپیوتر نوشته میشود وقتی که برای استفاده در آی سی ریخته میشود ( توسط پروگرامر مخصوص آن خانواده ) در مکانی از آن آی سی ذخیره خواهد شد بنام ROM . حال در ATMEGA32 مقدار این حافظه به ۳۲KB ( 32 کیلوبایت ) میرسد .
در این آی سی مکانی برای ذخیره موقت اطلاعات یا همان RAM هم وجود دارد که مقدارش ۲KB است .
در RAM اطلاعات فقط تا زمانی که انرژی الکتریکی موجود باشد خواهد ماند و با قطع باتری اطلاعات از دست خواهند رفت . به همین منظور در ATMEGA32 مکانی برای ذخیره اطلاعات وجود دارد که با قطع انرژی از دست نخواهند رفت . به این نوع حافظه ها EEPROM گفته میشود که در این آی سی مقدارش ۱KB است و تا ۱۰۰,۰۰۰ بار میتواند پر و خالی شود .

نرم افزار
نرم افزار مورد نیاز برای برنامه نویسی :
حال میخواهیم طرز نوشتن برنامه برای میکروکنترلرهای خانواده ی AVR را شروع کنیم . پس برای اینکار نیاز به یک نرم افزار داریم که بتوانیم در آن برنامه ی خود را بنویسیم . یکی از نرم افزارهای قدرتمند برای انجام دادن اینکار نرم افزاریسیت بنام Bascom AVR . در این نرم افزار همانطور که از نامش معلوم است برنامه باید بزبان Basic که زبانی با سطح بالا (HLL) است نوشته شود . همچنین این نرم افزار دارای شبیه ساز داخلی برای تست کردن برنامه نوشته شده است که یکی از ویژگیهای این نرم افزار میباشد .

تحلیل برنامه

حال به توضیح تک به تک قسمتها میپردازیم :

۱:در قسمت معرفی آی سی از کلمه کلیدی $Regfile برای معرفی استفاده شده است . این دستور به این صورت است که باید بعد ازآن کلمه معرف آی سی مورد استفاده را در جلوی آن وارد کنیم . البته برای هر آی سی کلمه ی مخصوصی وجود دارد که برای ATMEGA32 باید کلمه ی M32def.dat را تایپ کرد . البته باید توجه داشت که این کلمه باید داخل یک جفت کوتیشن ( گ + Shift ) قرار گیرد :
$Regfile = “M32def.dat”

۲: در قسمت بعدی که تعیین فرکانس کاری است کلمه کلیدی $Crystal باید نوشته شود و آنرا باید مساوی با فرکانس کار بر حسب هرتز قرار داد :
$Crystal = 1000000

۳: حال به بخش معرفی سخت افزار رسیدیم . در این برنامه چون پورت B باید بتواند جریان بیرون دهد و سخت افزار خارجی ای که همان LED است را روشن کند بعنوان خروجی تعریف میشود . همیشه برای معرفی سخت افزار از کلمه کلیدی Config اسفاده میشود . پس برای خروجی کردن پورت B مینویسیم :
Config Portb = output

۴: چون در این برنامه نیازی به تعریف متغیری نبود به بخش برنامه اصلی میرویم و در این قسمت عددی را به پورت B خواهیم فرستاد تا طبق آن LED ها روشن شوند . البته ذکر این نکته لازم است که اگر بخواهیم عددی را در مبنای دودویی بنویسیم ابتدا باید &B را نوشته و بعد ععد مورد نظر را تایپ کنیم و همینطور برای نوشتن در مبنای هگز که &H تایپ میشود و اگر هیچکدام از کلمات ذکر شده را ننویسیم عدد در مبنای دسیمال محسوب میشود .

۵: در آخر برنامه نیز از کلمه کلیدی END برای مشخص نمودن پایان برنامه استفاده شده است .

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

معرفی LCD کارکتری :
LCD های کارکتری خود به چند نوع دیگر از لحاظ اندازه تقسیم بندی میشوند . که از LCD هایی با ۱ سطر و ۱ ستون آغاز میشوند تا اندازهایی مثل ۴ سطر و ۴۰ ستون که البته تمام آنها از ۱۶پایه تشکیل شده اند.

برای راه اندازی LCD توسط AVR نیازی به دانستن جزئیات طرز کار LCD نیست . برای کار با LCD علاوه بر پایه های تغذیه و CONTRAST ( تنظیم روشنایی ) که باید مانند شکل مداری پایین بایاس شوند نیاز به ۶ پایه ی دیگر است که عبارتند از پایه های :
RS , E , DB4 , DB5 , DB6 , DB7 .

تحلیل برنامه :

۱:برای تعیین نوع LCD از کلمات کلیدی Config و بعد از آن Lcd استفاده شده و آنها را مساوی نوع LCD مورد استفاده قرار میدهیم که در اینجا نوع مورد استفاده دارای ۲ سطر و ۱۶ ستون میباشد. پس بصورت زیر خواهیم نوشت :
Config Lcd = 16*2

۲: در مرحله ی بعد ترتیب وصل کردن پایه ها را معرفی خواهیم کرد و برای اینکار پایه هایی از LCD را که برای راه اندازی آن استفاده میشود و قبلا نیز گفته شده بود را مساوی پایه هایی از میکروکنترلر قرار میدهیم که میخواهیم به آنها وصل شود و البته این نوع راه اندازی توسط AVR را که تنها با شش پایه صورت میگیرد را نوع راه اندازی PIN میگویند . پس طبق سخت افزار نشان داده شده بصورت زیر خواهیم نوشت :
Config Lcdpin = pin , Rs = porta.0 , e = porta.1 , db4 = porta.2 , db5 = porta.3 , db6 = porta.4 , db7 = porta.5
( به علامت , بین بخشها دقت کنید . )

۳: بعد از انجام کارهای بالا که جزو بخش معرفی سخت افزار محسوب میشوند به سراغ برنامه اصلی میرویم که کار آن نمایش متن روی LCD است و برای انجام اینکار از کلمه کلیدی LCD و در جلوی آن متنی که باید نمایش داده شود استفاده میکنیم و باید توجه داشت که متن را باید داخل کوتیشن قرار داد .

۴: در انتهای برنامه نیز END را مینویسیم .

نحوه ی کامپایل برنامه و پروگرام کردن IC

کامپایل برنامه نوشته شده :
بعد از نوشتن برنامه باید آنرا کامپایل کرد تا اگر اشتباهی در تایپ کلمه ای وجود داشته باشد برای اصلاح آن اخطار داده شود و فایلهای از جمله فایل هگز که برای پروگرام کردن نیاز است ابجاد گردند . برای کامپایل برنامه همانطور که در تصویر بخش اول نمایش داده شده است باید از دکمه ی F7 استفاده کرد . با انجام اینکار برنامه ی ما کامپایل خواهد شد .
پروگرام کردن IC :
بعد از کامپایل برنامه نوبت به آن رسیده است که با نحوه ریختن برنامه داخل IC یا باصطلاح پروگرام کردن آشنا شوید . پس نیاز است که یک دستگاه پروگرامر مختص به خانواده AVR داشته باشید . برای پروگرام کردن میکروکنترلرهای خانواده AVR انواع مختلفی پروگرامر که از استانداردهای خاصی پیروی میکنند وجود دارد که مصرف عمومی تر را پروگرامهای نوع STK200/300 دارند که البته دارای مدار بسیار ساده ایست و برای پروگرام کردن از کابل LPT ( پرینتر ) استفاده میکند و در بازار هم بیشتر این نوع پروگرامر یافت میشود .
هنگامیکه میخواهیم کار پروگرام کردن را شروع کنیم ابتدا باید پروگرامر را به کامپوتر وصل نموده و بعد از توسط محیطی از نرم افزار Bascom AVR نوع آنرا برای کامپیوتر معرفی کنیم ( اینکار فقط یکبار انجام شود کافیست ) . برای شناساندن پروگرامر به کامپیوتر از منوی Option گزینه Programmer را انتخاب میکنیم :

بعد از انتخاب این گزینه کادر نمایش داده شده که در قسمت نمایش داده شده توسط خط قرمز نوع پروگرامر را انتخاب میکنیم :
بعد از انجام تنظیمات بالا میتوان آی سی را پروگرام کرد . به این صورت که گزینه Program را انتخا ب میکنیم . بعد از انتخاب این گزینه کادر زیر باز خواهد شد که با کلیک روی آیکون مربوط آی سی پروگرام میشود .
همچنین دستگاههایی برای تست برنامه نوشته شده وجود دارند که روی آنها تمام وسایل مورد نیاز مانند LCD و Keypad و … قرار دارد و کاربرمیتواند با سیم بندی ای که براحتی توسط کابلهای مخصوصی انجام میدهد پورتهای آی سی را به سخت افزارهای جانبی اتصال دهد و برنامه خود را مورد آزمایش قرار دهد . به این دستگاهها Emulator میگویند.

جزوه آموزش میکرو کنترلر AVR رو میتونید از اینجا دانلود کنین.

میکروکنترلر های PIC

یکی از شرکتهای ساخت میکروکنترلر Microchip Technology می باشد که محصولات آن تحت نام کلی PIC ارائه می شوند. (Programmable Interface Controller)

این نوع تراشه ها در انواع ۸ و ۱۸ و۲۸ و ۴۰ و ۶۴ و ۸۰  پایه موجود می باشند.

PIC  برای کارها و پروژه های صنعتی ساخته شده است و قیمت بالایی نیز که دارد به خاطر اینست که روی مصونیت آن در برابر نویز و پارازیت خیلی کار شده است. در مواردی که کار صنعتی نمی خواهیم انجام دهیم (منظور از کار صنعتی اینست که شرایط خاصی مانند کار کردن میکرو در نزدیکی موتورهایی که پارازیت شدید ایجاد می کنند یا مثلا در یک سیستم امنیتی که نباید به هیچ وجه نویز بگیرد و ریست شود) استفاده از ۸۰۵۱ ارج است هم به لحاظ قیمت و هم سادگی آن و هم اینکه از AVR پایدار تر است.

در میکرو کنترلر های پیک از معماری هاروارد (Harvard) استفاده شده است . در این نوع معماری گذرگاه دسترسی cpu به حافظه برنامه و حافظه داده مجزا است.

این معماری به دلیل برخورداری از پهنای باند گذرگاه حافظه زیاد ومتفاوت از حافظه داده استفاده موثر ازحافظه برنامه را آسان می کند به عبارت دیگر مراجعه به حافظه به حداقل خود می رسد . بکارگیری این معماری همچنین موجب شده است اکثر دستور میکرو کنترلر های PIC تنها در یک سیکل اجرا شوند. بطور کلی میکرو کنترلر های دارای معماری هاروارد از لحاظ دستورات اجرایی بصورت RISC طراحی می شوند. اشکالی که به معماری هاروارد وارد است این است که به سختی می توان با حافظه برنامه خارجی از طریق پایه های ورودی و خروجی ارتباط برقرار کرد. به همین دلیل میکرو کنترلر های با معماری هاروارد تنها حافظه برنامه داخلی دارند .(این موضوع در میکروهای شرکت atmel که با نام های avr و ۸۹ وجود دارد، دیده می شود.)

قابلیت ها و امکانات میکرو کنترلر های  PIC :

1. برنامه ریزی میکرو کنترلردرون مدار (ICSP)

2. سرعت عملکرد بالا.

۳٫ قابلیت کار در ولتاژ های متفاوت و جریان دهی زیاد :

۴٫ اشکال زدایی درون مدار (ICD) :

5. دارا بودن انواع مختلف ریست

۶٫ انتخابی بودن اسیلاتور

برتری های PIC

1-     قابلیت برنامه نویسی با زبان سطح بالا(این میکرو فقط برای حرفه ای ها است). به راحتی می توان با زبان برنامه نویسی مشابه ASSEMBLER و C می توان PIC  را برنامه ریزی کرد.

۲-     سرعت اجرای بالای برنامه ها، زیرا برنامه ها به زبان ماشین در PIC  بارگذاری شده اند و با سرعت بالایی اجرا می شوند.

۳ -     سادگی و قیمت مناسب

جزوه آموزشی میکروکنترلر های PIC رو می تونید از اینجا دانلود کنین.