Kamis, 28 November 2013


TIMER DAN COUNTER


TUJUAN :

1.  Mampu membuat program yang mengunakan fitur timer sebagai pewaktu.
2.  Mampu membuat program yang menggunakan fitur timer sebagai penghitung.
3.  Mampu mempergunakan fitur timer pada mikrokontroler untuk membuat jam digital sederhana.


PERALATAN :

1.  Komputer

2.  Arduino Uno

3.  Kabel USB tipe B

4.  Project board

5.  Kabel jumper

6.  LED

7.  Resistor 330 Ohm

8.  Switch pushbutton

9.  LCD

10. Potensiometer



PERCOBAAN :

6.1 Penggunaan Timer Overflow Untuk LED Blinking

          Pada percobaan kali ini akan dibuat program untuk membuat led berkedip per 500 milliseconds. Pada dasarnya LED akan toggle (berubah kondisinya) setiap terjadi interupsi  timer  overflow.  Nilai  register  timer  di-set  sedemikian  rupa  sehingga menghasilkan waktu overflow per 500 milliseconds.

Prosedur :
  • Buatlah rangkaian seperti pada Gambar 6.1.

  • Tuliskan sintaks program berikut ini, kemudian lakukan kompilasi dan upload program ke sistem minimum Arduino.

  • Buka Serial Monitor pada Arduino IDE, pastikan baudrate pada Serial Monitor adalah 9600. Kemudian amati teks yang ditampilkan pada Serial Monitor. Amati juga kondisi nyala dan mati LED pada pin 12.
Tugas dan Pertanyaan :
  • Jika dilakukan perhitungan konfigurasi register pada sintaks program Percobaan 6.1, timer 1 akan overflow setiap berapa milliseconds ?
  • Jelaskan perbedaan penggunaan delay dan timer overflow !
  • Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 6.1 !

DIBAWAH INI MERUPAKAN VIDEO DARI HASIL PRAKTIKUM YANG TELAH DILAKUKAN 






6.2 Jam Digital Menggunakan Timer

          Pada percobaan kali ini akan dibuat program sederhana yang berfungsi sebagai jam digital  dengan memanfaatkan fitur timer  mikrokontroler. Timer akan dikonfigurasi sehingga terjadi overflow setiap 1 detik. Tiap timer terjadi overflow, variabel detik, menit dan jam akan di-update nilainya. Nilai variabel tersebut akan ditampilkan pada LCD.
Prosedur :
  • Buatlah rangkaian seperti Gambar 6.2.

  • Tuliskan sintaks program berikut ini, lakukan kompilasi dan upload program.



Tugas dan Pertanyaan :
  • Ubahlah sintaks program pada Percobaan 6.2 sehingga jam menampilkan waktu saat ini !
  • Jika  dilakukan  perhitungan  dengan  konfigurasi  register  pada  sintaks  program Percobaan 6.2, timer 1 akan overflow setiap berapa milliseconds ?
  • Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 6.2 !

DIBAWAH INI MERUPAKAN VIDEO DARI HASIL PRAKTIKUM YANG TELAH DILAKUKAN 

 


6.3 Counter Mode Falling Edge
          Pada percobaan kali ini akan dibuat program yang berfungsi untuk menghitung jumlah penekanan switch pada input counter. Konfigurasi counter menggunakan mode falling edge.

Prosedur :
  • Buatlah rangkaian seperti pada Gambar 6.3.

  • Tuliskan sintaks program berikut ini, kemudian lakukan kompilasi dan upload program ke sistem minimum Arduino.

  • Buka Serial Monitor pada Arduino IDE, kemudian tekan switch pushbutton dan amati nilai TCNT1 yang ditampilkan pada Serial Monitor.
Tugas dan Pertanyaan :
  • Kapankah nilai counter (TCNT1) akan berubah ? Saat switch ditekan atau dilepas ? Jelaskan !
  • Berapakah nilai maksimal counter jika input counter menggunakan pin T1 (Timer 1) ? Jelaskan kenapa !
  • Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 6.3 !

DIBAWAH INI MERUPAKAN VIDEO DARI HASIL PRAKTIKUM YANG TELAH DILAKUKAN 


 


6.4 Counter Mode Rising Edge

          Pada  percobaan  kali  ini  akan  dibuat  program  yang  fungsinya  sama  dengan Percobaan 6.3. Namun pada percobaan kali ini konfigurasi counter menggunakan mode rising edge.
