Rabu, 11 Desember 2013

EEPROM MEMORY


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 Termina l atau aplikasi lainnya, user dapat melakukan perintah baca dan tulis dari atau ke memori eeprom. Langkah kerja

>Tuliskan sintaks program berikut ini pada Arduino IDE, kemudian lakukan kompilasi dan upload program ke mikrokontroler,

#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 opera tion");
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 Ty pe 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 ag ain !");

}

}

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);

}

> Setelah itu upload program yang telah decompile ke mikrokontroler 


> Kemudian bukalah serial monitor pada menu tools atau dengan menekan CTRL+SHIFT+M  dan atur baudrate diserial monitor pada posisi 9600 dan ubah juga pengiriman data karakter CR + LF ,sehingga muncul gambar seperti dibawah ini:


Kemudian ketik Write pada layar untuk memasukkan alamat dan masukkan nilai datanya EEPROM ,setelah itu tutup layar serial monitor dan cabut kabel port arduino dari computer atau laptop anda:



Setelah itu pasang kembali kabel port arduino dan langsung buka serial monitor dan muncul layar seperti dibawah kemudian anda ketikkan ’ read ‘ pada layar dan tuliskan addres sebelumnya sehingga nilai data akan muncul seperti sebelumnya tanpa kita ketikkan karena telah tersimpan :










Rabu, 04 Desember 2013

TIMER SEBAGAI GENERATOR GELOMBANG

PERCOBAAN I

GENERATOR GELOMBANG DENGAN ADJUSTABLE DUTY CYCLE

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

Buatlah rangkaian seperti gambar dibawah ini



Buatlah program seperti dibawah ini dengan menggunakan software Arduino


Hasil dari percobaan I

 


PERCOBAAN II

GENERATOR GELOMBANG DENGAN ADJUSTABLE FREKUENSI

       Pada percobaan kali ini gelombang yang 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. 

Buatlah rangkaian seperti dibawah ini pada software ISIS



 Buatlah program seperti dibawah ini dengan menggunakan software Arduino

int setCycles;

void set(int cycles){
  char oldSREG;
  int dutyCycle = cycles*0.5;
  if (dutyCycle < 6) {
    dutyCycle = 6;
  }
  if (dutyCycle > 1015) {
    dutyCycle = 1015;
  }
  if (cycles < 50) {
    cycles = 50;
  }
  oldSREG = SREG;
  cli();
  ICR1 = cycles;
  OCR1A = dutyCycle;
  SREG = oldSREG;
}
void setup() {
  TCCR1A = 0;
  TCCR1B = _BV(WGM13);
  TCCR1B &= ~(_BV(CS10) | _BV(CS11) | _BV(CS12));
  TCCR1B |= _BV(CS10);
  DDRB |= _BV(PORTB1);
  TCCR1A |= _BV(COM1A1);
}
void loop() {
  int temp_cycles = analogRead(A0);
  if (temp_cycles != setCycles ) {
    setCycles = temp_cycles;
    set(setCycles);
  }
}


Hasil dari percobaan II
 



PERCOBAAN I

PWM DENGAN ADJUSTABLE FREKUENSI DAN DUTY CYCLE
 (70 KHZ 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 Register untuk mengeluarkan sinyal gelombang pada pin PWM.

Buatlah rangkaian seperti dibawah ini pada software ISIS

 

  Buatlah program seperti dibawah ini dengan menggunakan software Arduino

int setCycles;
int setDuty;
void set(int cycles, float duty){
  char oldSREG;
  int dutyCycle = cycles
  if (dutyCycle < 6){
    dutyCycle = 6;
  }
  if (dutyCycle > 1015) {
    dutyCycle = 1015;
  }
  if (cycles < 50) {
    cycles = 50;
  }
  oldSREG = SREG;
  cli();
  ICR1 = cycles;
  OCR1A = dutyCycle;
  SREG = oldSREG;
}
void setup() {
  TCCR1A = 0;
  TCCR1B = _BV(WGM13);
  TCCR1B &= ~(_BV(CS10) | _BV(CS11) | _BV(CS12));
  TCCR1B |= _BV(CS10);
  DDRB |= _BV(PORTB1);
  TCCR1A |= _BV(COM1A1);
}
void loop() {
  int temp_cycles = analogRead(A0);
  int temp_duty = analogRead(A1);
  if (temp_cycles != setCycles || temp_duty != setDuty){
    setCycles = temp_cycles;
    setDuty = temp_duty;
    set(setCycles, setDuty / 1024.0);
  }
}

Hasil dari percobaan III


 

Rabu, 30 Oktober 2013

KOMUNIKASI SERIAL

MENGIRIM DATA

Pada percobaan kali ini kita akan mengirim data teks melalui komunikasi serial. kemudian pada percobaan ini kita akan mengirim data berupa tulisan "Hello Word" dan pengiriman data akan menggunakan baudrate 9600.

Langkah langkah kerja :
1. tuliskan sintaks pada software Arduino 
  



2. Bukalah Serial Monitor Pada Software Arduino




3. Pastikan konfigurasi baudrate adalah 9600 pada Serial Monitor

 4. Dan tulisan "Hello Word" akan muncul pada serial monitor