گروه فناوری و اطلاعات تــــورانـِـت

محلی برای معرفی و بحث پیرامون مباحث شبکه ، امنیت و . . .

گروه فناوری و اطلاعات تــــورانـِـت

محلی برای معرفی و بحث پیرامون مباحث شبکه ، امنیت و . . .

آشنایی با AVR

آشنایی با AVR
     میکروکنترلرها به عنوان یک ابزارقدرتمند نزد مهندسان برق وکامپیوتر شناخته شده اند با توجه به کاربرد روز افزون میکروکنترلرها در صنعت , شرکت های سازنده زیادی اقدام به تولید آنها می نمایند .
میکروکنترلرهای AVR ساخت شرکت ATMEL از جمله معروف ترین و پرکاربردترین میکروکنترلرهای موجود در بازار ایران می باشند.تنوع این میکرکنترلرها به مهندس طراح این امکان را می دهد که برای هر پروژه از میکرکنترلر بهینه آن استفاده کند . به دلیل مقبولیت این میکروکنترلرها شرکت های زیادی اقدام به نوشتن نرم افزارهایی نموده اند که امکان برنامه نویسی با زبان های سطح بالا را برای کاربر فراهم می کنند .
میکرو کنترلرهای AVR به دسته های TINY و AT90S و ATMEGA تقسیم می شوند . از این میان میکروکنترلرهای نوع سوم قدرتمندتر و پرکاربردتر هستند.با توجه به اینکه نوشتن برنامه به زبان اسمبلی بسیار زمان بر و دشوار است, زبانهای سطح بالا در این زمینه کمک بسیار زیادی کرده اند .
     زبان برنامه نویسی BASIC و C بیشترین استفاده در برنامه نویسی میکروها دارند. ولی در اکثر کاربردها کدهای بیشتری را نسبت به زبان برنامه نویسی اسمبلی تولید می کنند. ATMEL ایجاد تحولی در معماری , جهت کاهش کد به مقدار مینیمم درک کرد که نتیجه این تحول میکروکنترلرهای AVR هستند که علاوه بر کاهش و بهینه سازی مقدار کدها به طور واقع عملیات را تنها در کلاک سیکل توسط معماری RISC انجام می دهد .هدف ATMEL طراحی معماری بود که هم برای زبان اسمبلی وهم زبانهای HLL‌ مفید باشد .
AVR ها به عنوان میکروهای RISC با دستورات فراوان طراحی شده اند که باعث می شود حجم کد تولید شده کم و سرعت بالا تری به دست آید .

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

1-0) تفاوت میکروکنترلر و میکروپروسسور :

     میکروپرسسورها بر خلاف میکرو کنترلرها فاقد RAM و ROM و پورتهای I/O در درون خود تراشه هستند بنابراین برای اینکه بتوان سیستمی مبتنی بر میکروپرسسور را طراحی کنیم باید RAM و ROM و پورتهای I/O و تایمرها به آن اضافه شود. با توجه به اینکه طراح می تواند روی مقدار RAM و ROM و پورتهای I/O اعمال نظر نماید , این سیستم ها انعطاف پذیری بشتری دارند. وبه آنها سیستمهای چند منظوره می گویند.
میکروکنترلرها شامل یک CPU به همراه مقدار ثابتی از RAM , ROM , پورتهای I/O وتایمر هستند که همگی این اجزا در یک تراشه جای داده شده اند و طراح سیستم نمی تواند یک حافظه , I/O یا تایمر را بدون گسترش لازم از بیرون اضافه کند بنابراین میکروکنترلرها انعطاف پذیری میکروپرسسورها را ندارند .

