Mikro Modul 3 I2C

2 Buah Arduino


Potensiometer

Resistor

LED

Ground

2. Rangkaian Simulasi
[kembali]


 Prinsip Kerja:

    Pada I2C terdapat master dan slave, data ditransfer menuju slave dalam bentuk message yang terdiri dari kondisi start, Address Frame, R/W bit, ACK/NACK bit, Data Frame 1, Data Frame 2,  dan kondisi Stop.
Kondisi start dimana saat pada SDA beralih dari logika high ke low sebelum SCL.
Kondisi stop dimana saat pada SDA beralih dari logika low ke high sebelum SCL.
R/W bit berfungsi untuk menentukan apakah master mengirim data ke slave atau meminta data dari slave. (logika 0 = mengirim data ke slave, logika 1 = meminta data dari slave)
 
3. Flowchart
[kembali]

 Master


Slave

4. Listing Program
[kembali]

Master

//MASTER

#include <Wire.h>
#define SLAVE_ADDR 9

int analogPin = 0;
int val = 0;

void setup() {
  Wire.begin();
}

void loop() {
 delay(50);
 val = map(analogRead(analogPin), 0, 1023, 255, 1);
 
 Wire.beginTransmission(SLAVE_ADDR);
 Wire.write(val);
 Wire.endTransmission();
 
}


Slave

//SLAVE

#include <Wire.h>
#define SLAVE_ADDR 9

int LED = 13;
int rd;
int br;

void setup() {
  pinMode(LED, OUTPUT);
  Wire.begin(SLAVE_ADDR);
  Wire.onReceive(receiveEvent);

  Serial.begin(9600);
  Serial.println("I2C Slave demo");
 
}

void receiveEvent(){
  rd = Wire.read();
  Serial.println(rd);
}
void loop() {
  delay(50);

  br = map(rd, 1, 255, 100, 2000);

  digitalWrite(LED, HIGH);
  delay(br);
  digitalWrite(LED, LOW);
  delay(br);
}

 
5. Kondisi
[kembali]

 Percobaan 2 (I2C)

 1. Jika menggunakan 2 slave,Bagaimana cara master menentukan berkomunikasi dengan slave yang mana?

Jawab:


    Pada rangkaian diatas terlihat bahwa rangkaian master dan 2 slave dihubungkan dengan 2 jalur yaitu SDA (Serial Data) dan SCL (Serial Clock) yang membawa data antara I2C dengan pengontrolnya. Pada SDA memiliki hubungan yang 2 arah yaitu pada master dan slave dapat menerima dan mengirim data, tetapi pada SCL hanya dapat mengirim data ke slave dari master. Pada I2C ini, proses jalan rangkaian dilakukan secara bergantian yaitu pada slave 1 dijalankan program dan telah selesai, maka selanjutya akan menuju slave 2 untuk rangkaiannya dijalankan dengan cara menghubungkan secara paralel ke jalur SDA dan SCL. Disini untuk dapat menetukan slave mana yang akan dijalankan terlebih dahulu dapat ditentukan dengan alamat slavenya yaitu dengan menyamakan alamat slave pada slave dengan master. Dan program yang digunakan sama program yang diberikan pada labor LEI, begitupun dengan progam slave ke 2 sama dengan program slave pertama.
 
 
    Dari program diatas terlihat bahwa alamat slave pada master dan slave 1 sama dan alamat slave lainnya berbeda. Sehingga jalannya rangkaian I2C dapat ditentukan slave mana yang bekerja terlebih dahulu dan dapat dilanjutkan oleh slave ke 2 secara bergantian setelah kerja pada slave pertama selesai.

Tidak ada komentar:

Posting Komentar