بازیابی پیکربندی فیوز بیت میکروکنترلرهای Tiny AVR (HVSP). طرح یک جعبه تنظیم برای بازیابی بیت های FUSE در میکروکنترلرهای AVR طرح سریع avr

نمودار شماتیک یک دستگاه خانگی که به احیای MK و بازیابی مقادیر بیت های FUSE پس از برنامه ریزی متوالی کمک می کند.

چند سالی است که میکروکنترلرهای AVR Atmel در بین آماتورهای رادیویی محبوبیت زیادی پیدا کرده اند. ویژگی خاص این MK ها این است که می توانید در هر دو حالت موازی و سریال به آنها "firmware" بنویسید.

در رادیو آماتور، برنامه نویسان سریال (SPI - Serial Peripheral Interface) بیشترین استفاده را دارند که دارای تعدادی مزیت هستند:

  • مدارهای آنها، به عنوان یک قاعده، ساده تر از مدارهای برنامه نویس موازی است (در موارد شدید، حتی می توانید با پنج هادی و دو مقاومت از آن عبور کنید).
  • گزینه های زیادی هم برای خود برنامه نویسان و هم برای کنترل برنامه های سیستم عامل های مختلف وجود دارد.
  • برای اتصال برنامه نویس، می توانید تقریباً هر پورت رایانه را انتخاب کنید - هر دو طرح LPT و COM و همچنین برنامه نویسان USB وجود دارد.

علاوه بر این ، چنین برنامه نویسی به شما امکان می دهد MK را بدون لحیم کاری از دستگاه "فلش" کنید (ISP - In System Programmable).

با این حال، حالت برنامه نویسی SPI هنوز حذف شده است. و برخی از قابلیت های کامل برنامه نویسی موازی در آن موجود نیست.

رایج ترین مشکل برنامه نویسی متوالی ناتوانی در انجام هر گونه عملکرد با MK است، اگر سلول های فیوز خاصی از این MK نسبت به مقادیر پیش فرض تغییر کرده باشند - در این مورد، تراشه "اعتصاب می کند" و انجام نمی شود. برقراری ارتباط با کامپیوتر: دیگر نمی توان از آن توسط برنامه نویس سریال استفاده کرد و نه خواندن و نه "فلش" کرد.

و به نظر می رسد از کار افتاده است، در حالی که برنامه PonyProg، برای مثال، پیغام خطای زیر را ایجاد می کند: "دستگاه گم شده یا دستگاه ناشناخته (24-) ، اگرچه در مدار نهایی این MK می تواند کاملاً عادی کار کند.

دلیل این "غیر ارتباطی" ممکن است به عنوان مثال، تنظیم بیت RSTDISBL روی صفر باشد (و صفر در فیوز بیت های AVR به این معنی است که این بیت برنامه ریزی شده است) - که منجر به خاموش شدن و خاموش شدن ورودی تنظیم مجدد خارجی می شود. آن را به یک خط ورودی / خروجی معمولی. و بدون ریست خارجی، MK نمی تواند وارد حالت برنامه نویسی SPI شود و برای کامپیوتر غیر قابل دسترسی خواهد بود.

دلیل دیگری که باعث می شود MCU برای برنامه نویس SPI نامرئی شود، نداشتن کلاک است: بیت های فیوز که ژنراتور ساعت را کنترل می کنند (CKSEL0-3) می توانند به گونه ای تنظیم شوند که MCU مدارهای ساعت داخلی را خاموش کند و نیاز به یک نوسان ساز خارجی - منبع ساعت؛ و بدون کلاک برنامه نویسی SPl غیر ممکن است.

علاوه بر این، بایت های فیوز "سیم کشی" نادرست می تواند نتیجه نه تنها بی توجهی یا ناآگاهی باشد - خرابی های سخت افزاری در حین "چشمک زدن" نیز بسیار محتمل است، به خصوص اگر آنها از طریق یکی از تغییرات موضوع "پنج سیم" "دوخته" شوند. - بنابراین، از "سقوط در هیچ کس از قرار گرفتن در کما با MKهایی که روی قفسه دراز کشیده اند و منتظر یک شفای معجزه آسا هستند در امان نیست (و اگر به اینترنت اعتقاد دارید، تقریباً هر دومین عاشق AVR این را گذرانده است - و نه لزوماً مبتدی ...).

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

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

نمودار شماتیک

این دستگاه برای "درمان" ATtiny2313 MK طراحی شده است، اما می تواند برای هر مدل AVR دیگری - اعم از Tiny و Mega - تبدیل شود که برای آن یک "کد منبع" خوب از میان افزار گنجانده شده است، که امکان بازنویسی آن را فراهم می کند. در رابطه با MK که در این لحظه به آمبولانس نیاز است.

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

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

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

دستگاه های مشابه قبلاً در ادبیات رادیویی آماتور و اینترنت (با نام های Fuse Doctor، AVR Doctor، AVR Reanimator، AVR Aibolit و غیره) توضیح داده شده است، اما این یکی دارای چندین ویژگی است که کار با آن را کمی دلپذیرتر می کند.

