مقاله (فصل سوم میکروکنترلر های خانواده ی AVR)

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

3-1 مقدمه

در سال 1996 میکروکنترلر های خانواده ی AVR توسط دو مهندس شرکت Atmel ساخته شدند. مخفف دقیق کلمه ی AVR را فقط این دو مهندس می دانند. همانطور که گفته شد، هدف از ساخت این میکروکنترلر ها، عمومی کردن مصرف میکروکنترلر بود. این خانواده از میکروکنترلر دارای معماری RISC بوده و به دو نوع 8 بیتی و 32 بیتی تقسیم می شوند.


3-2 انواع میکروکنترلر های AVR:

1) 8 بیتی: این خانواده خود به چند دسته تقسیم می شوند:

الف) AT90S: این سری، سری کلاسیک بوده و با آمدن دو سری بعدی دیگر تولید نمی شوند ولی برای آنها جایگزین ساخته شده است، مثلا ATTiny2313 جایگزین AT90S2313 شده است و یا ATMega8515 جایگزین AT90S8515 شده است.

ب) ATTiny: همانطور که از نام tiny پیداست، تعداد پایه های این سری کم می باشد (حداکثر 20 پایه) اما CPU قدرتمندی دارند و کاربرد زیادی دارند مانند ATTiny2313 یا ATTiny26L.

د) ATMega: این سری که از قدرتمند ترین سری AVR هشت بیتی می باشد، دارای حافظه ی زیاد و امکانات بالاتری نسبت به دو سری قبلی هستند. تعداد پایه های این سری بیشتر از 28 پین می باشد مانند ATMega8، ATMega16، ATMega256

ه) سری هایی مانند CAN، USB، RF و غیره به دلیل اینکه در ایران وجود ندارند، به بررسی آنها پرداخته نمی شود.


2) 16 بیتی: این خانواده که تحت عنوان ATxMega شناخته می شوند، در سال 2008 ساخته شدند. در ادامه ی این فصل به بررسی آن پرداخته می شود.

3) 32 بیتی: این خانواده خود به دو نوع زیر تقسیم بندی می شود:

الف) AVR32UC3: این سری خود به سه مدل UC3A، UC3B و UC3C تقسیم بندی می شوند. وجود کلیه ی پروتکل های ارتباطی، مصرف توان کم، کارایی بالا و غیره از ویژگی های اصلی این گروه است.

ب) AVR32AP7: امکانات این سری، تا حدودی در حد میکروکنترلر های ARM می باشد. اما میکروکنترلر های 32 بیتی PIC و AVR نتوانسته اند جای میکروکنترلر های ARM را بگیرند.


3-3 بررسی انواع AVR و امکانات داخلی آنها

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

1) ATTiny2313
2) ATMega16
4) ATxMega384
5) AP7000
6) AVR32UC3B


3-3-1 ATTiny2313

این مدل از AVR مناسب برای پروژه های کوچک می باشد. در خطوط زیر به بررسی ویژگی های داخلی آن پرداخته می شود.

– 120 دستورالعمل قدرتمند
– 32 رجیستر 8 بیتی
– عملکرد کاملا ثابت
– حداکثر فرکانس 20MHz که در این فرکانس 20 میلیون دستورالعمل اجرا می شود.
– 2KB حافظه ی Flash داخلی با قابلیت 10000 بار برنامه ریزی شدن
– 128B حافظه ی EEPROM با قابلیت 100000 بار برنامه ریزی شدن
– 128B حافظه ی SRAM
– یک تایمر 8 بیتی با تقسیم کننده ی فرکانسی مجزا و مد مقایسه ای
– یک تایمر 16 بیتی با تقسیم کننده ی فرکانسی مجزا و مد مقایسه ای و کپچر
– چهار کانال PWM
– یک آپ امپ (مقایسه کننده) داخلی
– تایمر Watch Dog داخلی قابل برنامه ریزی
– یک رابط عمومی سریال
– یک رابط سریال دو طرفه
– برنامه ریزی از طریق SPI
– 18 پایه ی I/O
– ولتاژ تغذیه از 2.7V تا 5.5V
– نوسان ساز داخلی با چهار فرکانس قابل برنامه ریزی
– 10 وقفه ی خارجی
– امکانات مشترک AVR (در ادامه ی این فصل بررسی می شوند)

