Menulis Dan Membaca Eeproom External AT24C32 Dengan Arduino


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)


Komentar