Prosedur :
  • Gantilah sintaks program pada Percobaan 6.5 dengan sintaks program berikut ini, kemudian lakukan kompilasi dan upload program ke sistem minimum Arduino.
  • Buka Serial Monitor pada Arduino IDE, kemudian tekan switch pushbutton dan amati nilai TCNT1 yang ditampilkan pada Serial Monitor.
Tugas dan Pertanyaan :
  • Kapankah nilai counter akan berubah ? Saat switch ditekan atau dilepas ? Jelaskan !
  • Jelaskan perbedaan penggunaan counter mode falling edge dan mode rising edge !
  • Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 6.4 !

DIBAWAH INI MERUPAKAN VIDEO DARI HASIL PRAKTIKUM YANG TELAH DILAKUKAN 




 
TUJUAN : 
  • Memahami cara mengi rimkan dan menerima data melalui periperal UART Arduino. 
  • Mampu membuat progr am untuk mengirimkan data berbasis teks dan berbasis byte. 
  • Mampu membuat prog ram untuk menerima data secara pooling d an secara interupsi serial.

PERALATAN :

1.  Komputer                         : 1 set

2.  Arduino Uno                    : 1 pcs

3.  Project board                    : 1 pcs

4.  Kabel jumper                    : 1 set

5.  LCD                                  : 1 pcs

6.  Potensiometer 10K           : 1 pcs


PERCOBAAN :

5.1 Mengirim Data Teks

          Pada percobaan ka li ini akan dibuat program untuk mengiri mkan data teks ke komputer melalui ko munikasi serial. Pada percobaan ini conto h teks  yang akan dikirimkan adalah "Hello World". Pengiriman data akan menggunak an baudrate 9600.
Prosedur :
  • Tuliskan sintaks program di bawah ini, kemudian lakukan kompilasi dan uploadprogram ke sistem minimum Arduino .

                                                           void setup() {
                                                           Serial.begin(9600);
                                                           }

                                                           void loop() {
                                                           Serial.print("HelloWorld");
                                                           delay(2000);
                                                           }


  • Buka Serial Monitor pada Arduino IDE. 

  • Pastikan konfigurasi baudrate adalah 9600 seperti Gambar 5.2.

  • Pastikan data teks "Hello Word" yang dikirimkan Arduino diterima oleh Serial Monitor.

Tugas dan Pertanyaan :

  • Gantiah parameter input pada fungsi Serial.print sesuai denga n Tabel 5.1. Amati data yang diterima  pada HTerm, kemudian isilah Tabel 5.1 di bawah ini !

  • Gantilah fungsi Serial.print menjadi Serial.println, kemudian tuliskan amati data yang diterima oleh komputer. Jelaskan perbedaan penggunaan fungsi Serial.print dan Serial.println !
    jika menggunakan serial.print maka hasil keluaran akan tetap sama dengan input yang diberikan , namun jika menggunakan serial.println maka program akan membaca perkata lalu akan melangkah satu baris kebawah lalu disambung pada baris baru kata yang lainya
  • Tambahkan karakter \r\n pada akhir baris teks pada Tabel 5.1 . Amati data yang ditampilkan pada k omputer. Jelaskan fungsi karakter \r\n pada k omunikasi serial ! fungsi dari karakter \r\n adalah untuk member enter pada input yang kita masukkan atau menampilkan input pada baris baru.
  •  Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 5.1 !
void setup() {    //  untuk inisialisai program
Serial.begin(9600);  //  konfigurasi baudrate serial 9600 dengan kecepatan mengirim data 9600 persekon
}

