Hasil Percobaan 6.1 Penggunaan Timer Overflow unutk LED Blinking
Hasil Percobaan 6.2 Jam Digital Menggunakan Timer
Hasil Percobaan 6.3 Counter Mode Falling Edge
Hasil Percobaan 6.4 Counter Mode Rising Edge
PRAKTIKUM 6
TIMER DAN COUNTER
TUJUAN :
1. Mampu membuat program yang menggunakan fitur timer sebagai pewaktu.
2. Mampu membuat program yang menggunakan fitur timer sebagai penghitung.
3. Mampu mempergunakan fitur timer pada mikrokontroller untuk membuat jam digital sederhana.
PERALATAN :
1. Komputer : 1set
2. Arduino Uno : 1pcs
3. Kabel USB tipe B : 1pcs
4. Project Board : 1pcs
5. Kabel Jumper : 1set
6 LED : 1pcs
7. Resistor 330 Ohm : 1pcs
8. Switch Pushbutton : 1pcs
9. LCD : 1pcs
10. Potensiometer : 1pcs
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 toogle (berubah
kondisinya) setiap terjadi interupsi timer overflow. Nilai register timer
di-set sedemikian rupa sehingga menghasilkan waktu overflow per 500
milliseconds.
Tugas dan Pertanyaan :
1. Jika dilakukan perhitungan konfigurasi register pada sintaks program percobaan 6.1 , timer1 akan overflow setiap berapa milliseconds ?
ð 1/fCLK x (FFFFH+1) = 0.25uS x
34286 = 0.004285
TMAX = 1/fCLK x (FFFFh+1) x N = 0.004285*256 = 19.72
2. Jelaskan perbedaan penggunaan delay dan timer overflow !
ð
Delay adalah waktu tunda selama program sedang
bejalan sehingga tidak bisa diselingi oleh program lainnya , sedangkan
ð
Timer overflow adalah penghitung atau pencacah
sehingga selama menghitung dapat disiapkan beberapa program.
3. Jelaskan fungsi tiap baris dari sintaks program pada percobaan 6.1 !
boolean dataLed = 0;// menganalisa variable bertipebolean(1/0)
unsigned int overflowCount
= 0;//pengisolasianoverflowcountbernilai
0
void setup() { default program
Serial.begin(9600);// kecepatan transfer
data serial
pinMode(13, OUTPUT);//pin 13 sebagai
output
TCCR1A = 0;// timer register 1a =0
TCCR1B = 0;// timer register 1b=0
TCNT1 = 34286;//set timer 1counter value ke 34286
TCCR1B |= (1 << CS12); // 256 prescaler
TIMSK1 |= (1 << TOIE1);// timer counter
interrupt mask register
sei();
}
ISR(TIMER1_OVF_vect) //interuft service
untuk timer 1
{TCNT1 = 34286; // set timer1 counter value 34286
if(dataLed == 0) { // kondisijika data
led= 0
dataLed
= 1; //
maka led akanmenjadi 1
}
else
{
dataLed
= 0;
//masukanbernilai 0
}
digitalWrite(13, dataLed); //baca pin 13 dari
variable dataled
overflowCount++; // nilai di tambah 1
}
void loop() {
Serial.print("Overflow count=”): //[enampilantulisan overflow count
Serial.println(overflowCount,DEC);
//menampilkannilaidari overflow count
delay(100);
//pengaturanwaktusebanyak 100 milisecond
}
6.2 Jam Digital Menggunakan Timer
Pada Percobaan kali ini akan dibuat program sederhana yang berfungsi sebagai jam digital dengan memeanfaatkan ditur timer mikrokontroller. Timer akan dikonfigurasikan sehingga terjadi overflow setiap 1detik. Tiap timer terjadi overflow, variable detik, menit dan jam akan di update nilainya. Nilai variable tersebut akan ditampilkan pada LCD.
Tugas dan Pertanyaan :
1. Ubahlah sintaks program pada percobaan 6.2 sehingga jam menampilkan waktu saat ini !
ð
Hal ini dapat dilakukan pada praktikum secara
langsung.
2. Jika dilakukan perhitungan konfigurasi register pada sintaks program percobaan 6.2 , timer1 akan overflow setiap berapa milliseconds ?
ð
Timer 1 akan overflow setiap 60000 ms.
3. Jelaskan fungsi tiap baris dari sintaks program pada percobaan 6.2 !
#
include<LiquidCrystal.h> // memanggil
library dari lcd
LiquidCrystal
lcd(2,3,4,5,6,7); // menginilisasi pin
pada lcd
unsigned
int jam, menit, detik; //
menginilissasi variabel jam,menit,detik
boolean
led = 0; // variabel led bertipe
bolean (0 atau 1)
ISR(TIMER1_OVF_vect)
{ // Interupt service routin untuk
timer 1
TCNT1H=0xC2;
// Time Value 1 H hex=122(c2)
TCNT1L=0xF7;
// Time Value 1 L hex=157
detik++;
// looping tiap detik + 1
if(detik>=60)
{ // Syarat, detik >= 60
detik
= 0; // nilai output = 0 (LOW)
menit++; // menitnya bertambah 1
if(menit>=60)
{ // Syarat, menit >=60
menit
= 0; // nilai output menitnya menjadi =
0 (LOW)
jam++;
// Jam bertambah 1
if(jam>=24)
{ // Syarat, jam >= 24
jam =
0; // nilai output jamnya menjadi 0 =
(LOW)
}
}
}
}
void initTimer1()
{ // Fungsi penginisialisasi timer 1
TCCR1A=0x00; // nilai timer1 register 1 A = 0
TCCR1B=0x05;
// nilai timer1 register 1B = hexadesimal
05
TCNT1H=0xC2; // nilai counter/timer 1H penghitung sampai
C2(122)
/presceler
TCNT1L=0xF7;
// nilai counter/timer 1L akan menghitung
sampai
F7(157) //presceler
ICR1H=0x00; // Timer1 Input
Capture Register
ICR1L=0x00;
OCR1AH=0x00; // Timer1 Output
Capture Register
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
TIMSK1=0x01;
// Timer Interrupt
Mask Register (TIMSK)
sei();
}
void setup()
{ // Fungsi penginisialisasi
keluaran
lcd.begin(16,2);
// Set cursor lcd di mulai pada baris
& kolom 16,2
lcd.clear(); //
menghapus data LCD sebelumnya
initTimer1(); //
Penginisialisasi timer 1
}
void loop() { // Fungsi Mengeksekusi program
lcd.clear(); //
Menghapus data pada LCD sebelumnya
lcd.setCursor(0,0);
// set cursor pada LCD pada baris & Kolom 0,0
lcd.print("Jam Digital"); //
Menampilkan tulisan pada layar LCD ketika
dihidupkan
lcd.setCursor(0,1);
// Set cursor pada LCD pada baris & kolom 0,1
lcd.print(jam,DEC);
//menampilkan tulisan pada layar lcd “JAM” dalam bentuk bilangan decimal
lcd.print(":"); //
menampilakan tanda “:” pada layar LCD setelah
tampilan “JAM”
lcd.print(menit,DEC);
// menampilkan tulisan pada layar lcd “Menit” dalam
bentuk bilangan decimal
lcd.print(":"); // menampilakan tanda “:” pada layar LCD
setelah
tampilan “Menit”
lcd.print(detik,DEC);
// menampilkan tulisan pada layar lcd “Detik” dalam
bentuk bilangan decimal
delay(500); // Waktu jeda pause tiap looping yaitu 500 mS
}
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.
Tugas dan Pertanyaan :
1. Kapankah nilai counter (TCNT1) akan berubah ? saat switch ditekan atau dilepas ? Jelaskan !
ð
Nilai counter TCNT1 akan berubah pada saat
kondisi push button dilepas kemudian ditekan. Hal ini terjadi karena pada
program ini yang digunakan adalah mode falling edge.
2. Berapakah nilai maksimal counter jika input counter menggunakan T1 (Timer1) ? (65535)
3. Jelaskan fungsi tiap baris dari sintaks program pada percobaan 6.3 !
void setup()
{
Serial.begin(9600); //kecepatan mentransfer data / baudrate
TCCR1A=0x00; //register control timer 1 A
TCCR1B=0x06; //timer control register 1 B byte = 0000 0110
TCNT1H=0x00; //timer counter register 1 , nilai byte 00
TCNT1L=0x00; //timer counter register 1 , nilai byte 00
ICR1H=0x00; //input register capture1 dengan nilai = 16 byte
ICR1L=0x00; //input register capture1 dengan nilai = 16 byte
OCR1AH=0x00; // output capture register1 A High
OCR1AL=0x00; //output capture register1 A Low
OCR1BH=0x00; //output capture register1 B High
OCR1BL=0x00; //output captire register1 B Low
}
void loop() //fungsi untuk mengeksekusi program
{
Serial.print("Nilai TCNT1 = "); //Menampilakn tulisan di layar LCD “Nilai
TCNT1=”
Serial.println(TCNT1,DEC); //transfer data serial TCNT1 dalam
bentuk
bilangan
decimal
delay(100); //menunda selama 1 mS
}
6.4 Counter Mode Rising Edge
Pada percobaan kali ini akan dibuat program yang
berfungsi untuk menghitung jumlah penekanan switch pada input counter.
Konfigurasi counter menggunakan mode rising edge.
Tugas dan Pertanyaan :
1. Kapankah nilai counter (TCNT1) akan berubah ? saat switch ditekan atau dilepas ? Jelaskan !
ð
Nilai counter TCNT1 akan berubah pada saat
kondisi switch ditekan kemudian dilepas. Hal ini terjadi karena pada program
ini yang digunakan adalah mode rising edge.
2. Jelaskan perbedaan penggunaan counter mode falling edge dan modde rising edge !
ð
Mode falling edge adalah perubahan yang terjadi
saat data atau nilainya berubah dari kondisi high ke low ,sedangkan
ð
Mode rising edge adalah perubahan yang terjadi
saat data atau nilainya berubah dari kondisi low ke high .
3. Jelaskan fungsi tiap baris dari sintaks program pada percobaan 6.4 !
void setup()
{
Serial.begin(9600); //kecepatan
mentransfer data / baudrate
TCCR1A=0x00; //register
control timer 1 A
TCCR1B=0x07; //timer
control register 1 B byte = 0000 0110
TCNT1H=0x00; //timer
counter register 1 , nilai byte 00
TCNT1L=0x00; //timer
counter register 1 , nilai byte 00
ICR1H=0x00; //input
register capture1 dengan nilai = 16 byte
ICR1L=0x00; //input
register capture1 dengan nilai = 16 byte
OCR1AH=0x00; //
output capture register1 A High
OCR1AL=0x00;
//output capture register1 A Low
OCR1BH=0x00; //output
capture register1 B High
OCR1BL=0x00; //output
captire register1 B Low
}
void loop() //fungsi
untuk mengeksekusi program
{
Serial.print("Nilai TCNT1 = ");
//Menampilakn tulisan di layar LCD “Nilai
TCNT1=”
Serial.println(TCNT1,DEC); //transfer
data serial TCNT1 dalam bentuk bilangan
decimal
delay(100); //menunda
selama 1 mS
}