Прерывания на Ардуино-платформе

Прерывания на Ардуино-платформе

В данной статье разъясним, что такое аппаратные прерывания и как они важны при разработке устройств на платформе ардуино. Итак, что такое прерывание?

Прерывание — способ сигнализации микропроцессору, что что-то произошло. Однако вы можете сказать, что тоже самое происходит при использовании цифровых входов, но это не совсем так. При подаче сигнала на цифровой вход, микропроцессор считывает код и затем действует в соответствии с ним, т.е. выполняет тот участок программы, который соответствует сигналу на цифровом входе.

 

Прерывания на Ардуино-платформе

 

В зависимости от сложности подпрограмм и продолжительности изменения состояния цифрового входа вполне возможна ситуация, что контроллер не заметит изменения состояния входа.

При использовании прерывания, выполняемая программа буквально прерывается, и контроллер переключается на выполнение иного участка кода программы, а после выполнения его вновь возвращается к тому месту программы, на котором остановился. Изменение состояния на входе не «пропускается».

Чем полезны прерывания? Прерывания могут помочь решить временные проблемы, которые могут возникнуть в вашей установке (программное/аппаратное обеспечение). Вы, возможно, уже сталкивались с проблемами синхронизации и задавались вопросом: «Почему не зажигается светодиод?» или «Он работал в последний раз, когда я запускал его. Какая разница? Делаю тоже самое»

 

Getting Down To Business

I am using the Arduino Duemilanove Board for this example, and will be using the Release 18 of the development IDE. This can be downloaded directly from Arduino.cc.

If you are using a different type of Arduino Board, you will need to check out the specs to see which pins are which, as the different types of board can have different allocations and numbers of interrupts/digital pins/analog pins, etc.

On the Duemilanove, there are 2 hardware interrupts available. These are located on Digital Pins 2 and 3. In this demo, we will use Pin 2, and also use Digital Pin 4 as an output to control an LED. The schematic for this is shown below:

Standard Digital Input and Output – No Interrupts

Set up the Arduino as per the schematic and upload the code below to the microprocessor. Here you read the value of an input, do a conditional comparison, run some lengthy routine and repeat.

This will give unpredictable outputs on the LED due to the lengthy process being at an undetermined point in relation to when the input button is triggered. Sometimes the LED will change state immediately, other times nothing happens, and then sometimes you need to hold the button for a while for the state changed to be recognised. [This is code PART A in the downloaded source file.]

Hide   Copy Code

Making Use of Interrupts

We will use the same schematic diagram and modify the code to make use of hardware interrupts. Now when you upload the code, the LED changes state whenever the button is pressed even though the code is still running the same long delay in the main loop. [This is code PART B in the downloaded source file.]

Hide   Copy Code


Прерывания на Ардуино-платформе

TheattachInterrupt(param1, param2, param3)requires 3 parameters, these are;

  • param1 = Which interrupt to listen for. This is the Interrupt Number not the Digital In number
  • param2 = Which code function to call, this must be a method that takes no parameters and returns no value.
  • param3 = Which condition to watch for.

The Arduino can listen for 4 types of condition changes. These are:

  • LOW = The input is at aLOW state
  • RISING = The input state changes fromLOW toHIGH
  • FALLING = The input state changes fromHIGH toLOW
  • CHANGE = The input state changed fromHIGH toLOW orLOW toHIGH, i.e. has changed its state

Отправить ответ

Уведомлять, если есть
avatar