Interupsi Eksternal pada Arduino Nano ATmega328

Pada Arduino terdapat beberapa mekanisme input di antaranya:

  • input digital dengan fungsi digitalRead()
  • input analog dengan fungsi analogRead()
  • input data serial dengan class Serial, fungsinya di antaranya Serial.read()
  • input digital dengan interupsi melalui fungsi attachInterrupt()

Di antara mekanisme input tersebut, yang mudah dipakai adalah digitalRead() dan analogRead(). Pada tulisan ini dibahas contoh sederhana untuk memakai input interupsi.

Deskripsi perangkat keras:

  • Board prosesor menggunakan Arduino Nano v.3
  • Input dari sebuah switch push button, active low (dihubungkan ke GND)
  • Input dari switch dihubungkan ke pin 2
  • Jumlah penekanan switch dikirim dengan port serial
  • Power supply didapat dari USB

Catatan

  • Pada Arduino Nano hanya pin 2 dan pin 3 saja yang dapat dipakai untuk input interupsi. Pada program ini yang dipakai adalah pin 2.

Cara kerja perangkat lunak

  • Setiap kali switch ditekan, maka pin 2 akan menjadi low
  • Setiap kali pin 2 low, akan muncul interupsi
  • Interupsi menyebabkan fungsi impulse() dipanggil, yang akan menaikkan nilai variabel counter.
  • Pada main loop, isi dari variabel counter dikirim setiap 1 detik.

Berikut ini contoh software yang menggunakan interupsi untuk input.

// ide dari http://www.rhelectronics.net/store/radiation-detector-geiger-counter-diy-kit-second-edition.html
unsigned long counts; //variable for GM Tube events
unsigned long previousMillis; //variable for time measurement

void impulse() { // dipanggil setiap ada sinyal FALLING di pin 2
    counts++;
}

#define LOG_PERIOD 1000  // cetak tiap detik

void setup() { //setup subprocedure
    counts = 0;
    Serial.begin(9600);
    pinMode(2, INPUT);  // tidak perlu sebenarnya, untuk jaga-jaga saja.
    digitalWrite(2, HIGH); // mengaktifkan internal pull up resistor
    attachInterrupt(digitalPinToInterrupt(2), impulse, FALLING); //define external interrupts
    Serial.println("Start counter");
}

void loop() { //main cycle
    unsigned long currentMillis = millis();
    if (currentMillis - previousMillis > LOG_PERIOD) {
        previousMillis = currentMillis;
        Serial.println(counts);
        counts = 0;
    }
}

Pada referensi fungsi attachInterrupt() terdapat contoh program yang menggunakan interupsi, namun di situ belum menggunakan port serial u untuk mengirim data, sehingga hasil penekanan tombol susah diamati.

Berikut ini foto percobaan dengan Arduino Nano dan sebuah switch push button.

Arduino Nano yang dihubungkan ke sebuah switch push button
Arduino Nano yang dihubungkan ke sebuah switch push button

 

Switch push button
Switch push button

Berikut ini contoh data yang dikirim melalui port serial, berisi jumlah penekanan tombol.

Output serial dari program
Output serial dari program

Referensi

Diagram Alir Perangkat Lunak pada Mikroprosesor

Diagram alir (flow chart) adalah salah satu teknik untuk memodelkan perangkat lunak. Pada tulisan ini diuraikan secara ringkas diagram alir pada perangkat lunak desktop, mikroprosesor dengan superloop, mikroprosesor dengan interupsi dan mikroprosesor dengan multitasking.

Diagram alir adalah sebuah diagram dengan simbol-simbol grafis yang menyatakan aliran algoritma atau proses yang menampilkan langkah-langkah yang disimbolkan dalam bentuk kotak, beserta urutannya dengan menghubungkan masing masing langkah tersebut menggunakan tanda panah. Diagram ini bisa memberi solusi selangkah demi selangkah untuk penyelesaian masalah yang ada di dalam proses atau algoritma tersebut

Secara umum diagram alir dipakai untuk melakukan analisis, perancangan, dokumentasi, ataupun manajemen suatu proses atau program dalam berbagai bidang ilmu.

Dalam tulisan ini disajikan penggunaan diagram alir untuk melihat perbedaan antara 3 macam perangkat lunak:

  • Perangkat lunak desktop
  • Perangkat lunak sistem mikroprosesor tanpa sistem operasi
  • Perangkat lunak sistem mikroprosesor dengan sistem operasi

Diagram Alir Perangkat Lunak Desktop

Perangkat lunak desktop yang dibahas di sini maksudnya adalah perangkat lunak yang dijalankan pada suatu sistem operasi (misal Windows / Linux). Perangkat lunak seperti ini dijalankan pada suatu saat dan kemudian selesai pada beberapa waktu kemudian. Jadi pada perangkat lunak ini ada bagian START sebagai permulaan dan ada bagian END yang menyatakan akhir pelaksanaan perangkat lunak tersebut.