1-1) کاربرد میکروکنترلرها :

    با توجه به آنچه که گفته شد میکروکنترلرها برای کاربردهایی که در آنها مشکل قیمت و حجم سیستم وجود دارد , مناسب است زیرا اضافه کردن حافظه , پورت I/O تایمرها و مدار واسط لازم به میکرپرسسور سبب افزایش قیمت وحجم سیستم می گردد. اما در میکروکنترلر این مشکل وجود ندارد. میکروکنترلرها به طور گستردهای در تولید سیستمهای تک منظوره به کار می روند. منظور از سیستم تک منظوره سیستمی است که از میکروکنترلر یا میکرپروسسور فقط برای یک کار استفاده می کند.مانند پردازنده درون یک موس که تنها به منظور یافتن مکان اشاره گر موس و ارسال آن به PC برنامه ریزی شده است. این سیستم ها در مقابل سیستمهای چند منظوره قرار می گیرند. که نمونه بارز آن یک PC است که می تواند برای کاربردهای متعدد و گوناگونی همچون واژه پردازی , بازی های ویدئویی , سرویس شبکه و ... مورد استفاده قرار گیرد. این توانایی PC در اجرای کارهای گوناگون به دلیل وجود سیستم عاملی است که نرم افزار کاربردی را در RAM بار می کند تا PC بتواند آن را اجرا کند. اما در یک سیستم تک منظوره تنها یک نرم افزار کاربردی موجود است که معمولا درROM نوشته می شود. چند نمونه از وسایلی که در ساخت آنها از میکروکنترلرها استفاده شده است , عبارت اند از : کنترل از راه دور تلویزیون , تلفن , دوربین فیلمبرداری , فاکس , چاپگر , دستگاه فتوکپی ,سیستم های حفاظتی , دزد گیر و سیستم های کنترل صنعتی.
به طور کلی می توان کاربرد میکروکنترلرها را در طراحی مدارهای کنترل و اتوما سیون خلاصه کرد .

1-2) ویژگی های اصلی یک میکروکنترلر :

    با توجه به گستردگی میکروکنترلرها و شرکتهای سازنده آنها چگونگی انتخاب یک میکروکنترلر برای کاربردی خاص , از اهمیت فراوانی برخوردار است.بطور کلی ابتدا باید نیازهای سیستم و هزینه آنرا کاملا مشخص کنیم تا به کمک آنها بتوانیم انتخابی بهینه انجام دهیم. برای انتخاب یک میکروکنترلر باید موارد زیر را در نظر بگیریم :
1- تعداد بیتهای باس داده میکروکنترلر که می تواند 8 , 16 ,‌ 32 بیت باشد.
2- بیشترین سرعت میکروکنترلر.
3- توان مصرفی میکروکنترلر.
4- نوع بسته بندی میکروکنترلر (DIP , QFP , MLF , PLCC و...)
5- مقدار حافظه RAM و ROM‌ موجود در تراشه وقابل اضافه شدن به آن.
6- امکاناتی که کاربر را در کار با میکروکنترلر یاری می نماید , مانند اسمبلر در دسترس , عیب یاب , کامپایلر زبانهای سطح بالا ( C و BASIC و ... ) , امولاتور وشبیه ساز.
7- قیمت میکروکنترلر و در دسترس بودن آن .

1-3) میکروکنترلر های AVR‌ :

      در مباحث بالا با میکروکنترلرها آشنا شدیم حال در این بخش میکروکنترلرهای 8 بیتی شرکت ATMEL‌ را که از ساختار RISC بهره می برند معرفی می کنیم . اما پیش از آن تفاوت های ساختار RISC وساختار CISC را بیان می کنیم .
1-4) ساختار RISC :

    تا اوایل دهه 1980 , کلیه پردازنده ها از ساختار CISC‌ استفاده می کردند. در این ساختار چندصد دستور طراحی شده بود که این دستورها کلیه عملیات ممکن راپوشش میداد.این روش طراحی پردستور مشکلاتی همانند تعداد زیاد ترانزستورها , پیچیدگی طراحی و ساخت مدار, زمان بری عملیات و گران بودن تراشه را به همراه داشت0 به همین دلیل در اوایل دهه 80 ساختار جدیدی به نام RISC ابداع شد . برخی از ویژگی های ساختار RISC از این قرارند :