ترتیب پایه های این مدل به صورت شکل زیر می باشد:

پایه های ATTiny2313

شکل 3-1 ترتیب پایه های ATTiny2313


3-3-2 ATMega16

این مدل از AVR مرز میان میکروکنترلر های جدید تر 8 بیتی و قدیمی تر 8 بیتی می باشد. به دلیل اینکه مدل های جدید تر 8 بیتی فقط تعداد امکانات آنها و تعداد پایه های آنها بیشتر است (مثلا ATMega128 دارای 4 تایمر و 53 پایه ی I/O است در حالی که ATMega16 دارای سه تایمر و 32 پایه ی I/O است)، معرفی این مدل کافی است.

ابتدا در شکل زیر ترتیب پایه های این مدل را مشاهده می کنید:

پایه های ATMega16

شکل 3-2 ترتیب پایه های ATMega16

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

– 131 دستور العمل
– 32 رجیستر عمومی
– عملکرد کاملا ثابت
– حداکثر فرکانس 16MHz و در این فرکانس 16 میلیون دستور العمل اجرا می شوند.
– 16KB حافظه ی Flash داخلی با قابلیت 10000 بار برنامه ریزی
– 512B بایت حافظه ی EEPROM با قابلیت 100000 بار برنامه ریزی
– 1K بایت حافظه ی SRAM داخلی
– رابط JTAG برای عیب یابی برنامه و برنامه ریزی میکروکنترلر
– دو تایمر 8 بیتی با تقسیم کننده ی فرکانسی مجزا و حالت مقایسه ای
– یک تایمر 16 بیتی با تقسیم کننده ی فرکانسی مجزا با حالت مقایسه ای و کپچر
– یک کانتر بلادرنگ با نوسان ساز مجزا
– چهار کانال PWM
– مبدل آنالوگ به دیجیتال داخلی 10 بیتی با 8 کانال (پایه) مجزا
– پشتیبانی از ارتباط سریال با قابلیت برنامه ریزی
– رابط SPI
– OpAmp داخلی
– نوسان ساز داخلی با چهر فرکانس قابل برنامه ریزی
– سه وقفه ی خارجی
– ولتاژ تغذیه از 4.5V تا 5.5V
– امکانات مشترک AVR (در ادامه ی این فصل بررسی می شوند)


3-3-3 ATxMega384

این مدل از AVR در سال 2008 ساخته شد و معایب AVR های قدیمی مانند ATMega را رفع کرد. این مدل از AVR به دلیل اینکه تازه وارد بازار ایران شده است و منابع آموزشی آن کم است، زیاد استفاده نمی شود. این گروه از AVR هم 16 بیتی می باشد و هم 8 بیتی می باشند. به این صورت که بعضی از دستورالعمل ها 16 بیتی بوده و بعضی دیگر 8 بیتی هستند. نخست در شکل زیر بلوک دیاگرام داخلی و ترتیب پایه های سری ATxMegaxxx مانند ATxMega384 رسم گردیده است.

شکل 3-3 ترتیب پایه های ATxMegaxxx

این سری از میکروکنترلر دارای امکانات زیر می باشد:

– عملکرد بالا
– چهار کانال DMA
– حداکثر فرکانس 32MHz
– 384KB حافظه ی Flash داخلی
– 8KB حافظه ی BOOT
– 4KB حافظه ی EEPROM
– 32KB حافظه ی SRAM
– رابط خروجی برای اتصال 32MB حافظه ی SRAM یا 128MB حافظه ی SDRAM
– 8 تایمر 16 بیتی
– 8 جفت پایه برای ارتباط سریال
– چهار پورت SPI
– چهار رابط دو سیمه I2C
– کانتر 16 بیتی بلادرنگ با نوسان ساز مجزا
– دو کانال 8 پایه ای برای مبدل آنالوگ به دیجیتال با دقت 12 بیت (جمعا 16 پایه)
– دو کانال 8 پایه ای مبدل دیجیتال به آنالوگ با دقت 12 بیت (جمعا 16 پایه)
– چهار OpAmp داخلی با قابلیت مقایسه ی هرکدام با هم
– وقفه ی خارجی بر روی تمام پایه های I/O قابل فعال سازی است.
– 78 پایه ی I/O
– ولتاژ تغذیه بین 1.6V تا 3.6V
– رابط JTAG برای برنامه ریزی و اشکال زدایی سخت افزاری
– امکانات مشترک AVR (در ادامه ی این فصل بررسی می شوند)


