Kamis, 17 Oktober 2013

INTERUPSI EKSTERNAL Arduino Uno

TUJUAN:
1.        Mampu membuat program untuk penggunaan fitur interupsi eksternal.
2.        Memahami perbedaan mode interupsi eksternal(falling, rising, dan any change).
PERALATAN:
1.        Komputer                         : 1 set
2.        Arduino Uno                    : 1 pcs
3.        Project Board                   : 1 pcs
4.        Kabel jumper                    : secukupnya
5.        Switch pushbutton           : 2 pcs
6.        LCD                                 : 1 pcs
7.        Potensiometer 10K          : 1 pcs
PERCOBAAN:
4.1 Interupsi Eksternal dengan Mode Falling

            Pada percobaan kali ini akan dibuat program untuk memahami penggunaan interupsi eksternal dengan mode falling. Dua buah switch akan dihubungkan pada pin interupsi eksternal 0 (INT0) dan interupsi eksternal 1 (INT1). Penekanan switch akan menginterupsi program utama (yang berada pada fungsi loop) dan memaksa untuk menjalakan rutin interupsi yang telah dideskripsikan pada program.
Prosedur:
1.        Rangkailah rangkaian pada gambar 4.1
2.        Tuliskan sintaks program berikut ini, kemudian lakukan kompilasi dan upload program ke sistem minimum Arduino.
#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);
pinMode(2, INPUT);
pinMode(3, INPUT);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
}
void loop() {
lcd.clear();
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.clear();
lcd.setCursor(0,0); lcd.print("Int0 Program");
lcd.setCursor(0,1); lcd.print("Interupt INT0");
delay(2000);
}
void rutinInterupsi1() {
lcd.clear();
lcd.setCursor(0,0); lcd.print("Int1 Program");
lcd.setCursor(0,1); lcd.print("Interupt INT1");
delay(2000);
}
4.2 Interupsi Eksternal dengan Mode Rising
            Dua buah switch akan dihubungkan pada pin INT0 dan INT1 sama seperti Percobaan 4.1. Penekanan switch akan menginterupsikan program utama (yang berada pada fungsi loop) dan memaksa untuk menjalankan rutin interupsi yang telah dideskripsikan pada program. Pada percobaan mode interupsi yang digunakan adalah rising.
Prodesur:
1.        Gantilah program pada Percobaan 4.2 dengan sintaks prgram berikut ini, kemudian lakukan kompilasi dan upload program ke sistem minimum Arduino.
#include <LiquidCrystal.h>
LiquidCrystal lcd(A0,A1,A2,A3,A4,A5);
unsigned int countLoop = 0;

void setup() {
lcd.begin(16,2); lcd.clear();
lcd.clear();
attachInterrupt(0, rutinInterupsi0, RISING);
attachInterrupt(1, rutinInterupsi1, RISING);
pinMode(2, INPUT);
pinMode(3, INPUT);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
}
void loop() {
lcd.clear();
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.clear();
lcd.setCursor(0,0); lcd.print("Int0 Program");
lcd.setCursor(0,1); lcd.print("Interrupt INT0");
delay(2000);
}
void rutinInterupsi1() {
lcd.clear();
lcd.setCursor(0,0); lcd.print("Int1 Program");
lcd.setCursor(0,1); lcd.print("Interrupt INT1");
delay(2000);
}

4.3 Interupsi Eksternal dengan Metode Any Change
            Pada percobaan mode interupsi yang digunakan adalah any change. Dua buah switch akan dihubungkan pada pin INT0 dan INT1. Penekanan switch akan membuay program utama pada fungsi loop terhenti dan mengeksekusi rutin interupsi.
Prosedur:
1.        Gantilah sntaks program pada percobaan 4.2 dengan sintaks program berikut ini. Lakukan kompilasi dan upload program ke sistem minimum Arduino.
#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);
pinMode(2, INPUT);
pinMode(3, INPUT);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
}
void loop() {
lcd.clear();
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.clear();
lcd.setCursor(0,0); lcd.print("Int0 Program");
lcd.setCursor(0,1); lcd.print("Interrupt INT0");
delay(2000);
}
void rutinInterupsi1() {
lcd.clear();
lcd.setCursor(0,0); lcd.print("Int1 Program");
lcd.setCursor(0,1); lcd.print("Interrupt INT1");
delay(2000);
}

