Selasa, 27 Oktober 2020

PERCOBAAN 3

[menuju akhir]



1. Komponen [kembali]

1. Arduino

2. LED


3. Potensiometer


2. Rangkaian Simulasi [kembali]

Gambar 1. Rangkaian Percobaan 3

3. Flowchart [kembali]

Gambar 2. Flowchart Program Master


Gambar 3. Flowchart Program Slave


LISTING 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();
 
}

LISTING 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. Video [kembali]




Penjelasan rangkaian :
Rangkaian percobaan 3 ini merupakan rangkaian komunikasi Inter Integrated Circuit (I2C) adalah standar komunikasi serial dua arah menggunakan dua saluran yang di desain khusus untuk mengirim maupun menerima data. Sistem I2C terdiri dari saluran SCL (Serial Clock) dan SDA (Serial Data) yang membawa informasi data antara I2C dengan pengontrolnya. Piranti yang dihubungkan dengan sistem I2C Bus dapat dioperasikan sebagai Master dan Slave. Master adalah piranti yang memulai transfer data pada I2C Bus dengan membentuk sinyal Start, mengakhiri transfer data dengan membentuk sinyalStop, dan membangkitkan sinyal clock. Slave adalah piranti yang dialamati master. merupakan komunikasi seial 2 arah pada rangkaian diatas digunakan komponen-komponen seperti 2 buah arduino, potensiometer, LED, resistor dan ground. potensiometer disini berfungsi sebagai input ke master, ketika potensiometer maksimum maka delay waktu hidup dan mati lampu makin cepat begitupun sebaliknya. LED sebagai output dari slave.

6. Kondisi [kembali]
Analisa percobaan 3

1.      Apakah kita dapat mengirim data sebanyak 9 bit? Jelaskan alasannya!

Jawab:

Jika mengirim data, Master hanya dapat mengirimkan sejumlah byte (masing-masing 8 bit). Saat proses transmitting dari Master, 7 bit pertama sebagai alamat Slave yang akan dituju (Address frame), 1 bit kemudian sebagai R/W bit untuk memberitahukan ke Slave-slave apakah Master akan menerima atau mengirimkan data. Sedangkan bit ke-9, bit tersebut akan dikeluarkan oleh Slave sebagai tanda bahwa data telah diterima oleh receiver (ACK/NACK). Kemudian, Master akan menulis data 8 bit (Data frame) dan bit-9 oleh Slave sebagai sinyal acknowledge / ACK (berlogika 0) yang dikeluarkan Slave kembali untuk dapat menerima data selanjutnya hingga SDA menerima sinyal Not Acknowladge / NACK (berlogika 1) untuk mengakhiri transfer data.

2.      Bagaimana cara master mengirimkan address ke slave? Berapa bit address yang dikirim? Berapa address unit yang dapat tercipta oleh master?

Jawab:

Komunikasi I2C atau inter integrated circuit adalah komunikasi yang memungkinkan terjadinya komunikasi antara controller.  jenis komunikasi ini memiliki pin sendiri pada arduino yaitu pin SDA dan SCL. setiap bit akan ditransfer pada kaki SDA dan akan di sinkronisasikan oleh pulsa clock pada SCL. setiap bit akan ditransfer pada pin SDA dalam bentuk 8 bit dan 1 bit ditransferkan pada clock atau SCL. untuk transfer data pada I2C harus dalam bentuk 8 bit sehingga semua data yang ditransfer dikonfersi kedalam bentuk 8 bit yaitu 256. rangkaian ini terdiri dari potensiometer.

