Laporan Percobaan 2 M3



a) Memahami prinsip kerja UART, SPI, dan I2C
b) Mengaplikasikan protokol komunikasi UART, SPI, dan I2C pada Arduino

 

 
Power Supply




Modul Arduino


LED 



 Resistor


Push Button

A.Arduino
Arduino adalah kit elektronik atau papan rangkaian elektronik open source yang di dalamnya terdapat komponen utama yaitu sebuah chip mikrokontroler dengan jenis AVR dari perusahaan Atmel. Arduino yang kita gunakan pada prkatikum ini adalah arduino mega yang menggunakan chip AVR ATmega 2560 yang memiliki fasilitas PWM, komunikasi serial, ADC, timer, interupt, SPI dan I2C. Sehingga Arduino bisa digabungkan bersama modul atau alat lain dengan protocol yang berbeda-beda. Bahasa pemograman yang digunakan adalah bahasa C. Tetapi bahasa ini sudah dipermudah menggunakan fungsi-fungsi yang sederhana sehingga lebih mudah dalam memprogramnya. Dalam memprogram arduino, kita bisa menggunakan serial komunikasi agar arduino dapat berhubungan dengan komputer ataupun aplikasi lain.

Beberapa fitur dari Arduino Mega 2560 ini adalah :

Microcontroller
ATmega2560
Operating Voltage
5V
Input Voltage (recommended)
7-12V
Input Voltage (limits)
6-20V
Digital I/O Pins
54 (of which 15 provide PWM output)
Analog Input Pins
16
DC Current per I/O Pin
20 mA
DC Current for 3.3V Pin
50 mA
Flash Memory
256 KB of which 8 KB used by bootloader
SRAM
8 KB
EEPROM
4 KB
Clock Speed
16 MHz

BAGIAN-BAGIAN DARI ARDUINO MEGA 2560
  • ·         Soket USB

     Soket USB adalah soket untuk kabel USB yang disambungkan ke komputer atau laptop.
Berfungsi untuk mengirimkan program ke Arduino dan juga sebagai port komunikasi serial.
·         Input / Output Digital
     Input/Output Digital atau digital pin adalah pin-pin untuk menghubungkan Arduino dengan
komponen  atau  rangkaian  digital.  Pada  Arduino  Mega  terdapat  53  I/O  Digital  dimana  16
diantaranya dapat dijadikan sebagai output PWM
 
  • ·         Input Analog

    Input Analog atau analog pin adalah pin-pin yang berfungsi untuk menerima sinyal dari komponen atau rangkaian analog. Misalnya dari potensiometer, sensor suhu, sensor cahaya, dsb.
Terdapat 16 input analog pada arduino mega 2560.

  • ·         Pin POWER

     Pin-pin catu daya adalah pin yang memberikan tegangan untuk komponen atau rangkaian yang dihubungkan dengan Arduino. Pada bagian catu daya ini terdapat juga pin Vin dan Reset.Vin digunakan untuk memberikan tegangan langsung kepada Arduino tanpa melalui tegangan USB atau adaptor.

  • ·         Tombol RESET

     Reset adalah pin untuk memberikan sinyal reset melaui tombol atau rangkaian eksternal.

  • ·         Jack Baterai/Adaptor

     Soket baterai  atau adaptor digunakan untuk menyuplai Arduino dengan tegangan  dari  baterai/adaptor 9V pada saat Arduino sedang tidak disambungkan ke komputer. Kalau Arduino sedang disambungkan ke komputer melalui USB, Arduino mendapatkan suplai tegangan dari USB, jadi tidak perlu memasang baterai/adaptor saat memprogram Arduino.

B. LED

LED adalah suaatu semikonduktor yang memancarkan cahaya,  LED mempunyai kecenderungan polarisasi. LED mempunyai kutub positif dan negatif (p-n) dan hanya akan menyala bila diberikan arus maju. Ini dikarenakan LED terbuat dari bahan semikonduktor yang hanya akan mengizinkan arus listrik mengalir ke satu arah dan tidak ke arah sebaliknya. Bila LED diberikan arus terbalik, hanya akan ada sedikit arus yang melewati  LED. Ini menyebabkan LED tidak akan mengeluarkan emisi cahaya.

C. Resistor

Resistor merupakan komponen penting dan sering dijumpai dalam sirkuit Elektronik. Boleh dikatakan hampir setiap sirkuit Elektronik pasti ada Resistor. Tetapi banyak diantara kita yang bekerja di perusahaan perakitan Elektronik maupun yang menggunakan peralatan Elektronik tersebut tidak mengetahui cara membaca kode warna ataupun kode angka yang ada ditubuh Resistor itu sendiri.

Seperti yang dikatakan sebelumnya, nilai Resistor yang berbentuk Axial adalah diwakili oleh Warna-warna yang terdapat di tubuh (body) Resistor itu sendiri dalam bentuk Gelang. Umumnya terdapat 4 Gelang di tubuh Resistor, tetapi ada juga yang 5 Gelang.

Gelang warna Emas dan Perak biasanya terletak agak jauh dari gelang warna lainnya sebagai tanda gelang terakhir. Gelang Terakhirnya ini juga merupakan nilai toleransi pada nilai Resistor yang bersangkutan.