Diagram alir perangkat lunak desktop
Diagram alir perangkat lunak desktop

Pada contoh di atas, program melaksanakan 3 buah pekerjaan yaitu Inisialisasi, Proses 1 dan Proses 2, kemudian berhenti. Pekerjaan dapat bermacam-macam, namun intinya adalah ada START di awal dan END di akhirnya.

Contoh perangkat lunak seperti ini misalnya adalah web browser yang anda pakai sekarang (Firefox,Chrome, Internet Explorer, Safari, dsb). Contoh lainnya adalah perangkat lunak command line di Windows maupun Linux.

Diagram Alir Perangkat Lunak Berbasis Super Loop Tanpa Interupsi

Model berikutnya adalah model perangkat lunak yang umum dipakai pada sistem mikroprosesor/mikrokontroler. Pada sistem mikroprosesor perangkat lunak diharapkan untuk berjalan selamanya sampai perangkat tersebut dimatikan atau direset. Ciri diagram alir pada sistem ini adalah ada bagian START namun tidak END, dan ada suatu loop yang dijalankan selamanya. Karena ada loop yang dijalankan selamanya ini, maka arsitektur seperti ini sering disebut sebagai superloop.

Bagian utama software ada 2 yaitu bagian inisialisasi dan proses/pekerjaan. Bagian inisialisasi hanya dilakukan satu kali saja di awal, umumnya untuk melakukan konfigurasi pada sistem mikroprosesor yang digunakan. Contohnya adalah mengaktifkan port-port tertentu sebagai input maupun output, mengatur port serial, mengatur timer/pewaktu, dan lain-lain perangkat di dalam mikroprosesor/mikrokontroler tersebut.

Diagram alir superloop tanpa interupsi
Diagram alir superloop tanpa interupsi

Teknik pembuatan superloop dalam bahasa C umumnya menggunakan loop while(1) {} ataupun for(;;){}.

Diagram Alir Perangkat Lunak Berbasis Super Loop Dengan Interupsi

Model ini adalah perkembangan dari model sebelumnya. Perbedaannya adalah pada perangkat lunak ini ada fungsi / subroutine yang bertugas menangani adanya interupsi. Software untuk menangani interupsi ini sering disebut juga sebagai Interrupt Service Routine (ISR).

ISR ini berjalan seolah-olah tidak tergantung pada diagram alir utama, sehingga untuk memodelkan perangkat lunak ISR kita mesti membuat sebuah diagram alir terpisah. ISR dimulai dari adanya sebuah IRQ (Interrupt Request) yaitu sinyal dari hardware yang menandakan adanya suatu interupsi yang mesti dilayani. Setelah IRQ tersebut, maka ISR melaksanakan proses yang diperlukan untuk melayani IRQ tersebut sampai selesai. Setelah selesai maka ISR akan menjalankan RETI (Return from Interrupt) untuk mengakhiri ISR.

Diagram alir superloop dengan interupsi
Diagram alir superloop dengan interupsi

Suatu perangkat lunak dapat memiliki beberapa ISR, sehingga untuk masing-masing ISR ini mesti dibuatkan flowchart sendiri. Pada contoh berikut ini ada 2 buah interupsi, yaitu IRQ 1 yang menjalankan Proses 3, dan IRQ 2 yang menjalankan Proses 4.

Diagram alir superloop dengan 2 interupsi
Diagram alir superloop dengan 2 interupsi

Diagram Alir Perangkat Lunak Dengan Multithread

Berikutnya yang paling kompleks adalah diagram alir perangkat lunak dengan sistem operasi multithread. Pada perangkat lunak ini terdapat superloop dan interupsi seperti sebelumnya, namun ada lagi 1 fitur software yang tidak ada di software sebelumnya, yaitu multithreading. Pada multithreading, sistem mikroprosesor dapat menjalankan beberapa thread software sekaligus walaupun hanya memiliki 1 CPU saja. Tekniknya adalah dengan membagi waktu CPU antara beberapa thread yang aktif, sehingga meskipun hanya ada 1 CPU namun seolah-olah komputer ini memiliki beberapa CPU yang masing-masing menjalankan program tersendiri.

Perbedaan utamanya adalah pada multithread kita dapat membuat beberapa superloop, 1 di main loop, sedangkan loop lain dapat diaktifkan sebagai thread.

Diagram alir perangkat lunak dengan sistem operasi
Diagram alir perangkat lunak dengan sistem operasi

Contoh sistem operasi yang dapat dipakai pada sistem semacam ini adalah FreeRTOS (http://www.freertos.org/) dan CoOS (https://github.com/coocox/CoOS)

Daftar Istilah

  • ISR (Interrupt Service Routine)
  • IRQ (Interrupt Request)

Referensi