Sledovanie externých prerušení

Zápisník experimentátora

Externé prerušenie sa môže hodiť na sledovanie pomaly sa meniacich signálov. Napríklad na otestovanie zákmitov na tlačidlách. Napísal som dva programy, ktoré sa na toto sledovanie hodia.

Externé prerušenie

Arduino Uno má dva piny, na ktorých je schopné spracovávať externé prerušenia. Oba piny fungujú rovnako. Máme k dispozícii funkciu, pomocou ktorej je možné pripojiť funkciu, ktorá bude obsluhovať prerušenie. Možno nastaviť, pri akej zmene logických úrovní sa má obsluha prerušenia zavolať.

const int type=RISING;

void setup() {
// pin 2
attachInterrupt(0,int0,type);
}

Obsluhu prerušenia je vhodné mať čo najkratšiu, preto sa používa napríklad takáto signalizácia do hlavného programu, kde sa riešia všetky následné činnosti, ktoré vyplývajú zo vzniku prerušenia. Nutnosťou je používania modifikátora volatile, ktorý zabezpečuje, že kompilátor nebude optimalizovať premennú do registra.

V tomto kóde sa iba pri každom prerušení pripočíta jednotka do premennej t0. Zobrazenie informácie užívateľovi je potom vykonávané v hlavnom kóde programu vo funkcii loop.

volatile boolean signal0=false;
volatile int32_t t0=0;

void int0() {
t0++;
signal0=true;
}

V oboch programoch sa zobrazenie informácie líši. Alebo sa len v jednoduchšom prípade odošle na sériový port, alebo sa zobrazí na displeji Nokia 5110.

volatile boolean signal0=false;
volatile int32_t t0=0;

void loop() {
if(signal0)
  {
  Serial.print(millis());
  Serial.print(" ");
  Serial.println(t0);
  signal0=false;  
  }
delay(100);
}

GitHub

Na GitHub som umiestnil oba vzorové programy.

Vhodnosť použitia

Tento kód je optimalizovaný pre pomaly sa meniace signály. Napríklad sa dajú pomocou neho sledovať:

Pokiaľ sa signál nemení, vidíte na displeji poslednú hodnotu premennej t0. Akonáhle vznikne prerušenie, t0 postupne rastie. Potom sa odošle informácia užívateľovi a ten vidí, či došlo ku zmene len o jednotku (napríklad pri kapacitných senzoroch), alebo o viac, čo sa bežne deje pri tlačidlách, alebo aj senzoroch vibrácií.


09.05.2016


Menu