نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
أَللّهُمَّ ارْزُقْنی شَفاعَةَ الْحُسَیْنِ یَومَ الْوُرُودِ
مهدی دمیرچیلو

آموزش جامع آردوینو جلسه ۱۰ وقفه خارجی

176

به نام خدا : تو این مطلب از آموزش آردوینو میخوام به آموزش وقفه خارجی در آردوینو بپردازم و یکی دو تا پروژه اردوینو هم گزاشتم براتون.

آموزش جامع آردوینو جلسه ۱۰ وقفه خارجی

آموزش جامع آردوینو جلسه ۱۰ وقفه خارجی


خوب رسیدیم به مبحث جالب وقفه، این وقفه دو تا تابع داره، برا برد های آردوینو مختلف تعداد پایه های وقفه متفاوت هستش، مثلا برد uno همش ۲ تا پایه وقفه خارجی داره و برد Due میشه از همه ی پایه هاش به عنوان پایه وقفه خارجی استفاده کرد shock ، الله اکبر؛ ولی چون ما با UNO کار میکنیم کاری به بقیه برد ها نداریم. laugh

برد آردوینو/وقفه ها int.0 int.1 int.2 int.3 int.4 int.5
Uno, Ethernet ۲ ۳  –  –  –  –
Mega2560 ۲ ۳ ۲۱ ۲۰ ۱۹ ۱۸
Leonardo ۳ ۲ ۰ ۱ ۷  –
Due

تمام پایه ها قابلیت تبدیل به وقفه خارجی رو دارند.

همون طو که میبینید برد Uno 2 تا وقفه داره به نام های int0 و int1 که به ترتیب منتسب به پایه های ۲ و ۳ برد آردوینومون هستن.
راستی تا یادم نرفته اگه در مورد وقفه چیزی نمیدونید و این که چی هستش، کارش چیه و… میتونید توضیحات اول مطلب زیر رو بخونید : آموزش جامع میکروکنترلر AVR جلسه۳ >>>> خوب بریم سراغ توضیح دو تا تابع موجود :

attachInterrupt : همون طور که میدونید پایه ۲ و ۳ برد آردوینو به عنوان ورودی/خروجی کار میکنه و برا این که وقفه خارجی روی این پایه ها رو فعال کنیم باس از این تابع استفاده کنیم، لذا تو حالت عادی پایه های ۲ و ۳ ، در نقش پایه های وقفه خارجی نیستند، و در نقش ورودی/خروجی هستند.

interrupt : شماره وقفه ای که میخواین ازش استفاده کنید، دو تا وقفه داریم، وقفه ۰ و ۱ (جدول بالا)
mode : توسط این قسمت نوع تحریک شدن وقفه رو تعیین میکنیم، مثلا به ازای هر تغییر ولتاژی(CHANGE) وقفه رخ بده یا وقتی ولتاژ ۰ منطقی هستش(LOW) یا وقتی که ولتاژ ۱ منطقی هستش(HIGH) یا وقتی که از ۰ منطقی میریم به ۱ منطقی(RISING) و یا برعکس(FALLING)…..این کلمات پر رنگ رو بسته به نیازتون یکیشون و در mode قرار بدید.
ISR : نام تابع وقفه، این نام اختیاری هستش، فقط شما این نامی که این جا میدید رو باس یه تابع تعریف کنید با این نام و کد هایی که دوس دارید در صورت تحریک شدن وقفه اجرا بشن رو توش قرار بدید.

نگاه کنید : وقتی مثلا mode رو گزاشتین روی HIGH و وقفه ۰ رو انتخاب کردین، لذا هر موقع پایه ۲ بردمون ۱ منطقی بشه وقفه ۰ رخ میده و تابع وقفه اجرا میشه(تابعی که اسمش رو به جای ISR قرار دادیم و یه تابع تعریف کردیم با این نام و کد هایی رو که دوس داریم در صورت تحریک شدن وقفه اجرا بشن رو توش قرار دادیم….به نظرم پروژه این مطلب رو بببینید بهتر متوجه میشید تا این که این چرت و پرت های منو بخونید laugh )
اینم مثال خود سایت آردوینو

detachInterrupt : تابع بالا پایه ۲ و ۳ رو نقششون رو از ورودی/خروجی به وقفه خارجی تغییر میداد، این تابع عکس تابع بالا هستش، وقفه مورد نظر رو غیر فعال میکنه و اون پایه رو ورودی/خروجی میکنه؛ که به صورت زیر هستش و شماره وقفه ای که میخواین غیر فعالش کنید رو به جای interrupt مینویسید.

اینم یه پروژه از داشتون…

توجه : یه موردی هستش که خود سایت آردوینو هم تذکر(یا پیشنهاد) داده :

attachInterrupt(digitalPinToInterrupt(pin), ISR, mode);  recommended
attachInterrupt(interrupt, ISR, mode);                            not recommended

که گفته به جایی این که تو تابع attachInterrupt به پارامتر اول تابع مستقیما بیاین و نام وقفه رو بدید، بهترین که از تابع digitalPinToInterrupt استفاده کنید که برای این کار به این تابع شماره پایه ای از میکرو که میخواین از اون وقفه استفاده کنید رو به این تابع میدید و این تابع رو هم تو پارامتر اول تابع attachInterrupt قرار میدید. (مثلا پایه X برد آردوینو مد نظر شما یه وقفه داره و شما میخواین از اون وقفه استفاده کنید، خب برای این کار شماره پایه که X هستش رو به تابع digitalPinToInterrupt میدید و این تابع رو هم داخل پارامتر اول تابع attachInterrupt قرار میدید.)
منبع : AttachInterrupt