یعنی خطوط PB0-PB7 - به خطوط PB0-PB7، خط PD6 - تا خط PD6 و غیره. که در مورد مونتاژ یک مدار چاپی، نصب را به طور قابل توجهی پیچیده کرد - به پرش های زیادی یا سیم کشی دو طرفه نیاز بود (اگرچه برخی از نویسندگان پیشنهاد کردند که به سادگی ریزمدارها را روی هم نصب کنید، پین های متصل نشده را به طرفین خم کنید و مقاومت های لحیم کاری را انجام دهید. / هادی های روی آنها، اما تماس قابل اعتماد با چنین "میکروکنترلر کاما سوترا" زیر سوال می رود و همه ما به خوبی می دانیم که خم شدن و خم شدن سرنخ های ریز مدارها به چه چیزی منجر می شود.

در اینجا ریز مدارها "در کنار هم"، "جک" مرتب شده اند، که چیدمان برد مدار چاپی را بسیار ساده می کند. در نسخه نویسنده، که در شکل 2 نشان داده شده است، تا حد زیادی نمودار مدار را تکرار می کند و تنها شامل سه جامپر کوچک است. اندازه تخته - 60x60 میلی متر.

در مرحله دوم، برخی از دستگاه ها به دو ولتاژ نیاز دارند: 5 ولت برای تغذیه MK، و 12 ولت به خط تنظیم مجدد "بیمار" برای وارد شدن به حالت برنامه ریزی.

این مدار فقط به یک ولتاژ نیاز دارد که می تواند در یک محدوده نسبتاً گسترده متفاوت باشد - نکته اصلی این است که باید حداقل 12 ولت باشد. ثالثاً، اکثر دستگاه های شرح داده شده اجازه نمی دهند در صورت وجود "بیماران" جایگزین "گرم" شوند. برای "درمان" چندین MK به صورت متوالی ضروری است - پس از هر "چشمک زدن" آنها باید برق را خاموش کنند، "بیمار" را جایگزین کنند، سپس دوباره برق را روشن کنند و غیره.

این دستگاه تمام خروجی ها را پس از هر "چشمک زدن" روی log.O تنظیم می کند، که به شما امکان می دهد ریزمدارها را با "نقاله" "درمان" کنید - برق را وصل کنید، "بیمار" را نصب کنید، دکمه "شروع" را فشار دهید، به نتیجه "درمان" از طریق HL1، آن را حذف کنید، یک "بیمار" جدید وارد کنید، کلیک کنید، به HL1 نگاه کنید، حذف کنید، درج کنید و غیره. و همه اینها بدون خاموش کردن برق (حداقل یک "چادر" در بازار رادیو باز کنید!).

خوب، چهارم، اغلب در چنین دستگاه هایی هیچ تأییدی از فیوزهای ضبط شده و نشانی از نتیجه "درمان" (از نوع "موفق / ناموفق") وجود ندارد. در این طراحی، تأیید ارائه شده است و LED HL1 که می تواند سه حالت داشته باشد، برای نشان دادن نتایج آن استفاده می شود:

  1. چراغ ها به طور مداوم - برنامه نویسی "بیمار" موفقیت آمیز بود، بایت های فیوز خوانده شده با موارد نوشته شده مطابقت دارد. دستگاه منتظر "بیمار" بعدی است.
  2. چشمک زدن در فرکانس 2 گیگاهرتز - یک خطا در برنامه نویسی "بیمار": بایت های فیوز خوانده شده با موارد نوشته شده مطابقت ندارند. "بیمار" وارد حالت برنامه نویسی نشده است، نصب نشده است یا معیوب است (برنامه بررسی حضور "بیمار" را ارائه می دهد - یک AVR کار منطق 1 را روی خط BSY/RDY تنظیم می کند (پین 3 برای ATtiny2313) هنگام ورود به حالت برنامه نویسی موازی)؛ دستگاه منتظر "بیمار" بعدی است.
  3. فرآیند برنامه‌نویسی و تأیید غیرفعال در حال انجام است. برنامه ریزی یک "بیمار" سالم کمتر از یک ثانیه طول می کشد و این حالت LED در شرایط عادی نباید قابل توجه باشد. اگر LED برای مدت نسبتاً طولانی در حالت خاموش باشد، به احتمال زیاد، فرآیند "چشمک زدن" به دلیل این واقعیت که "بیمار" معیوب در حالت ضبط گیر کرده است و BSY را تنظیم نمی کند، وارد چرخه شده است. / سیگنال آمادگی RDY مورد انتظار "پزشک".

همانطور که قبلاً ذکر شد ، این دستگاه کاملاً جهانی است و می توان از آن برای "درمان" تقریباً هر MK سری AVR استفاده کرد.

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

آداپتور یک سوکت DIP-20 است که با "پاهای" خود به پانل "بیمار" روی برد دستگاه وارد می شود.

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

انتهای دیگر این هادی ها به پایانه های سوکت دوم - تحت MK که نیاز به "درمان" دارد - مطابق با محل خطوط کنترل آن که می تواند در برگه داده اختصاصی مشخص شود، لحیم می شود.

به نظر می رسد که این یک نوع اتصال است، دوشاخه (فقط یک سوکت DIP-20) که برای "بیمار" روی برد در سوکت DIP-20 قرار می گیرد و یک "بیمار" جدید در سوکت آن قرار می گیرد. (سوکت دیگر).

در مورد برنامه، ممکن است نیاز به اصلاح داشته باشد، زیرا ... مدل های مختلف MCU های AVR اغلب برای وارد شدن به حالت برنامه نویسی و تغییر فیوز بایت ها به اقدامات متفاوتی نیاز دارند.

علاوه بر این، بایت های فیوز خود (از جمله تعداد آنها) برای مدل های مختلف MK متفاوت است - اطلاعات دقیق تر را می توان در [L.1،2،3] یا در اسناد شرکت به دست آورد. و برای سهولت در درک برنامه اصلی، نظرات مفصلی برای آن ارائه کردم.

این دستگاه به عنوان یک "دکتر" از همان میکروکنترلر ATtiny2313 به عنوان "بیمار" استفاده می کند - همچنین روی سوکت نصب می شود تا پس از بازیابی همه ریز مدارهای "بیمار"، بتوان آن را جدا کرد و در پروژه های دیگر استفاده کرد.

برای کار در این دستگاه، تمام فیوزهای "دکتر" باید همان فیوزهای نصب شده در آن به طور پیش فرض (از کارخانه) باشند. تنها نکته این است که برای عملکرد پایدارتر (به ویژه با ولتاژ تغذیه ناپایدار)، در "دکتر" می توانید سیستم BOD را با تنظیم آن در سطح 2.7 ولت (با تنظیم بیت فیوز BODLEVEL1 روی صفر) فعال کنید. "دکتر" نیازی به کوارتز خارجی ندارد و از یک نوسانگر داخلی کار می کند.

جزئیات

تراشه DA1 (78L05) را می توان با آنالوگ داخلی KR1157EN502 یا قدرتمندتر 7805 جایگزین کرد - اما بسیار گران تر است و به قدرت آن برای این مدار نیازی نیست.

ترانزیستور VT1 در اینجا در حالت کلید کار می کند و می تواند از هر ساختار NPN باشد - به عنوان مثال، KT315، 2SC1815، 2SC9014، 2SC1749S، و غیره؛ اما برای برخی از مدل ها باید طرح برد را تغییر دهید.

برنج. 2. برد مدار چاپی دستگاه ترمیم فیوز.

دیود ایمنی VD1 می تواند هر چیزی باشد، با جریان حداقل 150 میلی آمپر وظیفه آن محافظت از مدار در برابر برگشت برق تصادفی است.

تمام مقاومت های مدار دارای اندازه کوچک هستند، 0.125 وات - مقادیر آنها ممکن است با مقادیر نشان داده شده در محدوده نسبتاً گسترده متفاوت باشد. LED HL1 - هر، نشانگر.

سرانجام

و در پایان، من می خواهم در مورد ویژگی جالب رفتار برخی از کپی های ATtiny2313 MK در هنگام برنامه ریزی SPI با استفاده از برنامه PonyProg2000 صحبت کنم (شاید سایر مدل های MK نیز رفتار کنند، از جمله با برنامه های دیگر - اما نویسنده هنوز فرصت آزمایش با هیچ چیز دیگری غیر از ترکیب ATtiny2313-PonyProg2000 را نداشتم.

ماهیت مشکل این است: گاهی اوقات، هنگام تلاش برای خواندن یا نوشتن یک میکروکنترلر، برنامه PonyProg پیام خطای "دستگاه گم شده یا دستگاه ناشناخته (-24)" را نمایش می دهد - و این در حالی است که هیچ فیوز در این میکروکنترلر وجود ندارد. تغییر کرده اند - علاوه بر این، ریز مدار ممکن است حتی جدید باشد، هنوز "چشمک نزند"! "درمان" با استفاده از دستگاهی که در بالا توضیح داده شد هیچ نتیجه ای نمی دهد - وقتی دوباره سعی کنید بخوانید/نوشتن کنید، پیام خطا دوباره ظاهر می شود. به نظر می رسد که MK از کار افتاده است و بدون دلیل ...

اما اگر دکمه «نادیده گرفتن» را در این پیام فشار دهید، در نتیجه «پونی» را مجبور کنید که عدم پاسخ MK را نادیده بگیرد، و همچنان سعی کنید ریزمدار را بخواند/نوشت کنید، این MK به طور معمول خوانده یا «فلش می‌شود».

پس از چنین "سیستم‌افزار" اجباری، اکثر MKهای "تظاهر به مرده" کاملاً عادی و بدون هیچ گونه شکستی کار می‌کنند (به جز پیامی که در بالا توضیح داده شد هنگام تلاش برای برقراری ارتباط با رایانه شخصی)!

ظاهراً نکته اینجاست که برخی از نمونه‌های MK در پاسخ به درخواست برنامه‌نویس تأیید صحیحی را ایجاد نمی‌کنند، در نتیجه PonyProg به این نتیجه می‌رسد که آنها معیوب هستند. در عین حال، این MKها دستورات برنامه نویس باقی مانده را به طور عادی درک کرده و آنها را به درستی اجرا می کنند.

کاملاً ممکن است که این یک ویژگی (یا بهتر است بگوییم، یک "بیماری") AVR MK باشد (این فقط این نیست که PonyProg چنین دکمه ای را گنجانده است - "نادیده گرفتن") - نویسنده این مقاله از هر ده MK سه نفر رفتار کرده است. به این ترتیب، و بیشتر اوقات شروع می شود این بلافاصله اتفاق نمی افتد، بلکه پس از چند "فلش".

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

اما در اسباب‌بازی‌ها، گلدسته‌های درخت کریسمس، زنگ‌های در و سایر وسایل کمکی آنها برای سال‌های متمادی کاملاً خوب کار خواهند کرد - و بدون هیچ مشکلی.

Firmware برای میکروکنترلر - دانلود (9 کیلوبایت).

متین ع RK-08-16.

ادبیات:

  1. Evstifeev A.V. - میکروکنترلرهای AVR از خانواده Tiny. راهنمای کاربر. 2007. Cmp.386 - برنامه نویسی موازی;
  2. Evstifeev A.V. - میکروکنترلرهای AVR از خانواده مگا. راهنمای کاربر. 1386. ص 526 - برنامه نویسی موازی;
  3. Evstifeev A.V. - میکروکنترلرهای AVR خانواده Tiny و Mega از ATMEL. 2008. ص 498 - برنامه نویسی موازی.

عکس. 1

T = T0 + T1. دوره نبض

T = 1/F

S = T/T1

چرخه کار

فاکتور پر کردن D=1/Sیا بیشتر D = T1/T*100%

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

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

دستگاه های دیجیتالی مانند میکروکنترلر تنها می توانند دو سطح را در خطوط خروجی تولید کنند، بالا = 5 ولت و کم = 0 ولت. اما اگر بخواهیم 2.5 یا 3.1 یا هر ولتاژی بین 0-5 ولت داشته باشیم، چه؟ برای انجام این کار، به جای ایجاد یک ولتاژ DC ثابت در خروجی، یک موج مربعی تولید می کنیم که دارای سطوح بالا = 5 ولت و پایین = 0 ولت است (شکل 1 را ببینید).

عکس. 1

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

دوره تکرار پالس مستقیماً با فرکانس توالی پالس مرتبط است و می توان آن را با استفاده از فرمول محاسبه کرد: T = 1/F

اگر طول پالس T1 دقیقاً برابر با نصف دوره T باشد، چنین سیگنالی اغلب "موج مربع" نامیده می شود.

چرخه وظیفه پالس ها نسبت دوره تکرار پالس به مدت آنها است و با حرف S نشان داده می شود: S = T/T1

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

فاکتور پر کردنمعمولاً به صورت درصد بیان می شود و با استفاده از فرمول محاسبه می شود: D=1/Sیا بیشتر D = T1/T*100%

در شکل بالا (شکل 1) می بینید که T1 = T0، این برابر با نصف دوره زمانی است. بنابراین چرخه وظیفه PWM 50٪ است. اگر فرکانس چنین پالس هایی به اندازه کافی زیاد باشد (مثلاً 5000 هرتز) ، نیمی از 5 ولت به دست می آوریم. 2.5 ولت بنابراین، اگر خروجی کنترلر به موتور کوپل شود (با استفاده از درایورهای مناسب) با 50 درصد سرعت کامل خود کار می کند. تکنیک PWM از این واقعیت برای ایجاد ولتاژ بین دو سطح (مثلاً بین 0-12 ولت) استفاده می کند. ترفند این است که وقتی مقدار چرخه کار بین 0-100٪ تغییر می کند، درصد ولتاژ ورودی یکسانی را در خروجی دریافت می کنیم. در زیر چند نمونه از سیگنال های PWM با چرخه های کاری مختلف آورده شده است.

اگر یک فیلتر R/C در خروجی نصب کنید، می توانید یک سطح سیگنال DC خالص به جای امواج مربعی دریافت کنید. اما این برای موتورهای برس خورده یا برای کنترل روشنایی LED مورد نیاز نیست. برای انجام این کار، می توانید سیگنال PWM را مستقیماً به درایور اعمال کنید (به عنوان مثال، ترانزیستور دوقطبی، ماسفت و غیره).

تحت حالت عملکرد 16 بیتی. تایمر به عنوان الگوریتم شمارش آن و رفتار خروجی شکل دهنده پالس مرتبط با آن درک می شود که با ترکیبی از بیت ها تعیین می شود که حالت عملکرد تایمر (WGMn3-0) و حالت تولید سیگنال خروجی (COMnx1:0) را مشخص می کند. . در این حالت، بیت های تنظیم حالت تولید سیگنال خروجی بر الگوریتم شمارش تأثیر نمی گذارد، زیرا الگوریتم شمارش فقط به وضعیت بیت ها برای تنظیم حالت عملکرد تایمر بستگی دارد. در حالت‌های PWM، بیت‌های COMnx1:0 به شما این امکان را می‌دهند که وارونگی را در خروجی PWM تولید شده فعال/غیرفعال کنید (یعنی PWM با وارونگی یا PWM بدون وارونگی را انتخاب کنید). برای حالت‌های غیر PWM، بیت‌های COMnx1:0 تعیین می‌کنند که در صورت وقوع تطابق چه اقدامی انجام دهند: بازنشانی، تنظیم یا معکوس کردن خروجی (همچنین به «بلوک شرطی‌سازی سیگنال خروجی» و «نمودارهای زمان‌بندی شمارشگر 16 بیتی» مراجعه کنید). .

عملکرد عادی

ساده ترین حالت عملکرد حالت عادی است (WGMn3-0 = 0b0000). در این حالت، شمارنده به عنوان یک شمارنده جمع (افزاینده) عمل می کند و شمارنده تنظیم مجدد نمی شود. شمارنده هنگام عبور از حداکثر 16 بیت سرریز می شود. مقدار (0xFFFF) تا حد شمارش پایین (0x0000). در طول عملکرد عادی، پرچم سرریز تایمر شمارشگر TOVn در همان چرخه ساعت تنظیم می شود که TCNTn به صفر برسد.

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

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

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

حالت بازنشانی تایمر مطابقت (CTC)

در حالت CTC (WGM01، WGM00 = 0b10)، رجیستر OCR0 برای تنظیم وضوح شمارنده استفاده می شود. اگر حالت CTC تنظیم شده باشد و مقدار شمارنده (TCNT0) با مقدار رجیستر OCR0 مطابقت داشته باشد، شمارنده به صفر تنظیم می شود (TCNT0=0). بنابراین، OCR0 تعداد بالای شمارنده، و در نتیجه، وضوح آن را مشخص می کند. این حالت طیف وسیع تری از تنظیم فرکانس پالس های مستطیلی تولید شده را فراهم می کند. همچنین عملکرد شمارنده رویداد خارجی را ساده می کند.

در تنظیم مجدد تایمر در حالت مطابقت (WGMn3-0 = 0b0100 یا 0b1100)، وضوح تایمر توسط رجیسترهای OCRnA یا ICRn تنظیم می شود. در حالت CTC، شمارنده (TCNTn) در صورتی که مقدار آن با مقدار ثبات OCRnA (WGMn3-0 = 0b0100) یا ICRn (WGMn3-0 = 0b1100) مطابقت داشته باشد، بازنشانی می شود. مقدار رجیستر OCRnA یا ICRn حد بالای شمارش و در نتیجه وضوح تایمر را تعیین می کند. این حالت طیف وسیع تری از تنظیم فرکانس پالس های مستطیلی تولید شده را فراهم می کند. همچنین عملکرد شمارنده رویداد خارجی را ساده می کند. نمودار زمان بندی عملکرد تایمر در حالت CTC در شکل 1 نشان داده شده است. شمارنده (TCNTn) وضعیت خود را افزایش می دهد تا زمانی که با مقدار OCRnA یا ICRn مطابقت داشته باشد و سپس شمارنده (TCNTn) تنظیم مجدد می شود.

شکل 1 - نمودار زمان بندی برای حالت STS

هنگامی که به حد بالای تعداد رسید، می توان با استفاده از پرچم های OCFnA یا ICFn مربوط به رجیسترهای مورد استفاده برای تنظیم حد بالای شمارش، وقفه ایجاد کرد. اگر وقفه فعال باشد، می‌توان از روال وقفه برای به‌روزرسانی حد شمارش بالا استفاده کرد. با این حال، تنظیم مقدار بالای شمارش نزدیک به مقدار محدود شمارش پایین زمانی که شمارنده بدون پیش مقیاس یا با مقدار پیش مقیاس کوچک کار می کند، باید با احتیاط بسیار انجام شود، زیرا در حالت CTC هیچ بافر دوگانه ای وجود ندارد. اگر مقدار نوشته شده به OCRnA یا ICRn کمتر از مقدار فعلی TCNTn باشد، زمانی که شرایط مطابقت زمانی که به حداکثر مقدار (0xFFFF) رسید، شمارنده بازنشانی می‌شود، سپس به 0x0000 بازنشانی می‌شود و به مقدار جدید OCRnA یا ICRn می‌رسد. در بسیاری از موارد این وضعیت مطلوب نیست. یک جایگزین حالت سریع PWM است که در آن ثبت OCRnA حد بالای تعداد (WGMn3-0 = 0b1111) را تعیین می کند، زیرا در این مورد OCRnA دو بافر است.

برای تولید سیگنال در حالت CTC، خروجی OCnA می تواند برای تغییر سطح منطقی در هر مسابقه با تنظیم حالت سوئیچینگ (COMnA1، COMnA0 = 0b01) استفاده شود. مقدار OCnA تنها در صورتی روی پین پورت وجود خواهد داشت که جهت خروجی برای آن پین مشخص شده باشد. اگر OCRnA = 0x0000 باشد، حداکثر فرکانس سیگنال تولید شده fOC0 = fclk_I/O/2 است. برای سایر مقادیر OCRn، فرکانس سیگنال تولید شده را می توان با فرمول تعیین کرد:

که در آن متغیر N ضریب تقسیم پیش مقیاس کننده را مشخص می کند (1، 8، 32، 64، 128، 256 یا 1024).

مانند عملکرد عادی، پرچم TOV0 در زمانی که مقدار آن از 0xFFFF به 0x0000 تغییر می کند، همزمان با تیک تایمر تنظیم می شود.

حالت سریع PWM

حالت مدولاسیون عرض پالس سریع (PWM) (WGMn3-0 = 0b0101، 0b0110، 0b0111، 0b1110، 0b1111) برای تولید پالس های PWM با فرکانس افزایش یافته طراحی شده است. بر خلاف سایر حالت های عملیاتی، این حالت از عملیات شمارنده یک طرفه استفاده می کند. شمارش در جهت از حد شمارش پایین به بالا انجام می شود.

اگر حالت خروجی غیر معکوس تنظیم شده باشد، هنگامی که TCNTn و OCRnx بر هم منطبق شوند، سیگنال OCnx تنظیم شده و در حد شمارش بالا تنظیم می شود. اگر حالت معکوس مشخص شده باشد، خروجی OCnx در یک مسابقه بازنشانی می شود و روی حد تعداد بالا تنظیم می شود. با توجه به شمارش یک طرفه، فرکانس کاری برای این حالت دو برابر بیشتر از حالت PWM با تصحیح فاز است که در آن از شمارش دو طرفه استفاده می شود. توانایی تولید سیگنال‌های PWM با فرکانس بالا استفاده از این حالت را در کارهای تثبیت توان، تصحیح و تبدیل دیجیتال به آنالوگ مفید می‌کند. فرکانس بالا، در عین حال، امکان استفاده از عناصر خارجی با اندازه های فیزیکی کوچک (سلف، خازن) را فراهم می کند، در نتیجه هزینه کلی سیستم را کاهش می دهد.

وضوح PWM را می توان 8، 9 یا 10 بیت ثابت کرد یا توسط رجیستر ICRn یا OCRnA تنظیم کرد، اما نه کمتر از 2 بیت (ICRn یا OCRnA = 0x0003) و نه بیشتر از 16 بیت (ICRn یا OCRnA = 0xFFFF). وضوح PWM در یک مقدار حد بالایی معین (UL) به صورت زیر محاسبه می شود:

در حالت سریع PWM، شمارنده تا زمانی افزایش می‌یابد که مقدار آن با یکی از مقادیر ثابت 0x00FF، 0x01FF یا 0x03FF مطابقت داشته باشد (اگر WGMn3:0 = 0b0101، 0b0110 یا 0b0111، به ترتیب)، مقدار در ICRn (اگر WGM3 = 0) 0b1110) یا مقدار OCRnA (اگر WGMn3:0 = 0b1111) و سپس با تیک تایمر بعدی تنظیم مجدد شود. نمودار زمان بندی حالت PWM سریع در شکل 2 نشان داده شده است. شکل حالت PWM سریع را زمانی نشان می دهد که از ثبت OCRnA یا ICRn برای تنظیم حد بالایی استفاده می شود. مقدار TCNTn در نمودار زمان بندی به صورت نمودار تابع برای نشان دادن شمارش یک جهته نشان داده شده است. نمودار خروجی PWM معکوس و غیر معکوس را نشان می دهد. یک خط افقی کوتاه، نقاطی را در نمودار TCNTn نشان می‌دهد که مقادیر OCRnx و TCNTnx با یکدیگر مطابقت دارند. پرچم وقفه OCnx زمانی تنظیم می شود که تطابق رخ دهد.

شکل 2 - نمودار زمان بندی برای حالت PWM سریع

پرچم سرریز تایمر شمارنده (TOVn) زمانی تنظیم می شود که شمارنده به حد بالای خود برسد. علاوه بر این، در صورتی که به ترتیب از رجیستر OCRnA یا ICRn برای تنظیم حد بالایی استفاده شود، همان پالس ساعت، همراه با پرچم TOVn، می تواند پرچم های OCnA یا ICFn را تنظیم کند. اگر یکی از این وقفه‌ها فعال باشد، روال وقفه می‌تواند حد بالای شمارش و آستانه‌های مقایسه را به‌روزرسانی کند.

اگر مقدار حد شمارش بالا تغییر کند، آنگاه باید این شرط برقرار شود که مقدار حد بالایی جدید نوشته شده بزرگتر یا مساوی با مقادیر موجود در همه ثبت های آستانه مقایسه باشد. در غیر این صورت، تطابق بین TCNTn و OCRnx هرگز رخ نخواهد داد. توجه داشته باشید که هنگام استفاده از مقادیر حد بالایی ثابت، بیت‌های استفاده نشده هنگام نوشتن روی رجیسترهای OCRnx روی 0 پوشانده می‌شوند.

مکانیسم اصلاح ثبت ICRn زمانی که برای تنظیم حد بالایی استفاده می شود با OCRnA متفاوت است. رجیستر ICRn دارای دو بافر نیست. این بدان معنی است که اگر مقدار کوچکی در ICRn نوشته شود در حالی که شمارنده با پیش مقیاس کم یا بدون پیش مقیاس در حال اجرا است، خطر نوشتن مقداری در ثبات ICRn وجود دارد که کمتر از مقدار فعلی TCNTn باشد. در نتیجه، در این شرایط مسابقه در بالای شمارش از دست خواهد رفت. در این حالت، شمارنده به حداکثر مقدار خود (0xFFFF) می رسد، در 0x0000 مجددا راه اندازی می شود و تنها پس از آن یک تطابق ایجاد می کند. ثبت OCRnA شامل یک طرح بافر دوگانه است، بنابراین می توان آن را در هر زمان تغییر داد.

class="eliadunit">

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

توصیه می شود از ثبات ICRn برای تنظیم حد بالایی استفاده کنید اگر حد بالای شمارش ثابت است. در این حالت، رجیستر OCRnA نیز برای تولید سیگنال PWM در خروجی OCnA آزاد می شود. با این حال، اگر فرکانس PWM به صورت پویا تغییر کند (به دلیل تغییر حد بالایی)، در این صورت استفاده از ثبات OCRnA برای تنظیم حد بالا سودمندتر است، زیرا از بافر دوگانه پشتیبانی می کند.

در حالت سریع PWM، واحدهای مقایسه به شما امکان می دهند سیگنال های PWM را روی پین های OCnx تولید کنید. اگر COMnx1:0 = 0b10، PWM بدون وارونگی خروجی تنظیم می شود و اگر COMnx1:0 = 0b11، حالت PWM با وارونگی خروجی تنظیم می شود (جدول 59 را ببینید). اگر در جهت خروجی (DDR_OCnx) تنظیم شده باشد، مقدار واقعی OCnx را می توان روی پین پورت مشاهده کرد. سیگنال PWM با تنظیم (تنظیم مجدد) رجیستر OCnx هنگامی که تطابق بین OCRnx و TCNTn رخ می دهد و با تنظیم مجدد (تنظیم) رجیستر OCnx همراه با تنظیم مجدد شمارنده (تغییر از حد بالا به حد پایین) تولید می شود.

فرکانس PWM سیگنال خروجی برای یک مقدار حد بالایی معین (UL) با عبارت:

که در آن N متغیری است که مقدار ضریب پیش تقسیم را مشخص می کند (1، 8، 32، 64، 128، 256 یا 1024).

نوشتن مقادیر حدی در رجیستر OCRnx با موارد خاصی در تولید پالس های PWM همراه است. اگر OCRnx برابر با حد پایین (0x0000) تنظیم شود، در هر (VP+1) امین سیکل ساعت تایمر، یک پالس کوتاه در خروجی ظاهر می شود. نوشتن مقداری برابر با حد بالایی برای OCRnx منجر به تنظیم یک سطح ثبت ثابت می شود. 1 یا 0 در خروجی (بسته به قطبیت سیگنال خروجی انتخاب شده با استفاده از بیت COMnx1:0).

اگر تولید موج مربعی با فرکانس بالا (پالس های مستطیلی با چرخه کاری 2 یا 50٪ پر) مورد نیاز است، باید از حالت PWM سریع با مجموعه بیت های COMnA1:0 = 0b01 استفاده کرد که باعث می شود سطح منطقی در خروجی OCnA برای سوئیچ (معکوس) در هر مسابقه. این فقط در صورتی قابل اعمال است که از OCRnA برای تنظیم حد بالایی استفاده شود (WGMn3-0 = 0b1111). حداکثر فرکانس موج مربعی تولید شده در این مورد fOCnA = fclk_I/O/2 است، اگر OCRnA = 0x0000 باشد. این ویژگی مشابه سوئیچینگ OCnA در حالت CTC است، به استثنای بافر دوگانه که در حالت سریع PWM وجود دارد.

حالت مدولاسیون عرض پالس با اصلاح فاز (Phase Correct)

حالت مدولاسیون عرض پالس اصلاح شده (PWM FC) (WGMn3-0 = 0b0001، 0b010، 0b0011، 0b1010 یا 0b1011) برای تولید سیگنال PWM اصلاح شده فاز با وضوح بالا طراحی شده است. حالت PWM FC بر اساس عملکرد دو طرفه یک تایمر شمار است. شمارنده از حد پایین (0x0000) به حد بالا و سپس از حد بالا به حد پایین باز می گردد. اگر حالت خروجی شکل‌دهنده پالس روی غیر معکوس تنظیم شده باشد، زمانی که مقادیر TCNTn و OCRnx در حین شمارش بالا/پایین مطابقت داشته باشند، خروجی OCnx بازنشانی/تنظیم می‌شود. اگر حالت خروجی معکوس تنظیم شود، برعکس، در هنگام شمارش مستقیم، تنظیم رخ می دهد و در هنگام شمارش معکوس، خروجی OCnx تنظیم مجدد می شود. با عملکرد دو طرفه، حداکثر فرکانس سیگنال PWM کمتر از عملکرد یک طرفه است، اما به دلیل ویژگی هایی مانند تقارن در حالت های PWM با عملکرد دو طرفه، ترجیح داده می شود از این حالت ها هنگام حل مشکلات کنترل درایو استفاده شود.

وضوح PWM در این حالت می تواند ثابت شود (8، 9 یا 10 بیت) یا با استفاده از ثبات ICRn یا OCRnA تنظیم شود. حداقل وضوح 2 بیت (ICRn یا OCRnA = 0x0003) و حداکثر 16 بیت (ICRn یا OCRnA = 0xFFFF) است. اگر حد بالایی مشخص شده باشد، وضوح PWM در این حالت به صورت زیر تعیین می شود:

در حالت PWM FC، شمارنده افزایش می یابد تا زمانی که به یکی از مقادیر ثابت 0x00FF، 0x01FF یا 0x03FF برسد (به ترتیب برای WGMn3-0 = 0b0001، 0b0010 یا 0b0011)، و همچنین مقداری برابر با ICRn (اگر WGMn3- 0 = 0b1010) یا OCRnA (اگر WGMn3 :0 = 0b1011). علاوه بر این، هنگامی که به حد بالایی رسید، شمارنده جهت شمارش را تغییر می دهد. مقدار TCNTn برای یک چرخه ساعت تایمر در حد بالایی باقی می ماند. نمودار زمان بندی حالت PWM PC در شکل 3 نشان داده شده است. شکل حالت PWM PC را با استفاده از ثبت OCRnA یا ICRn برای تنظیم حد بالایی نشان می دهد. حالت TCNTn به عنوان یک نمودار تابع برای نشان دادن شمارش دو طرفه نشان داده می شود. شکل خروجی PWM غیر معکوس و معکوس را نشان می دهد. خطوط افقی کوتاه نقاطی را در نمودار TCNTn نشان می‌دهند که تطابق با مقدار OCRnx در آنها رخ می‌دهد. پرچم وقفه OCnx زمانی تنظیم می شود که یک تطابق رخ می دهد.

شکل 3 - نمودار زمان بندی برای حالت PWM FC

پرچم سرریز تایمر شمارنده (TOVn) زمانی تنظیم می شود که شمارنده به حد پایینی خود برسد. اگر از رجیستر OCRnA یا ICRn برای تنظیم حد بالایی استفاده شود، پرچم OCnA یا ICFn بر این اساس با همان پالس ساعتی که رجیستر OCRnx از ثبات بافر (در بالای شمارش) به روز شده است، تنظیم می شود. از پرچم های وقفه می توان برای ایجاد وقفه زمانی که شمارنده به حد کم یا زیاد می رسد استفاده کرد.

هنگام تغییر مقدار حد شمارش بالا، باید اطمینان حاصل کنید که بزرگتر یا مساوی با مقادیر موجود در تمام ثبت های مقایسه است. در غیر این صورت، تطابق بین TCNTn و OCRnx هرگز رخ نخواهد داد. توجه داشته باشید که هنگام استفاده از مقادیر بالای شمارش ثابت، بیت‌های استفاده نشده هنگام نوشتن در رجیسترهای OCRnx به صفر پاک می‌شوند. دوره سوم در شکل 53 حالتی را نشان می دهد که یک تغییر دینامیکی در حد بالای شمارش منجر به تولید یک پالس نامتقارن می شود. این ویژگی بر اساس زمان به‌روزرسانی رجیستر OCRnx است. از آنجایی که به روز رسانی OCRnx در بالای شمارش اتفاق می افتد، دوره PWM شروع می شود و در بالای شمارش به پایان می رسد. این بدان معناست که مدت زمان شمارش معکوس با مقدار حد بالایی قبلی تعیین می شود و مدت زمان شمارش رو به جلو با مقدار حد بالایی جدید تعیین می شود. اگر این دو مقدار متفاوت باشند، مدت زمان شمارش رو به جلو و عقب نیز متفاوت خواهد بود. تفاوت در مدت زمان منجر به عدم تقارن پالس های خروجی می شود.

اگر وظیفه تغییر حد بالایی در حین کار کردن شمارنده است، به جای این حالت، توصیه می شود از حالت PWM PFC (تصحیح فاز و فرکانس) استفاده کنید. اگر از یک مقدار حد بالایی ثابت استفاده شود، عملاً هیچ تفاوتی بین این حالت ها وجود ندارد.

در حالت PWM FC، واحدهای مقایسه به شما امکان می دهند سیگنال های PWM را در پین های OCnx تولید کنید. اگر COMnx1:0 = 0b10 را تنظیم کنید، خروجی PWM بدون وارونگی خواهد بود و اگر COMnx1:0=0b11، با وارونگی خواهد بود. مقدار واقعی OCnx را می توان روی پایه پورت مشاهده کرد اگر ثبت جهت داده برای آن پایه پورت روی جهت خروجی (DDR_OCnx) تنظیم شود. سیگنال PWM با تنظیم (تنظیم مجدد) رجیستر OCnx زمانی که مقادیر OCRnx و TCNTn مطابقت دارند در حین شمارش بالا، و با تنظیم مجدد (تنظیم) ثبات OCnx زمانی که تطابق بین OCRnx و TCNTn در حین کاهش شمار وجود دارد، تولید می شود. فرکانس حاصل از سیگنال PWM در حالت PWM FC در حد بالایی معین (UL) را می توان با استفاده از عبارت زیر محاسبه کرد:

نوشتن مقادیر حدی در رجیستر OCRnx با موارد خاصی در تولید سیگنال‌های PWM در حالت PWM FC مرتبط است. اگر حالت PWM را بدون وارونگی تنظیم کنید و OCRnx را برابر با حد پایین تنظیم کنید، خروجی به طور مداوم روی ورود تنظیم می شود. 0، و اگر برابر با حد بالایی باشد، یک log همیشه در خروجی وجود دارد. 1. برای PWM با وارونگی، سطوح نشان داده شده باید با سطوح مخالف جایگزین شوند.

اگر تعیین کنید که از OCnA به عنوان حد بالایی استفاده کنید (WGMn3:0 = 0b1011) و COMnA1:0 =0b01 را تنظیم کنید، یک موج مربعی در خروجی OCnA ایجاد می شود.

حالت مدولاسیون عرض پالس با اصلاح فاز و فرکانس (فاز و فرکانس صحیح)

حالت مدولاسیون عرض پالس با اصلاح فاز و فرکانس (PWM PFC) (WGMn3-0 = 0b1000 یا 0b1001) برای تولید پالس های PWM با وضوح بالا با اصلاح فاز و فرکانس طراحی شده است. درست مانند حالت PWM FC، حالت PWM FC بر اساس عملکرد دو طرفه شمارنده است. شمارنده از حد پایین (0x0000) به حد بالا و سپس از حد بالا به حد پایین باز می گردد. اگر حالت PWM غیر معکوس مشخص شده باشد، خروجی OCnx در صورت تطابق بین TCNTn و OCRnx در حین افزایش شمارش پاک می شود و اگر تطابق در حین کاهش شمارش رخ دهد تنظیم می شود. در حالت معکوس عمل معکوس است. عملکرد دو طرفه، در مقایسه با عملیات یک طرفه، با تولید فرکانس‌های پایین‌تر همراه است. با این حال، به دلیل تقارن در حالت های PWM با شمارش دو طرفه، استفاده از آنها در کارهای کنترل درایو ارجحیت دارد.

تفاوت اصلی بین حالت‌های PWM FC و PWM FC در لحظه به‌روزرسانی رجیستر OCRnx از ثبت بافر OCRnx است (شکل 3 و شکل 4 را ببینید).

وضوح PWM در این حالت را می توان با استفاده از ثبات ICRn یا OCRnA تنظیم کرد. حداقل وضوح 2 بیت (ICRn یا OCRnA = 0x0003) و حداکثر وضوح 16 بیت است (ICRn یا OCRnA = 0xFFFF). وضوح PWM در بیت را می توان با استفاده از عبارت زیر محاسبه کرد:

در حالت PWM FCC، شمارنده تا زمانی افزایش می یابد که با مقدار ICRn (WGMn3:0 = 0b1000) یا در OCRnA (WGMn3:0 = 0b1001) مطابقت داشته باشد. این به معنای رسیدن به بالای شمارش است که پس از آن جهت شمارش تغییر می کند. مقدار TCNTn برای یک چرخه ساعت تایمر در بالای شمارش باقی می ماند. نمودار زمان بندی برای حالت PWM FCC در شکل 54 نشان داده شده است. شکل حالت PWM FCC را زمانی نشان می دهد که بالای شمارش توسط رجیستر OCRnA یا ICRn تنظیم می شود. مقدار TCNTn به عنوان یک نمودار تابع برای نشان دادن شمارش دو طرفه نشان داده شده است. نمودار خروجی PWM غیر معکوس و معکوس را نشان می دهد. خطوط افقی کوتاه نقاطی را در نمودار TCNTn نشان می دهد که در آن تطابق بین OCRnx و TCNTn رخ می دهد. پرچم وقفه OCnx پس از وقوع مسابقه تنظیم می شود.

شکل 4 – نمودار زمان بندی حالت PWM با تصحیح فاز و فرکانس

پرچم سرریز تایمر شمارشگر (TOVn) در همان چرخه ساعت تنظیم می شود که رجیسترها با مقدار ثبت بافر (در حد پایین شمارش) به روز می شوند. اگر از رجیستر OCRnA یا ICRn برای تنظیم حد بالایی استفاده شود، هنگامی که شمارنده به حد بالایی رسید، به ترتیب پرچم OCnA یا ICFn تنظیم می شود. از پرچم های وقفه می توان برای ایجاد وقفه زمانی که شمارنده به حد بالا یا پایین می رسد استفاده کرد.

هنگام تغییر حد بالایی، باید اطمینان حاصل کنید که مقدار جدید بزرگتر یا مساوی با مقادیر موجود در تمام ثبت های آستانه مقایسه است. در غیر این صورت، اگر حد بالایی روی مقداری کمتر از هر یک از مقادیر موجود در رجیسترهای آستانه مقایسه تنظیم شود، تطابق بین TCNTn و OCRnx هرگز رخ نخواهد داد.

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

اگر مقدار حد بالایی ثابت باشد، استفاده از ثبات ICRn برای تنظیم حد بالایی توصیه می شود. در این مورد، ثبت OCRnA نیز برای مدولاسیون عرض پالس پالس ها در پایه OCnA آزاد می شود. با این حال، اگر نیاز به تغییر پویا فرکانس PWM با تغییر حد بالایی دارید، توصیه می شود از رجیستر OCRnA برای تنظیم حد بالایی به دلیل بافر مضاعف آن استفاده کنید.

در حالت PWM، واحدهای مقایسه به شما اجازه می‌دهند پالس‌های PWM را در پایه OCnx تولید کنید. اگر COMnx1:0 = 0b10، یک خروجی PWM غیر معکوس تنظیم می شود و اگر COMnx1:0=0b11، یک خروجی معکوس تنظیم می شود (جدول 60 را ببینید). مقدار OCnx فقط در صورتی روی پین پورت مربوطه وجود خواهد داشت که روی جهت خروجی تنظیم شده باشد. سیگنال PWM با تنظیم (تنظیم مجدد) رجیستر OCnx در تطابق بین OCRnx و TCNTn در حین افزایش شمارش و تنظیم مجدد (تنظیم) رجیستر OCnx در تطابق بین OCRnx و TCNTn در حین کاهش شمارش تولید می شود. فرکانس PWM در این حالت با حد بالایی (UP) شمارش به صورت زیر تعیین می شود:

که در آن N ضریب تقسیم پیش مقیاس کننده است (1، 8، 32، 64، 128، 256 یا 1024).

نوشتن مقادیر حدی در رجیستر OCRnx با موارد خاصی در تولید سیگنال های PWM در این حالت مرتبط است. اگر OCRnx را برابر با حد پایین (0x0000) تنظیم کنید، در حالت غیر معکوس خروجی دائماً سطح منطقی پایینی خواهد داشت و هنگام نوشتن مقداری برابر با حد بالا، خروجی سطح منطقی بالایی برای یک خواهد داشت. مدت زمان طولانی. در حالت معکوس، سطوح داده شده مخالف خواهند بود.

اگر OCRnA برای تنظیم حد بالایی (WGMn3:0 = 0b1001) و COMnA1:0 = 0b01 استفاده شود، یک موج مربعی در خروجی OCnA تولید می شود.

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

شرح پرچم های وقفه

T1 می تواند یک وقفه ایجاد کند زمانی که:

  1. رجیستر شمارنده سرریز TCNT1;
  2. اگر رجیستر شمارش TCNT1 و ثبت مقایسه OCR1A و OCR1B برابر باشند (به طور جداگانه برای هر ثبات).
  3. در حین ذخیره رجیستر شمارش در ثبت ثبت ICR1.

T2 می تواند یک وقفه ایجاد کند زمانی که:

  1. سرریز رجیستر شمارنده TCNT2؛
  2. هنگامی که ثبت شمارش TCNT2 و ثبت مقایسه OCR2 برابر باشند.

پرچم تمام وقفه ها در ثبات TIFR و وقفه فعال/غیرفعال در رجیستر TIMSK است.

بیت های ثبت TIMSK
ثبت نام7 6 5 4 3 2 1 0
TIMSK OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0* TOIE0
  • OCIE2- پرچم فعال وقفه برای رویداد "مطابقت" تایمر / شمارنده T2
  • TOIE2- پرچم فعال کردن وقفه سرریز تایمر T2 / شمارنده
  • TICIE1- پرچم فعال کردن وقفه برای رویداد "گرفتن" تایمر / شمارنده T1
  • OCIE1A- پرچم فعال کردن وقفه برای رویداد "تصادف A" تایمر / شمارنده T1
  • OCIE1B- پرچم فعال کردن وقفه برای رویداد "تصادف B" تایمر / شمارنده T1
  • TOIE1- پرچم فعال کردن وقفه سرریز تایمر T1 / شمارنده
  • OCIE0*- پرچم فعال کردن وقفه برای رویداد "تطبیق" تایمر/ شمارنده T0 (* - در ATmega8 موجود نیست)
  • TOIE0- پرچم فعال کردن وقفه تایمر/ شمارنده سرریز T0
  • OCF2- پرچم وقفه برای رویداد "تصادفی" تایمر / شمارنده T2
  • TOV2- پرچم وقفه سرریز تایمر/ شمارنده T2
  • ICF1- پرچم وقفه برای رویداد "گرفتن" تایمر / شمارنده T1
  • OCF1A- پرچم وقفه برای رویداد "تصادف A" تایمر / شمارنده T1
  • OCF1B- پرچم وقفه برای رویداد "تصادف B" تایمر / شمارنده T1
  • TOV1- پرچم وقفه تایمر/ شمارنده سرریز T1
  • OCF0- پرچم وقفه برای رویداد "تصادفی" تایمر / شمارنده T0
  • TOV0- پرچم وقفه سرریز تایمر/ شمارنده T0

شرح عملکرد تایمر / شمارنده T1 در کنترلر ATmega8/16

تایمر/ شمارنده شانزده بیتی T1 را می توان برای تولید فواصل زمانی، شمارش تعداد سیگنال های خارجی، و تولید سیگنال های PWM با چرخه های کاری و مدت زمان های مختلف روی پین های OC1A و OC1B استفاده کرد. علاوه بر این، با یک سیگنال خارجی از پایه ICP1 یا یک مقایسه کننده آنالوگ، T1 می تواند وضعیت فعلی خود را در یک ثبت ضبط جداگانه ICR1 ذخیره کند.

بیت های ثبت نام TCCR1A:TCC1B:TCNT1:OCR1A:OCR1B:ICR1
ثبت نام7 6 5 4 3 2 1 0
TCCR1A COM1A1 COM1A0 COM1B1 COM1BO FOC1A FOC1B WGM11 WGM10
TCCR1B ICNC1 ICES1 * WGM13 WGM12 CS12 CS11 CS10
TCNT1: H R/W R/W R/W R/W R/W R/W R/W R/W
TCNT1: L R/W R/W R/W R/W R/W R/W R/W R/W
OCR1A:H R/W R/W R/W R/W R/W R/W R/W R/W
OCR1A:L R/W R/W R/W R/W R/W R/W R/W R/W
OCR1B:H R/W R/W R/W R/W R/W R/W R/W R/W
OCR1B:L R/W R/W R/W R/W R/W R/W R/W R/W
ICR1:H R/W R/W R/W R/W R/W R/W R/W R/W
ICR1:L R/W R/W R/W R/W R/W R/W R/W R/W

هر ثبات 16 بیتی از نظر فیزیکی در دو رجیستر 8 بیتی قرار دارد، بنابراین هنگام خواندن یک ورودی در آنها، باید دو عملیات انجام شود. هنگام نوشتن، ابتدا بایت بالا بارگذاری می شود، سپس بایت کم هنگام خواندن، برعکس، ابتدا بایت کم خوانده می شود، سپس بایت بالا.

TCCR1A:TCCR1B- ثبت تایمر/کنترل شمارنده 8 بیتی T1

TCNT1- ثبت تایمر/ شمارنده 16 بیتی T1. بسته به حالت کار، محتویات این رجیستر برای هر پالس ساعت شمارشگر/تایمر تنظیم مجدد، افزایش (افزایش 1) یا کاهش (کاهش 1) می شود.

OCR1A:OCR1B- رجیسترهای مقایسه 16 بیتی

ICR1- ثبت 16 بیتی، مقدار TCNT1 را هنگامی که یک لبه سیگنال فعال به پین ​​ICP1 یا توسط سیگنال مقایسه کننده اعمال می شود، ذخیره می کند.

تخصیص بیت

COM1A1:COM1A0:COM1B1:COM1B0- این بیت ها رفتار پین OC1A:OC1B را زمانی که مقدار ثبات شمارشگر TCNT1 و رجیستر مقایسه OCR1A:OCR1B مطابقت دارند تعیین می کنند.

FOC1A:FOC1B- از این بیت ها برای تغییر وضعیت پین OC1A:OC1B استفاده می شود

ICNC1- بیت کنترل مدار تداخل، اگر بیت "0" باشد، گرفتن در اولین لبه فعال خواهد بود، اگر "1" ضبط بعد از چهارمین نمونه مشابه سیگنال ضبط خواهد بود.

ICES1- بیت برای انتخاب لبه فعال سیگنال، اگر مقدار آن "0" باشد، ذخیره رجیستر شمارشگر TCNT1 در ثبت ثبت OCR1 در لبه سقوط سیگنال خواهد بود، اگر "1" در لبه افزایشی باشد.

WGM13:WGM12:WGM11:WGM10- این بیت ها حالت کار تایمر/ شمارنده T1 را تعیین می کنند

CS22:CS21:C20- بیت هایی که منبع سیگنال ساعت شمارنده/تایمر T1 را تعیین می کنند.

انتخاب حالت کار تایمر/ شمارنده T1
WGM13WGM12WGM11WGM10حالت عملیاتیماژول حساب (TOP)
0 0 0 0 طبیعی $FFFF
0 0 0 1 فاز صحیح PWM

8 بیتی

$00FF
0 0 1 0 فاز صحیح PWM

9 بیتی

$01FF
0 0 1 1 فاز صحیح PWM

10 بیتی

$03FF
0 1 0 0 CTC (بازنشانی در مسابقه) OCR1A
0 1 0 1 PWM سریع

8 بیتی

$00FF
0 1 1 0 PWM سریع

9 بیتی

$01FF
0 1 1 1 PWM سریع

10 بیتی

$03FF
1 0 0 0 ICR1
1 0 0 1 فاز و فرکانس PWM صحیح است OCR1A
1 0 1 0 فاز صحیح PWM ICR1
1 0 1 1 فاز صحیح PWM OCR1A
1 1 0 0 CTC (بازنشانی در مسابقه) ICR1
1 1 0 1 رزرو شده است *
1 1 1 0 PWM سریع ICR1
1 1 1 1 PWM سریع OCR1A

انتخاب منبع ساعت

حالت عادی

ساده ترین حالت کار T1 است. برای هر پالس سیگنال ساعت، رجیستر شمارش TCNT1 افزایش می یابد (مقدار 1 افزایش می یابد). هنگام عبور از مقدار $FFFF ماژول شمارش (TOP)، یک سرریز رخ می دهد و چرخه ساعت بعدی شروع به شمارش از مقدار $0000 می کند، در همان لحظه پرچم TOV1=1 در ثبات TIFR تنظیم می شود و یک وقفه می تواند اگر پرچم TOIE1=1 در رجیستر TIMSK تنظیم شود، تولید می شود. برای تولید سیگنال با فرکانس معین در این حالت، لازم است که در بیت های COM1A1=0:COM1A0=1 برای خروجی OC1A یا COM1B1=0:COM1B0=1 برای خروجی OC1B کنترلر بنویسید.

علاوه بر این، برای هر چرخه ساعت، مقایسه ای بین رجیستر شمارش TCNT1 و رجیستر مقایسه OCR1A:OCR1B انجام می شود، در صورت وجود تطابق، پرچم وقفه OCF1A=1:OCF1B=1 تنظیم می شود و اگر بیت OCIE1A=1; :OCIE1B=1 از ثبات TIMSK، یک وقفه ایجاد می شود. در عین حال، وضعیت پین OC1A:OC1B بسته به تنظیمات بیت های COM1A1:COM1A0:COM1B1:COM1B0 قابل تغییر است.

حالت CTC (بازنشانی در بازی)

در این حالت، T1 با همان اصل در حالت عادی کار می کند. تفاوت این است که حداکثر مقدار ممکن ثبت شمارش کننده TCNT1 با مقدار ثبت مقایسه OCR1A یا ICR1 محدود می شود (جدول انتخاب حالت تایمر/ شمارنده را ببینید). وقتی TCNT1 به مقدار OCR1A یا ICR1 می رسد، مقدار TCNT1 به TCNT1=0000$ بازنشانی می شود، در همان زمان، پرچم TOV1=1 تنظیم می شود COM1A1:COM1A0:COM1B1:COM1B0 رفتار پین OC1A:OC1B را تعیین می کند. مسابقه وجود دارد

حالت PWM سریع (PWM سریع)

با استفاده از این حالت می توانید یک سیگنال PWM با فرکانس بالا تولید کنید. اصل و روش کار با حالت عادی تفاوتی ندارد، به جز وجود بافر دوگانه رجیستر OCR1A: OCR1B، که ظاهر پالس های سیگنال نامتقارن را حذف می کند، و همچنین در رفتار پین های OC1A: OC1B متفاوت است. جدول را ببینید).


