Understanding Arduino Interrupts | Hardware, Pin Change & Timer Interrupts

Поділитися
Вставка
  • Опубліковано 5 лип 2024
  • Learn to use Hardware, Pin Change and Timer Interrupts with the Arduino Uno.
    Article with code: dronebotworkshop.com/interrupts
    More articles and tutorials: dronebotworkshop.com
    Join the conversation on the forum: forum.dronebotworkshop.com
    Subscribe to the newsletter and stay in touch: dronebotworkshop.com/subscribe/
    Today we are working with a fundamental programming concept, the use of Interrupts.
    Now, this certainly isn't the first time we have worked with interrupts, we have used Hardware Interrupts in several previous videos. But we have never taken a deep dive into the subject, and as it is a very important concept, I feel it's time that we did!
    Plus, Hardware Interrupts are just one of three types of interrupts supported by the Arduino. So we also should take a look at Pin Change and Timer Interrupts as well.
    We are working with an Arduino Uno today, but the concepts we are discussing are applicable to just about any microcontroller.
    Interrupts can help you make more responsive user interfaces, perform timed operations, or just write better and more efficient code.
    Here is the Table of Contents for today's video:
    00:00 - Introduction
    01:51 - No Interrupt Demo
    07:02 - Hardware Interrupts
    19:51 - Pin Change Interrupts
    37:22 - Timer Interrupts
    46:21 - Conclusion
    Hopefully the video and its associated article will prove to be a good resource as you work to improve your code with interrupts.
    Bill
  • Навчання та стиль

