Wednesday 28 October 2020

Laporan Akhir Percobaan 3 Modul 3 (I2C)





1. Komponen [back]

  • Potensiometer
 
Potensiometer adalah sebuah jenis resistor yang mengatur sebuah tahanan atau hambatan secara linier atau Komponen resistif tiga kawat yang bertindak sebagai pembagi tegangan yang menghasilkan sinyal output tegangan variabel kontinu yang sebanding dengan posisi fisik wiper di sepanjang trek.
  • Resistor




Resistor adalah komponen elektronika yang berfungsi untuk menghambat atau membatasi aliran listrik yang mengalir dalam suatu rangkain elektronika
  • LED


LED dapat kita definisikan sebagai suatu komponen elektronika yang terbuat dari bahan semikonduktor dan dapat memancarkan cahaya apabila arus listrik melewatinya.

Led (Ligth-Emitting Diode) memiliki fungsi utama dalam dunia elektronika sebagai indikator atau sinyal indikator atau lampu indikator.


LED terdiri dari sebuah chip semikonduktor yang di doping sehingga menciptakan junction P dan N. Yang dimaksud dengan proses doping dalam semikonduktor adalah proses untuk menambahkan ketidakmurnian (impurity) pada semikonduktor yang murni sehingga menghasilkan karakteristik kelistrikan yang diinginkan. Ketika LED dialiri tegangan maju atau bias forward yaitu dari Anoda (P) menuju ke Katoda (K), Kelebihan Elektron pada N-Type material akan berpindah ke wilayah yang kelebihan Hole (lubang) yaitu wilayah yang bermuatan positif (P-Type material). Saat Elektron berjumpa dengan Hole akan melepaskan photon dan memancarkan cahaya monokromatik (satu warna).
  • Arduino Uno

Arduino Uno adalah board mikrokontroler berbasis ATmega328 (datasheet). Memiliki 14 pin input dari output digital  dimana 6 pin input tersebut dapat digunakan sebagai output PWM dan 6 pin input analog, 16 MHz osilator kristal, koneksi USB, jack power, ICSP header, dan tombol reset. Untuk mendukung mikrokontroler agar dapat digunakan, cukup hanya menghubungkan Board Arduino Uno ke komputer dengan menggunakan kabel USB atau listrik dengan AC yang-ke adaptor-DC atau baterai untuk menjalankannya.


2. Rangkaian Simulasi [back]
 
 
3. Flowchart [back] 
Master

 
Slave


4. Listing Program [back]
Master
//MASTER

#include <Wire.h>  //Deklarasi library Wire
#define SLAVE_ADDR 9  //Deklarasi pin 9 untuk alamat slave

int analogPin = 0;  //Deklarasi nilai analogPin sama dengan 0
int val = 0;  //Deklarasi nilai variabel val adalah 0

void setup() {  //Merupakan fungsi yang dieksekusi sekali
  Wire.begin();  //Inisiasi library Wire
}

void loop() {  //Merupakan fungsi yang dieksekusi berulang atau looping
 delay(50); //Penundaan eksekusi selama 50 ms
 val = map(analogRead(analogPin), 0, 1023, 255, 1); //Mengubah atau mapping nilai dari pembacaan analog dari range 0-1023 menjadi 255-1 dan dimasukkan ke variabel val
 
 Wire.beginTransmission(SLAVE_ADDR);  //Memulai transmisi data ke alamat slave yang dituju
 Wire.write(val);  //Menulis data pada slave
 Wire.endTransmission();  //Mengakhiri transmisi data ke slave
 
}
Slave:
//SLAVE

#include <Wire.h>  //Deklarasi library Wire
#define SLAVE_ADDR 9  //Deklarasi pin 9 milik alamat slave

int LED = 13;  //Deklarasi pin 13 terhubung ke LED
int rd;  //Deklarasi variabel rd
int br;  //Deklarasi variabel br

void setup() {  //Fungsi ini dieksekusi sekali
  pinMode(LED, OUTPUT);  //Deklarasi LED sebagai Output
  Wire.begin(SLAVE_ADDR);  //Inisiasi library Wire dan Alamat Slave
  Wire.onReceive(receiveEvent);  //Memanggil fungsi ketika slave mendapat transmisi dari master

  Serial.begin(9600);  //Set baud rate 9600
  Serial.println("I2C Slave demo");  //Mencetak data
 
}

void receiveEvent(){  //Deklarasi variabel receiveEvent
  rd = Wire.read();  //Memasukkan data pembacaan ke variabel rd
  Serial.println(rd);  //Mencetak nilai rd
}
void loop() {  //Fungsi yang dieksekusi berulang atau looping
  delay(50);  //Mendelay eksekusi 50 ms

  br = map(rd, 1, 255, 100, 2000);  // //Mengubah atau mapping nilai variabel rd dari range 1-255 menjadi 1000-2000 dan dimasukkan ke variabel br

  digitalWrite(LED, HIGH);  //LED diberi logika 1 sehingga LED menyala
  delay(br);  //Eksekusi program delay selama br
  digitalWrite(LED, LOW);  //LED diberi logika 0 sehingga LED mati
  delay(br);  //Eksekusi program delay selama br
}