حالت PWM صحیح فاز

تفاوت این حالت با حالت های قبلی در این است که رجیستر شمارش به عنوان یک شمارنده معکوس عمل می کند. از آنجایی که Atmel این حالت را به عنوان مناسب ترین حالت برای تنظیم موتورها توصیه می کند، آن را با جزئیات بیشتری بررسی خواهیم کرد. هنگامی که رجیستر شمارش TCNT1 به مقدار مدول شمارش (TOP) می رسد (یا مقدار رجیستر ICR1 یا مقدار رجیستر OCR1A، جدول انتخاب حالت تایمر/ شمارنده را ببینید)، جهت شمارش تغییر می کند. هنگامی که رجیستر شمارش TCNT1 به حداقل مقدار (0000 دلار) رسید، جهت شمارش نیز تغییر می کند و همزمان پرچم وقفه TOV1 رجیستر TIFR تنظیم می شود. همچنین اگر محتویات رجیستر شمارش TCNT1 و رجیستر مقایسه OCR1A:OCR1B برابر باشد، پرچم OCF1A:OCF1B رجیستر TIFR تنظیم شده و وضعیت خروجی OC1A:OC1B مطابق جدول تغییر می کند.

برای جلوگیری از انتشار نامتقارن هنگام نوشتن یک مقدار در رجیستر OCR1A:OCR1B، بافر نوشتن مضاعف در این حالت اجرا می شود. با تشکر از این، تغییر واقعی در مقدار ثبات در لحظه ای تغییر می کند که رجیستر شمارنده TCNT1 به مقدار مدول شمارش (TOP) می رسد (یا مقدار ثبات ICR1 یا مقدار ثبت OCR1A، به انتخاب حالت تایمر/ شمارنده مراجعه کنید. جدول). بنابراین، در همان ابتدا، زمانی که تایمر/شمارگر مقدار دهی اولیه می شود، پین OC1A:OC1B پس از تطبیق، وضعیت خود را تغییر نمی دهد تا زمانی که رجیستر به مقدار (TOP) برسد.