Pulsa START dibaca oleh Slave pada bus SDA dalam keadaan LOW pada saat pulsa clock dalam HIGH. Setelah dikirimkan, maka pada clock berikutnya Master mengirimkan 8 bit alamat, yang dikirimkan secara serial melalui bus SDA, ke Slave dengan format B6, B5, B4, B3, B2, B1, B0, dan R/W. Bit alamat tersebut mengandung informasi R/W pada LSB. Jika LSB pada byte alamat “1” maka master ingin membaca data dari Slave tetapi jika LSB byte alamat “0” maka master akan menulis pada slave. Karena hanya 7 bit yang dipergunakan dalam byte alamat maka banyaknya device yang dapat dijadikan slave hanya 127. Alamat 0 dipergunakan untuk General Call. Bila alamat dan perintah, R/W, yang dikirim master dapat diterima oleh slave dan akan membangkitkan pulsa LOW (ACK), pada bus SDA, jika perintah tersebut dapat dijalankan dan pulsa HIGH (NACK) jika perintah tersebut gagal. Sinyal dasar yang lain dalam I2C Bus adalah sinyal acknowledge yang disimbolkan dengan ACK Setelah transfer data oleh master berhasil diterima slave, slave akan menjawabnya dengan mengirim sinyal acknowledge, yaitu dengan membuat SDA menjadi “0” selama siklus clock ke 9. Ini menunjukkan bahwa Slave telah menerima 8 bit data dari Master.  Address yang dapat tercipta oleh master dari kerja I2C bus dapat dibedakan menjadi format 7 bit addressing dan format 10 bit addressing.

Address byte terdiri dari bagian yang tetap dan bagian yang dapat diprogram, bagian yang tetap merupakan bawaan dari IC , sedangkan yang dapat diprogram biasanya berupa pin address pada IC yang bersangkutan, sebagai contoh IC PCF8591, memiliki address byte sbb : 1 0 0 1 A2 A1 A0 , dimana 1001 adalah bagian yang tetap dan A2,A1,A0 adalah bagian yang dapat diprogram sesuai dengan kondisi logika pada pin IC PCF8591. Sinyal Acknowledge (ACK) terjadi, Dari Slave ke Master Transmitter, kemudian Sesudah address byte diterima slave .Setiap kali Master selesai menerima data byte dengan baik Sinyal Negative Acknowledge (NACK) terjadi, maka dari Slave ke Master Transmitter.

Rangkaian Simulasi - download
Video Simulasi - download
Listing Program Master - download
Listing Program Slave - download
Library Arduino - download
File HTML - downlaod

PERCOBAAN 2

[menuju akhir]



1. Komponen [kembali]

1. Arduino

2. LED


3. Push Button


2. Rangkaian Simulasi [kembali]

Gambar 1. Rangkaian Percobaan 2

3. Flowchart [kembali]

Gambar 2. Flowchart Program Master


Gambar 3. Flowchart Program Slave


LISTING MASTER
#include <SPI.h> //Deklarasi library SPI
#define button 2
void setup (void) {
  pinMode(button, INPUT_PULLUP);
  Serial.begin(115200 ); //Set baud rate 115200
  digitalWrite(SS, HIGH);
  // disable Slave Select
  SPI.begin ();
  SPI.setClockDivider(SPI_CLOCK_DIV8); //divide the clock by 8
}
void loop (void) {
  char c;
  int nilai=digitalRead(button);
  if(nilai==0){
   digitalWrite(SS, LOW); //enable Slave Select
  // send test string
  for (const char * p = "Hello, world!\r" ; c = *p; p++)
  {
    SPI.transfer (c);
    Serial.print(c);
  }
  digitalWrite(SS, HIGH); // disable Slave Select
  delay(2000);
  }
}

LISTING SLAVE
#include <SPI.h>
#define led 2

char buff [50];
volatile byte indx;
volatile boolean process;

void setup (void) {
  Serial.begin (115200);
  pinMode(led, OUTPUT); // have to send on master in so it set as output
  SPCR |= _BV(SPE); // turn on SPI in slave mode
  indx = 0; // buffer empty
  process = false;
  SPI.attachInterrupt(); // turn on interrupt
}

