Kamis, 28 November 2013

PRAKTIKUM 7

PRAKTIKUM 7
TIMER SEBAGAI GENERATOR GELOMBANG


TUJUAN :
1. Mampu membuat program untuk memanfaatkan timer sebagai generator gelombang.
2. Mampu membuat program untuk memanfaatkan timer sebagai generator gelombang dengan adjustable duty cycle
3. Mampu membuat program untuk memanfaatkan timer sebagai generator gelombang adjustable frekuensi.

PERALATAN :
1. Komputer : 1set
2. Arduino Uno : 1pcs
3. Project Board : 1pcs
4. Kabel Jumper : 1set
5. LCD : 1pcs
6. Potensiometer 10K : 3pcs
7. LED : 1pcs
8. Resistor 330 Ohm : 1pcs
9. Transistor 2N2222 : 1pcs
10. Resistor 2K2 : 1pcs

PERCOBAAN :

7.1 Generator Gelombang dengan Adjustable Duty cycle
          Pada percobaan kali ini akan dibuat program untuk mengeluarkan gelombang kotak pada pin 9 (OC1A) . Gelombang yang akan dikeluarkan pada pin 9 adalah gelombang berbentuk kotak dengan duty cycle dapat diatur lebarnya. Lebar duty cycle akan diatur oleh potensiometer yang terhubung pada pin A0. Pada percobaan kali ini akan digunakan fungsi analogWrite yang berfungsi untuk mengeluarkan sinyal gelombang pada pin Pulse Width Modulation (PWM).

Prosedur : 
1. Buatlah rangkain seperti Gambar 7.1.
2. Tuliskan sintaks program berikut ini pada Arduino IDE, kemudian lakukan kompilasi dan upload program kesistem minimum Arduino.

Tugas dan Pertanyaan :
1. Putarlah potensiometer R3 dari minimum sampai maksimum, kemudian amati intensitas cahaya pada LED. Jika potensiometer diputar pada posisi minimum bagaimana kondisi intensitas cahaya LED ? semakin terang atau semakin redup ? Jelaskan kenapa !
2. Jika potensiometer diputar pada posisi maksimum bagaimana kondisi intensitas cahaya LED ? semakin terang atau semakin redup ? Jelaskan kenapa !
3. Lakukan simulasi dengan aplikasi Proteus, kemudian amati bentuk gelombang pada test point. Tampilkan gambar sinyal pada laporan !
4. Jelaskan sintaks program pada Percobaan 7.1 ! 


7.2 Generator Gelombang dengan Adjustable Frekuensi
          Pada percobaan kali ini gelombang yang akan dikeluarkan pada pin 9 adalah gelombang berbentuk kotak dengan duty cycle yang besarnya tetap yaitu 50%, namun besarnya frekuensi dapat berubah-ubah. Perubahan frekuensi akan diatur oleh potensiometer yang terhubung pada pin A0. Program pada percobaan kali ini akan menggunakan konfigurasi register untuk mengeluarkan sinyal gelombang pada pin PWM.

Prosedur :
1. Buatlah rangkaian seperti pada Gambar 7.2
2. Tuliskan sintaks program berikut ini pada Arduino IDE, kemudian lakukan kompilasi dan upload program kesistem minimum Arduino.

Tugas dan Pertanyaan :
1. Lakukan simulasi dengan aplikasi Proteus, kemudian amati bentuk gelombang pada test point. Jika potensiometer R3 diputar sampai posisi minimum berapakah nilai frekuensi yang terukur ? Jika potensiometer diputar sampai posisi maksimum berapakah nilai frekuensi yang terukur ?
2. Bagaimana dengan lebar pulsa ( duty cycle ), lebahnya berubah-ubah atau tetap ?


7.3 PWM dengan Adjustable Frekuensi dan Duty Cycle (7KHz sampai 300 KHz)
          Pada percobaan kali ini gelombang yang akan dikeluarkan pada pin 9 adalah gelombang berbentuk kotak dengan duty cycle dan frekuensi yang dapat berubah-ubah. Perubahan frekuensi akan diatur oleh potensiometer yang terhubung pada pin A0. Perubahan duty cycle akan diatur oleh potensiometer yang terhubung pada pin A1. Program pada percobaan kali ini akan menggunakan konfigurasi
mengeluarkan sinyal gelombang pada pin PWM.

Prosedur :
1. Rangkailah rangkaian pada Gambar 7.3
2. Tuliskan sintaks program berikut ini, kemudian lakukan kompilasi dan upload program.

Tugas dan Pertanyaan :
1. Lakukan simulasi dengan aplikasi Proteus, kemudian amati bentuk gelombang besarnya frekuensi, dan lebar pulsa pada test point. Jika potensiometer pada A0 diputar sampai posisi minimum berapakah nilai frekuensi yang terukur ? Jika potensometer diputar sampai posisi maksimum berapakah nilai frekuensi yang
terukur ?
2. Jika potensiometer pada A1 diputar dari posisi minimum sampai posisi maksimum, apakah yang akan berubah ?

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

}