3-3-4 AP7000

میکروکنترلر های 32 بیتی AVR یکی از رقیبان ARM محسوب می شود این گروه از میکروکنترلر های AVR بیشترین امکانات این خانواده را دارند. در ادامه به بررسی امکانات میکروکنترلر AP7000 پرداخته می شود. به دلیل اینکه این سری از میکروکنترلر فقط در بسته های BGA تولید می شود و 256 پایه دارد، برای جلوگیری از حجم زیادی از صفحات که برای نشان دادن ترتیب پایه های این مدل است، فقط امکانات آن بررسی می گردد. فقط در شکل زیر محفظه ی BGA به صورت گرافیکی نمایش داده شده است.

شکل 3-4 محفظه ی BGA


امکانات این مدل از AVR به شرح زیر می باشند.

– عملکرد بالا و مصرف کم
– 210 میلیون دستورالعمل در حداکثر فرکانس 150MHz
– 16KB حافظه ی نهان
– کمک پردازنده ی پیکسلی
– 32KB حافظه ی SRAM داخلی
– قابلیت اتصال حافظه های خارجی مانند SRAM، SDRAM، SD، MMC، Compact Flash و NAND Flash
– دستیابی به حافظه های خارجی بدون دخالت CPU
– سه کانتر خارجی با I/O های مجزا، PWM و Capture
– یک رابط سریال
– سه پورت سریال همزمان
– رابط نمایشگر کریستال مایع
– رابط دوربین
– یک پورت USB با سرعت 480Mbps
– دو کارت شبکه با پشتیبانی از سرعت های 10Mbps و 100Mbps
– مبدل دیجیتال به آنالوگ 16 بیتی برای خروجی صدا
– رابط JTAG برای عیب یابی نرم افرازی
– ولتاژ تغذیه بین 3V تا 3.6V


3-3-5 AVR32UC3B

گروه دیگری از میکروکنترلر های AVR 32 بیتی، گروه UC3 می باشند. در شکل زیر ترتیب پایه های مدل AT32UC3B0256 آمده است. ویژگی مثبت این سری از AVR های 32 بیتی این است که پایه ها به شکل چهارگوش در اطراف آن قرار دارند و نیازی به برد چند لایه جهت استفاده از پایه ها (مانند محفظه ی BGA) وجود ندارد

شکل 3-5 ترتیب پایه های AT32UC3B0256


امکانات این گروه به صورت زیر می باشد.

– عملکرد بالا و مصرف توان کم
– قابلیت اجرای 75 میلیون دستورالعمل در حداکثر فرکانس 60MHz
– عملکرد بالا در انتقال داده و بر روی باس های مجزا
– 7 کانال DMA موازی
– 256KB حافظه ی Flash با قابلیت 100000 بار برنامه ریزی شدن و دوام حافظه تا 15 سال
– 32KB حافظه ی SRAM
– پورت USB
– 3 تایمر کانتر با قابلیت تولید PWM و کپچر
– 7 کانال تولید PWM
– سه جفت سیم برای ارتباط سریال
– یک پورت SPI
– یک کنترل کننده ی سریال همزمان
– دو رابط سریال I2C
– مبدل آنالوگ به دیجیتال 10 بیتی 8 کاناله
– رابط JTAG برای عیب یابی برنامه
– 44 پایه ی I/O
– نیاز به یک منبع تغذیه ی 3.3V برای کارکردن


3-4 بررسی امکانات مشترک اکثر میکروکنترلر ها

بسیاری از میکروکنترلر ها مانند ARM، PIC و AVR دارای امکانات داخلی مشترکی هستند که در قسمت های گذشته مورد بررسی قرار نگرفت. در این قسمت به معرفی این امکانات پرداخته می شود.


3-4-1 Brown-out Detection (BOR)