1- اندازه دستورها در RISC بر خلاف CISC ثابت است و این امر کمک می کند که CPU‌ سریعتر دستور ها را دیکد نماید .

2- RISC از روش STORE/LODE استفاده می کند. در این روش انتقال داده فقط از حافظه به رجیستر( LODE ) واز رجیستر به حافظه( STORE ) انجام می شود و انتقال مستقیم از رجیستر به رجیستر و از حافظه به حافظه ممکن نیست .
3- تعداد رجسترها در RISC زیاد است . همه پردازنده ها 32 رجستر 32 بیتی دارند
4- در RISC تعداد دستور ها کم است و فقط دستورهای پایه موجود است و برنامه نویس و کامپایلر باید دستورهای دیگر را با این دستور های پایه بسازند. کم بودن تعداد دستورها باعث دشواری برنامه نویسی به زبان اسمبلی ( نسبت به پردازنده های CISC ) می شود. بنابراین از RISC در محیط های برنامه نویسی به زبانهای سطح بالا مثل C استفاده می شود. کم بودن تعداد دستورها همچنین سبب می شود که برنامه بزرگ شود و حافظه بیشتری را اشغال کند .
5- برتری اصلی RISC‌ در این است که 95 درصد دستورهای آن یک کلاک و بقیه فقط دو کلاک زمان می برند که این امر باعث افزایش سرعت می شود.ضمن اینکه در تعداد ترانزیستورها به دلیل سادگی مدار صرفه جویی می گردد.
6- بر خلاف پردازنده های CISC که باس آدرس و داده در آن مشترک است , در پردازنده های RISC‌ این باس ها جدا جدا هستند :
الف) برای ورود و خروج داده (OPERAND) به CPU‌.
ب) برای دستیابی و آدرس دهی داده ( OPERAND ).
ج) برای حمل .OPECODE
پ) برای دستیابی و آدرس دهی OPECODE. به این روش ساختار HAVARD گویند .
7- چون CISC‌ تعداد زیادی دستور دارد روش های فراوانی هم برای آدرس دهی دارد که اجرای این روش ها به وسیله ریز دستورهایی انجام می شود . پیاده سازی این ریز دستورها در CPU بیش از %60 ترانزیستورها را مصرف می کند حال آنکه در RISC‌ ریز دستورها با استفاده از روش Harvard توسط کمتر از 10% ترانزیستورها پیاده سازی می شود.
به طور کلی پردازنده هایی که از ساختار RISC ریز دستورها بهره مند هستند در اکثر زمینه ها بر پردازنده های CISC برتری دارند اما مشکل RISC این است که برنامه های MSDOS بر روی آن اجرا نمی شود , بنابراین از پردازنده های CISC برای ساخت PC استفاده می شود. نمونه هایی از پردازنده هایی با ساختار CISC عبارتند از:
میکروپروسسورهای 80X86 ساخت INTEL‌ و 68X0‌ ساخت Apple Mclntosh‌ . میکروکنترلر 8051 هم از ساختار CISC استفاده می کند .