Tabel dibawah ini adalah warna-warna yang terdapat di Tubuh Resistor :


Tabel Kode Warna Resistor
Perhitungan untuk Resistor dengan 4 Gelang warna :


Cara menghitung nilai resistor 4 gelang

Masukkan angka langsung dari kode warna Gelang ke-1 (pertama)
Masukkan angka langsung dari kode warna Gelang ke-2
Masukkan Jumlah nol dari kode warna Gelang ke-3 atau pangkatkan angka tersebut dengan 10 (10n)
Merupakan Toleransi dari nilai Resistor tersebut

Contoh :

Gelang ke 1 : Coklat = 1
Gelang ke 2 : Hitam = 0
Gelang ke 3 : Hijau = 5 nol dibelakang angka gelang ke-2; atau kalikan 105
Gelang ke 4 : Perak = Toleransi 10%
Maka nilai Resistor tersebut adalah 10 * 105 = 1.000.000 Ohm atau 1 MOhm dengan toleransi 10%.
Perhitungan untuk Resistor dengan 5 Gelang warna :


Cara Menghitung Nilai Resistor 5 Gelang Warna

Masukkan angka langsung dari kode warna Gelang ke-1 (pertama)
Masukkan angka langsung dari kode warna Gelang ke-2
Masukkan angka langsung dari kode warna Gelang ke-3
Masukkan Jumlah nol dari kode warna Gelang ke-4 atau pangkatkan angka tersebut dengan 10 (10n)
Merupakan Toleransi dari nilai Resistor tersebut

Contoh :

Gelang ke 1 : Coklat = 1
Gelang ke 2 : Hitam = 0
Gelang ke 3 : Hijau = 5
Gelang ke 4 : Hijau = 5 nol dibelakang angka gelang ke-2; atau kalikan 105
Gelang ke 5 : Perak = Toleransi 10%
Maka nilai Resistor tersebut adalah 105 * 105 = 10.500.000 Ohm atau 10,5 MOhm dengan toleransi 10%.

Contoh-contoh perhitungan lainnya :

Merah, Merah, Merah, Emas → 22 * 10² = 2.200 Ohm atau 2,2 Kilo Ohm dengan 5% toleransi
Kuning, Ungu, Orange, Perak → 47 * 10³ = 47.000 Ohm atau 47 Kilo Ohm dengan 10% toleransi

Cara menghitung Toleransi :
2.200 Ohm dengan Toleransi 5% =
2200 – 5% = 2.090
2200 + 5% = 2.310
ini artinya nilai Resistor tersebut akan berkisar antara 2.090 Ohm ~ 2.310 Ohm
 
D. Power Supply
 

Dalam bahasa Indonesia, Power Supply berarti Sumber Daya. Fungsi dari power supply adalah memberikan daya arus listrik ke berbagai komponen.

Sumber energi listrik yang berasal dari luar masih berbentuk alternating current (AC). Ketika energi listrik masuk ke power supply, maka energi listrik akan dikonversi menjadi bentuk direct current (DC). Daya DC inilah yang kemudian disalurkan ke semua komponen yang ada di dalam chasing komputer agar dapat bekerja.

1. Pastikan semua supply dalam keadaan off
2. Hubungkan jumper seperti rangkaian dibawah
3. Buatlah listing program yang telah ada pada modul
4. periksakan rangkaian kepada asisten yang mengawas
5. Hidupkan semua supply
6. Upload program dari laptop ke modul
7. Tekan tombol Reset
8. Amati percobaan, jika tidak sesuai perbaiki rangkaian atau program
9. Jika sesuai, maka selesai dan demokan pada asisten yang mengawas
10.Jelaskan prinsip kerja + program dan hubungan keduanya kepada asisten
11.Demokan ke pembimbing praktikum
12.Matikan supply 

b. Hardware[kembali]

 

        
LED
 

Arduino
 
 

Resistor
 

Power Supply

//MASTER

#include<SPI.h>                             //Library for SPI 

#define LED 7           

#define ipbutton 2

int buttonvalue;

int x;

void setup ()

{

  Serial.begin(115200);                   //Starts Serial Communication at Baud Rate 115200 

  

  pinMode(ipbutton,INPUT);                //Sets pin 2 as input 

  pinMode(LED,OUTPUT);                    //Sets pin 7 as Output

  

  SPI.begin();                            //Begins the SPI commnuication

  SPI.setClockDivider(SPI_CLOCK_DIV8);    //Sets clock for SPI communication at 8 (16/8=2Mhz)

  digitalWrite(SS,HIGH);                  // Setting SlaveSelect as HIGH (So master doesnt connnect with slave)

}

void loop()