در بسیاری از مدل های میکروکنترلر ها به دلیل اینکه افت ولتاژ تغذیه از حد تعیین شده برای میکروکنترلر سبب می شود که عملکرد آن مختل شود و اطلاعات موجود در EEPROM و Flash ممکن است که در این شرایط پاک شود. بنابراین باید یک مدار تشخیص دهنده ی افت ولتاژ وجود داشته باشد تا با افت ولتاژ از حد تعیین شده میکروکنترلر را در حالت Reset نگه دارد تا عملکرد این حافظه ها دچار مشکل نشوند. این واحد با BOR مشخص می شود. در میکروکنترلر های AVR با برنامه ریزی فیوز بیت های BODLEVEL و BODEN می توان BOR را در سه حالت غیر فعال، V4.0 و V2.7 تنظیم نمود. عملکرد فیوز بیت ها در ادامه ی این فصل توضیح داده می شود.


3-4-2 تایمر سگ نگهبان

همانطور که قبلا گفته شد، در صورتی که برنامه ی میکروکنترلر دچار مشکل شود، این تایمر فعال شده و میکروکنترلر را Reset می کند. معمولا این تایمر ها قابل برنامه ریزی هستند و می توان فرکانس آن را در یکی از حالت های زیر تنظیم نمود. فرکانس اسیلاتور را می توان تقسیم بر 16، 32، 64، 128، 256، 512، 1024، 2048 تنظیم نمود و این فرکانس بدست آمده، همان فرکانس تایمر سگ نگهبان است. در میکروکنترلر های AVR با برنامه ریزی فیوز بیت WDTEN می توان این تایمر را فعال کرد و فرکانس آن را به صورت نرم افزاری تنظیم می کنیم. در میکروکنترلر های PIC نیز به همین صورت تایمر سگ نگهبان را فعال می کنیم.


3-4-3 Power On Reset (POR)

این قابلیت باعث می شود که وقتی تغذیه را به میکروکنترلر متصل کردیم، میکروکنترلر ریست شده و برنامه از ابتدا شروع به اجرا گردد.


3-4-4 Startup Timer (SUT)

این قابلیت باعث می شود که وقتی تغذیه ی میکروکنترلر را وصل می کنیم، میکروکنترلر بلافاصله شروع به اجرای دستورات نکند، بلکه برای ثابت شدن فرکانس کریستال مدتی صبر کرده و سپس شروع به اجرای دستورات کند. مدت زمان این تاخیر در میکروکنترلر های AVR قابل تنظیم است و می توان در سه حالت غیر فعال، 4.1mS و 65mS آن را تنظیم نمود.


3-4-5 حلقه ی فاز قفل شده (PLL)

این امکان در میکروکنترلر هایی که فرکانس آن بیش از 20MHz است وجود دارد. به دلیل اینکه در اطراف کریستال هایی با فرکانس بالا میدان های مغناطیسی نا خواسته ایجاد می شود، به همین دلیل با استفاده از PLL فرکانس میکروکنترلر را به بیش از 20MHz می رسانند.


3-4-6 پورت سریال و پورت سریال همزمان

پورت سریال که به آن USART می گویند و در قسمت های بالا هم جزء امکانات داخلی بسیاری از میکروکنترلر ها می باشد، همانطور که در فصل دوم توضیح داده شد، برای انتقال اطلاعات از دو سیم استفاده می کند. می توان برای پورت سریال (ارتباط سریال) سرعت های متفاوتی را از 1 بیت در ثانیه تا چند صد هزار بیت در ثانیه تعیین کرد. در قسمت های بعدی بیشتر به بررسی این پورت پرداخته می شود. پورت سریال همزمان غالبا برای مواردی همچون SPI یا I2S استفاده می گردد.


3-4-7 بیت های قفل (Lock Bits)

برای اینکه دیگر کسی نتواند به برنامه ی ذخیره شده در میکروکنترلر دسترسی پیدا کند، پس از برنامه ریزی میکروکنترلر بیت های قفل را برنامه ریزی می کنند، در این صورت دیگر کسی نمی تواند برنامه ی ذخیره شده در میکروکنترلر را استفاده نماید. (برای جلوگیری از تکثیر غیر قانونی سخت افزار ساخته شده با میکروکنترلر).


3-4-8 حافظه ی بوت (Boot)