ISR (SPI_STC_vect) // SPI interrupt routine
{
  byte c = SPDR; // read byte from SPI Data Register
  if (indx < sizeof buff) {
    buff [indx++] = c; // save data in the next index in the array buff
    if (c == '\r') //check for the end of the word
      process = true;
  }
}
void loop (void) {
  if (process) {
    digitalWrite(led, HIGH);
    process = false; //reset the process
    Serial.println (buff); //print the array on serial monitor
    indx = 0; //reset button to zero
    delay(1000);
  }
  else
  {
    digitalWrite(led, LOW);
  }
}

5. Video [kembali]


Penjelasan rangkaian :

Pada rangkaian ini digunakan komunikasi SPI ( Serial Peripheral Interface). Komunikasi SPI digunakan pada dua arduino yang masing-masing berperan sebagai master dan slave. Komunikasi ini dilakukan dengan menghubungkan mosi dari master dengan mosi dari slave, miso dari slave dengan miso dari master, sclk dari master dengan sclk dari slave, dan ss dari slave dengan ss master.  Push button berfungsi sebagai input pullup dari master, artinya apabila push button ditekan maka akan berlogika low (0) dan apabila diangkat maka akan berlogika high (1). Saat master mengirimkan logika low ke slave maka LED akan hidup dan mati secara bergantian dengan jeda 1000 ms atau 1 s. Sedangkan saat master mengirimkan logika high ke slave maka LED akan mati.


6. Kondisi [kembali]
Analisa percobaan 2

1.      Apakah kita dapat menggunakan lebih dari 1 master? Jelaskan alasannya!

Jawab:

Untuk SPI, hanya dapat menggunakan 1 master saja. Hal ini dikarenakan Master pada SPI sebagai pengontrol komunikasi serial sinkron pada SPI dimana dapat mengirim atau menerima data. Namun, SPI ini dapat memiliki lebih dari 1 Slave dimana terdapat Slave Select (SS) untuk memilih (mengontrol) Slave mana yang dipilih oleh Master.

2.      Apakah port MISO harus digunakan? Jelaskan alasannya!

Jawab:

Port MISO harus digunakan, karena Port MISO pada rangkaian komunikasi SPI merupakan interkoneksi master dan slave yang berguna sebagai input, karena master input dan slave output. Disaat mentransfer data dari master ke slave sangat perlu port MISO, agar data sampai ke slave. Sesuai dengan Prinsip kerjanya SPI sinyal clock dialirkan  dari master menuju slave untuk sinkronisasi, lalu master dapat memilih slave mana yang akan dikirimkan data melalui pin slave select (SS), lalu master mengirim, dari slave menuju MOSI dan jika dibutuhkan respon makan slave akan mengirimkan data kembali ke master melalui MISO.

Rangkaian Simulasi - download
Video Simulasi - download
Listing Program Master - download
Listing Program Slave - download
Library Arduino - download
File HTML - downlaod

PERCOBAAN 1

[menuju akhir]



1. Komponen [kembali]

1. Arduino

2. LED


3. Push Button


2. Rangkaian Simulasi [kembali]

Gambar 1. Rangkaian Percobaan 1

3. Flowchart [kembali]

Gambar 2. Flowchart Program Master


Gambar 3. Flowchart Program Slave


LISTING MASTER
//MASTER

#define button 2

void setup() 
{
  pinMode(button,INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() 
{
  int nilai = digitalRead(button);
  
  //ditekan
  if(nilai == 0)
    {
      Serial.print("1");     
    }
  else 
    {
      Serial.print("2"); 
    }

    delay(200);
}

LISTING SLAVE
//SLAVE

#define led 12

void setup() 
{
  pinMode(led,OUTPUT);
  Serial.begin(9600);
}

void loop() 
{
  if(Serial.available()>0)
  {
    int data = Serial.read();
      if(data=='1')
        {
          digitalWrite(led,HIGH);
        }
      else
        {
          digitalWrite(led,LOW);
        }
        
  }
}

5. Video [kembali]


Penjelasan rangkaian :

Rangakain percobaan 1 ini merupakan rangkaian komunikasi UART. Pada percobaan komunikasi UART (Universal ASychronous Receiver Transmitter) yang terdiri dari 2 arduino, yang satu sebagai master dan yang satu lagi sebagai slave. Master berfungsi sebagai pemerintah. Master akan menerima data dari bus data yang dikirm secara parallel kemudian data pada master akan dikirm ke slave untuk menyuruh slave mengeksekusi danmenjalankan perintah dari master. Pada sistem UART menggunakan dua buah jalur penghubung antara master dan slave yaitu dengan mentransmisikan data secara serial dari pin Tx pada master ke Rx pada slave. Agar data yang dikirmkan sama dengan data yang diterima, maka kedua frekuensi clock harus sama dengan data yang diterima, maka kedua frekuensi clock harus sama dan harus sinkronisasi. Pada rangkaian juga terdapat button yang berfungsi sebagai pengatur kondisi high dan low output LED, jika button ditekan maka kondisinya high dan lampu LED akan menyala, dan sebaliknya jika button tidak ditekan maka kondisinya low, dan lampu LED mati.


6. Kondisi [kembali]
Analisa percobaan 1

1.      Apa yang  terjadi jika komunikasi UART hanya menggunakan 1 kabel saja, yang terhubung TX ke RX?

Jawab:

Jika pada komunikasi UART hanya menggunakan 1 kabel saja yang terhubung dari Tx Master ke Rx Slave, maka akan terjadi error. Dikarenakan Tx Slave tidak terhubung ke Rx Master untuk menandakan atau merespon adanya data yang masuk ke Slave. Jadi oleh karena itu komunikasi UART dihubungkan dengan  2 kabel,  dimana tujuan kabel pertama dihubungkan dari Tx Master ke Rx Slave adalah untuk komunikasi asinkron dari Master ke Slave, kemudian kabel kedua dihubungkan dari Tx Slave ke Rx Master sebagai respon dari  ke Master untuk menandakan bahwa data telah masuk ke Slave.

2.      Apakah dapat mengirim data sebanyak 12 bit? Jelaskan alasannya!

Jawab:

Tidak bisa, karena pada UART hanya bisa mengirimkan maksimum sampai 11 bit yang terdiri dari 1 bit start, 1 bit parity , dan 1 bit stop kemudian ditambah 8 bit data yang ingin dikirimkan totalnya adalah 11 bit. Dan pada UART penerima, 3 data bit tambahan ini akan dihapus, dan diambil 8 bit data saja. Jadi tidak dapat mengirim data sebanyak 12 bit. Dapat dilihat 4 mode kerja komunikasi UART ini, yaitu

a.   Pertama mode 0, pada mode ini data seri di kirim dan diterima kaki Rx, pada kaki Tx menyalurkan clock yang diperlukan komunikasi data sinkron. Data yang ditransmisikan per 8 bit dengan baud ratenya tetap.

b.   Mode 1, pada mode 1 merupakan komunikasi seri asinkron. Data dikirim lewat kaki Tx dan d terima Rx. Data ditransmisikan per 10 bit, terdiri start 1 bit, data 8 bit data dan stop 1 bit.

c.  Mode 2, sama dengan mode 1, mode 2 juga merupakan komunikasi seri asinkron. Data dikirim dari Tx diterima Rx. Jumlah data yang di transmisikan  yaitu 1 bit start, 8 bit data, 1 data tambahan dan 1 bit stop, sehingga berjumlah 11 bit.

d.  Mode 3, data dari kaki Tx dan diterima Rx. Data yang ditransmisikan 11 bit.

3.      Apakah kita dapat menggunakan banyak slave? Jelaskan alasannya!

Jawab:

Pada UART, jumlah Master maupun Slave masing-masing hanya 1 saja. Hal tersebut dikarenakan UART menggunakan jalur data tunggal untuk mentransmisikan data (Transmitter) dan untuk menerima data (Receiver). Jadi, dari Transmitter Master dihubungkan ke Receiver Slave untuk pentransmisian data dan Transmitter Slave dihubungkan ke Receiver Master untuk menandakan Slave telah menerima data dari Master. Pada UART ini hanya dapat mengirimkan sekitar 8 bit dan bit-bit tambahan (start bit, parity bit, dan stop bit ) setiap transmisian data.


Rangkaian Simulasi - download
Video Simulasi - download
Listing Program Master - download
Listing Program Slave - download
Library Arduino - download
File HTML - downlaod

Rabu, 21 Oktober 2020

Tugas Pendahuluan Modul 3

[menuju akhir]



1. Kondisi [kembali]
Modul 3 percobaan 1 nomor 8 :
Tambahkan resistor sebelum Button sebesar 1k ohm

2. Rangkaian Simulasi [kembali]

Gambar 1. Rangkaian Percobaan

Gambar 2. Simulasi Rangkaian Percobaan 


3. Flowchart [kembali]

Gambar 3. Flowchart Master

Gambar 4. Flowchart Slave

4. Listing Program [kembali] 
LISTING MASTER
//Listing Master 

#define button 2 //Deklarasi pin 2 untuk button

void setup()        //Semua kode dalam fungsi ini dieksekusi sekali
{
  pinMode(button, INPUT_PULLUP);
  Serial.begin(9600); //Set baud rate 9600
}

void loop()         //Semua kode dalam fungsi ini dieksekusi berulang
{
  int nilai = digitalRead(button);

  //Button ditekan
  if (nilai == 0)
  {
    Serial.print("1");
  }
  else
  {
    Serial.print("2");
  }

  delay(200);
}

LISTING SLAVE
#define led 12 //Deklarasi pin 12 untuk LED

void setup()    //Semua kode dalam fungsi ini dieksekusi sekali
{
  pinMode(led, OUTPUT); //Deklarasi LED sebagai output
  Serial.begin(9600);           //Set baud rate 9600
}

void loop()                          //Semua program dalam fungsi ini dieksekusi berulang
{
  if (Serial.available() > 0)
  {
    int data = Serial.read();
    if (data == '1') //Jika data yang dikirimkan berlogika
    {
      digitalWrite(led, HIGH); //LED menyala
    }
    else
    {
      digitalWrite(led, LOW); //LED mati
    }

  }
}

5. Video [kembali]


Pada rangkaian ini digunakan komunikasi UART (Universal Asynchronous Receiver-Transmitter). Komunikasi UART digunakan pada dua arduino yang masing - masing berperan sebagai master dan slave. Kaki pin 2 dari arduino master dihubungkan ke resistor dan button secara seri kemudian dilanjutkan ke ground. kaki pin txd master dihubungkan ke rxd slave, dan rxd master dihubungkan ke txd slave. Kemudian kaki 12 pada slave dihubungkan ke Led. Setelah itu dibuat program pada master dan juga slave. Pada bagian master, saat button ditekan, maka akan berlogika 0 (karena terhubung ke ground). Saat button berlogika 0, maka akan menampilkan "1" pada serial monitor, dan ketika tampil "1", slave akan mendeteksi dan Led hidup. Ketika button tidak ditekan, maka input 2 dari slave akan bernilai "1" karena yang kita gunakan adalah perintah input pull_up. input_pullup akan berlogika 1 pada defaultnya. saat berlogika 1, maka akan ditampilkan angka "2" pada serial monitor. Kemduian slave akan mendeteksi dan Led mati. Saat diberi logita 1 yaitu saat  button ditekan maka LED akan hidup , dan disaat diberikan logika 0 atau saat buttin tidak ditekan maka LED mati.

6. Link Download [kembali]
Rangkaian Simulasi - download
Listing Program master - download
Listing Program slave - download
Video Simulasi - download
Library Ardunio - download
File HTML - downlaod