وظیفه:بیایید برنامه ای برای کنترل روشنایی یک لامپ رشته ای 12 ولت با استفاده از PWM ایجاد کنیم. با فشار دادن دکمه "بیشتر"، روشنایی لامپ افزایش می یابد و با کلیک بر روی دکمه "کمتر"، روشنایی کاهش می یابد. نمودار دستگاه آینده ما در شکل نشان داده شده است. طبق معمول از میکروکنترلر Atmega8 استفاده می کنیم که از یک اسیلاتور داخلی با فرکانس 4 مگاهرتز کلاک خواهد شد. در واقع، ما یک دیمر دریافت خواهیم کرد. امروزه دیمرهای LED بیشترین استفاده را دارند.

برای سادگی، می توانید یک LED را نیز به مدار ما متصل کنید، اما با یک لامپ روشن تر خواهد بود. دکمه ها به پین ​​ها متصل می شوند PD0, PD1. بار را به خروجی وصل می کنیم PB1 (OC1A)از طریق یک مقاومت و یک ترانزیستور اثر میدانی ماسفت، که به عنوان یک کلید برای ما (در حالت سوئیچینگ) کار خواهد کرد. ترانزیستور اثر میدانی ترجیح داده می شود زیرا گیت آن از مدار قدرت جدا شده و توسط یک میدان الکتریکی کنترل می شود و جریان کنترل به میکرو آمپر می رسد. این اجازه می دهد تا با استفاده از یک یا دو ترانزیستور، باری با توان بسیار زیاد (تا ده ها آمپر و ده ها یا صدها ولت) را بدون بارگذاری میکروکنترلر کنترل کنید. همچنین با در نظر گرفتن این واقعیت که ترانزیستورهای اثر میدانی را می توان به صورت موازی (برخلاف ترانزیستورهای دوقطبی) متصل کرد، می توان یک آبشار قوی تر از صدها آمپر به دست آورد.