این حافظه برای این منظور استفاده می شود که با رخ دادن شرایط خاصی میکروکنترلر بتواند به طور خودکار برنامه ی موجود در حافظه ی Boot را در حافظه ی Flash کپی کند. این حافظه بیشتر برای ارتقای برنامه ی میکروکنترلر بدون نیاز به هیچ وسیله ی خارجی استفاده می شود. مثلا فرض می کنیم یک مدار شمارنده در یک کارخانه قرار داده شده است و تعداد کالاهای عبوری را شمارش می کند؛ وقتی این تعداد به 50 رسید، به یک بازوی رباتیکی دستور داده می شود که آنها را بسته بندی کند. حال اگر بخواهیم وقتی تعداد کالا به 100 عدد رسید، این کار رخ دهد، در این صورت می توان به کمک حافظه ی BOOT به راحتی با فشردن چند کلید برنامه ی میکروکنترلر را ارتقا دهیم.


3-4-9 فیوز های تنظیمات

این بیت ها برای این منظور استفاده می شوند که بتوان با آنها کارهایی مانند انتخاب نوسان ساز داخلی یا خارجی، فعال سازی BOR و WDT، انتخاب حجم حافظه ی BOOT، تنظیم SUT، غیر فعال کردن پایه ی Reset و موادی مشابه انجام داد. این فیوز ها در تمامی میکروکنترلر ها وجود دارند. در بعضی از میکروکنترلر ها این فیوز ها به همراه فایل هگز می باشند مانند فیوز های میکروکنترلر PIC. فیوز بیت های AVR در ادامه ی فصل کاملا بررسی می شوند.


3-4-10 انتخاب نوسان ساز

همانطور که در فصل های گذشته گفته شد، وظیفه ی نوسان ساز، تولید فرکانس لازم (کلاک لازم) برای کارکردن میکروکنترلر می باشد. نوسان سازها در بسیاری از مدل های میکروکنترلر هم به صورت داخلی و هم به صورت خارجی وجود دارند. نوسان ساز های خارجی در میکرو کنترلر های AVR می توانند در سه حالت زیر تنظیم شوند.

الف) نوسان ساز RC: این نوسان ساز به دلیل اینکه نسبت به تغییرات دما حساس است، نوسان ساز خوبی به شمار نمی رود. مزیت این نوسان ساز این است که می توان انواع فرکانس ها را با آن تولید نمود.

ب) نوسان ساز کریستالی: این نوسان ساز ها به دلیل اینکه از پایداری فرکانسی خوبی نسبت به تغییرات دما برخوردار هستند، از آنها بسیار زیاد استفاده می شوند. گروهی این نوسان ساز ها رزوناتور های سرامیکی هستند و پایداری آنها نسبت به دما کمتر است.

ج) پالس خارجی: با استفاده از یک منبع کلاک خارجی مانند ژنراتور تولید موج می توان یک پالس مربعی با فرکانس دلخواه به میکروکنترلر اعمال نمود.

برای انتخاب منبع نوسان در AVR باید فیوز بیت های CKSELL را برنامه ریزی کرد


3-4-11 مد های کم کردن مصرف توان

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

1) IDLE: در این حالت کلاک CPU متوقف می شود و میکروکنترلر به امکانات SPI، USART، آپ امپ داخلی، ADC، Timer/Counters، Watchdog و I2C اجازه می دهد که کار کنند و اگر وقفه ها توسط کاربر فعال شده باشند، می توانند میکرو را از این حالت به حالت معمولی ببرند.

2)ADC NOISE REDUCTION : در این حالت کلاک CPU متوقف می شود ولی اگر ADC، Timer/Conter2، Watchdog، I2C و وقفه ها فعال باشند، میکروکنترلر را از این حالت خارج می کنند. در این حالت اصولاً کلاک حافظه ی Flash، I/O و CPU متوقف می شوند ولی کلاک های دیگر کار می کنند. این مد در هنگام کار کردن مبدل آنالوگ به دیجیتال استفاده می شود تا نویز احتمالی را کم کند

3) Power Down: در این مدفرکانس اسیلاتور خارجی متوقف می شود ولی وقفه های خارجی، Watchdog و I2C اگر فعال باشند، به کارشان ادامه می دهند. مدت زمان خارج شدن میکروکنترلر از این حالت توسط فیوز بیت های SUT و CKSEL قابل تنظیم می باشد.

4) Power Save: این مد با Power Down یکسان است با این تفاوت که تایمر2 می تواند میکروکنترلر را از این حالت بیدار کند. در این مد مصرف جریان به حدود µA1 می رسد. از این مد وقتی استفاده می کنیم که تایمر2 میکروکنترلر را در حالت غیر همزمان پیکر بندی کرده باشیم.

5) Standby: وقتی می توانیم از این مد استفاده کنیم که کریستال خارجی میکروکنترلر فعال باشد. مد Standby با Power Down یکسان است با این تفاوت که در این حالت کریستال خارجی قطع نمی شود و میکروکنترلر پس از 6 کلاک از این حالت خارج می شود.

6) Extended-Standby: وقتی می توانیم از این مد استفاده کنیم که کریستال خارجی میکروکنترلر فعال باشد. این مد با مد Power Save یکسان است با این تفاوت که در این حالت کریستال خارجی قطع نمی شود و میکروکنترلر پس از 6 کلاک از این حالت خارج می شود.


3-5 بررسی فیوز بیت های میکروکنترلر های AVR

در کلیه ی فیوز بیت ها ی AVR عدد 0 به معنای برنامه ریزی شدن بیت (تیک خوردن) و عدد 1 به معنای برنامه ریزی نشدن بیت می باشد. این فیوز بیت ها در ادامه کاملا بررسی شده اند.

SUT: با این فیوز می توان مدت زمان تاخیر در روشن شدن میکروکنترلر را تنظیم نمود. مقدار این فیوز به صورت پیش فرض 10 می باشد.

RSTDISBL: با این فیوز می توان پایه ی Reset را غیر فعال کرد یا به عبارت بهتر می توان پایه ی RESET به عنوان ورودی خروجی یا I/O تنظیم نمود. معمولا در میکروکنترلر هایی که تعداد پایه های I/O آنها کم است این فیوز بیت وجود دارد مانند ATTiny2313.

SPIEN: با این فیوز می توان برنامه ریزی شدن AVR را از طریق رابط سریال SPI فعال نمود. این فیوز بیت به صورت پیش فرض فعال می باشد.

BODLEVEL: این فیوز بیت برای تنظیم سطح افت ولتاژ مورد استفاده قرار می گیرد که در قسمت های قبل توضیح داده شد. به صورت پیش فرض این فیوز برنامه ریزی نشده است.

EESAVE: اگر این فیوز بیت برنامه ریزی شود، وقتی حافظه ی Flash میکروکنترلر را پاک کنیم، محتویات حافظه ی EEPROM پاک نمی شود.

JTAGEN: وظیفه ی این فیوز فعال و غیر فعال سازی ارتباط JTAG می باشد. اگر این فیوز بیت فعال باشد، از پایه های پورت C نمی توان به عنوان ورودی خروجی یا I/O استفاده کرد. این فیوز بیت به صورت پیش فرض برنامه ریزی شده می باشد.

BOOTRST: با این فیوز می توان مقدار حافظه ی Boot Loader را انتخاب کرد.

WDTON: با برنامه ریزی این فیوز می توان تایمر Watchdog را فعال کرد. این فیوز بیت به صورت پیش فرض برنامه ریزی نشده می باشد.

M103:با فعال کردن این فیوز بیت برخی از میکروکنترلر ها مانند ATmega128 همانند میکروکنترلر ATmega103 کار می کنند.

CKOPT: با برنامه ریزی این فیوز بیت، دامنه ی نوسانات بیشتر می شود و می توان کریستال خارجی با حداکثر مقدار تعیین شده به میکرو متصل کرد. با برنامه ریزی این فیوز بیت می توان خازنهای خارجی متصل شده به کریستال را برداشت زیرا خازنهای داخلی با مقدار نامی 36pF فعال می شوند.

CKSEL: با این فیوز بیت می توان مقدار کلاک سیستم و انتخاب منبع نوسان را مشخص کرد. به صورت پیش فرض اسیلاتور RC کالیبره شده ی 1MHz داخلی فعال می باشد.

CKSEL3..0 Nominal Frequency (MHz)
0001 1
0010 2
0011 4
0100 8

جدول 3-1 اسیلاتور RC کالیبره شده ی داخلی


زمان بیدار شدن میکروکنترلر (SUT) در هنگام کار با اسیلاتور RC داخلی به صورت زیر می باشد:

SUT1…0

Start-up Time

Delay from Reset(5V)

00 6 Clock  
01 6 Clock 4.1 ms
10 6 Clock 65 ms
11 Reserved Reserved

جدول 3-2 محاسبه ی زمان بیدار شدن میکروکنترلر


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