خوب ۲ تا تابع زیر رو هم الان(۱۶ مرداد) اضافه میکنم، اول میخواستم تو یه مطلب جدا باشه، بعد نظرم عوض شد(دم دمی هم خودتی :-D)، با این ۲ تابع زیر که میخوام بگم کالا ما توی این مطلب ۴ تا تابع در رابطه با بحث وقفه گفتم، اینم همین جا بگم که جان داش تو عمل مدار رو ببندید و نه تو پروتئوس حالا از ما گفتن.(تو پروتئوس درست کار نمیکنه، پروتئوس چیز چرت و پرتی هستش در زمینه آردوینو، البته به پروتئوس ربطی نداره، این کتاب خونه آردوینو برا پروتئوس مشکل داره laugh ) ، خوب دیگه داستان گفتن بسه بریم سر اصل مطلب :

این  دو تابعی که دربارش حرف زدیم رو در زیر میبینید، این دو تابع رو ما جایی ازشون استفاده میکنیم که بخوایم مثلا یه سری از کدها بدون توجه به وقفه اجرا بشن(عمرا فهمیده باشین crazy ) بذار بیشتر توضیح بدم؛ مثلا فک کنید شما یه سری کد دارین و میخواین تحت هر شرایطی اجرا بشن، والا من انگلیسیم زیاد خوب نیست ولی تا جایی که تو سایت آردوینو دیدم نوشته بود از این ۲ تا تابع برا کد هایی که حساس به زمان هستند استفاده میکنیم(حالا دوستانی که انگلیسیشون خوبه ممنون میشم برن سایت آردوینو و ترجمه کنن و بیان اینجا بگن تا ما و دوستان دیگه استفاده کنیم…دو تا لینک مقابل : interrupts و  noInterrupts )

حالا طبق مثال سایت آردوینو کدهایی که بین ۲ تابع بالا باشن اجرا میشن(و کاری به وقفه وقفه ندارن)، و اگه در حین اجرای این کد ها وقفه رخ بده، برنامه وای میسته تا کدهای مورد نظر به طور کامل اجرا بشن و بعد کدهای تابع وقفه مورد نظر اجرا میشه….ok???  rtfm

یه مثال در زیر میزارم و فیلم پروژه رو هم میزارم تا کاملا عملکرد این دو تابع آشنا بشین و ببینین که اگه از این ۲ تا تابع استفاده کنیم و نکنیم چی میشه و چه فرقی داره.

پروژه آردوینو

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

اینم از شماتیک کد های پروژه بالا
آموزش اردوینو

فیلم پروژه بالا :

8.9MB آموزش جامع آردوینو جلسه 10 وقفه خارجی
0%
00:00  /  02:08

 

خوب این مطلب هم تموم شد خدا رو شکر…امیدوارم این مطلب براتون مفید بوده باشه و بدرتون بخوره و در ضمن هزینه استفاده از مطلب یادتون نره. (۳ تا صلوات برا شادی روح شهدا و امام شهدا و سلامتی رهبر و علمای اسلام و هر کسی که به کشور خدمت میکنه + دعا برا ظهور آقا)

راستی اینم بگم من چون احساس کردم همین قدر کافیه توضیح داده به همین خاطر به همین مقدار اکتفا کردم ، اگه فک میکنیم کم توضیح دادم یا جاییش رو نگفتم یا….بگید لطفا و سوال موالی هم بود بپرسید، ۱۰۰ تا سوال هم داشتین بپرسین……تک تکش رو تا جایی که بتونم جواب میدم. heart

فعلا یا علی.

