یکی از امکانات میکروکنترلرهای AVR امکان قرار دادن میکرو در وضعیت خواب برای مصرف فوق العاده پایین میباشد. این امر زمانی که تجهیزات با کمک باتری تغذیه میشوند اهمیتی دوچندان مییابد. در این پروژه یک برد موزیکال با کمک میکروکنترلر ATtiny13 از خانواده AVR ساختهایم که با کمک یک باتری سکهای 3 ولت CR2032 تغذیه میشود. در این برد یک کلید فشاری به پایه INT0 متصل است و با فشردن این کلید میکرو بیدار شده و یک نت موسیقی پخش میکند و مجددا به خواب میرود.
شماتیک:
در اینجا شماتیک یک برد نمونه موزیکال برای تست مد powerdown میکروکنترلر AVR قرار داده شده است:
سورس:
برنامه نوشته شده با بسکام (Bascom) برای راه اندازی میکروکنترلر AVR با کمک باتری و مصرف کم در این قسمت قرار داده شده است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
'musical for powerdown test by Behnam Zakizadeh @ 1400/03/19 [2021] $regfile = "attiny13a.dat" $crystal = 4800000 $hwstack = 16 $swstack = 8 $framesize = 16 $prog &HFF , &H39 , &HFF , &H00 Config Pinb.4 = Output Speaker Alias Portb.4 Config Pinb.1 = Input Set Portb.1 'pullup On Int0 Int0_isr Enable Int0 Config Int0 = Low Level Enable Interrupts Do 'Wait 3 ' now we have 3 second to measure the Supply Current in Active Mode Config Powermode = Powerdown Loop End Int0_isr: Gosub Play Return Play: Sound Speaker , 131 , 637 'C3(1/16) Sound Speaker , 147 , 566 'D3(1/16) Sound Speaker , 330 , 483 'E3(1/8) Waitms 125 'P(1/16) Sound Speaker , 175 , 477 'F3(1/16) Sound Speaker , 165 , 483 'E3(1/16) Sound Speaker , 147 , 566 'D3(1/16) Sound Speaker , 131 , 637 'C3(1/16) Sound Speaker , 147 , 566 'D3(1/16) Sound Speaker , 392 , 425 'G3(1/8) Waitms 125 'P(1/16) Sound Speaker , 165 , 483 'E3(1/16) Sound Speaker , 147 , 566 'D3(1/16) Sound Speaker , 262 , 637 'C3(1/8) Waitms 125 'P(1/16) Sound Speaker , 110 , 758 'A2(1/16) Sound Speaker , 87 , 954 'F2(1/16) Sound Speaker , 196 , 850 'G2(1/8) Return |
توضیحات برنامه:
در این برنامه در ابتدا نوع میکرو، فرکانس کاری و سایز پشته و فریم مشخص شده و سپس مقادیر فیوزبیتها تنظیم شده است. در قسمت بعدی پایه PINB.4 بعنوان خروجی به با نام مستعار speaker برای بلندگو تنظیم شده و در قسمت بعد نیز پایه PINB.1 که همان INT0 میباشد بعنوان ورودی تعریف شده و با set کردن رجیستر PORT مقاومت Pullup داخلی آن فعال شده است.
در بخش بعدی یک برچسب به نام Int0_isr تعریف شده که به محض وقوع INT0 این برچسب فراخوانی میشود، سپس INT0 فعال شده و تشخیص آن روی سطح منطقی low قرار داده شده است؛ یعنی به محض اینکه پایه INT0 به سطح منطقی 0 برسد یک درخواست وقفه اتفاق میافتد. در خط بعد نیز وقفههای سراسری فعال شده است. در بخش بعدی حلقه اصلی برنامه قرار دارد. در این حلقه برنامه وارد مد powerdown شده و به اصطلاح به خواب میرود. در این مد جریان مصرفی در حدود 1.8 میکرو آمپر بوده که به معنای 0 میباشد و عملا جریانی از باتری عبور نمیکند.
به محض اتصال لحظهای شستی یک درخواست وقفه به CPU صادر شده و برچسب Int0_isr فراخوانی میشود. در این برچسب یک زیربرنامه به نام play را فراخوانی کردهایم که در آن نتهای موسیقی با دستور sound ساخته شده است. بعد از پخش نتها برنامه به حلقه باز میگردد و مجدداً به خواب میرود.
کاربرد:
با کمک این روش میتوانید براحتی دستگاههایی بسازید که با کمک باتری تغذیه میشوند و نیازی به کلید اصلی روشن و خاموش نداشته باشند. پایه INT میتواند توسط خروجی آلارم یک ماژول ساعت، خروجی یک ریموت، یک مولد پالس و یا حتی در مواردی توسط watchdog میکرو نیز تحریک شود و پس از اجرای دستورات مجددا میکرو به خواب رود. تفاوت این روش با قطع برق میکرو اینست که در صورت استفاده از دستور $NORAMCLEAR حتی ریست میکرو با watchdog محتوای SRAM پایدار مانده و میتوان با ریستهای پی در پی و افزایش مقدار یک متغیر مثلا میکرو را هر 24 ساعت وادار به انجام یک عمل مثلا ارسال SMS سطح مخزن نمود و کل سیستم را با کمک باتری در یک محیط خارج از شهر قرار داد.
توجه داشته باشید که در مد powerdown فقط حالت low level در INT0 قابل تشخیص است و سایر مدها قابل ردیابی نمیباشد. همچنین میتوان بجای INT از پایه RESET میکرو نیز استفاده کرد و با اتصال یک کلید به پایه ریست، میکرو را از خواب بیدار کرده و پس از اجرای برنامه قبل از دستور END دستور مربوط به خوابیدن میکرو را بکار برد.
یک نمونه دیگر:
در این قسمت یک برد چراغ راهنمایی را که صرفاً برای سرگرمی و بازی ساخته شده قرار دادهایم. در این برد نه از INT خبری است و نه از RESET. بلکه دو عدد باتری 1.5 ولت با یک کلید روشن و خاموش به میکرو متصل شده است. در این برنامه پس از روشن کردن کلید، چراغها در یک حلقه به ترتیب روشن و خاموش شده و در انتهای حلقه یک واحد به یک متغیر اضافه میشود، هرگاه مقدار شمارنده بزرگتر یا مساوی 20 شد میکرو به خواب میرود. در این حالت اگر شخص فراموش کند که کلید را خاموش کند از تخلیه باتریها جلوگیری بعمل آمده و برای روشن کردن برد کافیست یک بار کلید را خاموش و مجددا روشن کنیم تا برنامه از ابتدا شروع بکار کند.
برنامه چراغ راهنمایی:
سورس برنامه چراغ راهنما با بسکام:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
'Traffic Light by Behnam Zakizadeh @ 1400/04/02 [2021] $regfile = "attiny13a.dat" $crystal = 4800000 $hwstack = 16 $swstack = 8 $framesize = 16 Config Pinb.0 = Output Config Pinb.1 = Output Config Pinb.2 = Output Red Alias Portb.0 Yellow Alias Portb.1 Green Alias Portb.2 Dim I As Byte Do Red = 1 Wait 10 Red = 0 Yellow = 1 Wait 3 Yellow = 0 Green = 1 Wait 10 Green = 0 Yellow = 1 Wait 3 Yellow = 0 Incr I If I >= 20 Then Config Powermode = Powerdown Loop End |
فیلم عملکرد چراغ راهنما:
در اینجا یک فیلم کوتاه از عملکرد چراغ راهنما قرار دادهایم:
بازدیدها: 694