CKOPT CKSEL3…1 Frequency(MHz)
1 101 0.4-0.9
1 110 0.9-3
1 111 3-8
0 111,110,101 >=1

جدول 3-3 انتخاب کریستال خارجی


توجه کنید در جدول بالا برای رنج فرکانسی از 0.4 تا 0.9 مگا هرتز باید کریستال سرامیکی به میکرو متصل کرد. باید کریستال خارجی را به صورت شکل 2-2 به پایه های XTAL1 و XTAL2 متصل کرد.

با برنامه ریزی کردن فیوز بیت CKOPT می توان خازنهای C1 و C2 را برداشت.

زمان شروع به کار میکروکنترلر برای کریستال خارجی به صورت زیر محاسبه می شود:

 

3-6 زبان های برنامه نویسی برای میکروکنترلر ها

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

3-6-1 زبان اسمبلی

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

خلاصه ی دستورات اسمبلی AVR

شکل 3-7 دستورات اسمبلی میکروکنترلر ATMega16


همانطور که در شکل فوق مشاهده می کنید، هر دستور اسمبلی دارای نام مشخص به خود می باشد. وقتی این دستورات به زبان ماشین ترجمه می شوند، بجای هر نام یک عدد قرار می گیرد و این عدد قابل اجرا برای میکروکنترلر می باشد. چون کاربر نمی تواند تمام این اعداد را حفظ کند، برای یادگیری آسان تر بجای عدد حروف اختصاری لاتین استفاده شده است. به عنوان مثال دستور NOP که با اجرای این دستور میکروکنترلر هیچ کاری در یک کلاک انجام نمی دهد، دارای کد هگز 0000 می باشد. و یا دستور ldi r20,0xFF کد هگز 942F را تولید می کند.

 

تمامی کامپایلر های دیگر باید در ابتدا به زبان اسمبلی کامپایل شده و از این زبان به زبان ماشین کامپایل شوند (فایلی با پسوند asm هنگام کامپایل کردن ایجاد می شود). به دلیل اینکه این زبان بسیار نزدیک به زبان ماشین است، نوشتن برنامه به این زبان بسیار دشوار است و اگر کاربر مایل باشد تا در برنامه ی خودش تغییر ایجاد نماید، مجددا باید محاسبات پیچیده ای انجام دهد. به عنوان مثال برنامه ی زیر به زبان اسمبلی نوشته شده است و وظیفه ی این برنامه ایجاد تاخیر زمانی به مدت 1975 میلی ثانیه (حدودا 2 ثانیه) می باشد. این برنامه با فرض اینکه کریستال برابر 1MHz است، نوشته شده است. قبل از شرح برنامه ی اسمبلی، قبلا گفته شد که میکروکنترلر های AVR 32 رجیستر عمومی دارند. نام این رجیستر ها r0 تا r31 می باشد.

شکل 3-8 برنامه ی اسمبلی


در برنامه ی فوق با اجرای سه دستور ldi اعداد 255، 255 و 10 به ترتیب در رجیستر های r19، r21 و r22 قرار می گیرند. دستور ldi برای اجرا شدن به یک کلاک نیاز دارد و در فرکانس 1MHz هر کلاک 1µs طول می کشد تا اجرا شود یعنی این سه دستور در µs3 اجرا می شوند. برنامه به برچسب del می رسد. در این صورت حلقه ی 1 اجرا می شود. رجیستر r19 یک واحد کم می شود؛ دستور brne del تا زمانی که رجیستر r19 برابر صفر نشده است، به برچسب del پرش می کند و وقتی r19 برابر صفر شد، برنامه وارد حلقه ی 2 می شود. دستور brne تازمانی که r19 برابر صفر نشده است، نیاز به 2 کلاک دارد و دستور dec نیز به یک کلاک نیاز دارد. یعنی در مجموع این دو دستور به سه کلاک نیاز دارند. چون مقدار r19 برابر 255 است، پس این دو دستور 256 بار اجرا می شوند پس 768=3×256. یعنی با گذشت 768 کلاک رجیستر r19 صفر می شود. وقتی این رجیستر صفر شد، دستور brne با یک کلاک اجرا شده و سپس رجیستر r21 یک واحد کم می شود (حلقه ی دوم اجرا می شود) و مجددا دستور brne del اجرا می شود. در این صورت مجددا برنامه به برچسب del پرش میکند و حلقه ی یک دوباره اجرا می شود. در این حالت رجیستر r19 که در مرحله ی قبل صفر شده بود، یک واحد دیگر کم می شود و 255=1-0 و مجددا 768 بار دیگر این دستورات اجرا می شود. در واقع حلقه ی 2 به اندازه ی 256 بار حلقه ی یک را اجرا کرده و حلقه ی 3 نیز به تعداد 10 بار حلقه ی 2 را اجرا می کند و اگر اعداد 768 و 255 و 10 را در هم ضرب کنیم حاصل برابر 1966080 میکرو ثانیه می شود اما با توجه به اینکه دستور brne در حلقه ی 2 و 3 نیز اجرا می شود پس در نتیجه مدت زمان این تاخیر به صورت زیر محاسبه می شود:

