Understanding Arduino Interrupts | Hardware, Pin Change & Timer Interrupts

Поделиться
HTML-код
  • Опубликовано: 21 ноя 2024

Комментарии • 158

  • @Dronebotworkshop
    @Dronebotworkshop  9 месяцев назад +15

    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 года назад +190

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

    • @JustaReadingguy
      @JustaReadingguy 2 года назад +6

      Yea, I laughed

    • @user-mr3mf8lo7y
      @user-mr3mf8lo7y 2 года назад +4

      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 Год назад

      All I wanted was a Pepsi.

    • @evonite841
      @evonite841 7 месяцев назад

      I actually subscribed lol

  • @thorntontarr2894
    @thorntontarr2894 Год назад +18

    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 года назад +11

    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.

  • @anonymous.youtuber
    @anonymous.youtuber 2 года назад +8

    The concept of interrupts brilliantly explained. Kudos !

  • @sinjhguddu4974
    @sinjhguddu4974 2 года назад +10

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

  • @philgo2024
    @philgo2024 2 года назад +3

    Thank you from France for all your so clear videos !

  • @pellechi1
    @pellechi1 2 года назад +15

    This lesson was crystal clear! Nicely done …

  • @GLH8
    @GLH8 6 месяцев назад

    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!

  • @tylercgarrison
    @tylercgarrison 4 месяца назад

    Im new to arduinos, got my first one last week and have been doing lots of tinkering. I was initially a little scared of trying to learn about interrupts because I thought it was going to be difficult and complex, but you made it very easy to understand and implement! Great video!

  • @kwasmich
    @kwasmich 2 года назад +34

    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.

  • @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.

  • @mrcurly1147
    @mrcurly1147 2 года назад +7

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

  • @erikpeterson1989
    @erikpeterson1989 2 года назад +6

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

  • @aaandis
    @aaandis 2 месяца назад

    Came here to learn interrupts, I leaned so much more. Thank you!
    Can't wait to implement the knowledge into my heating system automation project with a lot of temperature readings.

  • @tubeDude48
    @tubeDude48 2 года назад +4

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

  • @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! ;)

  • @projardgreen2568
    @projardgreen2568 2 года назад

    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.

  • @denouch358
    @denouch358 Год назад

    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.

  • @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…

  • @akanda3642
    @akanda3642 9 месяцев назад +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.

    • @bobsimmons5274
      @bobsimmons5274 3 месяца назад

      I'm another viewer of this video and I agree... I'm not new to micros but I am new to Arduinos... I've spend several hours this morning trying to get this code to work with slightly different values, to no avail... and yes, it does seem to work "by accident" but the frequency I got is 1/2 Hz, not 2 Hz... the number used in this example ( 31249 ) is in the denominator, so the time per cycle will be doubled... not the frequency. I also note he is reloading the counter registers with the this number, not the compare registers... and somewhere in the narration I noted he was talking as if the counters are counting DOWN... but I suspect the counters are actually counting UP... That "accidentally" makes it work, because the counters will "rollover" to zero, which then will trigger the compare event , since the compare registers are zero... and it still works out to ( almost ) 1/2 Hz... which is what I saw on my scope...( actually 0.523 Hz, if my calcs are correct )
      Otherwise it's a good video, better than most and goes into important details that other videos ignore... but this combination of errors has wasted half a day for me... and maybe others also... pity... glad to see someone else spotted this...

  • @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.

  • @nodrug2
    @nodrug2 2 года назад +3

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

  • @rarespopa6648
    @rarespopa6648 2 года назад

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

  • @joshchen2818
    @joshchen2818 2 года назад +4

    just learning interrupt and the video popup. like it

  • @bluehornet6752
    @bluehornet6752 2 года назад

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

  • @richardp1962
    @richardp1962 7 месяцев назад

    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.

  • @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.

  • @justaguy7172
    @justaguy7172 2 года назад +2

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

  • @nara49veera12
    @nara49veera12 10 месяцев назад

    Good compilation of all interrupts in Arduino!

  • @TheUnofficialMaker
    @TheUnofficialMaker Год назад

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

  • @ventasti2742
    @ventasti2742 Год назад

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

  • @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

  • @PhG1961
    @PhG1961 2 года назад +1

    Outstanding video ! Many thanks for this awesome RUclips channel !

  • @studiochefson3573
    @studiochefson3573 2 года назад +1

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

  • @ChrisWilliams-pu8pj
    @ChrisWilliams-pu8pj 16 дней назад

    Great information. Thank you for your concise explanations!

  • @powersprouter
    @powersprouter 2 года назад

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

  • @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!

  • @JLCPCB
    @JLCPCB 2 года назад +1

    Great video as always!

  • @TonySwitzerland
    @TonySwitzerland 2 года назад +1

    I like the way you explain things!

  • @MyVideoCollection
    @MyVideoCollection Год назад

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

  • @williamkennedy3837
    @williamkennedy3837 10 месяцев назад

    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.

  • @antonioastorino7488
    @antonioastorino7488 8 месяцев назад

    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 :)

  • @doug3458
    @doug3458 2 года назад

    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.

  • @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.

  • @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==

  • @carlosbah4623
    @carlosbah4623 Год назад

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

  • @74862
    @74862 2 года назад

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

  • @derekloudon8731
    @derekloudon8731 2 года назад +1

    A very useful video, thank you!

  • @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 ;-)

  • @inlywang8157
    @inlywang8157 2 года назад

    As always informative, a good and different perspective

  • @andrewhollenbach7330
    @andrewhollenbach7330 2 года назад +1

    Another great topic!

  • @nanolabhamlinux
    @nanolabhamlinux Год назад

    Thanks! answered a lot of questions I had!

  • @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.

  • @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.

  • @Max_Mustermann
    @Max_Mustermann Год назад

    Thank you. This video was very helpful.

  • @dang495
    @dang495 2 года назад +2

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

  • @boiwithskillz
    @boiwithskillz Год назад +1

    Please do a video on esp32 interrupts!!

  • @UsefulTechStuff
    @UsefulTechStuff 2 года назад

    Excellent video, as always. Thank you.

  • @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.

  • @jeffhulett4194
    @jeffhulett4194 2 года назад +1

    what do you use for your animation? really nice.

  • @stevenheynderickx583
    @stevenheynderickx583 2 года назад

    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!

  • @the1spyderryder
    @the1spyderryder 2 года назад

    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?

  • @gregorymccoy6797
    @gregorymccoy6797 2 года назад

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

  • @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.

  • @aminehteshami3781
    @aminehteshami3781 2 года назад

    Thanks for great content and Please make videos about assembly codes

  • @MathPiSG
    @MathPiSG 2 года назад

    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)?

  • @FreLuZi
    @FreLuZi 2 года назад

    Great Video, helped a lot!

  • @aziza.bootwala5015
    @aziza.bootwala5015 2 года назад

    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.

  • @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.

  • @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

  • @IbanezRG1527
    @IbanezRG1527 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.

  • @nedstar7378
    @nedstar7378 Год назад

    Excellent information thanks for sharing

  • @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.

  • @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:
    }
    }

  • @321jimh
    @321jimh 2 года назад +1

    Thank you, thank you !!! Jim : )

  • @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 2 года назад +1

      You can do that with MS PowerPoint

    • @RussTanner
      @RussTanner 2 года назад

      @@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 2 года назад

      @@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 2 года назад

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

  • @sirajabbasi6260
    @sirajabbasi6260 4 месяца назад

    Hi @dronebotworkshop please tell me how will we use different pre scalers for timer interrupts, i want to use 1024 as pre scaler, which reg value should be changed

  • @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.

  • @khomo12
    @khomo12 4 месяца назад

    Great! Thank you!👍👍👍

  • @mystreteacher
    @mystreteacher 7 месяцев назад

    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.

  • @xmandg
    @xmandg Месяц назад

    Dear Author.
    It's truely an amazing tutorial video I ever seen so far. I've learnt to much from it. And I have a situation I met but not be solved:
    - In Uno, I have a loop to read DHT11 data (it takes 2 seconds as usual).
    - In my PC, I read DHT11 data from serial port that Uno send back.
    - Still in my PC, I also control 8 relays connected to Uno via Serial also.
    Now the problem occurs: because I have to delay 2 seconds, sometimes the relay control data cannot be proceeded immediately as I want by Uno (we can call "lag").
    I want to use interrupt in this circumstance, so anytime Uno recieves relay control data from serial, it proceeds immediately then back to read data from DHT11.
    How could I do that? Please help. Thank you so much.

  • @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.

  • @the1spyderryder
    @the1spyderryder 2 года назад

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

  • @tirthvora5061
    @tirthvora5061 2 года назад +1

    nice and knowledgeable

  • @KeithHeilner
    @KeithHeilner 2 года назад

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

  • @joelrcha3368
    @joelrcha3368 2 года назад +1

    Great vídeo

  • @jstro-hobbytech
    @jstro-hobbytech 2 года назад +1

    I loved this channel when I was new. But when someone builds a project after you're a beginner you know how to deal with that using better code. People who love arduino need to learn c++ and read the data sheet. I don't say this to troll, just to help.

  • @KhunThomat
    @KhunThomat 2 года назад

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

  • @IkaKomura
    @IkaKomura 2 года назад +1

    Thanks!

    • @Dronebotworkshop
      @Dronebotworkshop  2 года назад

      Thank you Bernt, and my apologies for taking so long to respond. I'm still learning how to use the Super Thanks feature.

  • @GiC7
    @GiC7 2 года назад +1

    Thanks

  • @RDDTVCEBU
    @RDDTVCEBU 2 года назад +2

    Shout out Sir

  • @stevegelnett4469
    @stevegelnett4469 Год назад

    This is a good video.

  • @Stofftasse
    @Stofftasse 2 года назад +1

    Beim Timer Interrupt gibt es Fehler:
    Im jetzigen Zutand passiert nichts, wenn man timer1_compare_match ändert.
    Nach folgenden Schritten ging es bei mir:
    Zunächst einmal wird OCR1A = timer1_compare_match und nicht TCNT1.
    Zusätzlich muss der CTC mode noch eingeschaltet werden. Es fehlt vor dem setzen des Prescalers TCCR1B |= (1

  • @alokbiswas8183
    @alokbiswas8183 2 года назад +2

    Thank you for vedio

  • @henkoegema6390
    @henkoegema6390 2 года назад

    Thanks for interesting video. 👏

  • @avalonsof3665
    @avalonsof3665 Год назад

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

  • @gabrieljulioarmandosiagian1921
    @gabrieljulioarmandosiagian1921 2 года назад

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

  • @lilblackduc7312
    @lilblackduc7312 Год назад

    Thank you! 🇺🇸 😎👍☕

  • @rodrigog666
    @rodrigog666 9 месяцев назад

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