حالا بیایید بفهمیم که میکروکنترلر چگونه PWM را پیاده سازی کرده و یک برنامه بنویسیم. همانطور که قبلا ذکر شد، MK ما دارای 3 تایمر است و همه آنها می توانند در حالت PWM کار کنند. ما با یک تایمر / شمارنده شانزده بیتی کار خواهیم کرد. بیت ها WGM13-10بیایید تایمر خود را به گونه ای پیکربندی کنیم که FastPWM با محدودیت تعداد بالایی کار کند ICR1. اصل برنامه این است: تایمر ما از 0 تا 65535 (0xFFFF) در رجیستر شمارش می کند. ICR1بیایید عدد 255 را وارد کنیم، این حد بالای شمارش تایمر (TOP) خواهد بود، فرکانس سیگنال PWM ثابت خواهد بود. همچنین، تایمر ما به گونه ای پیکربندی شده است که اگر رجیستر شمارش و رجیستر مقایسه مطابقت داشته باشند (TCNT1 = OCR1A)، خروجی کنترلر تغییر می کند. OC1A. چرخه وظیفه PWM را می توان با نوشتن در ثبت مقایسه تغییر داد OCR1Aیک عدد معین از 0 تا 255، هر چه این عدد بزرگتر باشد، ضریب پر شدن بیشتر باشد، لامپ روشن‌تر می‌سوزد. بسته به اینکه کدام دکمه فشار داده شود، متغیر تغییر می کند من، و سپس در رجیستر نوشته می شود OCR1A.

