Kamis, 19 Desember 2013

PRAKTIKUM 10

PENGGUNAAN FUNGSI MATEMATIKA

TUJUAN :
1.  Mampu mempergunakan fungsi matematika pada pemrograman mikrokontroler.
2.  Mampu  mengimplementasikan  fungsi  matematika  untuk  melakukan  perhitungan matematika sederhana.

PERALATAN :
1.  Komputer             : 1 set
2.  Arduino Uno        : 1 pcs
3.  Kabel USB tipe B : 1 pcs

PERCOBAAN :
10.1   Penggunaan Fungsi pada Library Math.h
            Pada percobaan kali ini akan dijelaskan penggunaan fungsi matematika pada pemrograman  mikrokontroler  menggunakan  Arduino  IDE.  Fungsi-fungsi  yang digunakan telah tersedia pada file library math.h.
Prosedur :
1.  Tuliskan sintaks program berikut ini, lakukan kompilasi dan upload program.
void  setup()  { Serial.begin(9600);
Serial.println("========== Fungsi  Matematika ===========");
Serial.print("cos(90) =  ");                             Serial.println(cos(90));
Serial.print("sin(45) =  ");                   Serial.println(sin(45));
Serial.print("tan(90) =  ");                   Serial.println(tan(90));
Serial.print("atan(90) =  ");                 Serial.println(atan(90));
Serial.print("atan2(90,10) =  ");        Serial.println(atan2(90,10));
Serial.print("sqrt(9) =  ");                   Serial.println(sqrt(9));
Serial.print("exp(9) =  ");                     Serial.println(exp(9));
Serial.print("log(100) =  ");                 Serial.println(log(100));
Serial.print("log10(100) =  ");             Serial.println(log10(100));
Serial.print("pow(9,2) =  ");                 Serial.println(pow(9,2));
Serial.print("square(9) =  ");               Serial.println(sqrt(9));
Serial.print("fabs(-1.5) =  ");             Serial.println(fabs(-1.5));
Serial.print("fmod(1.2334,2) =  ");    Serial.println(fmod(1.2334,2));
}
void  loop()  {
}

Tugas dan Pertanyaan :
1.  Buka aplikasi Serial Monitor, kemudian amati data yang ditampilkan pada Serial Monitor. Periksalah hasil perhitungan pada program secara manual. Apakah ada yang salah dari perhitungan program ? Jika ada sebutkan pada fungsi apa !
            tidak ada perhitungan yang salah pada program
2.  Pada fungsi trigonometri, parameter input fungsi dalam bentuk apa ? radian atau degree ?
            parameter inputnya dalam bentuk degree sedangkan outputnya dalam bentuk radian
3.  Buatlah kalkulator sederhana dengan antarmuka serial port, dimana kalkulator tersebut  mampu melakukan  perhitungan  besar  sudut  pada salah  satu  sudut segitiga. Gunakan fungsi trigonometri untuk melakukan perhitungan !


PRAKTIKUM 9

SLEEP MODE DAN WATCHDOG TIMER

TUJUAN :
1.  Memahami penggunaan mode sleep pada mikrokontroler.
2.  Memahami penggunaan watchdog timer pada program.

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 pcs
6.  LED                      : 1 pcs
7.  Resistor 330 Ohm : 1 pcs

PERCOBAAN :
9.1 Sleep Mode Selama 4 Detik dan Wake Up Saat Terjadi Timer Overflow
            Pada percobaan kali ini akan dibuat program untuk mengakses mode sleep pada mikrokontroler. Mode sleep akan terjadi selama 4 detik, kemudian mikrokontroler akan aktif kembali (wake up). Pada saat wake up, mikrokontroler akan melakukan perubahan terhadap kondisi LED yang terhubung pada pin 12. Sehingga jika program dijalankan, seakan-akan LED akan berkedip dengan selang waktu 4 detik. Namun, sebenarnya selama 4 detik tersebut mikrokontroler sedang dalam sleep mode (tidak melakukan apa-apa).