Kamis, 10 Oktober 2013

Periperal Masukan Analog Arduino Uno

PERIPERAL MASUKAN ANALOG
TUJUAN:
1.        Mampu membuat program untuk mengakses periperal masukan analog dengan tegangan refrensi internal, vcc, dan eksternal.
2.        Mampu memahami pengaruh nilai tegangan refrensi terhadap hasil konversi Analog to Digital Converter (ADC).
3.        Mampu membuat program untuk mengakses fitur analog komparaor pada mikokontroller.
PERALATAN:
1.        Arduino Uno                    : 1 set
2.        Kabel USB tipe B            : 1 pcs
3.        Project Board                   : 1 pcs
4.        Kabel jumper                    : secukupnya
5.        Potensiometer 10K          : 3 pcs
6.        LCD 2x16                        : 1 pcs
PERCOBAAN:
3.1    Analog Input dengan Tegangan Refrensi Internal (1,1 Volt)
Pada percobaan kali ini akan dibuat program untuk mengkonversi nilai tegangan analog dari potensiometer menjadi nilai tegangan. Data hasil konversi akan ditampilkan pada LCD 2x16. Tegangan refrensi ADC yang digunakan adalah tegangan refrensi internal yang besarnya adalah 1,1 Volt.
Prosedur:
1.         Rangkailah rangkaian pada gambar 3.1

2.      Tuliskan sintaks program di bawah ini, kemudian lakukan kompilasi dan upload program ke sistem minimum Arduino.
#include <LiquidCrystal.h>
LiquidCrystal lcd(2,3,4,5,6,7); // inisialisasi pin LCD

void setup() {
  ldc.begin(16,2); //setting jumlah (kolom,baris) LCD
  lcd.clear(); // reset tampilan LCD
  lcd.setCursor(0,0); //kursor pada kolom dan baris (0,0)
  lcd.print("ADC example on A0"); // menampilkan tulisan
                                // ADC example on A0
  analogReference(INTERNAL);
}
voil loop() {
  unsigned int dataADC = analogRead(A0);//membaca nilai di pin A0, dan di simpan di variabel dataADC
  lcd.clear();// reset tampilan LCD
  lcd.setCursor(0,1);//kursor pada kolom 0 dan baris 1
  lcd.print("Value = ");// menampilkan value
  lcd.print(dataADC);//menampilkan dataADC
  delay(500);// delay selama 500 mS
}

Putarlah potensiometer sehingga terjadi perubahan tegangan dari 0 Volt sampai 1.5 Volt dengan rentan perubahan 0.5 Volt. Amati data yang ditampilkan pada LCD, 

3.2    Analog Input  dengan Tegangan Refrensi VCC
Pada percobaan kali ini aan dibuat program seperti pada Percobaan 3.1. Pada Percobaan 3.2 tegangan refrensi ADC yang digunakan adalah tegangan VCC pada mikrokontroler.
Prosedur:
1.      Gantilah sintaks program pada percobaan 3.1 menjadi seperti di bawah ini. Kemudian lakukan kompilasi dan upload program.
#include <LiquidCrystal.h> // library LCD
LiquidCrystal lcd(2,3,4,5,6,7);//inisialisasi LCD

void setup() {
lcd.begin(16,2);//setting kolom dan baris LCD
lcd.clear(); //reset tampilan LCD
lcd.setCursor(0,0);//kursor pada poin (0,0)
lcd.print("ADC Example on A0");//menampilkan ADC Example 
                                   // on A0
analogReference(DEFAULT);//Vref 5 volt
}
void loop() {
unsigned int dataADC = analogRead(A0);//inisialisai pin
                                           //input A0
lcd.setCursor(0,1);//kursor pada (baris 0,kolom 1)
lcd.clear();//reset tampilan LCD
lcd.print("Value = ");//menampilkan Value=
lcd.print(dataADC);//menampilkan dataADC
delay(500); //delay 500 mS
}

Putarlah potensiometer sehingga terjadi perubahan tegangan dari 0 Volt sampai 5 Volt dengan rentan perubahan 1 Volt, kemudian amati data yang ditampilkan pada LCD 