تعداد مطالب : 367 تا
جنگ ما فتح قدس را به همراه خواهد داشت. [ امام خمینی (ره) ]
بقیه جلسات : آموزش جامع آردوینو
ارسال دیدگاه
116
نظرات این مطلب بسته شده است.
  1. مهدیار

    مهمان

    مهدیار

    1 ) فرض کنید میکروکنترلر شما در حال اجرای برنامه اصلی ) Main Program ( میباشد. سپس یک وقفه
    خارجی به سیستم وارد میشود )مانند فشردن یک کلی د( ، در این حالت میکروکنترلر شما برنامه اصلی را
    متوقف کرده و تابع وقف ه ) ISR ( را اجرا م یکن د. اگر در حین اجرای تابع وقفه میکروکنترلر دوباره دچار
    وقفه شود، عملکرد سیستم به چه صورت خواهد بود ؟ به طور کامل توضیح دهید .
    2 ) اگر تعداد وقفههای تو در تو بیش از دو تا باشد، سیستم چه واکنشی از خود نشان م یده د؟ )در صورتی
    که بیش از دو پایه به عنوا ن وقفه در میکروکنترلر شما وجود داشته باش unknw
    مسشه به این دو تا سوال پاسخ بدید

  2. محمود

    مهمان

    محمود

    سلام.تشکر فراوان

  3. مهدی

    مهمان

    مهدی

    سلام.
    اون مقاومت ها رو چرا بستید؟ تو شماتیک مدار که چیزی نیست!

    مشاهده پاسخ ها (4)
    • مهدی دمیرچیلو

      نویسنده این مطلب

      مهدی دمیرچیلو

      سلام – کدوم مقاومت ها؟ به کدوم پایه ها وصله؟
      PD2 و PD3 رو اگه مد نظرته که پول دان برا کلید ها هستش – تو شماتیک
      https://dmf313.ir/wp-content/uploads/ARDUINO10-INTER.png
      هم میبینیش – مقاومت دیگه ای مد نظرت هستش دقیقا بگو کجاس تا بررسی کنم.

    • سهیل

      مهمان

      سهیل

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

      • مهدی دمیرچیلو

        نویسنده این مطلب

        مهدی دمیرچیلو

        سلام
        ========
        اگه به اسکپ دسترسی داری – برا خودت – دانشگاه شهرتون – رفیقی چیزی
        برو از اسکپ استفاده کن و خروجی که به وقفه میکرو میدی رو در لحظه فشرده شدن کلید، ببین / متوجه میشی
        ========
        از خازن باید استفاده کنی یا از delay در کدنویسی / یه خازن تو مایه های 0.1uf / به این خازن میگن : debounce
        ========
        البته تو ریجستر اگه تو تحریک شدن وقفه رو هر دو لبه گزاشته باشی – طبیعتا وقتی کلید رو فشار میدی و ول میکنی – 2 بار وقفه رخ میده
        اگه هم مثلا روی rising edge بزاری، زمانی که کلید رو فشار میدی وقفه رخ میده
        روی falling edge هم زمانی که کلید رو فشار دادی و ول کردی، وقفه رخ میده.
        اینو هم چک کن.
        ========
        برا بحث کد نویسی، میتونی از طریق کد نویسی این مشکل رو حل کنی، مثلا بعد از اولین بار رخ داده وقفه توسط کلید، 300ms صبر کنه ( حالا وقفه رو غیر فعال کنی، وقفه تو این مدت رخ داد، توجه نکنی و… بستگی به روش کدنویسی شما داره )
        ========
        برا بحث سخت افزاری هم که گفتم یه خازن 0.1uf موازی کلید قرار بده، مقدار مناسبشو با خطا و تست در عمل حساب کن.

        خازن debounce

        • سهیل

          مهمان

          سهیل

          سپاس از راهنمایی های خوبتون

  4. علی

    مهمان

    علی

    سلام..استاد ی سوال داشتم .
    میخواستم بدونم چطور باید در یک وقفه تاخیر ایجاد کنم.مثلا میخوام هروقت تابع وقفه اجرا شد.بعد یک ثانیه یک ال ایدی روشن بشه ..لطفا کمک کنید.خیلی به اینکار احتیاج دارم😭

    مشاهده پاسخ ها (1)
    • مهدی دمیرچیلو

      نویسنده این مطلب

      مهدی دمیرچیلو

      سلام
      کد داخل تابع وقفه نباید توش از دیلای استفاده کرد – درست نیست.
      شما هی متغییر تعریف کن که وقفه رخ داد، بیاد و متغییر فوق رو 1 کنه ( این کار داخل تابع وقفه انجام میشه )، بعد شما تو پروژت ( کدهای داخل حلقه while ) بگو اگه متغییر مد نظر 1 شد، 1 ثانیه دیلای بده، بعد led رو روشن کن، بعد متغییر فوق رو 0 کن.

  5. امیر

    مهمان

    امیر

    سلام مطالب سایت انقدر خوبه دل ادم میخواد همه رو بخونه !

  6. حمید

    مهمان

    حمید

    داش مهدی و همکاراش دستتون درد نکنه
    خداخیرت بده hi

  7. هادی

    مهمان

    هادی

    با سلام
    میخواستم بدونم با آردینو میشه کانتری ساخت که تعداد یک پالس رو تو زمان دودفیقه شمارش کنه

    مشاهده پاسخ ها (3)
    • مهدی دمیرچیلو

      نویسنده این مطلب

      مهدی دمیرچیلو

      سلام – تا جایی که خاطرمه باید بشه – برا اطمینان بیشتر دیتاشیت میکرو مد نظر – فصل تایمر/کانتر ها رو بررسی کن.

    • هادی

      مهمان

      هادی

      با سلام وتشکر از راهنمایی شما. این جوری که من متوجه شدم توی دیتا شیت atmeg328pپایه های xtal1,2برای کلاک خارجی استفاده میشن که این پایه ها توی برد آردوینو گم میشن .چون میخوام پالس ورودی به عنوان کلاک خارجی بشه .بنظر شما آیا راه دیگری هم هست؟

      • مهدی دمیرچیلو

        نویسنده این مطلب

        مهدی دمیرچیلو

        برد آردوینو این پایه ها رو کریستال 16 یا 20 زده ( خاطرم نی کدومش هستش ) – و در پایه های خروجی ارائه نداده.
        پالس ورودی به عنوان کلاک خارجی بشه؟ دارید اشتباه میرید – تایمر/کانتر خودش پایه جدا برا تامین کلاک داشت تا جایی که خاطرمه – مطلب مربوط به تایمر/کانتر رو تو نت مطالعه کنید.

  8. مطهر

    مهمان

    مطهر

    این نویز تو وقفه من رو بیچاره کرده
    به خاطر همین از وقفه استفاده نمی کنم
    به جز موازی کردن خازن با کلید، چه راهی برای کاهش نویز هست؟
    دستور دیبانس تو زیر برنامه وقفه غیر فعال میشه
    از دیبانس خیلی خوب جواب گرفتم حیف که تو وقفه کار نمی کنه
    شنیدم تو avr برای وقفه دستور دیبانس مخصوصی داریم
    هعیییییی cry

    مشاهده پاسخ ها (1)
    • مهدی دمیرچیلو

      نویسنده این مطلب

      مهدی دمیرچیلو

      والا از رفع نویز زیاد اطلاعاتی ندارم ( خودم میخوام در این زمنیه مطالعه کنیم ) – چند روز پیش یه کتاب “تکنیک های کاهش نویز در سیستم های الکترونیکی” به درستم رسید – که اگه مشکلی پیش نیاد 2-3 هفته دیگه شروع به خوندنش میکنم.

  9. محمد

    مهمان

    محمد

    مهندس سلام
    این تابع nointerrupt و interrupt چگونه عمل میکنن دقیقل؟
    در ابتدا با nointerrupt تمام وقفه ها را غیر فعال میکنه که هیچ وقفه در اجرای کدهای آن مشکل ایجاد نکنه و در آخر interrupt میزاریم تا وقفه ها دوباره فعال شوند حالا در این بین اگر وقفه ای بیاید چه میشود؟
    دوتا فرضیه وجود داره :
    اینکه اگر وقفه ای آمد این وقفه بعد دستورات interrupt و nointerrupt اجرا میشه
    یا
    اصلا به کل وقفه آمده حذف میشود
    خب به نظر شما کدوم یک درستره

    مشاهده پاسخ ها (1)
    • مهدی دمیرچیلو

      نویسنده این مطلب

      مهدی دمیرچیلو

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

  10. ِِحسین

    مهمان

    ِِحسین

    با سلام و خسته نباشید
    ارتباط بین آردوینو و متلب

  11. ِِحسین

    مهمان

    ِِحسین

    با سلام و خسته نباشید
    ادامه ی اموزش اتصال اردوینو ومتلب بعد از نصب package ها از سایت متلب را کجا می تونم پیدا کنم؟؟

    مشاهده پاسخ ها (1)
    • مهدی دمیرچیلو

      نویسنده این مطلب

      مهدی دمیرچیلو

      سلام- تو سایتای خارجی سرچ کن – آموزششو پیدا میکنی.

  12. Jamal Sadeghii

    مهمان

    Jamal Sadeghii

    سلام.چطوری میتونم با اینتراپت خارجی جوری استافده کننم که فاصله میان دو چالس رو اندازه بگیره. به این صورت که وقتی مثلا سنسور ir در حالت off بود تا زمانی که دوباره On شد باید زمان رو حاسب کنه.دو دوباره زمانی که off شد تا on شدن بعدی بیاد زمان اون رو هم حساب کنه همینجور تا اخر

    مشاهده پاسخ ها (1)
    • مهدی دمیرچیلو

      نویسنده این مطلب

      مهدی دمیرچیلو

      سلام-خب از تایمر استفاده کن -از توابع millis میتونی استفاده کنی – اگه هم کارت خیلی دقیقه و این توابع دقیق نبودن – میتونی خودت رجیسترهای تایمرو مقدار دهی کنی و …

  13. fateme naseri

    مهمان

    fateme naseri

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

    مشاهده پاسخ ها (1)
    • مهدی دمیرچیلو

      نویسنده این مطلب

      مهدی دمیرچیلو

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

  14. رضا

    مهمان

    رضا

    اجرت با امام زمان(عج) برادر
    دست دردنکنه واقعا از مطالبت فیض میبریم.
    یاعلی

  15. ئ

    مهمان

    ئ

    دوست عزیز
    وقتی کلید رو فشار میدی اردینو همه کارش رو ول میکنه میره تابع وقفه رو انجام میده
    توی پروژه شما چون توی تابع وقفه delay ندارید این مشخص نیست

  16. ياسر

    مهمان

    ياسر

    حاجی دمت گرم . مشکلمو حل کردی خدا مشکلتو حل کنه ! heart

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      حاجی کیه بابا
      ما یه بار رفتیم کربلا – قسطاشو به بابامون ندادیم هنوز laugh

  17. محمد امین

    مهمان

    محمد امین

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

  18. JM

    مهمان

    JM

    بیا عاغا اینم نظر laugh
    انصافا خدا خیرت بده heart

  19. رضا

    مهمان

    رضا

    سلام مجدد مهندس.ببخشید میخواستم بدونم چرا دستور ()tone تو تابع وقفه اجرا نمیشه?؟

  20. رضا

    مهمان

    رضا

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

    مشاهده پاسخ ها (6)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام.نه.تمام دستوراتش

      • رضا

        مهمان

        رضا

        دلیل سوالم اینه که HIGH کردن یه پایه انجام میشه وخط بعدی که دستور tone هست داخل تابع وقفه اجرا نمیشه??

      • رضا

        مهمان

        رضا

        سلام مجدد مهندس.ببخشید میخواستم بدونم چرا دستور ()tone تو تابع وقفه اجرا نمیشه?؟

      • رضا

        مهمان

        رضا

        ?

        • رضا

          مهمان

          رضا

          بیزحمت اینو حذف کنید?

      • رضا

        مهمان

        رضا

        سلام مهندس عزیز.مقاومت پول آپ رو کم انتخاب کنیم مثلا ۱k اشکال نداره؟ و کمترین مقدار مناسب برای مقاومت پول آپ چقدر است؟

  21. علیرضا اهنی

    مهمان

    علیرضا اهنی

    سلام.
    میکرو ATMEGA48P تمام پایه هاش وقفه است.

  22. ABOLFAZL

    مهمان

    ABOLFAZL

    salam khaste nabashid ye soal dashtam mikhastam bedunam tuye mode hallati b qeir az inayi k gofTd vojud nadare
    akhe man b intrrupt ehtiaj daram vali ye meqdar nois dare va motaqaiere man hey kamo ziad mishe

  23. محمد

    مهمان

    محمد

    خیلی با حالی heart

  24. Parham

    مهمان

    Parham

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

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام – باید با رجیستر کار کرده باشی – و از وقفه های ADC استفاده کنی و این که بررسی کن ببین همچین وقته ای که میخوای هستش یا نه – دیتاشیت رو بررسی کن.

  25. امیرمحمد

    مهمان

    امیرمحمد

    سلام من میخوام مسیر یاب بسازم
    بردم هم مگا۲۵۶۰ هستش
    میخواستم بدونم میشه برای دوتا از سنسور ها یه وقفه درست کنم؟

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام – یه چیزی تو این مایه ها.

      attachInterrupt(0, blink, CHANGE);
      attachInterrupt(1, blink, CHANGE);

  26. ناشناس

    مهمان

    ناشناس

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

  27. حمید

    مهمان

    حمید

    سلام
    وقتتون رو زیاد نگیرم
    من از وقفه اینتراپت زیر در شمارش پالس ورودی DUE استفاده میکنم ولی اعداد نمایشی سریال مانیتور مرتب نیستش.مثلا دو تا دو تا یا چند تا چند تا افزایش پیدا میکنن بعضی وقتها هم در اثر ورود پالس تغییر نمیکنن.
    const byte ledPin = 13;
    const byte interruptPin = 53;
    unsigned long sCount =0;
    void setup() {
    Serial.begin(9600);
    pinMode(ledPin, OUTPUT);
    pinMode(interruptPin, INPUT);
    attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
    // attachInterrupt(interruptPin, blink, CHANGE);
    }
    void loop() {
    // digitalWrite(ledPin, state);
    Serial.println(sCount);
    }
    void blink() {
    sCount++;
    }
    (البته مثل اینکه کدهای بالا درست وبا چیدمان صحیح برای شما ارسال نشدن ولی فکر کنم شما متوجه بشین.)
    ولی همین پالسهای وارد شده با برنامه شمارنده کاملا مرتب و بدون اشکال شمرده میشن و توسریال مونیتور هم نمایش داده میشن.
    من احساس میکنم نویز پذیری میکرو در حالت اینتراپت خیلی بیشتر از حالت شمارنده ساده هستش.
    لطفا راهنمایی کنید.
    با تشکر

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام-خازن موازی دکمه کن.
      ۲۰۰ نانویی چیزی

  28. رضا

    مهمان

    رضا

    سلام – میشه این پروژه رو ببندید هر کاری کردم در عمل انجام نمیشه. ممنون
    void setup() {
    pinMode(10 ,OUTPUT);
    pinMode(7 ,OUTPUT);
    attachInterrupt(digitalPinToInterrupt(2), BlinkLed, RISING );
    }
    void loop() {
    digitalWrite(10, 0);
    delay(500);
    digitalWrite(10, 1);
    delay(500);
    }
    void BlinkLed()
    {
    digitalWrite(7, 0);
    delay(200);
    digitalWrite(7, 1);
    delay(300);
    }

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      مشکلی تو کد نمیبینم – شماتیک پروژت رو بده –

  29. رضا

    مهمان

    رضا

    نمونه ای
    به خدا یه دونه ای

  30. kimiyagar

    مهمان

    kimiyagar

    salam.mesl hamishe aaaaaaaliiiiiiii

  31. مهدی

    مهمان

    مهدی

    به عبارت بهتر توضیح بفرمایید: “ایجاد وقفه روی تمام پین های ازاد اردوینو”

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      این مورد تو میکروهای آرم من دیدم – و بعضی میکرو های aVR

  32. مهدی

    مهمان

    مهدی

    سلام. معمولا برای سنجش دور موتور و فن ها از اینتراپت استفاده میشه.
    یه مسئله در مورد اینکه اگه ما مثلا ۱۲ فن داشته باشیم و بخواهیم دور موتور اونا رو مانیتور کنیم باید از ۲ اردو مگا استفاده بشه.
    حالا ایا راهی هست که بشه این ۱۲ فن رو به مگا وصل کنیم و با دستورات پین های اینتراپت رو عوض کنیم؟
    یه دستوری دیدم مرجع فارسی پیدا نکردم
    میشه این توضیح رو به مطالب اضافه نمایید.
    Pin Change Interrupt on Arduino
    If you need more pins, or other physical pins, there is a mechanism to generate an interrupt when any pin is changed in one of the ports of 8 bits. You don’t know which single bit, but only which port. The example below generates an interrupt when one of the ADC0 to ADC5 pins (used as a digital input) is changed. In that case, the interrupt service routine ISR(PCINT1_vect) is called. In the routine you can figure out which of the specific pins within that port it has been.
    First, the Pin Change Interrupt Enable flags have to be set in the PCICR register. These are bits PCIE0, PCIE1 and PCIE2 for the groups of pins PCINT7..0, PCINT14..8 and PCINT23..16 respectively. The individual pins can be enabled or dsiabled in the PCMSK0, PCMSK1 and PCMSK2 registers. In the Arduino circuit, in combination with the Atmel Atmega328 datasheet, you can figure out that the PCINT0 pin corresponds to pin 0 in port B (called PB0). This is pin 14 on the DIL version of the chip and digital pin 8 on the Arduino Uno. Another example is pin A0 on the Arduino board, which can be used as a digital input like in the example below. It is pin 23 on the Atmega328 (DIL version) which is called ADC0. The datasheet shows that it is PCINT8 which means it is part of PCINT14..8 and therefore enabled by the bit PCIE1 in PCICR.
    void setup()
    {
    Serial.begin(9600);
    Serial.println(“Boe”);
    InitialiseIO();
    InitialiseInterrupt();
    }
    void loop() {
    /* Nothing to do: the program jumps automatically to Interrupt Service Routine “blink”
    in case of a hardware interrupt */
    }
    void InitialiseIO(){
    pinMode(A0, INPUT); // Pin A0 is input to which a switch is connected
    digitalWrite(A0, HIGH); // Configure internal pull-up resistor
    pinMode(A1, INPUT); // Pin A1 is input to which a switch is connected
    digitalWrite(A1, HIGH); // Configure internal pull-up resistor
    pinMode(A2, INPUT); // Pin A2 is input to which a switch is connected
    digitalWrite(A2, HIGH); // Configure internal pull-up resistor
    }
    void InitialiseInterrupt(){
    cli(); // switch interrupts off while messing with their settings
    PCICR =0x02; // Enable PCINT1 interrupt
    PCMSK1 = 0b00000111;
    sei(); // turn interrupts back on
    }
    ISR(PCINT1_vect) { // Interrupt service routine. Every single PCINT8..14 (=ADC0..5) change
    // will generate an interrupt: but this will always be the same interrupt routine
    if (digitalRead(A0)==0) Serial.println(“A0”);
    if (digitalRead(A1)==0) Serial.println(“A1”);
    if (digitalRead(A2)==0) Serial.println(“A2”);
    }
    اینم ادرسش
    http://www.geertlangereis.nl/Electronics/Pin_Change_Interrupts/PinChange_en.html

  33. سعید

    مهمان

    سعید

    یه دونه باشی. مطالب عالین

  34. علی

    مهمان

    علی

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

  35. mohammad

    مهمان

    mohammad

    سلام خط 30 تا 33 رو نفهمیدم میشه توضیح بدی

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      MyDelay : تابع ساخت زمان میلی ثانیه.

  36. محمد

    مهمان

    محمد

    سلام.من یک ماژول rfid دارم که به esp وصلش کردم و با esp یک وب سرور راه انداری کردم بطوریکه با نزدیک کردن کارت به ماژول rfid شماره کارت برای وب ارسال میشه و نمایش داده میشه.اما دوتا مشکل دارم:
    1-با هر بار نزدیک کردن کارت به ماژول و رفرش صفحه وب شماره کارت قبلی که در وب نمایش داده میشد پاک میشه و شماره کارت جدید نشون داده میشه،من میخام شماره کارت قبلی پاک نشه و شماره کارت جدید اضافه بشه.
    2-میخام هر بار که کارت رو به ماژول rfid نزدیک میکنم و ماژول شماره کارت رو به esp ارسال میکنه،صفحه وب که شماره کارتو نشون میده خود بخود رفرش بشه و نیاز به رفرش دستی نباشه.
    لطفا راهنماییم کنید.با تشکر.

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      والا با ماژول وای فای کار نکردم

  37. سارا

    مهمان

    سارا

    سلام.من میخوام ی کلیدو روی کیپد بزنم واگه ب مدت 2 دقیقه کلید دگ ای زده نشد ی آلارم بده دستگاهم ولی اگه تو این مدت دو دقیقه ای ی کلید دگ زده شد آلارم دگ روشن نشه . با اینتراپت چ جوری بنویسم.اصن میشه نوشت؟؟؟؟؟ sad

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام-تایمر هم لازم داره

  38. حسین

    مهمان

    حسین

    سلام
    ی سوال خیلی مهم
    میخوام با یک دسته ی بازی یک ربات رو کنترل کنم از طریق دو تا آردوینو که با هم ارتباط بی سیم دارند (از ماژول های زیگ بی استفاده کردم) برای ارتباط دسته با آردوینوی اول آیا میشه یو اس بی دسته رو به یو اس بی آردوینو وصل کرد و داده فرستاد ینی منظورم اینه که از طریق یو اس بی میشه داده فرستاد کلا…… اگه هست از چه کتابخونه ای و چه تابعی. ممنون میشم

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      نمیدونم ولی فک نکنم بشه چون USB میکرو به آی سی FTD232RL وصل هسشت – حالا باز شماتیک میکروت رو ببین – و اون پروتکول کاری اون دسته بازی مد نظرت

  39. حسین

    مهمان

    حسین

    سپاس سپاس سپاس! خیلی کارتون درسته .

  40. majid

    مهمان

    majid

    سلام اردویینو هم مثل کدویژن کدویزارد داره؟؟؟؟

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      نه – چون اصلا با دیچستر ها کاری نداری

  41. majid

    مهمان

    majid

    سلام دمتون گرم سایتتون عالیه
    تواین پروژه کاربرد تابعmydelayرو نفهمیدم اگه میشه توضیح بدین چرا همون delay خودمون رو نزاشتید

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      از delayMicroseconds استفاده شده جون دیلای میلی مشکل ایجاد میکنه تو وقفه

  42. hamid

    مهمان

    hamid

    دمت گرم عالی بود

  43. Ali

    مهمان

    Ali

    سلام من تو یه پروژه از دوتا SRF05 و یک ال سی دی و یه موتور و فتوسل و لامپ استفاده کردم وقتی دوتا SRF05 و ال سی دی فقط کار میکنن مشکلی وجود نداره ولی وقتی لامپ رو با رله ویا موتور رو با درایور جریان به آردویینو وصل می کنم روی ال سی دی چرت و پرت نشون میده چیکار کنم این اتفاق نیفته ؟
    برای تغذیه درایور جریان و SRF05 و موتور و لامپ هم از یه آداپتور5 ولت استفاده کردم (شارژر گوشیم) فکر کنم تا 1000 میلی آمپر هم تحمل میکنه.
    در ضمن چرا ایمیل میزنیم جواب نمیدید؟

  44. امیر

    مهمان

    امیر

    سلام دوباره
    چرا delay تو تابع وقفه اجرا نمیشه؟

    مشاهده پاسخ ها (1)
  45. امیر

    مهمان

    امیر

    سلام
    اگه میکرو وسط برنامه باشه حالا یه وقفه رخ بده و انجام بشه برنامه ادامه کارشو میکنه یا از اول حلقه لوپ اجرا میشه؟

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      تا جایی که من میدونم مورد 1

  46. حسین

    مهمان

    حسین

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

  47. hosein

    مهمان

    hosein

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

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      قبلا به همین مطلب اضافه کردمشون

  48. محمدحسن

    مهمان

    محمدحسن

    سلام برادر
    من این وقفه رو روی uno درست انجام میدم ولی روی due جواب نمیده…سنسور srf05 ک منبعش 5ولت ه.
    چ کنیم؟

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      آردوینو due تمام پایه هاش وقفه میتونن باشن – نمیدونم چرا جواب نمیده
      گوگل

  49. دانیال

    مهمان

    دانیال

    سلام
    ببخشید من یک سوال دارم که خیلی ربطی به این بخش نداره.
    چطور میشه از تایمر کانتر در اردوینو استفاده کرد یعنی برای همین برد uno من میخوام با ide اردوینو برنامه ای بنویسم که مخصوصا از کانتر به صورت مستقیم استفاده کنم. دقیقتر بگم یه کانتر می خوام که با کلاک خارجی و حساس به لبه increament بشه.

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      خب همینو میتونید با وقفه هم درست کنید – و وقفه مد نظرتون رو تعریف کنید و نوح حساستش رو هم همنین طور و بعد داخل تابع وقفه بیاید و ….
      ولی اگه حتما میخواین از تایمر استفاده کنید میتونید مطلب زیر رو بخونید
      http://playground.arduino.cc/Code/Timer1

  50. حسین

    مهمان

    حسین

    اقا ی سوال
    گفتی برا interrupt میشه اسم نزاشت . اونوقت دستوراتمونو کجا مینویسیم ی توضیح میدی

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

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

  51. مملی

    مهمان

    مملی

    عالی عالی جالی قلی خالی

  52. وحید

    مهمان

    وحید

    نظر ندی یه وقت…گناه میشه

  53. وحید

    مهمان

    وحید

    خدا خیرت بده داداش smile

  54. ali

    مهمان

    ali

    اها…..
    مرسی

  55. ali

    مهمان

    ali

    باز یه سوال دیگه….ببخشید مبتدی ام دیگه
    اون روشی که خودم گفتم هم قابل انجامه؟؟؟؟
    یا بهتر بپرسم میشه چند تا میکرو رو به آردوینو وصل کرد؟

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      همون اول اینو گفتم که
      تا جایی که من میدونم میشه
      ولی برا پروژه شما که صنعتی هستش فک نکنم این کار اقتصادی باشه

  56. ali

    مهمان

    ali

    خیلی ممنون

  57. ali

    مهمان

    ali

    دم شما گرم الان میرم میخونم .،..
    آقا حالا یه سوال دیگه غیر از سریال راه دیگه ای برای ارتباط دوتا آردوینو یا آردوینو و میکرو هست؟

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      بله
      مثلا spi
      که آموزشش رو به زودی میزارم

  58. علی

    مهمان

    علی

    آقا سلامٌ علیکم
    اول اینکه دمت گرم سایتت خیلی خوبه شخصا خیلی ازت ممنونم ….
    دوم اینکه آقا مسالهُ…
    من میخوام خروجی تعداد زیادی سنسور رو از جمله التراسونیک و دما و نور رو با یه پردازنده مرکزی پردازش و براساس اون یه سری رله ها رو روشن و خاموش کنم (یه سیستم ساده کنترلیه) در حال حاضر یه آردوینو نانو دارم و پورت کم میارم !!!!!
    به نظر شما چه جوری میتونم این کارو بکنم ؟
    خودم مد نظرم اینه که هر سری سنسور با کارکرد مشابه (مثلا تمام سنسورهای فاصله سنج) رو با یه میکرو راه بندازم و بعد از طریق اون میکرو اطلاعات رو به آردوینو بدم (به این منظور که پورتهای کمتری از آردوینو اشغال بشه) که یه جورایی طراحی ماژولار میشه !!!!اما اینم بلد نیستم O_O
    حالا شما میتونی راهنماییم کنی؟

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      والا بسته به سنسورتون داره…
      مثلا برا سنسور های aDC میشه از آی سی های کسترش دهنده استفاده رد که آموزششون تو سایت هم هستش
      ولی اگه خیلی خیلی پایه کم میاریم و حتما باس از NANO استفاده کنید میتونید از ۲ تا نانو استفاده کنید و بینشون ارتباط برقرار کنید.
      رله ها رو هم همینطور…مثل سنسور های aDC …. میشه از آی سی های کسترش دهنده استفاده کرد که تو تابلو روان(وطالبش تو سایت هستش) ازش استفاده کردم و میتونید برید بخونید
      امری بود در خدمتیم

  59. ziaee

    مهمان

    ziaee

    سلام
    میشه یک مثال ه راجع به تابع detachInterrupt بنویسید.

    مشاهده پاسخ ها (1)
  60. ziaee

    مهمان

    ziaee

    سلام
    دستتون درد نکنه
    میشه لطفا جلسه بعدی رو زودتر بذارید؟
    من خیلی لازم دارم که در مورد توابع
    NoInterrupts();
    Interrupts();
    بدونم.

    مشاهده پاسخ ها (2)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      یه چیز تو مایه های
      غیر فعال کردن لحظه ای(برای اجرای کد های خاص) و فعال کردن
      اگه وسط اجرای کد های خاص وقفه رخ بده وای میسته برنامه تا کد های خاص تموم بشه کارشون و بعد کد های تابع وقفه اجرا میشه
      OK?

      • مهدی دمرچیلو

        نویسنده این مطلب

        مهدی دمرچیلو

        جلسه بعدی با وقفه؟

  61. saman

    مهمان

    saman

    واقعا مطالب سایتتون عالیه

  62. f@eze

    مهمان

    f@eze

    سلام
    آقای دمر چیلو منتظره بقیه جلساتتون هم هستیم.
    کی میزارین ان شا الله؟
    ممنون بابت همه توضیحاته سرجمع و جامع و روانتون.
    good

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      اینترنت ندارم….تحریم شدم laugh
      مجبورم قاچاقی اینترنت استفاده کنم dash

  63. Hodrin

    مهمان

    Hodrin

    salam
    ye soal dashtam
    mikhastam bebinam ba arduino chetori mishe ke ye adado too lcd chap kard
    yani manzooram iine ba codevision az tabe itoa az ketabkhoone stdlib.h estefade mikonim
    too arduino bayad az chi estefade konim

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      تو مطلب lcd با arduino توضیح دادم

  64. مهرداد

    مهمان

    مهرداد

    دستتون درد نکنه

  65. Hodrin

    مهمان

    Hodrin

    سلام
    مثل همیشه عالی
    یه سوال داشتم میخواستم بدونم تابع های
    noInterrupts();
    interrupts();
    ربطی به اینتراپت خارجی دارن؟
    یا اگه نه این ۲تا تابع رو یه توضیح بدید
    ممنون heart

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      جلسه بعد توضیحشون میدم.

  66. حمید

    مهمان

    حمید

    دم شما گرم

  67. محمد

    مهمان

    محمد

    مرسی / مفید بود / تشکر smile

  68. مهرداد

    مهمان

    مهرداد

    سلام
    در بردهای نانو کدام پایه ها وقفه هستند؟
    ممنون

    مشاهده پاسخ ها (2)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      در سایت آردوینو چیزی ذکر نکرده بودن ولی میتونی میکروی روی برد نانو که فک کنم باس ۱۶۸-mega328 باشه رو نگاه کنی
      ولی یه سرچی که کردم مثل این که مثل uno هستش….پایه ۲ و ۳
      خواستی لینک زیر رو ببین…شاید اشتب کرده باشم
      http://playground.arduino.cc/Code/Interrupts

      • Sina

        مهمان

        Sina

        سلام و خسته نباشید بنده یک مدار دیمر دیجیتال با آردوینو نانو درست کردم اما به هیچ وجه کار نمیده
        مدار و دستورات آردوینو هم از این سایت گرفتم
        ***
        لطفا اگه این مدار یا دستورات و یا برد آردوینویی که انتخاب کردم مشکل داره بهم بگید تا مشکلش را برطرف کنم ممنونم از سایت خوب و عالیتون…