Prosedur :
1.  Rangkailah rangkaian pada Gambar 9.1 berikut ini.
2. Tuliskan  sintaks  program  berikut  ini  pada  Arduino  IDE, kompilasi dan upload program.
#include  <avr/sleep.h>
#include  <avr/power.h>
#define  LED_PIN  (13)
volatile  int  f_timer=0;
kemudian  lakukan
ISR(TIMER1_OVF_vect) {
if(f_timer ==  0)  {
f_timer  =  1;
}
}
void  enterSleep (void) {
set_sleep_mode(SLEEP_MODE_IDLE);      sleep_enable();
power_adc_disable();                                      power_spi_disable();
power_timer0_disable();                                 power_timer2_disable();
power_twi_disable();                                      sleep_mode();
sleep_disable();                                               power_all_enable();
}
void  setup()  {
pinMode(LED_PIN, OUTPUT);
TCCR1A  =  0x00;     TCNT1=0x0000;
TCCR1B  =  0x05;      TIMSK1=0x01;
}
void  loop()  {
if(f_timer==1) {
f_timer  =  0;
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
enterSleep();
}
}

Tugas dan Pertanyaan :
1.  Amati hasil Percobaan 9.1, buatlah kesimpulan !
            Dari percobaan 9.1 dapat diketahui bahwa setiap 8 detik, led yang ada pada pin 13 akan mengalami toogle.
2.  Apakah manfaat penggunaan sleep mode pada mikrokontroler ? Jelaskan !
            Manfaat penggunaan sleep mode yaitu untuk menghemat daya atau power, ketika mikrokontroller tidak digunakan dapat dengan mudah untuk mengaktifkan mikrokontroller dengan cepat.


9.2 Sleep Mode Selama 8 Detik dan Wake Up Saat Watchdog Timer Aktif
            Pada percobaan kali ini akan dibuat program untuk mengakses watchdog timer pada mikrokontroler. Watchdog timer akan digunakan untuk mengaktifkan kembali mikrokontroler dari mode sleep. Watchdog timer akan terjadi tiap 8 detik.
Prosedur :
1.  Gantilah sintaks program pada Percoban 9.1 menjadi seperti berikut ini, lakukan kompilasi dan upload program ke mikrokontroler.
#include  <avr/sleep.h>
#include  <avr/power.h>
#include  <avr/wdt.h>
#define  LED_PIN  (13)
volatile  int  f_wdt=1;
ISR(WDT_vect) {
if(f_wdt  ==  0)  { f_wdt=1;  }
else  {  Serial.println("WDT Overrun!!!"); }
}
void  enterSleep(void) {
set_sleep_mode(SLEEP_MODE_PWR_SAVE);
sleep_enable();                        sleep_mode();
sleep_disable();                       power_all_enable();
}
void  setup()  {
Serial.begin(9600);
Serial.println("Initialising...");
delay(100);
pinMode(LED_PIN,OUTPUT);
MCUSR  &=  ~(1<<WDRF);
WDTCSR  |=  (1<<WDCE)  |  (1<<WDE);
WDTCSR  =  1<<WDP0 |  1<<WDP3;
WDTCSR  |=  _BV(WDIE);
Serial.println("Initialisation complete.");
delay(100);
}
void  loop()  {
if(f_wdt  ==  1)  {
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
f_wdt  =  0;     enterSleep();
}
}

Tugas dan Pertanyaan :
1.  Amati hasil Percobaan 9.2, buatlah kesimpulan !
            Dari percobaan 9.2 dapat diketahui bahwa apabila program yang dijalankan HANG maka watchdog akan aktif setelah 8 detik , hal ini dapat dibuktikan dengan berkedipnya led  dan watchdog akan me-reset ulang program tersebut.
2.  Apakah manfaat penggunaan watchdog timer pada mikrokontroler ? Jelaskan !
            Manfaat penggunaan watchdog timer pada mikrokontroller adalah untuk menghindari program dari HANG permanen sehingga program masih dapat melakukan eksekusi program.

Selasa, 03 Desember 2013

PRAKTIKUM 8

PRAKTIKUM 8
EEPROM MEMORY


TUJUAN :
1. Mampu membuat program untuk melakukan penyimpanan data pada memori eeprom.
2. Mampu membuat program untuk melakukan pembacaan data pada memori eeprom.

PERALATAN :
1. Komputer : 1set
2. Arduino Uno : 1pcs
3. Kabel USB tipe B : 1pcs

PERCOBAAN :

8.1  Baca dan Tulis Memori EEPROM
          Pada percobaan kali ini akan dibuat program yang berfungsi sebagai antarmuka penanganan memori eeprom. Antarmuka program menggunakan komunikasi serial. Melalui serial terminal atau aplikasi lainnya, user dapat melakukan perintah baca dan tulis dari atau ke memori eeprom.