ویژ گی های میکروکنترکرهای AVR‌ :
1- میکروکتنرلرهای AVR از یک ساختار RISC‌ استفاده می کنند. دستورها در این میکروکتنرلرها به گونه ای طراحی شده است که حجم برنامه کوچک شود حتی اگر به زبان اسمبلی ساخته شده باشد. ساختار RISC با دستورهای فراوان در این میکروکتنرلرها باعث کم شدن حجم برنامه و بالا رفتن سرعت می شود. AVR دارای مجموعه دستورات فراوان با 32 رجیستر عمومی است که همه آنها با ALU‌ در ارتباط هستند که سبب می شود دو رجیستر مستقل در یک دستور به طول یک کلاک در دسترسی باشند. این ساختار منجر به بهینه سازی کد و ده برابر سریعتر شدن آن نسبت به CISC می شود.
2- ساختار بهینه I/O در این میکروکتنرلرها باعث کاهش نیاز به افزودن اجزای خارجی می شود .
3- میکروکتنرلرهای AVR ‌ دارای اسیلاتور داخلی , تایمر , UART و SPI درون تراشه هستند .
4- این میکروکتنرلرها دارای مقاومت UP – PULL درونی هستند .
5- AVR از تکنولوژی حافظهVOLATILE – NONوDENSITY HIGH برخوردار است.
6- میکروکتنرلرهای AVR دارای مبدل A/D‌ , مقایسه کننده آنالوگ , تایمر WATCHDOG و قابلیت مدولاسیون عرض پالس هستند .
7- حافظه های FLASH و EEPROM در این میکروکتنرلرها , قابلیت برنامه ریزی شدن در داخل مدار را دارند(ISP ) .
8- حافظه FLASH از دو روش در داخل مدار , برنامه ریزی می گردد. یکی , توسط PROGRAMMER حافظه VOLATILE - NON و از طریق رابطه سریال SPI و دیگری به وسیله اجرای BOOT PROGRAM می تواند از هر مدار واسطی برای ریختن برنامه بر روی حافظه FLASH استفاده کند .
9- ساختار میکروکتنرلرهای AVR به گونه ای طراحی شده است که هم برای زبان اسمبلی وهم زبانهای سطح بالا مفید باشد. بنابراین می توان از زبانهای سطح بالایی مثل C و BASIC هم در برنامه ریزی این میکروکتنرلرها استفاده کرد که این امر برنامه نویسی را برای کاربران آسان می کند .

میکروکنترلر

میکرو چیست؟

میکروکنترلر چیست:

میکروکنترلر را در واقع می توان یک کامپیوتر کوچک در قالب یک چیپ برای کنترل وسایل الکترونیکی (در اینجا ربات) تلقی کرد.  تفاوت میکروکنترلر با میکروپروسسور در این است که میکروکنترلر دارای یک CPU ٫مقدار محدودی RAM ٬ ROM ٬ پورت های I/O و تایمر در درون خود می باشد در صورتی که میکروپروسسور فقط یک CPU هست و شما باید RAM, ROM ,... را به صورت اجزای جانبی به آن متصل کنید (درست مثل CPU کامپیوتر). برای همین میکروکنترلرها تک منظوره ولی میکروپروسسورها همه منظوره هستند. با این تفاسیر میکروکنترلرها دارای کارایی های خاص خودشان مثلا در ماشین لباسشویی٬ ماکروویو٬ تلفن و البته ربات هاو... هستند یعنی جایی که استفاده از میکروپروسسور نه از نظر کارایی و نه از نظر اقتصادی عقلانیست!

انتخاب میکرو:  

در انتخاب میکرو فاکتورهای زیادی دخیل هستند : ۱-هزینه  ۲-سرعت  ۳-کارایی و قابلیت ها  ۴-راحتی کار با آن و... در حال حاضر در بازار ایران میکروهای متنوعی ازجمله ۸۰۵۱ از اینتل٬ PIC از میکروچیپ تکنولوژی و AVR از شرکت ATMEL طرفداران زیادی دارند.

برای این ربات از AVR مدل Atmega32 استفاده خواهیم کرد و برای آموزش برنامه نویسی آن با وجود کامپایلرهای متنوع ، ما Bascom را انتخاب می کنیم.

بعضی از قابلیت های مهم AVR مدل Atmega32 :

·                     کارایی بالا و توان مصرف کم

·                     سرعت بسیار بالا نسبت به سایر میکروها

·                     32K حافظه فلش داخلی قابل برنامه ریزی

·                     پایداری حافظه فلش: قابلیت 10000 بار نوشتن و پاک کردن

·                     2K حافظه داخلی SRAM

·                     2 تایمر-کانتر 8 بیتی و یک تایمر-کانتر 16 بیتی

·                     .....

