Selasa, 03 Desember 2013

EEPROM MEMORY

malam bgogerzzz  ,,, malam ini ane mau kasik tau cara nyimpan data di ROM . kan kita da tauw tu kalau kita nilis2 program di arduino trus datanya kita upload tu datanya ada di RAM, dan seperti yang kita ketahui kalau data yang disimpan di RAM pasti lenyam atau ilang pada saat arduino itu mati atau gak ada listrik...heheheh....naahhh daripada itu kita pasti butuh kan nyimpan data di ROM. yang mana data tersebut gak akan hilang pada saat arduino mati atau padam.
ingin tauw kejelasaannya silakan baca sampai tuntas ya gan...?????

PERALATAN :

1.
Komputer
: 1 s et
2.
Arduino Uno
: 1 pcs
3.
Kabel USB tipe B : 1 pcs


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 Termina l atau aplikasi lainnya, user dapat melakuka n perintah baca dan tulis dari atau ke memori eeprom.
Prosedur :

1.   Tuliskan sintaks p rogram berikut ini pada Arduino IDE, kemudian lakukan kompilasi dan uplo ad 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 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 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);

}







==> buka serial monitor dan ketik : 
1. write 
2. masukan addres yang ingin dimasukan data("dari 1-512")
3. masukan data yang anda inginkan ("dari 1-512")
4. matikan arduino dan hidupkan lagi
5. buka serial monitor
6. ketik : read 
7. masukan alamat yang anda masukan tadi.



<<<>>>>> kesimpulan dari percobaan ini adalah kita dapat menyimpan data tanpa takut kehilangan data tersebut karena arduino mati dll. dan karena kita mengunakan arduino 8 bit kita hanya bisa memasukan data dan alamat sebsar 512



sekian dan terimah kasih kalau banyak salah ya mohon maklum namanya juga baru belajar....
AARRIGATOOOO GOSAIMAS......

Rabu, 27 November 2013

timer untuk gelombang generator

malam bry kali ini ane mau ngelanjutin tentang timer, teryata setelah di selidiki ternya timer juga bisa looh bry di jadikan sebagai gelombang generator.
ok langsung aja ane kasik tutorialnya :

PERCOBAAN :

percobaan ke 1
 Generator Gelombang dengan Adjustable Duty cycle


Pada percobaan kali ini akan dibuat program untuk mengeluarka n gelombang kotak pada pada pin 9 (OC1A) . Gelombang yang akan dikeluarkan pada pin 9 adalah gelombang berbentuk k otak dengan duty cycle dapat diatur lebarny a. Lebar duty cycle akan diatur oleh poten siometer yang terhubung pada pin A0. Pada percobaan kali ini akan digunakan fungsi analogWrite yang berfungsi untuk m engeluarkan sinyal gelombang pada pin Pu lse Width Modulation (PWM).
jadi, pada percobaan x ini kita belum mengunakan timer untuk membangkitkan signal. tapi kita hanya memanfaatkan PWM.
  
how to make :
1_ buatlah rangkaian di bawah ini




2_ buatlah program di bawah ini, lalu compile dan masukan .hex ke dalam proteus

int val = 0;
void setup() 
{ 
Serial.begin(9600);
pinMode(9, OUTPUT);
}

void loop() {
val = analogRead(A0); 
analogWrite(9, val/4); 
Serial.print("PWM Value = "); 
Serial.println(val,DEC); 
delay(500);

}
==> jalankan simulasinya dan amati bentuk gelombangnya
kesimpulan : rangkaian di atas dan program di atas berfungsi untuk mengeluarkan duty cycle... duty cycle adalah selisih dari t2 dan t1 atau selisi waktu gelombang saat keadaan high dan keadaan low jadi rumusnya adalah T= th +tl , D= th/T * 100%. dan 
nilai duty cycle pada program di atas dapat di atur dengan mengunakan potensio meter.

berikut merupakan video tutorialnya :

percobaan ke 2
  Generator Gelombang dengan Adjustable Frekuensi


Pada percobaan ka li ini gelombang yang akan dikeluarkan pada pin 9 adalah gelombang berbentuk k otak dengan duty cycle yang besarnya tetap yaitu 50%, namun besarnya frekuensi dapat berubah-ubah. Perubahan frekuensi akan diatur oleh potensiometer yang te rhubung pada pin A0. Program pada perco baan kali ini akan menggunakan konfigu rasi register untuk mengeluarkan sinyal ge lombang pada pin PWM.

how to make :
1_ rangkailah rangkaian di bawah ini 

2_buatlah program dibawah ini
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);
}
}


3_ jalankan simulasinya dan amati bentu gelombangya

==> kesimpulan dari percobaan 2 adalah : program pada percobaan 2 digunakan untuk mengatur keluaran frekuensinya dan duty cyclenya tetap sebesar 50% tidak bisa di ubah lagi.

berikut merupakan video tutorialnya: 


percobaan ke 3:
PWM dengan Adjustable Frekuensi dan Duty cycle (7 KHz sampai 300 KHz)

Pada percobaan ka li ini gelombang yang akan dikeluarkan pada pin 9 adalah gelombang berbentuk k otak dengan duty cycle dan frekuensi yang d apat berubah-ubah. Perubahan frekuensi akan diatur oleh potensiometer yang terhub ung pada pin A0. Perubahan duty cycle akan diatur oleh potensiometer yang terhu bung pada pin A1. Program pada percobaan kali ini akan menggunakan konfigur asi register untuk mengeluarkan sinyal ge lombang pada pin PWM.

how to make :
1_buatlah rangkaian di bawah ini :
2_buatlah program di bawa ini:
      
int setCycles; int setDuty;

void set(int cycles, float duty) { char oldSREG;

int dutyCycle = cycles * duty; 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);
}

}


3_ jalankan simulasi dan amati apa yang terjadi.


==> kesimpulan dari percobaan ke 3 adalah : percobaan ini berfungsi untuk mengatur besar duty cycle dan besar frekuensi gelombang keluaranya....pada potensio di pin A0 digunakan untuk mengatur frekuensinya, sedangkan pada pin A1 digunakan untuk mengatur duty cycle yang di inginkan.
berikut merupakan video tutorialnya:


demikianlah pos kali new
semoga kalian terhibur, mav kalau masih banyak kekurangan...