Pardon Me?

Check out this tutorial about Processor Interrupts with Arduino.

Favorited Favorite 0

Today we have a new tutorial all about Processor Interrupts with Arduino. First, let's talk a little bit about what an "interrupt" is. No, it's not the guy from down the hall who comes in your office every five minutes to chat. Rather, an interrupt in this context describes when a processor is performing its normal program while waiting for some kind of event - or an "interrupt." It could be the push of a button, the presence of a certain level of ambient light, or any number of disruptive-type things.

In this tutorial from SparkFun Engineer Jordan, he explains the basics of using an interrupt function, what the benefits are, and provides some sample code so you can start playing around with interrupts on your own. Check out the tutorial for more information!

Comments 25 comments

  • Yvan256 / about 12 years ago / 3

    Completely off-topic, but could you guys change the font/size of the main text above to be the same as the comments?

    • Hey now that you mention it, yeah it does look kinda weird.. just the news section has a serif font, the rest of the site is sans

    • BB / about 12 years ago / 1

      I dunno, I like that Georgia font they're using for the news/articles. The Arial font in the comments section isn't even designed for screen media. Verdana would probably be a better choice than Arial. I also like how the font color in the article text is a darker shade of gray.

  • OrionBot / about 12 years ago / 3

    Would you mind creating a similat tutirial for Picaxe?

    • Jamster / about 12 years ago / 1

      See manual 2 page 215 for more info, also try searching the forum for interrupts - it's a topic that is likley to have had a tutorial written about.

    • OrionBot / about 12 years ago / 1

      Sorry "tutorial"

  • NotDavid4JustDavid / about 12 years ago / 1

    "Never interrupt me when I'm trying to interrupt you." -- Winston Churchill

    Seems appropriate.....

  • dustinandrews / about 12 years ago / 1

    Neat. Coincidentally I just checked some code into Github for Ardunio Mega that controls 3 steppers (Via EasyDrivers I got from Sparkfun) from 3 analog inputs using a TIMER3 interrupt.

  • btechstudent / about 12 years ago / 1

    please help me,in which terminals of MQ-6 gas sensor we have to connect Vcc,output,ground?

  • Oladon / about 12 years ago / 1

    So wait... will there be a follow-up post tomorrow to tell us what to do about the other kind of interrupt?

  • Member #136454 / about 12 years ago / 1

    How does the interrupts priority work on Arduino? For exemple, if the Arduino is treating interrupt 0, and an event on interrupt 1 occurs, what happens? Another issue is that the function "delay()" doesn�t work inside an interrupt but the millis() works, so the priority of an interruption for counting millis is higher than priority for interrupts 0 & 1 and takes place even if Arduino is executing an interruption 0 or 1 code!!!

    • ThorntonDan / about 12 years ago * / 1

      Usually in the body of an interrupt the code disable interrupts globally and then when the interrupt exits re-enables those interrupts. This is my experience from using straight C with AVR-GCC and not Arduino code but I would be very surprised if it worked any other way.

      Also, delay makes use of a timer interrupt so I suspect other interrupts are disabled until the delay finished. See SEI and CLI in the avr-gcc documentation.

      • Now when I have an interrupt routine usually at the beginning I call a CLI and at the end I call SEI. Are you saying this is not needed? I never did fully understand the implementation of multiple interrupts.

        • ThorntonDan / about 12 years ago / 1

          Check your documentation. I know that avr-gcc libraries do this automatically (although you can make a naked ISR routine that doesn't).

          • Member #136454 / about 12 years ago / 1

            I checked and, for ATMEGA328, when an interrupt occurs all other are disabled when the interrupt code is been executed and enable on the return of the interrupt (RET) automatically. If you need that a higher priority interrupt occurs inside another one with lower priority, you must enable manually the higher priority interrupt inside the lower interrupt priority code. The millis() function, I believe, is builded on this way, because it works inside a code for the interrupt 0 for example like this code (debouncing) posted at

      • sgrace / about 12 years ago / 1

        Correct, many companies have different ways of handling it, but Atmel chose to disable any interrupts from occurring when it is processing one. However, if you need to keep all the interrupts working, you do need to enable them again in the interrupt function. So in this case, what happens when a higher priority interrupt occurs? Well, most interrupts occur in stacks, so the MCU should pause the current interrupt do the higher priority one, and then go back to the one it was processing. There are a lot of articles around interrupt prioritization and handling on CPUs and MCUs.

        I am not totally familiar with what delay() and millis() contain, but when writing pure C code, to handle delay you basically run a for-loop with a NOP instruction. Basically, you're polling nothing for a finite time.

        • ThorntonDan / about 12 years ago / 1

          I am fairly certain that delay() uses timer1 and disables other interrupts so as to not miss the timed event. This is why I am avoiding Arduino for my lasertag project, I didn't want the library to get in my way for timing critical problems.

  • DrPhibes / about 12 years ago * / 1

    An Arduino interrupt is so easy to implement. I have been working with PICs for years and they are, at the very least, painful.

    • MikeGrusin / about 12 years ago / 5

      Well, Arduino makes everything easy. ;) It's a bit more work on a bare AVR. I always rather liked the PICs interrupt architecture.

    • sgrace / about 12 years ago / 2

      You know another platform that was painful on using? Freescale's HC11's. Luckily they provided header files to help, but it was still painful to basically instantiate the interrupt 3 times in the course of the code. Luckily with the S12 and Code Warrior, it is super simple.

      • Jai / about 12 years ago / 1

        OMG i had to use the HC12 in school on the "dragon12" board. my instructor actually had to write his own header files to be able to use the stupid thing. also needed of board power supply for servos. it was ugly and cannabilised as soon as i graduated for headers and the LCD.

Related Posts

Recent Posts

2 Open 2 Sauce


All Tags