متن کامل برنامه در زیر ارائه شده است. نظرات عملکرد برنامه را با جزئیات بیشتری شرح می دهند.

/***درس شماره 8. تولید سیگنال های PWM***/ #include #عبارتند از int main(void) (unsigned int i=0; //تعریف متغیر i /***پیکربندی پورت های ورودی/خروجی***/ PORTB = 0x00؛ DDRB |= (1<< PB1); PORTD |= (1 << PD1)|(1 << PD0); // подключаем внутренние нагрузочные резисторы DDRD = 0x00; /***Настройка таймера***/ TCCR1A |= (1 << COM1A1)|(0 << COM1A0) // Установим биты COM1A1-COM1A0:0b10, означает сброс вывода канала A при сравнении |(1 << WGM11)|(0 << WGM10); // Установим биты WGM13-10:0b1110, согласно таблице это TCCR1B |= (1 << WGM13)|(1 << WGM12) // будет режим - FAST PWM, где верхний предел счета задается битом ICR1 |(0 << CS12)|(0 << CS11)|(1 << CS10); // Битами CS12-10:0b001 задаем источник тактового сигнала для таймера МК, включен без делителя TCNT1 = 0x00; // начальная установка счетчика ICR1 = 0xFF; // задаем период ШИМ, здесь у нас число 255, // по формуле fPWM=fclk_I/O/N*(1+ICR1)// вычисляем частоту ШИМ, она будет равна 15625 Hz OCR1A = 0x00; // начальный коэффициент заполнения ШИМ /***Основной цикл программы***/ while(1) { if((PIND&(1 << PD0)) == 0) //если кнопка "больше" нажата { if (i < 254) { // коэффициент заполнения ШИМ изменяется от 0 до 255 i=i+1; // увеличиваем i на единицу OCR1A = i; // записываем переменную в регистр сравнения _delay_ms(30); // задержка 30ms } } if((PIND&(1 << PD1)) == 0) //если кнопка "меньше" нажата { if (i >0) // چرخه وظیفه PWM از 255 به 0 تغییر می کند (i--؛ // i را یک بار کاهش دهید (این را نیز می توانید بنویسید) OCR1A = i؛ // یک متغیر در ثبات مقایسه بنویسید _delay_ms(30)؛ // تاخیر 30 میلی ثانیه )))))

