external interrupt اینجوریه که وقتی یک لبه بالا رونده یا پایین رونده (بسته به تنظیم نرم افزاری که میکنیم) به پین های INT اعمال میکنیم یک interrupt میده و تو interrupt routine میشه یک کارایی کرد.

چیزی که اینجا مهمه اینه که چه طوری لبه ایجاد کنیم؟ خود من اولش خیلی راحت مثلا برای اینکه لبه بالا رونده ایجاد کنم، با یک سیم پین INT رو به زمین وصل میکردم. بعد اون سیم رو از زمین جدا میکردم و به Vcc میزدم.

ولی میدیدم که مدار طوری خروجی میده که انگار n بار interrupt دادیم. یعنی مثلا اگه تو interrupt routine میگفتیم که یک واحد به یک متغیر اضافه کنه، بعد از interrupt دادن یک بیست، سی تایی بهش اضافه میکرد! دلیلش هم اینه که هر بار که اون سیم رو قطع و وصل میکنیم دیبانس ایجاد میشه. یعنی کلی ولتاژ بین 0 و 5V بازی میکنه تا به حالت پایدارش برسه و بنابراین یک عالمه interrupt ناخواسته ایجاد میشه.

برای حل این مشکل کافیه که یک فیلتر پایین گذر خیلی ساده سر پین INT بذاریم تا نگذاره فرکانسای بالا از مدارمون عبور کنن. اون فیلتر هم با یک خازن و یک مقاومت خیلی راحت پیاده سازی میشه.

بعد میبینیم که مشکل رفع میشه و مدارمون خیلی خوشرفتار میشه!

Advertisements