Pages

Sabtu, 07 Desember 2013

PRATIKUM 6 TIMER DAN COUNTER

 PRATIKUM 6 
TIMER DAN COUNTER



TUJUAN :
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
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
}

TugasdanPertanyaan :

1.      Kapankah nilai counter akan berubah ? Saat switch ditekan atau dilepas ?Jelaskan   
 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