((768×256)+512+256)×10) +256+20 = 1 974 036=1974.036 ms

همانطور که در محاسبات بالا مشخص است، با کریستال MHz1 مدت زمان محاسبه شده حدودا 2 ثانیه بدست آمد حال اگر کریستال را برابر MHz4 قرار دهیم، در این صورت این زمان به حدود 0.5 ثانیه می رسد و اگر بخواهیم با کریستال MHz4 همین زمان را داشته باشیم، مجددا باید بجای اینکه حلقه ی سوم را 10 بار اجرا شود، باید 40 بار اجرا گردد. و یا اگر بخواهیم با کریستال MHz1 زمان این تاخیر را 1.5 ثانیه تنظیم کنیم، مجددا باید محاسبات بالا را انجام داد.

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

3-6-2 زبان بیسیک

این زبان سطح بالایی دارد. کلمات کلید ی این زبان زیاد است (حدود 150 کلمه) به همین دلیل فهم این زبان برای کاربر راحت می باشد. اما به دلیل اینکه این زبان ساخت یافته نیست، استفاده از آن و یادگیری آن توصیه نمی شود. به عنوان مثال دستورات کامپایلر هایی مانند Fast AVR با Bascom 8051 و PIC Basic با یکدیگر متفاوت است. مثلا در کامپایلر Bascom 8051 تاخیر را به صورت waitms تعریف می کنند. اما در کامپایلر PIC Basic برای تاخیر از Delay استفاده می شود.

3-6-3 زبان پاسکال

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

3-6-4 زبان C

این زبان دارای سطح بالایی است و تعداد کلمات کلیدی آن حدود 30 کلمه می شود. وقتی کاربر بتواند با یک کامپایلر زبان C و برای یک خانواده از میکروکنترلر ها کار کند، به آسانی می تواند با یادگیری نام رجیستر های یک خانواده ی دیگر از میکروکنترلر ها برای آن میکروکنترلر ها نیز برنامه بنویسد. مثلا اگر کاربر از نرم افزار Code Vision AVR استفاده کرده است، به راحتی می تواند با نرم افزار IAR AVR یا CCS PIC کار کند.

3-6-5 زبان گرافیکی یا Flow Code

کاربر با این زبان برنامه نمی نویسد بلکه به صورت گرافیکی از کنار هم قرار دادن مجموعه ای از اشکال برنامه را ایجاد می کند. نمونه ای از این زبانها مانند Flow Code For AVR یا Flow Code For PIC می باشد.

 

3-7 بررسی زبان های برنامه نویسی پشتیبانی شده توسط میکروکنترلر ها

میکروکنترلر 8051: این میکروکنترلر دارای کامپایلر هایی با زبانهای Assembely، C و Basic می باشد. و بهترین زبان برای این میکروکنترلر زبان اسمبلی می باشد. مانند Keil 8051 یا Bascom 8051.
میکروکنترلر ARM: این میکروکنترلر فقط کامپایلر های اسمبلی و C دارد. مانند Keil µVision، IAR FOR ARM و WinARM
میکروکنترلر PIC: این خانواده کامپایلر برای تمامی زبان های برنامه نویسی دارد مانند mikro Basic، mikro C، MPLAB، CCS و PIC Basic.
میکروکنترلر AVR: این خانواده نیز برای تمامی زبانها کامپایلر دارد مانند: Code Vision AVR، WINAVR، Bascom AVR، Fast AVR، Flow Code For AVR، AVR Studio.

5 thoughts on “مقاله (فصل سوم میکروکنترلر های خانواده ی AVR)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *