Watsap
para netijen yang baik, kembali lagi di postingan project solderku. Kali ini
saya kan membuat sebuah tutorial menulis dan membaca data di eeproom external
dengan menggunakan arduino. Ya kalo kita membaca teori tentang eeproom itu
merupakan sebuah memory penyimpanan data yang akan terus menyimpan data
meskipun supply tegangan pada eeproom itu terputus / power supply mati (cmwii).
Di ATMega328 pada arduino sebenernya memiliki eeproom internal sebesar 1 kB.
Pada postingan ini saya menggunakan eeproom external yaitu AT24C32, angka
terakhir C32 itu menandakan kapasitas data yang mampu disimpan sebesar 32 kbits. Dipasaran ada banyak banget macem macem IC eeproom yang memiliki
kapasitas penyimpanan yang lebih besar seperti AT24C128, AT24C256 dan masih
banyak lagi dah, penggunaan eproom ini tergantung keperluan sistem yang akan
kamu rancang yaaa. Komunikasi data yang digunakan untuk menulis atau membaca
data di eeproom ini menggunakan komunikasi I2C (Inter Integrated Circuit) dan yang mesti kita perlu perhatikan dalam
komunikasi ini adalah address di setiap hardware yang harus berbeda, karena
jika ada alamat address yang sama di antara hardware akan menyebabkan kekacauan
data dalam komunikasinya. Untuk menghindari itu alangkah baiknya kita melakukan
scanning address yang berfungsi untuk menentukan address di masing masing
hardware jika kita tidak tau addressnya, nah dari situ kita bisa atur alamat
address jika ada yang sama. Untuk menentukan alamat address di IC AT24C32 ini
kita dapat melihat pada data sheet seperti berikut :
A2
|
A1
|
A0
|
Address
|
0
|
0
|
0
|
0 x 50
|
0
|
0
|
1
|
0 x 51
|
0
|
1
|
0
|
0 x 52
|
0
|
1
|
1
|
0 x 53
|
1
|
0
|
0
|
0 x 54
|
1
|
0
|
1
|
0 x 55
|
1
|
1
|
0
|
0 x 56
|
1
|
1
|
1
|
0 x 57
|
Penulisan Alamat Address AT24C32
Pada
tabel diatas sudah saya paparkan untuk penulisan address AT24C32 ini dengan
catatan kita atur dulu pin A0, A1, A2 apakah pin tersebut di pull up / pull
down. Dan untuk bisa membaca alamat ini perlu juga mengingat pelajaran
elektronika digital tentang konversi bilangan binner yang angkanya 101010 itu
loooh. Pada program arduino yang saya gunakan itu pada addressnya menggunakan
bilangan hexadesimal dengan contoh penulisan 0x57 dan kalian boleh juga
menggunakan bilangan yang lainnya untuk menentukan alamat addressnya dengan
ketentuan nilainya sama ya jangan sampe salah tulis. Langsung dirakit kuy
rangkaiannya seperti gambar berikut
Nah jika dirasa sudah selesai ngerakitnya nggak apdol klo gak di share sorcodenya, berikut saya lampirkan sorkodenya sebagai berikut ready copas saja sudah
/* Menulis dan membaca data di Eeproom External
* By dimGusta
* IG : Projectsolderku
* www.projectsolderku.blogspot.com */
#include <Wire.h>
#define address 0x57 //addres harus match sebaiknya lakukan scanning alamat I2C
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
int nilai1, nilai2, x;
int data, data1, data2;
void setup() {
Wire.begin();
Serial.begin(9600);
lcd.begin (16, 2);
lcd.setBacklight(HIGH);
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
delay(1000);
}
void loop() {
if (digitalRead(2) == LOW) {
x++;
lcd.clear();
delay(100);
if (x >= 2) {
x = 0; //menormalkan tampilan
}
}
if (x == 0) { //keadaan normal
Wire.beginTransmission(address);//alamat addres hardware
Wire.write(0x00);//alamat pertama pembacaan / penulisan
Wire.write(0x00);//alamat kedua pembacaan / penulisan sesuai data sheet
Wire.endTransmission();
delay(10);
Wire.requestFrom(address, 2);//pembacaan di address hardware dan jumlah data yang tersimpan
delay(10);
data1 = Wire.read(); //data pertama
data2 = Wire.read(); //data kedua yang tersimpan
delay(10);
lcd.setCursor(0, 0);
lcd.print("Data Tersedia");
lcd.setCursor(0, 1);
lcd.print("v1="); lcd.print(data1);
lcd.setCursor(8, 1);
lcd.print("v2="); lcd.print(data2);
}
if (x == 1) {//mode setting
lcd.setCursor(0, 0);
lcd.print("Data Tesetting");
lcd.setCursor(0, 1);
lcd.print("v1="); lcd.print(nilai1);
lcd.setCursor(8, 1);
lcd.print("v2="); lcd.print(nilai2);
if (digitalRead(3) == LOW) {
nilai1 += 5;
delay(100);
if (nilai1 > 255) {
nilai1 = 0;
}
}
if (digitalRead(4) == LOW) {
nilai2 += 5;
delay(100);
if (nilai2 > 255) {
nilai2 = 0;
}
}
if (digitalRead(2) == LOW) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Saving data...");
Wire.beginTransmission(address);
Wire.write(0x00);
Wire.write(0x00);
Wire.write(nilai1);
Wire.write(nilai2);
Wire.endTransmission();
delay(2000);
lcd.clear();
x=0;
}
}
}
Jika sudah tidak ada eror maka raangkaian dapat berjalan seperti video demo dibawah ini, sekian tutorial kali ini jika kalian ingin tutorial yang lainnya jangan lupa komen di kolom komentar bisa di komentar via youtube atau komentar di bawah postingan. Full project nya ada di keterangan video ya atau disini
Oiya sama satu lagi jangan lupa subskrep channel yutup "Project Solderku" see next postingan, terimakasih sudah berkunjung (y)
/* Menulis dan membaca data di Eeproom External
* By dimGusta
* IG : Projectsolderku
* www.projectsolderku.blogspot.com */
#include <Wire.h>
#define address 0x57 //addres harus match sebaiknya lakukan scanning alamat I2C
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
int nilai1, nilai2, x;
int data, data1, data2;
void setup() {
Wire.begin();
Serial.begin(9600);
lcd.begin (16, 2);
lcd.setBacklight(HIGH);
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
delay(1000);
}
void loop() {
if (digitalRead(2) == LOW) {
x++;
lcd.clear();
delay(100);
if (x >= 2) {
x = 0; //menormalkan tampilan
}
}
if (x == 0) { //keadaan normal
Wire.beginTransmission(address);//alamat addres hardware
Wire.write(0x00);//alamat pertama pembacaan / penulisan
Wire.write(0x00);//alamat kedua pembacaan / penulisan sesuai data sheet
Wire.endTransmission();
delay(10);
Wire.requestFrom(address, 2);//pembacaan di address hardware dan jumlah data yang tersimpan
delay(10);
data1 = Wire.read(); //data pertama
data2 = Wire.read(); //data kedua yang tersimpan
delay(10);
lcd.setCursor(0, 0);
lcd.print("Data Tersedia");
lcd.setCursor(0, 1);
lcd.print("v1="); lcd.print(data1);
lcd.setCursor(8, 1);
lcd.print("v2="); lcd.print(data2);
}
if (x == 1) {//mode setting
lcd.setCursor(0, 0);
lcd.print("Data Tesetting");
lcd.setCursor(0, 1);
lcd.print("v1="); lcd.print(nilai1);
lcd.setCursor(8, 1);
lcd.print("v2="); lcd.print(nilai2);
if (digitalRead(3) == LOW) {
nilai1 += 5;
delay(100);
if (nilai1 > 255) {
nilai1 = 0;
}
}
if (digitalRead(4) == LOW) {
nilai2 += 5;
delay(100);
if (nilai2 > 255) {
nilai2 = 0;
}
}
if (digitalRead(2) == LOW) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Saving data...");
Wire.beginTransmission(address);
Wire.write(0x00);
Wire.write(0x00);
Wire.write(nilai1);
Wire.write(nilai2);
Wire.endTransmission();
delay(2000);
lcd.clear();
x=0;
}
}
}
Jika sudah tidak ada eror maka raangkaian dapat berjalan seperti video demo dibawah ini, sekian tutorial kali ini jika kalian ingin tutorial yang lainnya jangan lupa komen di kolom komentar bisa di komentar via youtube atau komentar di bawah postingan. Full project nya ada di keterangan video ya atau disini
Oiya sama satu lagi jangan lupa subskrep channel yutup "Project Solderku" see next postingan, terimakasih sudah berkunjung (y)
Komentar
Posting Komentar