КОМЕНТАРІ • 148

  • @Dronebotworkshop
    @Dronebotworkshop  5 місяців тому +9

    Hi everyone - It's come to my attention that there has been someone masquerading as myself, responding to some comments here with a link to a Telegram chat to win a prize from me. THIS IS A SCAM, I am not holding a contest, nor do I have a Telegram account. PLEASE DO NOT RESPOND TO THESE MESSAGES!!
    It's happening on a lot of my videos, I'm taking steps to remove them manually, but as I have 162 videos, it will take some time. If you do run across a suspicious comment, I would appreciate you letting me know at info@dronebotworkshop.com.
    Thanks!
    Bill (The real one!)

  • @wipoute
    @wipoute 2 роки тому +178

    He interrupted his own presentation to make a point about interrupts while asking for audience subscription. This guy is a genius 👏

    • @JustaReadingguy
      @JustaReadingguy 2 роки тому +5

      Yea, I laughed

    • @user-mr3mf8lo7y
      @user-mr3mf8lo7y 2 роки тому +3

      He actually is. Did that to let you guys memorize the concept next time around.

    • @JeffAPierson
      @JeffAPierson Рік тому +4

      he is playing 4D Interrupts, he is on a different level of interrupts ;)

    • @sketchypoodle1236
      @sketchypoodle1236 10 місяців тому

      All I wanted was a Pepsi.

    • @evonite841
      @evonite841 3 місяці тому

      I actually subscribed lol

  • @thorntontarr2894
    @thorntontarr2894 Рік тому +14

    As a seasoned user of interrupts, this video is outstanding to overcome the fear many users have regarding the use of interrupts. You have done a great service with this video.

  • @rahuls7039
    @rahuls7039 2 роки тому +10

    I believe that this video is one of the most well-described video on interrupts. The best part is that it contains crisp and clear information. Thank you for uploading this. Your videos are a blessing to the developer community.
    I wish I had access to this resource a bit earlier.

  • @mua7573
    @mua7573 2 роки тому +8

    the timing is incredible! was just in the procces of researching about interrupts xD Thanks for this tutorial!

    • @nodrug2
      @nodrug2 2 роки тому +1

      Yes sorry to interrupt you but I agree the timing was incredible! ;)

  • @pellechi1
    @pellechi1 2 роки тому +15

    This lesson was crystal clear! Nicely done …

  • @sinjhguddu4974
    @sinjhguddu4974 2 роки тому +9

    What an elegant illustration and beautifully laid out segment. Thank you.

  • @anonymous.youtuber
    @anonymous.youtuber 2 роки тому +6

    The concept of interrupts brilliantly explained. Kudos !

  • @tubeDude48
    @tubeDude48 2 роки тому +4

    At 21 minutes, this got really interesting. Well done, Bill.

  • @philgo2024
    @philgo2024 2 роки тому +3

    Thank you from France for all your so clear videos !

  • @erikpeterson1989
    @erikpeterson1989 2 роки тому +6

    Really enjoyed this! Crisp, straightforward, and elegant tutorial!

  • @nodrug2
    @nodrug2 2 роки тому +3

    As usual another easy to understand tutorial, you make things soooo much easier.

  • @mrcurly1147
    @mrcurly1147 2 роки тому +6

    Perfect timing - I'm just starting to work with these handy things. Thank you for sharing your knowledge.

  • @GLH8
    @GLH8 2 місяці тому

    Thanks once again!
    After scratching my head for an hour trying to get my interrupt to work, you explained the issue and solution clearly. I was able to fix it first attempt!

  • @denouch358
    @denouch358 7 місяців тому

    I just started playing with an Arduino and stumbled onto your channel. You are a very good presenter and have tons of good info. Thank you for sharing.

  • @seankayll9017
    @seankayll9017 2 роки тому +3

    Last time a piano fell on my head I was actually reaching for my car's fire extinguisher. So there. Great video as always!

  • @justaguy7172
    @justaguy7172 2 роки тому +2

    Great video with excellent technical information presented in an easily-understood manner.

  • @akanda3642
    @akanda3642 5 місяців тому +2

    There is an error in code in timer interrupt section. Program works by accident because 31249 is around half of scope. In ISR(TIMER1_COMPA_vect) TCNT1 needs to be set to 0 so it can start counting from the start and in setup part TCNT1 also needs to be 0 but we need to put timer1_compare_match in OCR1A because OCR1A is the value timer TCNT1 compare.
    Thanks for the video, it goes really deep into the subject. It's very useful.

  • @joshchen2818
    @joshchen2818 2 роки тому +4

    just learning interrupt and the video popup. like it

  • @TheDickw
    @TheDickw Рік тому +1

    Beautiful Description. What an amazing amount of work you put into it. Thanks very much.

  • @projardgreen2568
    @projardgreen2568 Рік тому

    The problem given to introduce Interruptions was GENIUS. I have a channel of my own, but I'm just a Mechatronics Technition (from Portugal, though born in USA). My knowladge on the Arduino is in great part, thanks to your videos that are, I'd say, absolutly EYE OPENING to anyone dealing with Arduino.

  • @rarespopa6648
    @rarespopa6648 2 роки тому

    dude,you are the goat of arduino I don't know what i would do without you

  • @studiochefson3573
    @studiochefson3573 2 роки тому +1

    Loved this one! (also loved previous videos). VERY interresting. Thank you very much

  • @TheUnofficialMaker
    @TheUnofficialMaker 11 місяців тому

    playing with the code, what joy! BTW your written guides are AWESOME.

  • @mhegyi2
    @mhegyi2 2 роки тому

    I was just designing a project that takes button input to change temperature up or down. The first part exactly spelled out my first attempt. This is so helpful! Thank you! Now back to work…

  • @kwasmich
    @kwasmich 2 роки тому +33

    In your timer interrupt example I think you actually want to used CTC mode instead of Normal mode. In CTC the register TCNT1 counts from 0 to OCR1A, triggers the compare interrupt and resets the counter TCNT1 to 0 automatically. - You are using Normal mode where TCNT1 normally counts from 0 and overflows at 65535. By setting TCNT1 to a different value you change the duration before the overflow occurs. Since you are not setting the Output Compare Register (OCR1A) it is set to its initial value 0. Hence you have the output compare match interrupt right after the overflow interrupt. And in that interrupt handler you again set TCNT1 to the predefined value. - Since your timer1_compare_match value is pretty close to the middle value of 32768 it is hard to tell the difference if you are counting up from 0 to X or from X to 65535. But it makes a difference in the timing.

  • @ventasti2742
    @ventasti2742 Рік тому

    Thank you Bill, you have a fine way of explaining things.

  • @PhG1961
    @PhG1961 2 роки тому +1

    Outstanding video ! Many thanks for this awesome UA-cam channel !

  • @TonySwitzerland
    @TonySwitzerland 2 роки тому +1

    I like the way you explain things!

  • @nara49veera12
    @nara49veera12 6 місяців тому

    Good compilation of all interrupts in Arduino!

  • @powersprouter
    @powersprouter Рік тому

    thank you. best explanation I've found for hardware interrupts.

  • @highwaytohelles4561
    @highwaytohelles4561 2 роки тому +2

    You sir, have just earned yourself a subscription!

  • @usefulelectronics
    @usefulelectronics 2 роки тому +1

    Nice tutorial!!. I am not one of Arduino fans but this tutorial is quit informative and gives good understanding about interrupts

  • @carlosbah4623
    @carlosbah4623 Рік тому

    A really instructive channel, everything very well explained in detail. Subscribed!
    ¡Gracias por compartir!

  • @CeheLvideo
    @CeheLvideo 2 роки тому +1

    kilohertz kHz kilo k km kilomètres
    One of my old teachers corrected me every time I put a K for kilo
    But, I like very much your videos. You make a great job. Thank you for your videos. Take care.

  • @derekloudon8731
    @derekloudon8731 2 роки тому +1

    A very useful video, thank you!

  • @inlywang8157
    @inlywang8157 2 роки тому

    As always informative, a good and different perspective

  • @JLCPCB
    @JLCPCB 2 роки тому +1

    Great video as always!

  • @andrewhollenbach7330
    @andrewhollenbach7330 2 роки тому +1

    Another great topic!

  • @UsefulTechStuff
    @UsefulTechStuff 2 роки тому

    Excellent video, as always. Thank you.

  • @nanolabhamlinux
    @nanolabhamlinux 7 місяців тому

    Thanks! answered a lot of questions I had!

  • @Max_Mustermann
    @Max_Mustermann Рік тому

    Thank you. This video was very helpful.

  • @MyVideoCollection
    @MyVideoCollection Рік тому

    quite a thorough and excellent explanation. I found timer interrupts a bit more confusing, but I get it.

  • @jassimjaved3309
    @jassimjaved3309 Рік тому

    Excellent video! Thank you so much!

  • @richardp1962
    @richardp1962 3 місяці тому

    Awesome video and clear explanations. You must have been a teacher in a previous life.
    I’m new to the Arduino world but not to software development. The first videos i saw on the Arduino programming environment seemed a bit strange to have everything coded in an infinite loop() method. Using interrupts makes a lot more sense to me
    Thanks again.

  • @antonioastorino7488
    @antonioastorino7488 3 місяці тому

    Thank you for this amazing video. It's nice to see how to handle things using registers before taking the shortcut of using a library :)

  • @braddixon3338
    @braddixon3338 2 роки тому +5

    You sir are a wealth of information! This is a very good video describing all kinds of details around the various interrupts and how to change them as desired. Where do you learn all this stuff from (the various interrupts and how to set them)? Yes, I'm subscribed, notifications turned on, and you have my email for the news letter, a true fan ;-)

  • @FreLuZi
    @FreLuZi Рік тому

    Great Video, helped a lot!

  • @bluehornet6752
    @bluehornet6752 Рік тому

    Brilliant presentation. Don't forget to mark your timer1_compare_match variable as "volatile" though, at 42:26 in the timeline.

  • @nedstar7378
    @nedstar7378 Рік тому

    Excellent information thanks for sharing

  • @TYGAMatt
    @TYGAMatt 2 роки тому +2

    The timers on the AVR chips are great. I try to use them as often as I can. They are reliable and accurate. However, It takes a fair bit of reading through the datasheets to take full advantage of them.

  • @henkoegema6390
    @henkoegema6390 Рік тому

    Thanks for interesting video. 👏

  • @JohnJTraston
    @JohnJTraston Рік тому +2

    You can still use (call) millis() withing ISR for debouncing. It can be used to get time delta between ISR calls but not to measure any time deltas within the same ISR. Since what millis() returns is only updated by the timer ISR. Given that all ISR should be super small and fast that's not a problem.

  • @stevegelnett4469
    @stevegelnett4469 Рік тому

    This is a good video.

  • @tirthvora5061
    @tirthvora5061 2 роки тому +1

    nice and knowledgeable

  • @joelrcha3368
    @joelrcha3368 2 роки тому +1

    Great vídeo

  • @johnkeeling5629
    @johnkeeling5629 2 роки тому +3

    Thanks!

    • @Dronebotworkshop
      @Dronebotworkshop  2 роки тому

      John, thank you so much, and my apologies for taking so long to respond - still learning how this "Super Thanks" thing works. I appreciate your generosity.

  • @321jimh
    @321jimh 2 роки тому +1

    Thank you, thank you !!! Jim : )

  • @doug3458
    @doug3458 Рік тому

    Thank you for introducing the PinChangeInterrupt library, I was wondering how I was going to implement lots of interrupts on the Mega2560. It might be worth mentioning that the library gives options for interrupting on high's or low's, as well as change.

  • @stevenheynderickx583
    @stevenheynderickx583 Рік тому

    Hi, wanted to say that I think your tutorials are very good. Thank you very much for putting them up. Please keep doing this. I learned a lot today!

  • @alokbiswas8183
    @alokbiswas8183 2 роки тому +2

    Thank you for vedio

  • @aminehteshami3781
    @aminehteshami3781 2 роки тому

    Thanks for great content and Please make videos about assembly codes

  • @GiC7
    @GiC7 2 роки тому +1

    Thanks

  • @lets_go_brandon99
    @lets_go_brandon99 2 роки тому

    Hi, Bill. Thanks for all the work that you put in this channel. Could you please make a video about charging batteries of a project with (mini) solar panel? Something like the Spirit and Opportunity Mars rovers.

  • @74862
    @74862 2 роки тому

    Id love to see a workshop tour. Judging from the backdrop your workshop looks nice

  • @aziza.bootwala5015
    @aziza.bootwala5015 Рік тому

    Hello Bill,
    The video is great as always, and I never tend to miss another one. I have a question which I need to ask you about the ISR , since the interrupt has occurred because of the switch, do we need to read it again while we are inside the ISR? KEEP UP THE GOOD WORK👍, BEST OF LUCK.

  • @williamkennedy3837
    @williamkennedy3837 5 місяців тому

    Your videos seem well thought out and have the info I am looking to find. I'm midwestern and my ears aren't programmed to filter thru heavy accents. Some may call me names for this but I am too old to reprogram my brain.

  • @bozotheclown935
    @bozotheclown935 2 роки тому +1

    Hey, I have been avoiding IRQ's but you "easy speak" way of looking at it should make it easy.
    Appreciate you work.
    Thanks a lot...
    ==BOZE==

  • @the1spyderryder
    @the1spyderryder Рік тому

    Great video! I am going to build a few amateur VHF and UHF repeater controllers and the interrupt timers are the only way to go but with such short duration timers I will ha e to continue to increment a location in the ISR and test them also in the ISR. I will need a 5 minute transmitter time out timer and a 10 minute ID timer so I will have to build two or three timers all running off timer one peogrammed for one second. "Tick".
    For ID i plan to use an ISD 1820 for id. Either voice or CW id played from the 1820. Suggestions?

  • @lilblackduc7312
    @lilblackduc7312 Рік тому

    Thank you! 🇺🇸 😎👍☕

  • @1yyymmmddd
    @1yyymmmddd 2 роки тому +1

    Great video. It would have probably been worth touching on how to set timer depending on CPU clock speed set up in Arduino IDE.

  • @gregorymccoy6797
    @gregorymccoy6797 2 роки тому

    Great presentation. I'd like to see some esp32 coding for multiprocess coding.

  • @MathPiSG
    @MathPiSG Рік тому

    Great video, as always! If the interrupt is called during the delay, say 2 seconds into the 5 seconds delay, after the interrupt function has finished, does the delay restart (the full 5 sec) or does it continue where it left (the remaining 3 sec)?

  • @markday3145
    @markday3145 2 роки тому +2

    33:00 Try pushing and holding one of the buttons and then pushing the other one. On the second press, I'll bet you'll find that both LEDs toggle. To fix that, you'd have to store the previous state of the input, and only toggle if the input is now low, and was previously high.

  • @jeffhulett4194
    @jeffhulett4194 2 роки тому +1

    what do you use for your animation? really nice.

  • @SchwanaCARDHUT
    @SchwanaCARDHUT Рік тому

    Bravo 👏 👏 merci

  • @boiwithskillz
    @boiwithskillz Рік тому +1

    Please do a video on esp32 interrupts!!

  • @DrRusty5
    @DrRusty5 2 роки тому

    Can you use an interrupt within a State Machine. I have a circuit that waits for a voltage signal, then triggers a Mosfet. The downside is I can't eliminate the delay that I need to keep the Mosfet on, so I have to wait for that delay until the Ardunio goes looking for the voltage in again, to tiegfer the next Mosfet.

  • @RDDTVCEBU
    @RDDTVCEBU 2 роки тому +2

    Shout out Sir

  • @waynel8645
    @waynel8645 2 роки тому +1

    How do you make your schematic drawings, This is an outstanding video, I tried to get programmers at LLNL to use interrupts in PLC's code but my supervisor said I was making the code too difficult. he then gave me the nickle raise. I left his group and had a very successful career in another group. I thanked him.

  • @j1952d
    @j1952d 2 роки тому

    A bit off-topic, but after your short series about using the I2C bus, you said you'd be doing an explanation of the use of multiple bus masters. Did you ever to it? I've searched around, and can't find anything. Cheers, John.

  • @peddlereffects
    @peddlereffects 2 роки тому +1

    I can’t wait for your vide on hardware debouncing - in particular I would love to know if I need a Schmitt trigger for debouncing Arduino or if a simple RC filter is enough.

    • @newburypi
      @newburypi 2 роки тому +2

      RC circuits can be a big problem in electrically noisy environments. Having said that I have successfully used them. You just need to be diligent in your testing.

  • @myidahohomestead.7123
    @myidahohomestead.7123 2 роки тому

    Its a different topic than this video but have you ever used a roboclaw motor driver? I have one I'm trying to run 2 dc motors with. I can make the motors do anything i want in the motion studio for the roboclaw. But when i hook the roboclaw to my arduino with a joystick i can only get the motors to go in one direction. I can make them go fast or slow but they will not reverse no matter what. The roboclaw is rated for 2 motors at 15 amps each.

  • @KhunThomat
    @KhunThomat 2 роки тому

    Anything I need to care about when using a PWM output or the millis() together with timer interrupts?

  • @jgl153
    @jgl153 Рік тому

    This is a great video about interupts, and it fits to my new project. I want to measure wind. The default is, measure 5 seconds (gust period) 24 times (=2min) for wind. So I need a timer for 5 seconds. Thats not possibel for Arduino (max is 4,19 sec). So the first questions is how to prolonge to 5 second. The second question is, even if I setup timer only for 4 seconds, I need a second external interrupt for the anemometer to count the revolutions within the period of 4 (or 5) seconds. What happens if the CPU just is in ISR for timer setting when the external interrupt happens. Or vice versa the external ISR is running and the timer counts down. By the way the external ISR is very short (only count++). Which one is prioritised ? If there is someone who can give me an answer, i would be very thankful.

  • @nileshdharap
    @nileshdharap 2 роки тому +1

    Can you get rid of debounce in ISR by checking again if pin is LOW after some delay, if its a fake one use goto to move at the end of the interrupt.
    ISR(){
    if(digitalRead(pin==LOW)){
    delay(40);
    if(digitalRead(pin==HIGH)){
    goto endOfISR;
    }
    //IsrCode
    endOfISR:
    }
    }

  • @KeithHeilner
    @KeithHeilner Рік тому

    Is there a way to selectively enable and disable interrupts on one pin all while leaving interrupts on other pins enabled? Thanks.

  • @the1spyderryder
    @the1spyderryder Рік тому

    A .1uF across switch will debounce the switch nicely.

  • @brucelau5359
    @brucelau5359 2 роки тому +1

    I like your red Tshirt. Looks energetic lol

  • @ytdemori
    @ytdemori 2 роки тому +2

    Very interesting video, can I ask you which software do you use to create the sketches animations with arduino and all components? Thank you.

  • @gabrieljulioarmandosiagian1921

    if we change the timer1_compare_match_value value, did the delay we created changed too?

  • @cosmoferreri8366
    @cosmoferreri8366 Рік тому

    Hi i built my own flux capacitor from back to the future, with my friends help. We have written a large sketch with 9 sequences. we have the y centre leds (3 strips of 10) and door leds (4 x3) working simutaneously. we are using arduino mega. everything works fine but we are having the problem of the IR remote changing the sequences. i tried incorporating your code, it uploaded fine but didnt make a real difference. happy to show you the code if you could help. thanks

  • @avalonsof3665
    @avalonsof3665 Рік тому

    What if I wanted to use an ultrasonic sensor as an interrupt? Will that work?

  • @dang495
    @dang495 2 роки тому +2

    I'm interested to see how interrupts are used for power saving. E.g. waking from sleep / low power states.

  • @Henrikh2011
    @Henrikh2011 Рік тому

    Tak!

  • @mystreteacher
    @mystreteacher 2 місяці тому

    I'm switch adapting (special needs) a product in which the momentary switch already is programmed to toggle. Simple enough except that I actually do want it to act as a momentary switch. When the adapted switch rises the toy turns on and when the adapted switch falls the toy turns off. The problem that we have is the disabled student will rapidly spam the switch while the state changes occurs. Im definitely working to figure it out (reason why I'm watching this video), but any insight would be appreciated.

  • @davidogundiran4869
    @davidogundiran4869 2 роки тому

    is it possible to make software interupts on the arduino that will all most give the same performance as an hardware interupt

  • @cadillacescalade5428
    @cadillacescalade5428 9 місяців тому

    Hi, There I have a question for you..
    I am in to Arduino model RR and I have a sketch that I did for a RR Crossing an it has a sound file PCM
    That uses timers 1 an 2 an it only holds about 2sec. Of audio. So I use mp3 audio turn it into wav form at 8000Hz an 16000hz but for my bell audio tones an it loops over an over...
    So I re copied my sketch for a single bell tone to stop after the gate has lowered my question is for the sound file that I am using in my sketch what do I need to do to just have the bell run once ? I've been looking at timer 1s an doing some searching but I'm not sure what I need to do. I also use Audacity to transfer my audio into wav files.

  • @RussTanner
    @RussTanner 2 роки тому +2

    The animations for DBW are very well done. What kind of software would you use to do that?

    • @electronics.unmessed
      @electronics.unmessed Рік тому +1

      You can do that with MS PowerPoint

    • @RussTanner
      @RussTanner Рік тому

      @@electronics.unmessed Thanks for the reply. I wonder what software DroneBot uses. I think Apache makes a free package that works somewhat like powerpoint.

    • @electronics.unmessed
      @electronics.unmessed Рік тому

      @@RussTanner I am working with MS PowerPoint 2019. The maximum resolution for movies and pixels seems to be Full HD. Maybe the Apache product can go further to 4k or 8k?

    • @RussTanner
      @RussTanner Рік тому

      @@electronics.unmessed OK Very good. Thanks for the info!

  • @rodrigog666
    @rodrigog666 4 місяці тому

    ¿Qué software de edición de video usas?