PRATIKUM 6
TIMER DAN COUNTER
1. Mampu membuat program yang menggunakan fitutr timer ssebagai pewaktu
2. Mampu membuat program yang menggunakan fitur timer sebagai penghitung
3. Mampu mempergunakan fitur timer pada mikrokontroler untuk membuat jam sederhana.
PERALATAN :
1. Komputer : 1 set
2. Arduino Uno : 1 pcs
3. Kabel USB tipe B : 1 pcs
4. Project Board : 1 pcs
5. Kabel jumper : 1 set
6. LED : 1 pcs
7. Resistor 330 Ohm : 1 pcs
8. Switch pushbutton : 1 pcs
9. LCD : 1 pcs
10. Potensiometer : 1 pcs
PERCOBAAN :
6.1 Penggunaan timer Overflow untuk LED blinking
6.1 Penggunaan timer Overflow untuk LED blinking
Pada percobaan kali ini akan dibuat program untuk membuat led berkedip per 500 miliseconds. Pada dasarnya led akan toggle (berubah kondisinya) setiap terjadi interupsi timer overflow. Nilai register timer di-set sedemikan rupa sehingga menghasilkan waktu overflow per 500 miliseconds.
Prosedur :
1. Rangkailah rangkaian pada gambar dibawah ini.
2. Tuliskan sintaks program berikut ini kemudian lakukan compile dan upload program kesystem minimum arduino.
void
setup() {
Serial.begin(9600);
pinMode(13,
OUTPUT);
TCCR1A
= 0;
TCCR1B
= 0;
TCNT1
= 34286;
TCCR1B
|= (1 << CS12); //256 prescale
TIMSK1
|= (1 << TOIE1);
Sei();
}
ISR(TIMER1_OVF_vect){
TCNT1
= 34286;
if (dataled == 0){
dataled
= 1;
}
else {
dataled
= 0;
}
digitalWrite(13,
dataled);
overflowCount++;
}
void
loop() {
serial.print(“Overflow Count =”);
serial.println(OverflowCount,DEC);
}
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.
Tugas dan Pertanyaan :
1. Jika dilakukan perhitungan konfigurasi register pada sintaks program Percobaan 6.1, timer 1 akan overflow setiap berapa milliseconds ?
jawab : 19,72
2. Jelaskan perbedaan penggunaan delay dan timer overflow !
Delay untuk menunda pada saat program sedang
berjalan dan tidak bisa bersamaan atau diimbangi pada program lainnya. sedangkan, timer overflow untuk menghitung pada
program yang di jalankan dan dapat menambahkan sebuah program dengan bersamaan.
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);
}
Tugas dan Pertanyaan :
1. Ubahlah sintaks program pada Percobaan 6.2 sehingga jam menampilkan waktu saat ini !
2. Jika dilakukan perhitungan dengan konfigurasi register pada sintaks program Percobaan 6.2, timer 1 akan overflow setiap berapa milliseconds ?
3. Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 6.2 !
#include<LiquidCrystal.h> // untuk membaca dan mengenalkan
LiquidCrystal di library yang kan dijalankan //
LiquidCrystal lcd(2,3,4,5,6,7); // Untuk menginisialisasikan dan mensetting pada pin 2,3,4,5,6,7 di
LCD //
unsigned int jam, menit, detik; // menginisialisasikan variabel jam,menit,detik //
boolean led = 0; // mengenalkan variabel
led bertipe bolean (0 atau 1) //
ISR(TIMER1_OVF_vect) { // Interrupt
service routin timer 1 //
TCNT1H=0xC2; // Memasukan nilai timer 1 register H hex=122(c2) //
TCNT1L=0xF7; // Memasukan timer1/counter register L
hex=157 //
detik++; // untuk
menambahkan detiknya secara terus-menerus //
if(detik>=60) { // jika
detik lebih besar dari 60 //
detik = 0; // detik akan kembali 0 //
menit++; // untuk
menambahkan variabel menit secara terus-menerus //
if(menit>=60) { // jika nilai menit lebih
besar dari 60 //
menit = 0; // menit akan kembali ke
0
jam++; //untuk
menambahkan variabel jam secara terus-menerus //
if(jam>=24) { //
jika nilai variabel jam lebih besar dari 24 //
jam = 0; // variabel jam akan
kembali ke 0
}
}
}
}
void initTimer1() {
TCCR1A=0x00; // nilai timer 1 register
1 A = 0 //
TCCR1B=0x05; // nilai timer 1 register
1B = 5 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;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
TIMSK1=0x01; // Timer/Counter Interrupt Mask Register //
sei();
void setup() {
lcd.begin(16,2); // menampilkan pada lcd baris16 kolom 2 baris //
lcd.clear(); // menghapus tampilan
sebelumnya pada
lcd //
initTimer1(); // masukan program dalam varibael initTimer 1 //
void loop() {
lcd.clear(); // menghapus tampilan sebelumnya pada lcd //
lcd.setCursor(0,0); // untuk menampilkan cursor pertama pada lcd
//
lcd.print("Jam Digital"); // menampilkan tulisan jam digital pada lcd //
lcd.setCursor(0,1); // untuk
menampilkan di kolom 0 dan baris 1 //
lcd.print(jam,DEC); // menampilkan nilai dari jam dalam bentuk desimal //
lcd.print(":"); //
menampilkan tanda “:” //
lcd.print(menit,DEC); // menampilkan nilai
dari menit dalam desimal //
lcd.print(":"); // menampilkan tanda
“:” //
lcd.print(detik,DEC); // menampilkan nilai dari variabel detik dalam
desimal //
delay(500); // mendelay selama 500 ms //
}
6.3 Counter Mode Falling Edge
Padapercobaan kali
ini akan dibuat program
yang berfungsi untuk menghitung jumlah penekanan switch pada input counter. Konfigurasi counter menggunakan mode falling edge.
Prosedur :
1. Buatlah rangkaian seperti gambar 6.3
2. Tuliskan sintaks
program berikutini, kemudian lakukan kompilasi dan upload
program kesistem minimum Arduino.
voidsetup()
{Serial.begin(9600); // untuk menginisialisasikan bahwa serial
yang di monitor menggunakan komunikasi serial dengan kecepatan 9600 bit per
second//
TCCR1A=0x00; // nilai pada timer1 register 1 A = 0
//
TCCR1B=0x06; // nilai pada timer1 register 1 B = 6 //
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
}
voidloop()
{ // Berfungsi sebagai salah
satu fungsi yang hanya di panggil sekali dan satu kali eksekusi ketika awal
program berjalan //
Serial.print("Nilai TCNT1 = "); // untuk menampilkan Nilai TCNT1 pada serial print //
Serial.println(TCNT1,DEC);
// menampilkan TCNT1 dalam desimal //
delay(100); // delay selama 100 ms //
} 3. Buka Serial Monit or padaArduino IDE, kemudiantekanswitch pushbuttondanamatinilai TCNT1 yang ditampilkanpada Serial Monitor.
TugasdanPertanyaan :
1. Kapankah nilai counter
(TCNT1) akan berubah
?Saat switch ditekan atau dilepas ?Jelaskan !
ketika switch ditekan,
karena program yang digunakan yaitu counter mode falling
2. Berapakah nilai maksimal counter jika input
counter menggunakan pin T1 (Timer?Jelaskankenapa
!
6.4 Counter Mode Rising edge
Pada percobaan kali ini akan dibuat program yang
fungsinyasamadenganPercobaan 6.3. Namunpadapercobaan kali inikonfigurasicountermenggunakan
mode rising edge.
Prosedur :
1.
Gantilah sintaks program pada Percobaan 6.5 dengan sintaks p rogram berikut ini, kemudian lakukan kompilasi dan upload
program kesistem minimum Arduino.
2.
Monitor pada Arduino IDE, kemudian tekan switch push button dan amati nilai TCNT1 yang
ditampil kan pada Serial Monitor.
voidsetup()
{
Serial.begin(9600); // untuk menginisialisasikan bahwa serial yang di monitor
menggunakan komunikasi serial dengan kecepatan 9600 bit per second//
TCCR1A=0x00; // nilai pada timer1 register 1 A = 0 //
TCCR1B=0x07; // nilai pada
timer1 register 1 B = 7 //
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
}
voidloop() { // Berfungsi sebagai salah
satu fungsi yang hanya di panggil sekali dan satu kali eksekusi ketika awal
program berjalan //
Serial.print("Nilai TCNT1 = "); // untuk menampilkan Nilai TCNT1 pada serial
print //
Serial.println(TCNT1,DEC); // menampilkan TCNT1
dalam desimal //
delay(100); // delay selama 1000 ms
}
Pada saat
switch dilepas karena program yang digunakan yaitu counter mode rising
2.
Jelaskanperbedaanpenggunaancounter
mode falling edgedan mode rising edge !
Mode falling edge adalah pada saat terjadi posisi switch
mengalami perubahan kondisi dari high ke low, sedangkan mode rising edge sebaliknya dari mode falling edge yaitu dari low ke high.
Tidak ada komentar:
Posting Komentar