Monday, December 23, 2013

PENGGUNAAN FUNGSI MATEMATIKA

10.1 Penggunaan fungsi pada Library  Math.h
          Pada percobaan kali ini akan dijelaskan penggunaan fungsi matematika pada pemograman mikrokkontroler menggunakan Arduino IDE. Fungsi-fungsi yang digunakan telah tersedia pada file library math.h.

10.1.1 Contoh sintaks program


10.1.2 Kesimpulan
          Dari hasil percobaan diatas dapat dikatakan fungsi trigonometri, parameter input fungsi dalam bentuk radian.


Terima Kasih..

SLEEP MODE DAN WATCHDOG TIMER

9.1 Sleep Mode selama 4 detik dan Wake Up saat terjadi Timer Overflow
          Pada percobaan kali ini kan dibuat program untuk mengakses mode sleep pada mikrokontroler. Mode sleep akan terjadi selama 4 deik, kemudian mikrokontroler akan aktif kembali (wake up). Pada saat wake up mikrokontroler akan melakukan perubahan terhadap ondisi 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).

9.1.1 Gambar rangkaian


9.1.2 Contoh sintaks program


9.1.3 Kesimpulan
          Pada praktikum diatas, dapat diketahui fungsi Watchdog timer yang digunakan untuk mengaktifkan kembali mikrokontroler dari mode sleep. Saat Watchdog timer aktif, fungsi pada mikrokontroller yang dinonaktifkan saat mode sleep akan aktif kembali. Dan pemanfaatan pada mikrokontroler biasanya watchdog timer digunakan untuk mereset kembali program ketika terjadi masalah atau program tersebut macet. Jadi ketika program yang sedang berjalan macet watchdog timer dapat kita gunakan untuk mereset kembali program (kembali ke awal).


Terima Kasih..



TIMER SEBAGAI GENERATOR GELOMBANG

7.1 Generator Gelombang dengan adjustable Duty Cycle
          Pada percobaan kali ini akan di buat program untuk mengeluarkan gelombang kotak pada pin 9 (0C1A). 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 analogWrite yang berfungsi untuk mengeluarkan sinyal gelombang pada pin Pulse Witdh Modulation (PWM).  

7.1.1 Gambar rangkaian


7.1.2 Contoh sintaks Program


7.1.3 For hasil simulasi


7.1.4 Kesimpulan
          Jika diputar keposisi minimum led akan semakin redup, hal ini disebabkan  oleh potensiometer yang berfungsi mengatur lebar pulsa duty cycle, saat potensiometer berada pada posisi minimum maka lebar pulsa akan kecil.



7.2 Generator Gelombang dengan Adjustable Frekuensi
          Pada percobaan kali ini akan di buat program untuk mengeluarkan gelombang kotak 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.

7.2.1 Gambar rangkaian 


7.2.2 Contoh sintaks program


7.2.3 For hasil simulasi


7.2.4 Kesimpulan
          Jika diputar keposisi minimum periode gelombang akan semakin kecil, sehingga frekuensi semakin besar begitu sebaliknya jika diputar keposisi maksimum periode gelombang akan besar, sehingga frekuensi menjadi kecil.


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 kali ini akan menggunakan konfigurasi register untuk mengeluarkan sinyal gelombang pada pin PWM.

7.3.1 Gambar rangkaian


7.3.2 Contoh sintaks program


7.3.3 For hasil simulasi


7.3.4 Kesimpulan
          Perubahan frekuensi akan diatur oleh potensiometer yang terhubung pada pin A0. Perubahan duty cycle  akan diatur oleh potensiometer yang terhubung pada pin A1.



Terima Kasih..



Monday, November 4, 2013

TIMER DAN COUNTER

PERCOBAAN :

6.1 Penggunaan Timer Ov erflow Untuk LED Blinking

Pada percobaan kali ini akan dibuat program untuk membuat led berkedip per 500 milliseconds. Pada dasarnya LED akan toggle (berubah kondisinya) setiap terjadi interupsi timer overflow. Nilai register timer di-set sedemikian rupa sehingga menghasilkan waktu overflow per 500 milliseconds.


Prosedur :


