جستجو برای:
سبد خرید 0
  • خانه
  • وبلاگ
  • کتاب
  • محصولات
    • برنامه نویسی میکروکنترلرها با پایتون
  • تماس با ما
ورود
[suncode_otp_login_form]
گذرواژه خود را فراموش کرده اید؟
عضویت
[suncode_otp_registration_form]

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

آموزش تکنولوژِی با رهنوتک
  • خانه
  • وبلاگ
  • کتاب
  • محصولات
    • برنامه نویسی میکروکنترلرها با پایتون
  • تماس با ما
شروع کنید
آخرین اطلاعیه ها
لطفا برای نمایش اطلاعیه ها وارد شوید
0

وبلاگ

آموزش تکنولوژِی با رهنوتک > اخبار > میکروکنترلر > راه اندازی وقفه خارجی رزبری پای پیکو – Raspberry Pi Pico External Interrupt

راه اندازی وقفه خارجی رزبری پای پیکو – Raspberry Pi Pico External Interrupt

2 مرداد 1403
ارسال شده توسط اساتید رهنوتک
میکروکنترلر
rpi_pico_external_Interrupt

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

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

وقفه (Interrupt) چیست؟

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

بررسی وقفه خارجی رزبری پای پیکو

برای بررسی وقفه خارجی رزبری پای پیکو باید امکانات وقفه خارجی چیپ RP2040 که میکروکنترلر استفاده شده در برد Raspberry Pi Pico است را بررسی نمود. این چیپ از وقفه‌های تودرتو و اولویت بندی وقفه‌ها (در چهار سطح) پشتیبانی می‌کند. واحد NVIC مخفف (Nested Vector Interrupt Controller) مدیریت این موضوع را به عهده دارد. چیپ RP2040 امکان فعال کردن وقفه خارجی روی همه پین‌ها را در اختیار شما قرار می‌دهد.

هر وقفه خارجی رزبری پای پیکو را می‌توانید در چهار مد زیر فعال کنید:

  • بالارونده (Edge High) – با دیدن یک پالس بالا رونده روی پین رخ می‌دهد
  • پایین رونده (Edge Low) – با دیدن یک پالس پایین رونده روی پین رخ می‌دهد
  • سطح بالا (Level High) – با دیدن سطح 1 منطقی روی پین رخ می‌دهد
  • سطح پایین (Level Low) – با دیدن سطح 0 منطقی روی پین رخ می‌دهد
interrupt types

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

راه‌اندازی وقفه خارجی رزبری پای پیکو

برای راه‌اندازی وقفه خارجی رزبری پای پیکو می‌خواهیم برنامه‌ای بنویسیم که یک چشمک زن روی LED موجود روی برد Raspberry Pi Pico ایجاد کند که 1 ثانیه روشن و 1 ثانیه خاموش باشد. سپس اگر کلید متصل به پین 5 برد فشرده شد (حتی برای یک لحظه در حد میلی ثانیه) فرکانس چشمک زدن بالا برود به گونه‌ای که 100 میلی ثانیه روشن و 100 میلی ثانیه خاموش باشد.

وقفه خارجی رزبری پای پیکو

در مسئله فوق پروسسور یک کار دائمی برای انجام دادن دارد یعنی روشن و خاموش کردن مداوم LED. در عین حال از آن انتظار داریم حتی یک لحظه تغییر وضعیت در سوییچ را هم بفهمد. یک روش برای حل این مسئله استفاده از وقفه خارجی است. (دقت داشته باشید برای یک مسئله راه حل‌های زیادی وجود دارد اما چون هدف ما توضیح نحوه کدنویسی اینتراپت است از وقفه برای حل آن استفاده می‌کنیم)

از آنجا که پین میکروکنترلر کار داریم کلاس Pin از ماژول machine را import می‌کنیم.

from machine import Pin

در ادامه برای ایجاد تاخیر بین چشمک زدن LED تابع sleep_ms را از ماژول utime فراخوانی می‌کنیم

from utime import sleep_ms

یک شی از کلاس Pin برای کار با LED ایجاد می‌کنیم و نام آن را led می‌گذاریم (این نام دلخواه است). تنظیمات این پین را به صورتی انجام می‌دهیم که به پین GP25 اشاره کند (چون LED روی برد به پین GP25 متصل است) و در حالت خروجی باشد.

led = Pin(25, Pin.OUT)

یک شی دیگر از کلاس Pin برای کار با سوییچ ایجاد می‌کنیم و نام آن را key می‌گذاریم (این نام دلخواه است). تنظیمات این پین را به گونه‌ای انجام می‌دهیم که به پین GP5 اشاره کند. (چون سوییچ را به این پین متصل کرده‌ایم) و در حالت ورودی باشد. همچنین حالت PullUp را فعال می‌کنیم زیرا یک سمت سوییچ به پین و سمت دیگر به GND است و در واقع سوییچ ما GND را به پایه قطع یا وصل می‌کند.