توجه!ابتدا به میکروکنترلر برق می‌دهیم، سپس باید مطمئن شوید که ترانزیستور به پایه MK متصل است و تنها پس از آن با لامپ و ترانزیستور اثر میدان برق را به مدار می‌رسانیم. در غیر این صورت ممکن است ترانزیستور را بسوزانید. واقعیت این است که وقتی خاموش می شود، "پاهای" MK "در هوا آویزان می شوند" - آنها به هیچ چیز متصل نیستند و تداخل روی آنها رخ می دهد. این تداخلات ضعیف برای باز کردن جزئی ترانزیستور اثر میدان بسیار حساس کافی است. سپس مقاومت آن بین تخلیه و منبع از چندین مو اهم به چندین اهم یا کسری از اهم کاهش می یابد و جریان زیادی از آن به لامپ می گذرد. اما ترانزیستور به طور کامل باز نمی شود، زیرا برای این کار شما باید تداخل 1-3 ولتی را به دروازه اعمال نکنید، بلکه یک 5 ولت پایدار را اعمال کنید و مقاومت آن بسیار بیشتر از حداقل خواهد بود. این کار باعث آزاد شدن مقدار زیادی گرما روی آن می شود و دود می کند و احتمالا می سوزد.

به طور کلی، یک تایمر دارای یک ثبت مقایسه است OCR**و زمانی که مقدار در تایمر با مقدار ثبات مقایسه مطابقت داشته باشد OCR** 2 چیز ممکن است رخ دهد:

  • قطع کنید
  • تغییر وضعیت پین مقایسه خارجی OC**