1.             Apabila ada tambahan slave, bagaimana cara master membedakan satu slave dengan slave yang lainnya pada saat berkomunikasi? Apakah pada bagian rangkaian, program, atau keduanya?

Jawaban: Apabila ditambahkan slave, maka terjadi perubahan pada kedua aspek yaitu rangkaian dan program. Untuk rangkaian akan berbentuk seperti berikut


Untuk membedakan masing-masing slave maka setiap slave memiliki alamat yang unik dan berbeda satu sama lain. Master yang akan mengatur slave mana yang akan aktif, master akan memanggil alamat slave yang ingin diaktifkan. Untuk program pada master, diinisialisasi alamat masing-masing slave. Untuk program masing-masing slave diinisiasi address slave masing-masing slave agar dapat mengenali ketika master melakukan pemanggilan.

HTML - Download
Simulasi Proteus - Download
Listing Program Master - Download
Listing Program Slave - Download
Video - Download


Laporan Akhir Percobaan 2 Modul 3 (SPI)





1. Komponen [back]

  • Button

Push button switch (saklar tombol tekan) adalah perangkat / saklar sederhana yang berfungsi untuk menghubungkan atau memutuskan aliran arus listrik dengan sistem kerja tekan unlock (tidak mengunci). Sistem kerja unlock disini berarti saklar akan bekerja sebagai device penghubung atau pemutus aliran arus listrik saat tombol ditekan, dan saat tombol tidak ditekan (dilepas), maka saklar akan kembali pada kondisi normal.
  • LED


LED dapat kita definisikan sebagai suatu komponen elektronika yang terbuat dari bahan semikonduktor dan dapat memancarkan cahaya apabila arus listrik melewatinya.

Led (Ligth-Emitting Diode) memiliki fungsi utama dalam dunia elektronika sebagai indikator atau sinyal indikator atau lampu indikator.


LED terdiri dari sebuah chip semikonduktor yang di doping sehingga menciptakan junction P dan N. Yang dimaksud dengan proses doping dalam semikonduktor adalah proses untuk menambahkan ketidakmurnian (impurity) pada semikonduktor yang murni sehingga menghasilkan karakteristik kelistrikan yang diinginkan. Ketika LED dialiri tegangan maju atau bias forward yaitu dari Anoda (P) menuju ke Katoda (K), Kelebihan Elektron pada N-Type material akan berpindah ke wilayah yang kelebihan Hole (lubang) yaitu wilayah yang bermuatan positif (P-Type material). Saat Elektron berjumpa dengan Hole akan melepaskan photon dan memancarkan cahaya monokromatik (satu warna).
  • Arduino Uno

Arduino Uno adalah board mikrokontroler berbasis ATmega328 (datasheet). Memiliki 14 pin input dari output digital  dimana 6 pin input tersebut dapat digunakan sebagai output PWM dan 6 pin input analog, 16 MHz osilator kristal, koneksi USB, jack power, ICSP header, dan tombol reset. Untuk mendukung mikrokontroler agar dapat digunakan, cukup hanya menghubungkan Board Arduino Uno ke komputer dengan menggunakan kabel USB atau listrik dengan AC yang-ke adaptor-DC atau baterai untuk menjalankannya.


2. Rangkaian Simulasi [back]
3. Flowchart [back] 
Master
Slave