1.  Buatlah rangkaian seperti pada Gambar 6.1.


2.      Tuliskan sintaks program berikut ini, kemudian lakukan kompilasi dan upload program ke sistem minimum Arduino.
boolean dataLed = 0;

unsigned int overflowCount = 0;

void setup() {

Serial.begin(9600);
pinMode(13, OUTPUT);
TCCR1A = 0;

TCCR1B = 0;

TCNT1 = 34286;
TCCR1B |= (1 << CS12);      // 256 prescaler
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); delay(100);
} 


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.


Pertanyaan :

1.   Jika dilakukan perhitungan konfigurasi register pada sintaks  program Percobaan

6.1, timer 1 akan overflow setiap berapa milliseconds ?

1/fCLK x (FFFFh+1)=0.125uS 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 !
Timer/Counter adalah hal yang hampir sama, Timer berarti Penghitung interval atau selang waktu sedangkan Counter adalah penghitung cacahan. Dalam penggunaannya dalam mikrokontroler perbedaan antara timer dan counter adalah pada penggunaan sumber clock nya. Timer/Counter berfungsi sebagai Timer jika sumber clock nya menggunakan internal clock  yaitu Kristal lalu akan berfungsi sebagai Counter jika sumber clock nya menggunakan external clock. Sedangkan delay yaitu fungsi yang digunakan untuk mengatur kecepatan pada program, fungsi ini biasanya digunakan programmer untuk mengatur kecepatan akurasi, namun fungsi ini tidak dapat dijalankan langsung pada codeblocks seperti layaknya pada Turbo C.


3.      Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 6.1 !
boolean dataLed = 0; // inisialisasi untuk menggunakan al jabar boolean

unsigned int overflowCount = 0; // menginilasisasi overflowcount bernilai 0
void setup() {// setting program pada awal

Serial.begin(9600);//kecepatan transfer data serial
pinMode(13, OUTPUT); //pin 13 sebagai output
TCCR1A = 0; // timer register 1 port A bernilai 0

TCCR1B = 0; // teimer register 1 prt B bernilai 0

TCNT1 = 34286; // Set timer 1counter initial valu to 34286
TCCR1B |= (1 << CS12);          // 256 prescaler
TIMSK1 |= (1 << TOIE1); // Timer/Counter Interrupt Mask Register 

sei();
}

ISR(TIMER1_OVF_vect) //interrupt untuk timer 1
{TCNT1 = 34286;
if(dataLed == 0) // jika led bernilai 0
{
dataLed = 1; //led bernilai 1
}
else {

dataLed = 0; led bernilai 0

}

digitalWrite(13, dataLed); //pin 13 sebagai dataled
 overflowCount++;

}

void loop() { // mengulang program yang dieksekusi

Serial.print("Overflow count = "); //mengirimkan data serial berupa “overflow count = “
Serial.println(overflowCount,DEC); /mengirimkan data overflowCount, DEC
delay(100); menunda selama 1 mS
}

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.


2.  Tuliskan sintaks program berikut ini, lakukan kompilasi dan upl oad 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() //memanggil fungsi timer
{ 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);
}


Pertanyaan

1.      Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 6.2 !
#include<LiquidCrystal.h> //library lcd
LiquidCrystal lcd(2,3,4,5,6,7); //input lcd pada pin 2,3,4,5,6,7
unsigned int jam, menit, detik; //inisialisasi jam,detik,menit
boolean led = 0;

ISR(TIMER1_OVF_vect) //register untuk timer 1
{ TCNT1H=0xC2; //program memanggil timer/counter 1
TCNT1L=0xF7;  //program memanggil timer/counter 1
detik++;
if(detik>=60) {

detik = 0; menit++;if(menit>=60) {

menit = 0; jam++; if(jam>=24) {
jam = 0;

}

}
}
2         
}

void initTimer1() //memanggil fungsi timer1
{ 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 (kolom dan baris)
lcd.clear(); // menghapus tampilan lcd
initTimer1();//memanggil funsi timer 1
}