void loop() { // untuk mengeksekusi program yang akan dijalankan berulang-ulang
Serial.print("Hello World"); //menampilkan hello word di serial monitor
delay(2000);// memberi  selang waktu selama 2 detik .






5.2 Mengirim Data Byte .

          Pada percobaan ka li ini akan dibuat program untuk mengiri mkan data byte ke komputer melalui kom unikasi serial. Pengiriman data akan men ggunakan baudrate
115200.

  • Tuliskan sintaks program di bawah ini, kemudian lakukan ko mpilasi dan upload program ke sistem minimum Arduino,
                                                                   void setup() {
                                                                   Serial.begin(115200);
                                                                   }
                                                                   void loop() {
                                                                   Serial.write(0x41);
                                                                   Serial.write(0x42);
                                                                   Serial.write(0x43);
                                                                   Serial.write(0x44);
                                                                   Serial.write(0x45);
                                                                   delay(2000);
                                                                   }

  • Buka aplikasi HTerm pada komputer, pastikan konfigurasi pada HTerm seperti gambar di bawah ini.

  • Klik tombol Connect, kemudian perhatikan data yang ditam pilkan pada bagian Receive Data. Pastikan data tersebut sama dengan data yan g dikirimkan oleh Arduino.

Tugas dan Pertanyaan :

  • Gantilah parameter input untuk fungsi Serial.write dengan da ta pada Tabel 5.2. Amati data yang diterima pada HTerm, kemudian isilah Tabel 5. 2 !

  • Gantilah konfiguras i dari HTerm menjadi seperti di bawah ini, perhatikan data yang diterima. Kenapa d ata yang diterima berubah menjadi huruf ? Jelaskan !

  • Jelaskan perbedaan penggunaan fungsi Serial.print dan fungsi S erial.write !Serial.print berfungsi untuk mencetak kata yang dituliskan disintaks program ke serial monitor. Serial.write berfungsi untuk mengirim data byte yang adapadasintaks programarduinokekomputermelaluikomunikasi serial.
  • Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 5.2 !
void setup() {
Serial.begin(115200); //set baudrate 115200, kecepatan mengirim data serial dalam
1 detik
void loop() { // menjalankan program secara berulang-ulang
Serial.write(0x41); //mengirim data hexa 41
Serial.write(0x42); //mengirim data hexa 42
Serial.write(0x43); //mengirim data hexa 43
Serial.write(0x44); //mengirim data hexa 44
Serial.write(0x45); //mengirim data hexa 45
delay(2000); // delay selama 2 detik trus akan melanjutkan program lagi
}


5.3 Menerima Data dari UART dengan Sistem Pooling

          Pada percobaan kali ini akan dibuat program untuk   meneri ma data teks dari komputer melalui ko munikasi serial. Proses penerimaan   data a kan menggunakan sistem pooling (menunggu). Data yang diterima oleh Arduino akan ditampilkan pada LCD. Penerimaan data akan menggunakan baudrate 9600.

Prosedur :
  • Buatlah rangkaian seperti Gambar di bawah ini
  • Tuliskan sintaks program berikut ini, kemudian lakukan kompilasi dan upload program,
#include<LiquidCrystal.h>
LiquidCrystal lcd=(2,3,4,5,6,7);
String textFromSerial = "";
void setup() {
lcd.begin(16,2);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Data From Serial")
Serial.begin(9600);
}

void loop() {
while(Serial.available()>0) {
char data =
Serial.read(); if(data ==
'\n') {
lcd.setCursor(0,1);
lcd.print(textFromSerial);
 textFromSerial="";
}
else{
if(data!='\r')
{
textFromSerial += data;
}
}
}
}

Tugas dan Pertanyaan :
  • Buka Serial Monitor pada Arduino pastikan konfigurasi Serial Monitor sama seperti pada Gambar di bawah ini .
  • Ketikkan sembarang kata untuk dikirimkan (kurang dari 16 k arakter), kemudian tekan Send. Isilah Tabel 5.3 !
  • Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 5.3 !
    #include<LiquidCrystal.h> //  memangil library lcd
    LiquidCrystal lcd=(2,3,4,5,6,7); // set pin 2-7 sebagai input untuk lcd
    String textFromSerial = "";//mengenalkan variable textFromSerial sebagai tipe data string
    void setup()
    {
    lcd.begin(16,2); // mengeset ukuran lcd sebesar 16x2 atau 16 colom dan 2 baris lcd.clear(); //mengbersikan layar lcd
    lcd.setCursor(0,0);  //memulai menampilkan data yang akan di kirim di colom ke 1 dan baris ke 1
    lcd.print("Data From Serial") //menampilkan kalimat”data from serial” Serial.begin(9600); //set baudrate 9600
    }

    void loop() menjalankan program secara berulang-ulang
    {
    while(Serial.available()>0) //ketika serial lebih dari 0 maka program di bawah ini akan di jalankan
    {
    char data = Serial.read(); //mengenalkan tipe data char dan data yang dikirim akan di masukan di variable data
    if(data == '\n') {  //jika data memiliki enter maka akan mengeksekusi program di bawah ini
    lcd.setCursor(0,1); //memulai menampilkan data di baris 2 dan kolom ke 1
    lcd.print(textFromSerial); //menampilkan text fromserial
    text FromSerial=""; //data yang terdapat dari variable text fromserial akan
    dimulai dari 0.
    }
    else{  //jika tidak akan melakukan program di bawah ini//
    if(data!='\r') {  //jika data tidak terdapat enter maka data dari text fromserial
    akan di jumlakan dengan data yang terdapat di variable data
    textFromSerial += data;
    }
    }
    }
    }

5.4 Menerima Data dari UART dengan Interupsi

          Pada percobaan ka li ini akan dibuat program untuk meneri ma data  teks sama seperti   Percobaan  5. 3. Pada percobaan kali ini proses penerimaan data kan menggunakan interupsi serial. Data yang diterima oleh Arduino aka n ditampilkan pada LCD. Penerimaan data akan menggunakan baudrate 115200.

Prosedur :

  • Tuliskan sintaks program di bawah ini, lakukan kompilasi dan u pload program.
 #include <LiquidCrystal.h>
#define FOSC 16000000
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); String dataSerial;

void initSerial(int baudrate) {
int ubrr = FOSC/16/baudrate-1;
// Mengisi register UBRR0H dan UBRR0L untuk menentukan baudrate
UBRR0H |= ubrr>>8;
UBRR0L |= ubrr;
// Mengaktifkan saluran transmitter dan receiver
UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
// Menggunakan format data 8 bit
UCSR0C |= (0<<UCSZ02)|(1<<UCSZ01)|(1<<UCSZ00);
// Menggunakan 1 stop bit
UCSR0C |= (0<<USBS0);
// No Parity
UCSR0C |= (0<<UPM01)|(0<<UPM00);
// Mengaktifkan RX interrupt
UCSR0B |= (1<<RXCIE0);
}

// Rutin yang akan dijalankan jika terjadi interupsi
ISR(USART_RX_vect){
char data = UDR0; if(data=='\n') { lcd.clear();
lcd.setCursor(0,0); lcd.print("Incoming Data"); lcd.setCursor(0,1); lcd.print(dataSerial); dataSerial = "";
}
else{
if(data!='\r') {
dataSerial += data;
}
}
}

void setup() { initSerial(9600); lcd.begin(16,2); lcd.clear(); sei();
}

void loop() {

}

  •  Buka Serial Monit or pada Arduino IDE, sesuaikan konfigurasi Serial Monitor sesuai dengan Gambar 5.7.
  • Ketikkan sembarang teks untuk dikirimkan, tekan Send. Lengka pilah Tabel 5.4 !
  • Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 5.4 !

    #include <LiquidCrystal.h> //memangil library lcd
    #define FOSC 16000000
    LiquidCrystal lcd(2, 3, 4, 5, 6,7); //set pin 2-7 sebagi input ke lcd
    String dataSerial;// membuat dataserial sebagai tipe data string


    void initSerial(int baudrate)
    { int ubrr = FOSC/16/baudrate-1;
    // Mengisi register UBRR0H dan UBRR0L untuk menentukan baudrate
    UBRR0H |= ubrr>>8;
    UBRR0L |= ubrr;
    // Mengaktifkan saluran transmitter dan receiver
    UCSR0B |= (1<<RXEN0)|(1<<TXEN0); // Menggunakan format data 8 bit
    UCSR0C |= (0<<UCSZ02)|(1<<UCSZ01)|(1<<UCSZ00);
    // Menggunakan 1 stop bit UCSR0C |= (0<<USBS0);
    // No Parity
    UCSR0C |= (0<<UPM01)|(0<<UPM00); // Mengaktifkan RX interrupt
    UCSR0B |= (1<<RXCIE0);
    }

    // Rutin yang akan dijalankan jika terjadi interupsi ISR(USART_RX_vect){
    char data = UDR0;
    if(data=='\n') { //jika data ada enter maka akan menjalankan program di bawah
    ini
    lcd.clear();//membersihkan lcd
    lcd.setCursor(0,0); //set data yang akan di tampilkan di baris 1 dan colom 1 lcd.print("Incoming Data"); //menampilkan tulisan incoming data lcd.setCursor(0,1); //set data yang akan di tampilkan di baris 2 dan kolom 1 lcd.print(dataSerial); //menampilkan data yang terdapat di data serial dataSerial = "";//nilai data pada dataserial dimulai dari 0
    }
    else{
    if(data!='\r') {
    dataSerial += data;
    }
    }
    }

    void setup() { initSerial(9600); lcd.begin(16,2); lcd.clear(); sei();
    }
    void loop() {
    }
  •  Jelaskan perbedaan penggunaan interupsi dan sistem pooling !

    interupsi adalah meninggalkan program utama untuk menjalakan interupsi setelah di jalankan, maka arduino akan kembali ke program utama. Sistem pooling adalah arduino menunggu pengiriman data melalui serial




Subscribe to RSS Feed Follow me on Twitter!