4. Listing Program [back]
#include <SPI.h> //Deklarasi library SPI
#define button 2  //Deklasrasi pin 2 terhubung pada button
void setup (void) {  //Fungsi yang dieksekusi sekali
  pinMode(button, INPUT_PULLUP);  //Deklarasi button sebagai input dalam kondisi pull-up
  Serial.begin(115200 ); //Set baud rate 115200
  digitalWrite(SS, HIGH);  //Pin SS berlogika HIGH atau menonaktifkan pin SS
  SPI.begin ();  //Mremulai komunikasi SPI
  SPI.setClockDivider(SPI_CLOCK_DIV8); //Membagi clock dengan 8

void loop (void) { //Fungsi yang dijalankan berulang atau looping
  char c;  //Deklarasi variabel c menggunakan tipe data char/character
  int nilai=digitalRead(button);  //Deklarasi variabel nilai merupakan hasil pembacaan kondisi button
  if(nilai==0){  //Fungsi kondisional saat variabel nilai berlogika 0
   digitalWrite(SS, LOW);  //Pemberian logika LOW pada pin SS sehingga SS aktif //
    for (const char * p = "Hello, world!\r" ; c = *p; p++)  //Memasukkan nilai variabel p, dan increment variabel p
  {
    SPI.transfer (c);  //Data dari master dikirimkan  atau ditransfer
    Serial.print(c);  //Mencetak data yang didapatkan pada monitor serial
  }
  digitalWrite(SS, HIGH); //Pin SS berlogika HIGH, sehingga pin SS tidak aktif
  delay(2000);  //Penundaan looping selama 2000 ms
  }
}

Slave:
#include <SPI.h>
#define led 2  //Deklarasi pin 2 terhubung ke LED

char buff [50];  //Deklarasi variabel buff dengan array 50
volatile byte indx;  //Deklarasi variabel indx
volatile boolean process;  //Deklarasi variabel process

void setup (void) {  //Fungsi yang hanya dieksekusi sekali
  Serial.begin (115200);  //Set baud rate 115200
  pinMode(led, OUTPUT);  //LED berfungsi sebagai output
  SPCR |= _BV(SPE); //Mengaktifkan SPI dalam mode Slave
  indx = 0; //Set nilai variabel indx menjadi 0
  process = false;  //Memasukkan nilai false ke dalam variabel process
  SPI.attachInterrupt(); //Mengaktifkan intterupt
}

ISR (SPI_STC_vect) // SPI interrupt routine
{
  byte c = SPDR;  //Membaca data dari Data Register SPI
  if (indx < sizeof buff) {  //Kondisi saat nilai indx < dari jumlah array buff
    buff [indx++] = c;  //Data disimpan pada index selanjutnya di array buff
    if (c == '\r')  //Pengecekan pada akhir kata
      process = true;  //Memasukkan nilai tru ke variabel process
  }
}
void loop (void) {  //Fungsi yang dieksekusi berulang kali atau looping
  if (process) {  //Kondisional untuk nilai variabel process
    digitalWrite(led, HIGH);  //Pada LED akan diberi logika HIGH maka LED menyala
    process = false; //Memberikan nilai false pada variabel process atau me reset variabel process
    Serial.println (buff); //Mencetak array pada serial monitor
    indx = 0; //Memasukkan nilai 0 pada variabel indx atau mereset button ke 0
    delay(1000);  //Menunda proses perulangan selama 1000 ms
  }
  else  //Untuk kondisi lain
  {
    digitalWrite(led, LOW);  //LED diberi logika LOW maka LED mati
  }
}

1.        Pada saat digunakan dua perangkat slave, bagian mana yang akan diubah? Apakah pada bagian rangkaian, program, atau keduanya?

Jawab: Pada SPI jumlah maksimum slave yang dapat digunakan adalah 4 slave. Untuk penambahan slave menjadi 2, maka dilakukan perubahan pada kedua aspek, yaitu rangkaian dan programnya. Pada SPI untuk multislave, ada dua bentuk rangkaian yang dapat digunakan, Yaitu:

·         Independent Slave Configuration

Pada konfigurasi ini setiap pin SS/CS terhubung ke slave yang berbeda beda. Apabia master ingin berkomunikasi dengan slave tertentu, master akan mengirimkan sinyal LOW kepada slave tersebut. Logika ini akan dipertahankan selama proses pertukaran data. Setelah diberi logika LOW kepada Slave yang dituju, maka data dikirim dari master melalui pin MOSI. Pada saat yang bersamaan akan dihasilkan sinyal clock melalui pin SCLK. Apabila master ingin mendapat respon, maka akan dikirim lagi sinyal clock hingga data dikirim oleh slave melalui pin MISO.

·         Daisy Chain Configuration

Pada konfigurasi ini, master hanya memerlukan satu pin SS/CS untuk berkomunikasi dengan slave-slave yang ada. Untuk mengirimkan data, master akan mengirimkan sinyal LOW kepada slave yang ada untuk inisiasi komunikasi. Setelah itu, data akan dikirimkan oleh master kepada Slave 1 melalui pin MOSI. Pada saat yang bersamaan dikirimkan sinyal clock melalui pin SCLK. Data yang sudah dikirim ke Slave 1 diteruskan ke Slave 2 dan seterusnya. Logika pada SS/CS dipertahankan dalam posisi LOW selama proses komunikasi berlangsung. Master harus mengirimkan sinyal clock yang cukup hingga data sampai pada slave terakhir. Apabila master ingin mendapatkan respon, maka ia harus mengirim sinyal clock hingga data kembali ke master.

Untuk programnya, apabila digunakan independent slave configuration, maka pada program untuk master, harus ada 2 alamat/kondisi untuk SS/CS pada master. Alamat untuk Slave Select 1 dan alamat untuk Slave Select 2. Alamat ini berfungsi sebagai identitas bagi masing-masing slave. Selain pada master, program pada slave juga diubah, pada slave diinisiasi kode identitas yang sudah diinisiasi sebelumnya pada master. Tujuannya agar slave mengetahui saat master mengirim kode. Pada slave juga diinisiasi kode untuk perintah menerima atau mengirim data.

HTML - Download
Simulasi Proteus - Download
Listing Program Master - Download
Listing Program Slave - Download
Video - Download