void loop()
{ lcd.clear(); //menghapus tampilan lcd
lcd.setCursor(0,0);//pada baris 1

lcd.print("Jam Digital"); //lcd menampilkan “Jam Digital” 
lcd.setCursor(0,1); //pada baris 2
lcd.print(jam,DEC); //lcd menampilkan “jam”
lcd.print(":"); //lcd menampilkan “ : “
lcd.print(menit,DEC); //lcd menampilkan “menit”
lcd.print(":"); //lcd menampilkan “ : “
lcd.print(detik,DEC); //lcd menampilkan “detik”
delay(500); ditunda selama 5mS
}

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.


Prosedur :

1.  Buatlah rangkaian seperti pada Gambar 6.3.


2.  Tuliskan  sintaks  program  berikut  ini,  kemudian  lakukan  kompilasi  dan  upload

program ke sistem minimum Arduino.

void setup() { Serial.begin(9600); TCCR1A=0x00; TCCR1B=0x06; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00;
}

void loop() {

Serial.print("Nilai TCNT1 = "); Serial.println(TCNT1,DEC); delay(100);
}


3.     Buka Serial Monitor pada Arduino IDE, kemudian tekan switch pushbutton dan amati nilai TCNT1 yang ditampilkan pada Serial Monitor.


Pertanyaan :

1.     Kapankah nilai counter (TCNT1) akan berubah ? Saat switch ditekan atau dilepas ? Jelaskan ! nilai counter berubah pada saat ditekan push button . mencacah nilainya dari HIGH menuju LOW

3.                 2.  Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 6.3 !
void setup()
{ Serial.begin(9600); //kecepatan mentransfer data
TCCR1A=0x00; //register control timer 1 A
TCCR1B=0x06; //timer control register 1 B 0000 0110
TCNT1H=0x00; //timer counter register 1 dengan byte 00
TCNT1L=0x00; //timer counter register 1 dengan byte 00
ICR1H=0x00;  //input register capture1 16 byte
ICR1L=0x00; //input register capture1 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() { //program mengulang eksekusi program

Serial.print("Nilai TCNT1 = "); //menanfer data serial “Nilai TCNT1=”
Serial.println(TCNT1,DEC); //transfer data serial TCNT!
delay(100);//menunda selama 1 mS
}


6.4  Counter Mode Rising Edge

Pada percobaan kali ini akan dibuat program yang fungsinya sama dengan Percobaan 6.3. Namun pada percobaan kali ini konfigurasi counter menggunakan mode rising edge.


Prosedur :

1.      Gantilah sintaks program pada Percobaan 6.5 dengan sintaks program berikut ini, kemudian lakukan kompilasi dan upload program ke sistem minimum Arduino. void setup()
{ Serial.begin(9600);
 TCCR1A=0x00; //
TCCR1B=0x07;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00;
}

void loop() {

Serial.print("Nilai TCNT1 = "); Serial.println(TCNT1,DEC); delay(100);
}



2.     Buka Serial Monitor pada Arduino IDE, kemudian tekan switch pushbutton dan amati nilai TCNT1 yang ditampilkan pada Serial Monitor. 

Pertanyaan

1.      Kapankah nilai counter akan berubah ? Saat switch ditekan atau dilepas ? Jelaskan !
nilai counter berubah pada saat ditekan push button . pada saat nilai nya LOW menuju HIGH

2.      Jelaskan perbedaan penggunaan counter mode falling edge dan mode rising edge !
Counter falling edge mencacah nilainya dari HIGH menuju LOW sementara rising edge mencacah dari HIGH menuju LOW

3.      Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 6.4 !
void setup()
{ Serial.begin(9600); //kecepatan mentransfer data
TCCR1A=0x00; //register control timer 1 A
TCCR1B=0x07; //timer control register 1 B 0000 0111
TCNT1H=0x00; //timer counter register 1 dengan byte 00
TCNT1L=0x00; //timer counter register 1 dengan byte 00
ICR1H=0x00;  //input register capture1 16 byte
ICR1L=0x00; //input register capture1 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() { //program mengulang eksekusi program

Serial.print("Nilai TCNT1 = "); //menanfer data serial “Nilai TCNT1=”
Serial.println(TCNT1,DEC); //transfer data serial TCNT!
delay(100);//menunda selama 1 mS
}



Terima Kasih