key = Pin(5, Pin.IN, Pin.PULL_UP)

اگر در مورد کارکردن با پین‌ها در میکروپایتون آشنایی کافی ندارید و به توضیحات بیشتری نیاز دارید پیشنهاد می‌کنم مقاله راه اندازی پایه های Raspberry Pi Pico را مطالعه کنید.

در ادامه یک متغیر با نام sleep_value برای تعیین میزان تاخیر چشمک زن تعریف می‌کنیم و مقدار اولیه آن را 1000 در نظر می‌گیریم. بعدا این متغیر را به عنوان تعداد میلی ثانیه به تابع sleep_ms پاس می‌دهیم تا تاخیر 1 ثانیه را برای ما ایجاد کند.

sleep_value = 1000

حال تابعی که قرار است هنگام اتفاق افتادن وقفه فراخوانی شود (همان روتین وقفه) را پیاده‌سازی می‌کنیم. از آنجا کار این تابع تغییر سرعت چشمک زدن به 100 میلی ثانیه است کافی است مقدار متغیر sleep_value را به عدد 100 تغییر دهیم. همچنین این تابع یک ورودی دارد که نشان دهنده منبع ایجاد کننده وقفه است که اگر در برنامه‌ای برای شما کاربرد داشته باشد می‌توتنید از آن استفاده کنید. در این برنامه احتیاجی به آن نداریم اما برای آنکه مقدار آن را مشاهده کنید آن را پرینت می‌کنیم. نام این تابع را fast_blink می‌گذاریم.

def fast_blink(a):
    global sleep_value
    sleep_value = 100;
    print(a)

نوبت آن رسیده که وقفه خارجی رزبری پای پیکو را برای پین سوییچ فعال کرده و تابع fast_blink را به آن معرفی کنیم. همچنین اینتراپت را در مد falling پیکربندی می‌کنیم زیرا پین متصل به سوییچ همواره در حالت high قرار دارد (چون Pull Up آن فعال شده است) و در مدت زمان فشره شدن سوییچ low می‌شود (چون سر دیگر سوییچ به GND متصل شده است)

key.irq(fast_blink, Pin.IRQ_FALLING)

در نهایت در یک حلقه بی‌پایان LED را به مدت 1 ثانیه روشن و 1 ثانیه خاموش می‌کنیم.

while True:
    led.value(not led.value())
    sleep_ms(sleep_value)

برنامه کامل به صورت زیر خواهد بود

from machine import Pin
from utime import sleep_ms

key = Pin(5, Pin.IN, Pin.PULL_UP)
led = Pin(25, Pin.OUT)

sleep_value = 1000

def fast_blink(a):
    global sleep_value
    sleep_value = 100;
    print(a)

key.irq(fast_blink, Pin.IRQ_FALLING)

while True:
    led.value(not led.value())
    sleep_ms(sleep_value)

در پایان

در این مقاله در مورد راه‌اندازی وقفه خارجی رزبری پای پیکو مطالبی بیان شد. ذکر این نکته ضروری است برنامه نوشته شده تنها یکی از بسیار راه‌های حل این مسئله است و اگر شما کد متفاوتی دارید که بر اساس استفاده از وقفه خارجی رزبری پای پیکو مسئله را حل کرده‌اید آن را در کامنت‌ها با دوستانتان به اشتراک بگذارید. همچنین با قرار دادن نظرات خود در بخش کامنت‌های این مقاله ما را بسیار خوشحال خواهید کرد.

قبلی وقفه چیست؟ - Interrupt
بعدی UART چیست؟ - ارتباط سریال

دیدگاهتان را بنویسید لغو پاسخ

جستجو برای:
دسته‌ها
  • RPI pico
  • پروتکل‌های ارتباطی
  • میکروکنترلر
برچسب‌ها
adc micropython pio raspberrypi pico رزبری پای پیکو میکروپایتون
در باره ما

ما آموزشگاه آفلاین رهنوتک را راه‌اندازی کرده‌ایم تا آموزش‌های به روز در زمینه تکنولوژی را به مهندسان عرضه کنیم.

هدف ما از یک سو ایجاد پلی میان دانشجویان با بازار کار و از طرف دیگر ارتقای مهندسین شاغل در حوزه تکنولوژی است.

دسترسی سریع
  • دوره ها
  • اخبار
  • تماس با ما
© 1403 - آموزشگاه آفلاین رهنوتک