برنامه نویسی Atmega32:
همونطور که گفته شد برای برنامه نویسی این میکرو از Basic و کامپایلر معروف Bascom استفاده می شود. Bascom فقط 7 منو دارد که عبارتند از: File, Edit, Program, Options, Tools, Window, Help .

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

منوی Program که در واقع گزینه هایی برای کامپایل کد, Syntax Check و شبیه سازی دارد.

بدنه یک برنامه در محیط Bascom:

منظور از بدنه حداقل کد یک برنامه هست بدون هیچ فرمانی.

- معرفی میکرو:

برای شروع یک برنامه در محیط Bascom ابتدا بایستی میکروی مورد نظر تعریف گردد.

$REGFILE = VAR       'فرم کلی تعریف٫ "وار" یک رشته معرف مدل خاص میکروی مورد نظر هست $REGFILE =  "M16def.dat"       'MEGA 16 MCU این برای مدل
$REGFILE =  "M32def.dat"      
'MEGA 32 MCU این برای مدل
$REGFILE =  "M128def.dat"     
'MEGA 128 MCU این برای مدل

-کریستال:
برای مشخص کردن فرکانس کریستال (میکرو ها باید به یه قطعه خارجی بنام کریستال وصل
شوند) استفاده شده برحسب هرتز از دستور CRYSTAL = X$ استفاده می نماییم X فرکانس کریستال استفاده شده بر حسب هرتز است. خوشبختانه AVR دارای یک کریستال 1MHZ داخلی هست اما حتی برای استفاده از اون هم باید این دستور رو بکار ببریم. مثال:

$CRYSTAL = 100000        '1MHz internal$CRYSTAL = 140000        '14MHz external

-یاداشت(اختیاری):

 گاهی نیاز است یاداشتهایی برای اطلاعات بیشتر در برنامه اضافه کنید٬ در Bascom هم مثل بیسیک می تونید با علامت " ' " یا REM اینکار را  انجام دهید. درست مثل یادداشت های اضافی که در مثالهای قسمتهای قبل استفاده شده مثال:

Print "Hello World"      'این دستور بعدا معرفی می شود  

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

 

 -پیکربندی پورتها:

همونطور که در شکل بالا می بینید میکروی AVR  مدل ATMEGA32 داری ۴۰ پایه هست که ۳۲ تا از پایه های آن می تواند برای چهار پورت موجود در آن استفاده شود. این ۴ پورت مانند شکل به صورت PA, PB, PC, PD نام گذاری شده اند که البته هر کدام از این پورتها دارای ۸ پین ۸X۴=۳۲) ) هستند. که درواقع هر پورت را باید به صورت یک بایت در نظر گرفت و هر پین را به صورت یک بیت فرض کرد و هر کدام از این ۳۲ پایه میکرو مربوط به پین خاصی از یک پورت است. در Bascom نماد پورتها به صورت portx  که X یکی از حروف A..D هست بکار میرود و نماد پین های هر پورت هم به صورت portx.y که در اینجا X مثل بالا  و y شماره پین از ۰ تا ۷ می باشد. مثال:

 PortB = 10         'set portb to 10
 PortC.0 = 0        'Set pin 0 of portC to 0
 PortC.4 = 1        'Set pin 4 of PortC to 1

نکته دیگر که باید دقت کرد این است که پورت ها یک بایتی هستند یعنی نهایت عددی که می شود در آنها قرار داد ۲(۱۱۱۱۱۱۱۱) درمبنای باینری یا ۲۵۵ در مبنای دهدهی هست. وقتی عدد ۲(۱۱۱۱۱۱۱۱) یا ۲۵۶ رو مثلا در پورت سی قرار دهیم تمام پین های این پورت ۱ می شوند و اگر باز عدد ۱۷ معادل ۲(۰۰۰۱۰۰۰۱) را در آن قرار دهیم (PortC=17) آنگاه پینهای ۰ و ۴ این پورت یک خواهند شد.