Kamis, 28 November 2013

PRAKTIKUM 6

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

}

0 komentar:

Posting Komentar