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 !