3.3    Analog Input dengan Tegangan Refrensi Eksternal
Pada percobaan kali ini akan dibuat program seperti pada Percobaan 3.1 dan Percobaan 3.2. Tegangan refrensi ADC yang digunakan adalah tegangan refrensi eksternal yaitu tegangan pada pin AREF. Pada percobaan kali ini besar tegangan pada pin AREF akan di-set sebesar 4 Volt. Sehingga dapat dikatakan bahwa besarnya tegangan refrensi yang digunakan adalah 4 Volt.
Prosedur:
1.         Rangkailah rangkaian pada Gambar 3.2.

2.      Tuliskan sintaks program di bawah ini, kemudian lakukan kompilasi dan upload program ke sistem minimum Arduino.
#include <LiquidCrystal.h>// panggil library LCD
LiquidCrystal lcd(2,3,4,5,6,7);//inisialisai LCD

void setup() {
lcd.begin(16,2);//tampilan LCD kolom dan baris
lcd.clear(); //reset tampilan LCD
lcd.setCursor(0,0);//letak kursor pada kolom (0,0)
lcd.print("ADC Example on A0");//menampilkan ADC Example
                                   // on  A0
analogReference(EXTERNAL);//Vref input eksternal (4volt)
}
void loop() {
unsigned int dataADC = analogRead(A0);//inisialisasi A0
lcd.clear();//reset tampilan LCD
lcd.setCursor(0,1); //kursor pada baris 0 kolom 1
lcd.print("Value = ");//tampilkan Value=
lcd.print(dataADC);//tampilkan dataADC
delay(500); //delay 500 mS
}
3.      Putar potensiometer R3 hingga tegangan pada pin AREF terukur 4 Volt.

Putarlah potensiometer R2 sehingga terjadi perubahan tegangan dari 0-5 Volt dengan rentan perubahan 1 Volt. Amati data yang ditampilkan pada LCD, 


  
3.4    Analog Comparator
Pada Percobaan 3.4 akan dibuat program untuk mengakses fitur analog komparator pada mikrokontroler. Pada percobaan kali ini dua buah input analog akan dihubungkan ke input pin komparator yaitu AIN0 (pin 6) dan AIN1 (pin 7). Output analog komparator akan ditampilkan pada LCD.
Prosedur:
1.         Rangkailah rangkaian pada Gambar 3.3.

2.      Tuliskan sintaks program di bawah ini, kemudian lakukan kompilasi dan upload program ke sistem minimum Arduino.
#include <LiquidCrystal.h>//library LCD
LiquidCrystal lcd(A0,A1,A2,A3,A4,A5);//inisialisasi input
boolean comparatorOutput;// inisialisasi opr boolean

ISR (ANALOG_COMP_vect) { // program interupt
comparatorOutput = true; // inisialisasi nilai true
}
void setup() {
ADCSRB = 0; //nilai ADCSRB=0
ACSR = _BV(ACI)|_BV(ACIE)|_BV(ACIS1);
lcd.begin(16,2);//tampilan LCD kolom dan baris
lcd.clear(); //reset tampilan LCD
lcd.setCursor(0,0);//kursor pada (0,0)
lcd.print("Analog Comparator");//tampilkan Analog
                                   //Comparator
}
void loop() {
if (comparatorOutput==true) { //jika terpenuhi lakukan ..
lcd.setCursor(0,1);//kursor pada 0,1
lcd.print("Comparator High");//tampilkan Comparator High
comparatorOutput = false; //comparator output false
}
else{ //jika tak terpenuhi semua lakukan...
lcd.setCursor(0,1);//letak kursor 0,1
lcd.print("Comparator Low ");//tampilkan Comparator Low
}
delay(1000);//delay 1 detik
}


Kamis, 03 Oktober 2013

Digital Input dan Output Arduino Uno

Pada postingan kali ini saya akan berbagi beberapa pelajaran yang telah saya dapatkan di perkuliahan mikrokontroller, dan tentu nya saat ini berbasis Arduino.
Dan beberapa sub bahasannya yaitu:
  1. Mengakses periperal masukkan digital menggunakan arduino.
  2. Mengakses periperal masukkan digital menggunakan konfigurasi register mikrokontroller.
  3. Mengakses periperal keluaran digital menggunakan fungsi arduino.
  4. Mengakses periperal keluaran digitalmenggunakan konfigurasi register mikrokontroller. 
      Bagi anda yang ingin langsung mencoba nya pada hardware arduino secara langsung dapat menyiapkan alat dan bahan sebagai berikut:
  1.       Arduino : 1 pcs
  2.       Kabel USB tipe B : 1 pcs
  3.       Project Board : 1 pcs
  4.       Kabel Jumper : secukupnya
  5.       Buzzer 5V : 1 pcs
  6.       Transistor 2N2222 : 1 pcs
  7.       Resistor 2K2 : 1 pcs
  8.       Led : 6 pcs
  9.       Resistor 330 ohm : 6 pcs 
    
    A.  Pemrograman Digital Output Menggunakan Library Arduino
          
         Pada percobaan ini kita akan membuat program yang nanti nya akan mematikan dan menghidupkan LED. dan untuk rangkaiannya anda dapat mencontoh seperti pada skematik dibawah ini:

        Setelah itu, coba anda buat program seperti di bawah ini:
     void setup() {
     pinMode(8, OUTPUT);
     pinMode(9, OUTPUT);
     pinMode(10, OUTPUT);
     pinMode(11, 1);
     pinMode(12, 1);
     pinMode(13, 1);
     }
     
     void loop() {
     digitalWrite(8, HIGH);
     digitalWrite(9, HIGH);
     digitalWrite(10, 1);
     digitalWrite(11, LOW);
     digitalWrite(12, LOW);
     digitalWrite(13, 0);
     }
     
     Setelah itu anda amati LED mana saja yang hidup dan yang mati.

B.  Pemrograman Digital Output Menggunakan Konfigurasi Register
Pada percobaan kali ini kita akan mencoba fungsi program yang sama dengan percobaan pertama tadi.
Namun pada percobaan ini kita akan menggunakan konfigurasi register untuk mengakses pin digital.
Coba anda buat sintaks program seperti dibawah ini:
void setup() {
DDRB=0x3F;
}
void loop() {
PORTB=0x07;
} 

Kemudian amati kondisi dari LED tsb.

C. Penggunaan Fungsi Delay
Pada percobaan ini kita akan menggunakan fungsi delay pada arduino uno. Yang nanti nya akan
membuat buzzer mati/nyala secara bergantian yang bergantung pada besar nya nilai delay.
Rangkailah seperti skematik di bawah ini:


      Setelah itu anda coba buat sintaks program seperti di bawah ini:
   void setup() {
   pinMode(12, OUTPUT);
   }
   void loop() {
   digitalWrite(12, HIGH);
   delay(1000);
   digitalWrite(12, LOW);
   delay(1000);
   }
   
   Setelah itu cobalah anda compile dan amati suara buzzer nya. Setelah itu cobalah anda ubah nilai delay pada program tsb, dan amati perubahannya.
   
      D.  Pemrograman Digital Input Menggunakan Fungsi Arduino
            
Pada percobaan kali ini kita akan membuat program untuk mengakses masukan dalam
bentuk digital. Dan pada penerapan kali ini kita akan menggunakan push button.
Rangkailah seperti gambar di bawah ini:

       Kemudian buatlah sintaks seperti dibawah ini:
       void setup() {
    pinMode(A0, INPUT);
    digitalWrite(A0, HIGH);
    pinMode(12, OUTPUT);
    }
    void loop() {
    if(digitalRead(A0)==LOW) {
    digitalWrite(12, HIGH);
    }
    else{
    digitalWrite(12, LOW);
     }
    }

   Setelah itu compile program tadi dan cobalah anda tekan push button nya. Dan amati yang terjadi.

    Kemudian cobalah sintaks program di bawah ini:
    void setup() {
    DDRC = 0x00;
    PORTC = 0x01;
    DDRB = 0x10;
    }
    void loop() {
    if(bit_is_clear(PINC,0)) {
    PORTB = 0x10;
    }
    else {
    PORTB = 0x00;
     }
    }

    Kemudian anda coba seperti langkah di atas. Adakah perbedaan nya..??
    
    Baiklah, cukup sekian pelajaran kita kali ini. Semoga bermanfaat.  :)








  

h


Twitter Delicious Facebook Digg Stumbleupon Favorites More