Minggu, 13 Oktober 2013

interupsi pada arduino

Pada entri kali ini saya akan sedikit membahas mengenai program intrupsi ekternal, pengertian intrupsi adalah  suatu permintaan khusus pada mikrokontroller untuk melakukan sesuatu, jika terjadi interupsi maka program akan menghentikan dahulu apa yang sedang dikerjakan dan melakukan apa yang diminta oleh yang menginterupsi. 
Pada Board arduino uno terdapat 3 intrupsi eksternal yaitu 
1. Intrupsi Eksternal dengan Mode Falling
2. Intrupsi Eksternal dengan Mode Rising
3. Intrupsi Eksternal dengan Mode Any Change

LANGKAH PERCOBAAN
1. Intrupsi Eksternal dengan Mode Falling
    Pada percobaan ini program dibuat untuk memahami penggunaan interupsi eksternal dengan Mode Falling. Dua buah switch akan dih ubungkan pada pin interupsi eksternal 0 (INT0) dan interupsi eksternal 1 (INT1). Pen ekanan switch akan menginterupsi program utama (yang berada pada fungsi loop) d an memaksa untuk menjalankan rutin interupsi yang telah dideskripsikan pada program.
`   Prosedur :
1. Rangkai sesuai gambar dibawah



2. Lalu buat program sintak seperti sintaks dibawah :

#include <LiquidCrystal.h> LiquidCrystal lcd(A0,A1,A2,A3,A4,A5); unsigned int countLoop = 0;

void setup() { lcd.begin(16,2); lcd.clear();

attachInterrupt(0, rutinInterupsi0, FALLING); attachInterrupt(1, rutinInterupsi1, FALLING);

}

void loop() {

lcd.setCursor(0,0);   lcd.print("Main Program");

lcd.setCursor(0,1); lcd.print("Count Loop "); lcd.print(countLoop); countLoop++;

delay(1000);
}

void rutinInterupsi0() {

lcd.setCursor(0,0); lcd.print("Int0 Program"); lcd.setCursor(0,1); lcd.print("Interrupt INT0"); delay(2000);

}

void rutinInterupsi1() {

lcd.setCursor(0,0); lcd.print("Int1 Program"); lcd.setCursor(0,1); lcd.print("Interrupt INT1"); delay(2000);

}





3. Lalu jalankan simulator proteus untuk mengamati proses intrupsi mode falling


   kondisi awal 

kondisi saat switch ditekan

Penjelasan :
         Pada mode falling proses intrupsi terjadi jika switch ditekan karena switch terhubung dengan              ground jika switch terhubung dengan pin maka nilai inputan akan bernilai 0 jadi kesimpulannya          proses falling terjadi jika perubahan input dari 1 ke 0.


2. Intrupsi Eksternal Mode Rising
Dua buah switch akan dihubungkan pada pin INT0 dan I NT1 sama seperti Percobaan 1 Peneka nan switch akan menginterupsi program utama (yang berada pada fungsi loop) da n memaksa untuk menjalankan rutin in terupsi yang telah dideskripsikan pada program. Pada Percobaan mode interupsi yan g digunakan adalah rising

    1. ganti sintaks program seperti dibawah :

#include <LiquidCrystal.h> LiquidCrystal lcd(A0,A1,A2,A3,A4,A5); unsigned int countLoop = 0;

void setup() {

lcd.begin(16,2); lcd.clear(); attachInterrupt(0, rutinInterupsi0, RISING); attachInterrupt(1, rutinInterupsi1, RISING);

}
void loop() {

lcd.setCursor(0,0);   lcd.print("Main Program");

lcd.setCursor(0,1);   lcd.print("Count Loop ");  lcd.print (countLoop);

countLoop++;   delay(1000);
}

void rutinInterupsi0() {

lcd.setCursor(0,0);   lcd.print("Int0 Program");
lcd.setCursor(0,1);   lcd.print("Interrupt INT0");

delay(2000);

}
void rutinInterupsi1() {

lcd.setCursor(0,0);   lcd.print("Int1 Program");

lcd.setCursor(0,1);   lcd.print("Interrupt INT1");

delay(2000);

}



  2.  Gunakan proteus untuk mengamati program intrupsi rising :

Kondisi Awal

Kondisi saat pushbutton ditekan

Kondis saat pushbutton dilepas

Penjelasan:
          Program intrupsi rising terjadi jika saat switch dilepas, jadi saat switch di tekan proram                     intrupsi tidak akan berjalan namu saat switch diepas maka program intrupsi akan aktif jadi                 skesimpulan intrupsi ekternal mode rising akan aktif jika perubahan input dari 0 ke 1.

3. Intrupsi Eksternal Mode Any Change
    Pada Percobaan mode interupsi yang digunakan adalah any change. Dua buah switch akan dihubungkan pada pin INT0 dan INT1. Penekanan switch akan membuat program utama pada fungsi loop terhenti dan mengeksekusi rutin interupsi.

   1. Ganti sintak program seperti dibawah :

         #include <LiquidCrystal.h>
       LiquidCrystal lcd(A0,A1,A2,A3,A4,A5);
unsigned int countLoop = 0;

void setup() {

lcd.begin(16,2);
lcd.clear();

attachInterrupt(0, rutinInterupsi0, CHANGE);

attachInterrupt(1, rutinInterupsi1, CHANGE);

}
void loop() {

lcd.setCursor(0,0);   lcd.print("Main Program");

lcd.setCursor(0,1);   lcd.print("Count Loop ");  lcd.print(countLoop);
countLoop++;   delay(1000);

}

void rutinInterupsi0() {
lcd.setCursor(0,0);   lcd.print("Int0 Program");
lcd.setCursor(0,1);   lcd.print("Interrupt INT0");

delay(2000);

}
void rutinInterupsi1() {

lcd.setCursor(0,0);   lcd.print("Int1 Program");

lcd.setCursor(0,1);   lcd.print("Interrupt INT1");
delay(2000);

}
  
  2. Amati proses pengintrupsian menggunakan mode any change dengan menggunakan simulator proteus :

Kondisi saat switch ditekan
                                 


Kondi saat switch di lepas


Penjelasan :
Karena mode any change ini adalah gabungan dari mode falling dan rising maka saat perubahan masukan input dari 1 ke 0 (falling) maka program akan menjalankan proses intrupsi dan saat perubahan input dari 0 ke 1 maka layar lcd akan menampilkan INT0 atua INT1








Senin, 07 Oktober 2013

4. Percobaan Keempat

Pada Percobaan 4 akan  program untuk mengakses  komparator pada mikrokontroler. Pada percobaan kali ini dua buah input analog akan dihubungkake  input  pin  komparator  yaitu  AIN0  (pin  6)  dan  AIN1  (pin komparator akan ditampilkan pada LCD.

Rangkaialah rangkaian pada Gambar dibawah :

- Tulis program seperti gambar dibawah :


              - Jawablah pertanyaan berikut sesuai pemikiran anda :
1.    Putarlah potensiometer R2 dan R3, amati teks pada LCD sehinga terjadi perubahan output. Apakah yang terjadi jika tegangan pada pin AIN0 lebih besar dari tegangan pada pin AIN1, jelaskan !
Pada percobaan kali ini yang adalah membandingkan tegangan pada pin 6 dan pin 7, jika pada pin 6 nilainya lebih besar daripada pin 7 maka pada LCD akan menampilkan comparator high

2.  Apakah yang terjadi jika tegangan pada pin AIN0 lebih kecil dari tegangan pada
                           AIN1, jelaskan !
Apabila tegangan pada pin 6 lebih kecil daripada tegangan pada pin 7 maka pada LCD akan menampilkan comparator LOW

3.      Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 3.4 !

#include  <LiquidCrystal.h>              // memmanggil fungsi library dari LCD
LiquidCrytal lcd=(A0,A1,A2,A3,A4,A5);  // memperkenalkan bahwa pin A0-A5 pada      pin arduino akan digunakan ke pin LCD
boolean  comparatorOutput;               // comparatorOuput menggunakan system boolean yaitu True or False
ISR  (ANALOG_COMP_vect)                  // Interupt atau jump
ACSR =  _BV(ACI)| _BV(ACIE)| _BV(ACIS1);  //
lcd.begin(16,2);                        // awal menampilkan output pada(kolom,Baris)
lcd.clear();                            // mengahapus tampilan sebelumnya pada Lcd
  lcd.setCursor(0,0);                    // letak kursor berada pada 0,0
  lcd.print("Analog Comparator");        // tampilan awal lcd akan menampilkan “Analog Comparator”
void  loop()                             // fungsi untuk meneksekusi program yang ingin dijalankan
if  (comparatorOutput==true)             // jika syarat comprator ouput bernilai true maka eksekusi yang di kurung kerawal
  lcd.setCursor(0,1);                    // posisi kursor akan panda jadi 0,1
  lcd.print("Comparator High");          // lalu menampilkan “Comparator High”



comparatorOutput =  false;           // kondisi comparator bernilai false
else                                // sebuah kondisi selain syarat diatas
lcd.setCursor(0,1);                 // kursor akan berada di posisi ( ...)
lcd.print("Comparator Low  ");              // Lcd akanmenampilkan “Comparator low”