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.
1. Buatlah rangkaian seperti pada Gambar 6.1.
2. Tuliskan sintaks program berikut ini, kemudian lakukan kompilasi dan upload
program ke sistem minimum Arduino.
boolean dataLed = 0;
unsigned int overflowCount = 0;
voidsetup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 34286;
TCCR1B |= (1 << CS12);
TIMSK1 |= (1 << TOIE1);
sei();
}
ISR(TIMER1_OVF_vect) {
TCNT1 = 34286;
if(dataLed == 0) {
dataLed = 1;
}
else{
dataLed = 0;
}
digitalWrite(13, dataLed);
overflowCount++;
}
voidloop() {
Serial.print("Overf count = ");
Serial.println(overflowCount,DEC);
delay(100);
}
3. 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.












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 :
1. Buatlah rangkaian seperti Gambar 6.2.
2. Tuliskan sintaks program berikut ini, lakukan kompilasi dan upload program

































































#include<LiquidCrystal.h>
LiquidCrystal lcd(2,3,4,5,6,7);
unsigned int jam, menit, detik;
boolean led = 0;
ISR(TIMER1_OVF_vect) {
TCNT1H=0xC2;
TCNT1L=0xF7;
detik++;
if(detik>=60) {
detik = 0;
menit++;
if(menit>=60) {
menit = 0;
jam++;
if(jam>=24) {
jam = 0;
}
}
}
}
void initTimer1() {
TCCR1A=0x00;
TCCR1B=0x05;
TCNT1H=0xC2;
TCNT1L=0xF7;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
TIMSK1=0x01;
sei();
}
void setup() {
lcd.begin(16,2);
lcd.clear();
initTimer1();
}
void loop() {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Jam Digital");
lcd.setCursor(0,1);
lcd.print(jam,DEC);
lcd.print(":");
lcd.print(menit,DEC);
lcd.print(":");
lcd.print(detik,DEC);
delay(500);
}
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 :
1. Buatlahrangkaian s epertipadaGambar 6.3.
2. Tuliskansintaks program berikutini, kemudian lakukan
kompilasi dan upload
Program ke sistem
minimum Arduino.
voidsetup() // untuk settingan awal
program
{
Serial.begin(9600);
// kecepatan mengirim/transfer data
TCCR1A=0x00;
// nilai
timer 1 register 1 A
TCCR1B=0x06;
// nilai
timer1 register 1 B
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
}
voidloop() { //
eksekusi pengulangan
Serial.print("Nilai
TCNT1 = "); //
untuk menampilkan Nilai TCNT1=
Serial.println(TCNT1,DEC); // TCNT1 menghitung secara desimal
delay(100); //
penunda waktu
}
3.
Buka Serial Monit
or padaArduino IDE, kemudiantekanswitch pushbutton dan amati nilai TCNT1
yang ditampilkan pada Serial Monitor.