Prosedur :
1. Tuliskan sintaks program berikut ini pada Arduino IDE, kemudian lakukan
kompilasi dan upload program ke mikrokontroller,
#include <EEPROM.h>
boolean exitProgram = 0;

void setup() { 
Serial.begin(9600); 
Serial.println("========= EEPROM Access Via Serial ========");
Serial.println("Type this command to execute EEPROM operation");
Serial.println("write : For write data to EEPROM");
Serial.println("read : For read data from EEPROM");
Serial.println("clear : For clear all data in EEPROM");
Serial.println("exit : For exit from program");

void loop() { 
int command; 
while(!exitProgram) {
do{ 
Serial.print("Type Command >> ");
while(Serial.available()==0);
command = readCommandFromSerial();

switch(command) {
case 1 : Serial.println("Write EEPROM Selected");
        writeEEPROM();
        break;
case 2 : Serial.println("Read EEPROM Selected");
        readEEPROM();
        break;
case 3 : Serial.println("Clear EEPROM Selected");
        clearEEPROM();
        Serial.println("Clear EEPROM finished");
        break;
case 4 : Serial.println("Exit From Program");
        exitProgram = 1;
        break;
default : Serial.println("Wrong Command, Please Type Again !");
        break;
while(command == 0);
int readCommandFromSerial() {
char stringFromSerial[10];
char data; 
int command; 
int countData = 0;
for(int i=0;i<10;i++) {
stringFromSerial[i]=0; 
while(true) { 
if(Serial.available()) {
data = Serial.read();
Serial.write(data);
if(data=='\n') {
break; 
else { 
if(data!='\r') {
stringFromSerial[countData] = data; 
countData++;
if(strcmp(stringFromSerial,"write")==0) {
command = 1; 
else if(strcmp(stringFromSerial,"read")==0) {
command = 2;
else if(strcmp(stringFromSerial,"clear")==0) {
command = 3; 
else if(strcmp(stringFromSerial,"exit")==0) {
command = 4;
else{ 
command = 0; 

return command; 
int readValFromSerial() {
char stringFromSerial[10];
char data; 
int val; 
int countData = 0;
for(int i=0;i<10;i++) {
stringFromSerial[i]=0; 
while(true) { 
if(Serial.available()) {
data = Serial.read();
Serial.write(data);
if(data=='\n') {
break; 
else{ 
if(data!='\r') {
stringFromSerial[countData] = data; 
countData++;
sscanf(stringFromSerial,"%d",&val);
return val; 
void clearEEPROM() {
for(int i=0;i<512;i++) {
EEPROM.write(i,0);
void writeEEPROM() { 
int address; 
do{ 
Serial.print("Address : ");
address = readValFromSerial();
if(address>512) {
Serial.println("Addres maximal is 512 !, Please type again !");
while(address>512);
int data; 
do{ 
Serial.print("Data : ");
data = readValFromSerial();
if(data>512) {
Serial.println("Data maximal is 512 !, Please type again !");
while(data>512); 
EEPROM.write(address,data);
Serial.println("EEPROM Write Success !");
void readEEPROM() {
  int address; 
do{ 
Serial.print("Address : ");
address = readValFromSerial();
if(address>512) {
Serial.println("Addres maximal is 512 !, Please type again !");
while(address>512);
int data = EEPROM.read(address);
Serial.print("Data in Address ");
Serial.print(address,DEC);
Serial.print(" : ");
Serial.println(data,DEC);
}

Tugas dan Pertanyaan :
1. Jalankan aplikasi Serial Monitor pada Arduino, pastikan konfigurasi serial monitor menggunakan baudrate 9600 dan pada akhir pengiriman data disertakan karakter CR+LF. Lakukan penulisan data pada memori alamat 100, dengan data bernilai 10. Kemudian keluar dari program dan matikan power Arduino dan nyalakan kembali. Lakukan pembacaan data pada alamat 100, berapakah nilai data pada
alamat 100 ? Apakah data yang dituliskan sebelumnya hilang ?

2. Kenapa pada program penulisan data hanya dibatasi sampai 512 ? Jelaskan !

3. Kenapa pada program alamat memori yang dapat ditulisi data hanya sampai 512 ?
Jelaskan !

4. Buatlah kesimpulan dari praktikum ini !

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

}