اکنون می توانیم پیکربندی کنیم PWMوقتی شمارنده به مقدار رسید OCR**ولتاژ روی پایه ای که انتخاب کرده ایم OC**از 5 به 0 تغییر دهید. وقتی تایمر به پایان رسید و شروع به شمارش کرد، ابتدا ولتاژ را از 0 به 5 تغییر دهید، در خروجی پالس های مستطیلی خواهیم داشت.

3 حالت کار وجود داردPWM

STS(بازنشانی در مسابقه) - این را می توان نامید CHIMسیگنال شبیه سازی شده با فرکانس پالس زمانی که تایمر تا مقدار معکوس شمارش می کند OCR**بازنشانی می کند و مقدار را تغییر می دهد OC**برعکس بنابراین چرخه وظیفه PWMهمیشه همینطور

این زمانی استفاده می‌شود که شما نیاز به شمارش دوره‌های دقیق یا ایجاد وقفه‌ها پس از یک زمان معین دارید.

PWM سریع(PWM سریع) - شمارنده از 0 تا 255 شمارش می شود و پس از آن به 0 بازنشانی می شود.

زمانی که مقدار تایمر مطابقت دارد OCR**پین مربوطه روی 0 تنظیم می شود.

اغلب طبق معمول استفاده می شود PWM

PWM فاز صحیح(PWM با فاز دقیق) - در این حالت شمارنده از 0 تا 255 شمارش می کند و سپس به صفر می رسد. در اولین مسابقه با OCR**خروجی به 0 بازنشانی می شود، اگر تطابق دوم وجود داشته باشد (زمانی که شمارنده به عقب برگردد)، روی 1 تنظیم می شود.

برای اطمینان از اینکه هنگام تغییر چرخه کار، فاز از بین نمی رود استفاده می شود.



اگر بخواهیم با خروجی کار کنیم OC1Aبیت ها را در آن قرار دهید COM1A1 COM1A0
به طور کلی، "/" به معنای OR است. TCNT1= OCR1Aبرای PWMروی خروجی OC1A

حالت عملکرد تایمر / شمارنده- حالت عملکرد تایمر / شمارنده.

بالا- مقدار TCNT1 که در آن مقدار خروجی تغییر می کند OC**.

TOV1 Flag تنظیم شد- بیت ثبات GIFR در چه مقادیری تنظیم شده است

ما از آخرین جدول حالت مورد نیاز خود را انتخاب می کنیم، به آن نگاه نکنید بالا. از جدول 2، یکی از 2 گزینه آخر را انتخاب کنید. تنها چیزی که باقی می ماند این است که بیت های لازم را در ثبات ها مرتب کنید.

#تعریف F_CPU 8000000UL #شامل #عبارتند از int main() (DDRD = 0xFF; OCR1A=0xC0; // مقایسه با این مقدار OCR1B=0x40؛ // تنظیم PWM و تایمر TCCR1A|=(1<CS10روی 1 تنظیم کنید، با فرکانس MK نحوه تنظیم فرکانس تایمر را محاسبه می کند

این دستگاه - Attiny fusebit doctor - به شما امکان می دهد پیکربندی فیوز بیت ها (تنظیمات کارخانه، طبق توضیحات فنی) میکروکنترلرهای خانواده Tiny از Atmel را بازیابی کنید. پشتیبانی از تمام میکروکنترلرهایی که دارای رابط برنامه نویسی سریال ولتاژ بالا (HVSP) هستند:

  • در بسته بندی 8 پین: , , ;
  • در بسته 14 پین: , ;
  • در بسته بندی 20 پین با آداپتور مخصوص: , .

اگر به دستگاهی برای بازیابی پیکربندی فیوز بیت میکروکنترلرهای خانواده ATtiny نیاز دارید، پروژه را بررسی کنید: .

ساخت این دستگاه بسیار ساده است و شامل قطعات گران قیمت نیست. اساس یک میکروکنترلر، و همچنین چندین مقاومت و ترانزیستور (،)، و یک تنظیم کننده ولتاژ +5 ولت (7805T) است. شایان ذکر است که برای تغذیه دستگاه، یک منبع تغذیه تثبیت شده با ولتاژ خروجی +12 ولت مورد نیاز است (که برای مقداردهی اولیه حالت برنامه ریزی ولتاژ بالا مهم است).

هنگام برنامه ریزی فیوز بیت های میکروکنترلرباید در نظر داشت که یک نوسان ساز داخلی 4 مگاهرتز بدون تقسیم کننده بر 8 استفاده می شود. همچنین می توانید گزینه "قدرت افزایش سریع" را فعال کنید.

نمودار شماتیک

تخته مدار چاپی

برد با قطعات نصب شده

اتصال پین های میکروکنترلر در حالت برنامه ریزی سریال ولتاژ بالا

بازیابی پیکربندی میکروکنترلر (بیمار) با فشار دادن دکمه Start آغاز می شود. برای نشان دادن وضعیت، دو LED ارائه می شود که حالت های آنها نشان می دهد:

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

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

دو جامپر روی برد نصب شده است: "پاک کردن تراشه" و "امضای ناشناخته":

  • پاک کردن تراشه- امکان پاک کردن کل حافظه فلش تراشه را فراهم می کند. اگر بیت های قفل تنظیم شده باشند، یعنی. هیچ راهی برای اصلاح فیوز بیت ها تا زمانی که بیت های قفل پاک نشده اند وجود ندارد. جامپر روشن است - عملیات پاک کردن مجاز است.
  • امضای ناشناخته- امضای تراشه ناشناخته یک پدیده بسیار نادر است، اما هنوز هم اتفاق می افتد که یک تراشه امضای خود را پاک کرده است. امضا، بایت های کالیبراسیون و سایر داده ها را نمی توان به طور تغییرناپذیر در ساختار تراشه ذخیره کرد، اگر منبع تغذیه در طول فرآیند برنامه ریزی ناپایدار باشد، ممکن است به طور تصادفی آسیب ببینند (پاک شوند). به طور معمول در چنین مواردی مقادیر امضای حاصل FF FF FF هستند، اما تراشه به طور معمول کار می کند و حافظه فلش قابل خواندن و نوشتن است. اگر امضای خوانده شده با هیچ یک از پایگاه داده دستگاه (شامل مقادیر FF FF FF و 00 00 00) مطابقت نداشته باشد، هنگامی که این جامپر روشن است، دستگاه یک پیکربندی جهانی از فیوز بیت ها را می نویسد. یک پیکربندی جهانی به این معنی است که ISP (روشن کردن بیت SPIEN) و عملکرد پین Reset (خاموش کردن بیت RSTDISBL) میکروکنترلر بازیابی می شود، گزینه های نوسانگر تحت تأثیر قرار نمی گیرند. با چنین اقداماتی، میکروکنترلر قادر به بازیابی بیشتر خواهد بود، اما با استفاده از یک برنامه نویس معمولی SPI.

توجه! از گزینه "امضای ناشناخته" در میکروکنترلرهای ATtiny11 یا ATtiny15 استفاده نکنید.

کاربرد:

  1. فایل های پروژه (فرمت Eagle 5.4.0)، نمودار مدار و ترسیم برد مدار چاپی (pdf، png)، فایل .hex و فایل .bin برای برنامه نویسی میکروکنترلر - .
  2. سیستم عامل به روز شده برای میکروکنترلر (نسخه 2): کد منبع (BASCOM v.1.11.9.0)، فایل .hex و فایل .bin برای برنامه نویسی میکروکنترلر - .


 

شاید خواندن آن مفید باشد: