دوستان امیدوارم حال همتون عالی باشه. در این آموزش، نگاهی به معرفی دقیق Atmega8 خواهیم داشت. ATmega8 یک میکروکنترلر با پردازشگر هشت بیتی است که توسط Atmel (طراح و سازنده مواد نیمه هادی های مختلف است) ساخته شده است. این میکروکنترلر بر اساس معماری RISC مخفف (Reduced Instruction Set Computing) و با تکنولوژی CMOS طراحی شده است که از 131 دستورالعمل قدرتمند تشکیل شده است. دستورات عمدتاً در یک سیکل اجرا می شوند. حداکثر فرکانسی که این میکرو کار می کند 16 مگاهرتز است. این میکروکنترلر دارای یک رابط 28 پایه ای با بسته PDIP است. حافظه برنامه 8 کیلو بایت به صورت Flash است در حالی که RAM و EEPROM به ترتیب 1K و 512 بایت هستند.

این تراشه توسط کمپانی های تولید کننده میکروکنترلرهای PIC و AVR تولید می شود و عمدتاً در سیستم‌های اتوماسیون داخلی و صنعتی استفاده می‌شوند. این ماژول ها می توانند تعدادی عملکرد را بر روی یک تراشه کوچک انجام دهند و از هزینه های زیاد و خرید قطعات خارجی برای چیدمان اتوماسیون در پروژه مربوطه جلوگیری کنند.

مقدمه ای بر ATmega8

ATmega8 یک میکروکنترلرAVR  28 پایه ای و دارای ریزپردازنده 8 بیتی AVR بر اساس معماری RISC است که توسط Microchip طراحی شده و عمدتاً در سیستم‌های یکپارچه و پروژه‌های اتوماسیون صنعتی استفاده می‌شود.

این قطعه در سه نوع بسته بندی معروف به نام‌های PDIP، MLF و TQFP ارائه می‌شود که در آن اولی دارای 28 پین است و دو تای دیگر با 32 پین در هر ماژول عرضه می‌شوند.

حافظه برنامه (فلش مموری) 8 کیلوبایت است که برای ذخیره کد برنامه نویسی و تنظیمات دائمی استفاده می شود.

Atmega8 با یک حافظه رم 1 کیلوبایتی عرضه می شود، این یک حافظه فرار است و با راه اندازی مجدد به روز می شود.

همچنین دارای حافظه EEPROM  512 بایتی است که یک حافظه نیمه فرار است.

سایر ویژگی‌ها عبارتند از: تایمر در زمان روشن شدن، تایمر سگ نگهبان، تشخیص کاهش سطح ولتاژ  Brown out، برنامه‌نویسی سریال درون مدار (ISP) و پنج حالت خواب.

نقطه تمایز این ماژول با میکروکنترلر PIC مجموعه دستورالعمل های آن است، بطوریکه در AVR اکثر دستورالعمل ها در یک سیکل ساعت اجرا می شوند و با 32 ثبات همه منظوره همراه است، در حالی که در میکروکنترلر PIC به تعدادی سیکل ساعت در هر دستورالعمل نیاز است و با رجیستر W ارائه می شود.

ماژول ADC  10 بیتی به میکروی AVR اضافه شده است که نقش حیاتی را برای رابط سنسور ایفا می کند و در مجموع شامل 6 کانال برای بسته PDIP و 8 کانال برای دو نوع دیگر بسته بندی است.

پروتکل های ارتباطی مانند SPI، I2C و USART به این میکرو اضافه شده است که به طور گسترده برای برقراری ارتباط با دستگاه های خارجی استفاده می شود.

ویژگی های کلیدی ATmega8

جدول زیر ویژگی های اصلی ATmega8 را نشان می دهد.

Atmega8 Key Features
No. of Pins28


CPU8-Bit AVR


Operating Voltage2.7 to 5.5 V


Program Memory8K


Program Memory TypeFlash


RAM1K Bytes


EEPROM512 Bytes


ADC Number of ADC Channels10-Bit 6 in PDIP, 8 in TQFP and QFN


Comparator1


PWM Channels3


Oscillatorup to 16 MHz


Timer (3)16-Bit Timer (1) 8-Bit Timer (2)


Packages (3)PDIP (28-Pins) TQFP (32-Pins) QFN (32)


Power Up TimerYes


I/O Pins23


SPIYes


I2CYes


Watchdog TimerYes


Brownout Detection (BOD)Yes


USARTYes


Sleep Modes5


Minimum Operating Temperature-55 C


Maximum Operating Temperature125 C


توصیف پایه های ATmega8

شکل زیر پایه بندی ATmega8 را نشان می دهد.

ATmega8 در سه بسته معروف به‌نام‌های PDIP، MLF و TQFP عرضه می‌شود که اولی برای پروژه‌های نمونه استفاده می‌شود، در حالی که دو بسته دیگر برای دستگاه‌های صنعتی و الکترونیکی استفاده می‌شوند.

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

توصیف پایه بندی ATmega8
1PC6 RESET PCINT14I/O Pin RESET will be generated by keeping   this pin LOW for longer than the minimum pulse length Interrupt

2PD0 RXD PCINT16I/O Pin Serial Receive Pin (USART) Interrupt

3PD1 TXD PCINT17I/O Pin Serial Transmit Pin (USART)Interrupt

4PD2 INT0 PCINT18I/O Pin External Interrupt Interrupt

5PD3 INT1 OC2B PCINT19I/O Pin External Interrupt Dedicated Pin for   Timer (PWM Channel) Interrupt

6PD4 T0 XCK PCINT20I/O Pin T0 ( Timer0 External Counter Input)   XCK ( USART External Clock I/O) Interrupt

7VCCVoltage Supply

8GNDGround Pin

9PB6 OSC1 XTAL1 PCINT6I/O Pin Oscillator Input Pin Interrupt

10PB7 OSC2 XTAL2 PCINT7I/O Pin Oscillator Output Pin Interrupt

11PD5 T1 OC0B PCINT21I/O Pin PinT1 ( Timer0 External Counter   Input) Dedicated Pin for Timer (PWM Channel) Interrupt

12PD6 AIN0 OC0A PCINT22I/O PinAnalog Comparator Positive Dedicated   Pin for Timer (PWM Channel) Interrupt

13PD7 AIN1 PCINT23I/O Pin Analog Comparator Negative Interrupt

14PB0 ICP1 CLKO PCINT0I/O Pin In Circuit Serial Programming Clock   Interrupt

15PB1 OC1A PCINT1I/O Pin Dedicated Pin for Timer (PWM   Channel) Interrupt

16PB2 SS OC1B PCINT2I/O Pin SPI Slave Select Input. When the   controller acts as a slave, this pin is LOW Dedicated Pin for Timer (PWM   Channel) Interrupt

17PB3 MOSI OC2A PCINT3I/O Pin MOSI (Master Output Slave Input) for   SPI Communication. The data is received by this pin when the controller   acts as a slave Dedicated Pin for Timer Interrupt

18PB4 MISO PCINT4I/O Pin MISO (Master Input Slave Output) for   SPI communication. When the controller acts as a slave, the data is sent by a   controller to master through this pin Interrupt

19PB5 SCK PCINT5I/O Pin SCK (SPI Bus Serial Clock). This   clock is shared between the controller and other devices for data transfer   Interrupt

20AVCCVoltage Supply Pin for ADC

21AREFVoltage Reference

22GNDGround Pin

23PC0 ADC0 PCINT8I/O Pin Analog Channel 0 Interrupt

24PC1 ADC1 PCINT9I/O Pin Analog Channel 1 Interrupt

25PC2 ADC2 PCINT10I/O Pin Analog Channel 2 Interrupt

26PC3 ADC3 PCINT11I/O Pin Analog Channel 3 Interrupt

27PC4 ADC4 SDA PCINT12I/O Pin Analog Channel 4 Serial Data (I2C)   Interrupt

28PC5 ADC5 SCL PCINT13I/O Pin Analog Channel 5 Serial Clock (I2C)   Interrupt

عملکرد ATmega8

در زیر توابع اصلی مربوط به این ماژول کوچک آورده شده است.

تایمر

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

تایمرهای راه اندازی نوسان ساز

تایمر راه اندازی تغذیه

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

تعداد حالت های خواب

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

ذخیره انرژی         power safe

خاموش کردن      Power down

بیکار                              Idle

کاهش نویز ADC          ADC Noise Reduction

آماده به کار                          Standby

تشخیص کاهش سطح ولتاژ تغذیه (BOD)    Brown-Out Detection

BOD که با نام BOR (Brown Out Reset) نیز شناخته می شود، برای تنظیم مجدد ماژول هنگامی که Vcc (تغذیه ولتاژ) به زیر ولتاژ آستانه برود، استفاده می شود. توجه به این نکته ضروری است که تایمر پاور باید برای ایجاد تاخیر و کمک به بازگرداندن دستگاه از عملکرد BOD فعال باشد. در این حالت، محدوده‌های ولتاژ متعددی برای محافظت از ماژول پس از کاهش برق در خط تغذیه ولتاژ ایجاد می‌شود.

ارتباطات SPI

ATmega8 دارای یک رابط جانبی سریال (SPI) است - یک ماژول ارتباطی که به برقراری ارتباط بین میکروکنترلر و سایر دستگاه‌های جانبی مانند شیفت رجیستر، کارت‌های SD و سنسورها کمک می‌کند. این رابط شامل یک ساعت و خطوط داده جداگانه با افزودن یک خط انتخابی برای انتخاب دستگاه مربوطه برای ارتباط است.

دو پایه مورد استفاده برای ارتباط SPI به شرح زیر است:

MOSI (ورودی اصلی خروجی Slave)

MISO (خروجی اصلی ورودی Slave)

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

تایمر سگ نگهبان

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

اینتراپت (وقفه)

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

ارتباط I2C

پروتکل I2C برای اتصال دستگاه های کم سرعت مانند مبدل های ADC و DAC با میکروکنترلرها استفاده می شود.

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

ساعت سریال (SCL)

داده های سریال (SDA)

SCL یک سیگنال ساعت است که انتقال داده ها را بین دستگاه ها هماهنگ می کند و توسط دستگاه اصلی تولید می شود، در حالی که SDA برای حمل داده های مورد نیاز استفاده می شود.

رابط حافظه ATmega8

فضای حافظه در کنترلر مظهر نقشه حافظه خطی و منظم است. این ماژول AVR دارای معماری هاروارد است که حافظه های جداگانه ای را برای داده ها و برنامه ها در خود جای می دهد.

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

رجیستر فایل دسترسی سریع دارای رجیسترهای کار با هدف کلی 32 × 8 بیتی است که می توان با چرخه ساعت تکی که به انجام عملیات ALU (واحد منطق حسابی) در جایی که نتیجه در فایل Register ذخیره می شود، به آن دسترسی داشت.

حافظه ورودی/خروجی را می‌توان به روش‌های مختلف به روش مستقیم یا با استفاده از مکان‌های فضایی داده‌ای که فایل Register، 0x20 – 0x5F را پوشش می‌دهند، دسترسی داشت.

حافظه برنامه (ROM)

حافظه برنامه دارای فضای حافظه حدود 8K بایت است و می تواند دستورالعمل ها را در هر سیکل ساعت انجام دهد.

این حافظهاطلاعات را به طور دائم ذخیره می کند و به منبع تغذیه بستگی ندارد و به طور گسترده با نام ROM یا Non-Volatile Memory شناخته می شود.

آدرس حافظه برنامه می تواند به دستورالعمل های 16 یا 32 بیتی دسترسی داشته باشد.

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

حافظه داده (RAM)

حافظه داده با فضای حافظه در حدود 1K (1024 بایت) همراه است. می توان از طریق پنج حالت آدرس دهی مختلف در معماری AVR به نام های Direct، Indirect، Indirect with Displacement، Indirect with Pre-Decrement و Indirect with Post-increment به آن دسترسی داشت.

سه رجیستر آدرس X، Y و Z قادر به افزایش و کاهش با فواصل منظم با حالت های آدرس دهی غیر مستقیم هستند.

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

ماژول ALU که به سه تابع اصلی معروف به توابع مستقیم، حسابی و بیتی تقسیم می‌شود، ارتباط مستقیمی با 32 رجیستر همه منظوره در یک سیکل ساعت دارد.

کامپایلرهای ATmega8

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

کامپایلر IAR بهترین کامپایلر برای AVR است. اگرچه گران است و دارای یک رابط بسیار حرفه ای است.

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

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

CodeVision همراه با CodeWizard است و بسیار مقرون به صرفه است.

 رابط ATmega8 با آردوینو

ATmega8 را می توان برای توسعه پروژه تعبیه شده با آردوینو متصل کرد. شکل زیر رابط ATmega8 با آردوینو را نشان می دهد.

دیاگرام بلوک داخلی ATmega8

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

شکل زیر بلوک دیاگرام ATmega8 را نشان می دهد:

ATmega8 یک میکروکنترلر کم مصرف CMOS AVR است که عمدتاً مبتنی بر معماری RISC است. با اجرای دستورات قدرتمند در یک سیکل ساعت، ATmega8 قادر است دستورالعمل های قدرتمندی را با استفاده از 1MIPS در هر مگاهرتز در یک سیکل ساعت انجام و اجرا کند که به شدت به بهینه سازی مصرف انرژی کمک می کند.

پروژه ها و کاربردهای ATmega8

مورد استفاده در سیستم های یکپارچه و روباتیک

به طور گسترده ای در پروژه های دانشجویی استفاده می شود

سیستم امنیتی خانه

برای طراحی کوادکوپتر

اتوماسیون صنعتی