{

  byte Mastersend,Mastereceive;          

  buttonvalue = digitalRead(ipbutton);   //Reads the status of the pin 2

  if(buttonvalue == HIGH)                //Logic for Setting x value (To be sent to slave) depending upon input from pin 2

  {

    x = 1;

  }

  else

  {

    x = 0;

  }

  digitalWrite(SS, LOW);                  //Starts communication with Slave connected to master

  Mastersend = x;                            

  Mastereceive=SPI.transfer(Mastersend); //Send the mastersend value to slave also receives value from slave

  if(Mastereceive == 1)                   //Logic for setting the LED output depending upon value received from slave

  {

    digitalWrite(LED,HIGH);

    delay(500);

          //Sets pin 7 HIGH

    Serial.println("Master LED ON");

  }

  else

  {

   digitalWrite(LED,LOW);               //Sets pin 7 LOW

   Serial.println("Master LED OFF");

  }

  delay(250);

}


// SLAVE PROGRAM

#include<SPI.h>

#define LEDpin 7

#define buttonpin 2

#define buzzer 4

volatile boolean received;

volatile byte Slavereceived,Slavesend;

int buttonvalue;

int x;

void setup()

{

  Serial.begin(115200);

  

  pinMode(buttonpin,INPUT);               // Setting pin 2 as INPUT

  pinMode(LEDpin,OUTPUT);                 // Setting pin 7 as OUTPUT

  pinMode(MISO,OUTPUT);                   //Sets MISO as OUTPUT (Have to Send data to Master IN 

  pinMode(buzzer,OUTPUT);

  SPCR |= _BV(SPE);                       //Turn on SPI in Slave Mode

  received = false;


  SPI.attachInterrupt();                  //Interuupt ON is set for SPI commnucation

}

ISR (SPI_STC_vect)                        //Inerrrput routine function 

{

  Slavereceived = SPDR;         // Value received from master if store in variable slavereceived

  received = true;                        //Sets received as True 

}


void loop()

{ if(received)                            //Logic to SET LED ON OR OFF depending upon the value recerived from master

   {

      if (Slavereceived==1) 

      {

        digitalWrite(LEDpin,HIGH);

        digitalWrite(buzzer,HIGH);

        delay(500);    


        Serial.println("Slave LED ON");

      }else

      {

        digitalWrite(LEDpin,LOW);          //Sets pin 7 as LOW LED OFF

        Serial.println("Slave LED OFF");

      }

      buttonvalue = digitalRead(buttonpin);  // Reads the status of the pin 2

      if (buttonvalue == HIGH)               //Logic to set the value of x to send to master

      {

        x=1;

       

      }else

      {

        x=0;

      }

  Slavesend=x;                             

  SPDR = Slavesend;                           //Sends the x value to master via SPDR 

  delay(250);

}

}


MASTER

SLAVE




Pada rangkaian menggunakan 2 arduino yang masing-masing digunakan sebagai MASTER dan SLAVE yang akan digunakan untuk komunikasi SPI, 2 buah button, 2 buah LED, Resistor, dan sebuah Buzzer.
Arduino 1 ditentukan sebagai master dan arduino 2 yang bertindak sebagai slave. Master dan slave ini dihubungkan melalui kaki pin 10 master ke kaki pin 10 slave sebagai SS,  pin 11 master ke kaki pin 11 slave sebagai MOSI, pin 12 master ke kaki pin 12 slave sebagai MISO, dan pin 13 master ke kaki pin 13 slave sebagai SCK. pin 2 (push button) sebagai input dan pin 7 sebagai output pada masing masing arduino. Ketika input button berlogika HIGH maka akan ada keluaran di pin MOSI ke slave sehingga LED dan buzzer pada slave menyala. sedangkan ketika input button pada slave  logika HIGH maka akan ada keluaran di pin MISO akibatnya LED pada Master menyala.

g. Video [kembali]


Tambahkan buzzer sebagai output sehingga output yang tersedia LED dan Buzzer

1. pada komuikasi SPI, menggunakan lebih dari 1 master dalam sistem yang sama apakah dapat dilakukan? jelaskan!
jawab:
Master SPI adalah perangkat yang menggerakkan jalur SCLK. kita tidak dapat memiliki 2 perangkat yang menjalankan jalur SCLK secara bersamaan

2. pada kondisi master menggunakan lebih dari 1 slave, bagaimana cara aagar master mengirimkan data yang berbeda pada setiap slave?jelaskan!
jawab:

Pada komunikasi SPI jumlah maksimum slave yang dapat digunakan adlah 4 slave. jika ingin menambah slave pada sistemnya maka dapatb digunakan 2 tipe rangkaian yaitu independent slave configuration dan daisy Chain configuration. namun karena kita ingin membuat agar master mengirimkan data yang berbeda pada setiap slave maka lebih cocok digunakan rangkaian independent slve configuration.

pada conviguration ini setipa pin SS/CS terhubung ke slave yang berbeda-beda. Apabila ingin berkomunikasi dengan slave tertentu, maka akan mengirimkan sinyal LOW pada 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 mendapatkan respon maka akan dikirim lagi sinyal clock hingga data dikirim oleh slave melalaui pin MISO. 

3. Apakah baudrate pada master dan slave pada komuikasi SPI harus bernilai sama? berikan alasan!

jawab:

tidak harus sama, baudrate hanya mempengaruhi kecepatan pengiriman data dari master dan slave

1.





Tidak ada komentar:

Posting Komentar