Anda di halaman 1dari 12

LAPORAN PRAKTIK MIKROKONTROLER DAN ANTARMUKA DASAR

P9. APLIKASI I2C DAN SPI

Kode Kelompok Nama


1.Rayne Salsabila (PIC)
B1 2.Fazihan Tachta Firdaus
3.M. Aldi Ramdhan

Tujuan Praktik :
A. Mahasiswa mampu menganalisis rangkaian antarmuka dan program Arduino Uno yang
menggunakan I2C dan SPI.
B. Mahasiswa mampu membuat sendiri aplikasi pengontrolan berbasis Arduino Uno yang
menggunakan I2C dan SPI.

P9-1. RTC Read Test


A. Jelaskan komponen-komponen utama modul RTC DS1307

Komponen-komponen utama modul RTC DS1307 terdiri dari :


 RTC (Real Time Clock / Calendar) chip DS1307
Sebagai rangkaian yang menyediakan informasi waktu berupa detik, menit, jam,
tanggal, minggu, bulan, dan tahun
 Memory chips: AT24C32 dengan kapasitas penyimpanan 32K
Sebagai tempat menyimpan data-data waktu, yang mana hingga tahun 2100.
 Battery CR2032
Sebagai sumber energy cadangan agar fungsi penghitung tidak berhenti.

B. Jelaskan kegunaan fungsi print2digits().

Kegunaan fungsi print2digits() yaitu untuk menampilkan dua digit angka, contoh
pada program ini dengan sintaks print2digits(tm.Hour); dan print2digits(tm.Second);
agar dapat menampilkan 2 angka untuk menampilkan waktu dalam jam atau detik.

C. Jelaskan hasil eksekusi program TP9-1.

Hasil eksekusi dari program TP 9-1 ini yaitu berupa tampilan informasi waktu berupa
detik,menit,jam,tanggal,bulan dan tahun. Pada virtual terminal menampilkan secara
berkala sesuai sketch yang telah kita atur sehingga setiap perubahan detik akan
menampilkan update waktu dan pada DS-1307 Clock juga akan menampilkan

1
informasi berupa waktu dan tanggal.
Hasil :

D. Tuliskan dan analisislah sketch (code breakdown) TP9-1.

//Program P9-1 : RTC Read Test

//Library 1 : TimeLib ->


//Library 2: DS1307RTC ->

Bagian deklarasi awal digunakan untuk menambahkan file-file program yang


dibutuhkan untuk menjalankan program utama. Pada bagian program ini ktia
menggunakan sintaks #include. Fungsi #include adalah sebuah prosesor pengarah
yang mengatakan kepada kompiler untuk meletakan kode dari header file
iostream.h kedalam program. Library Arduino untuk menggunakan I2C adalah
<Wire.h>, untuk library dari arduino library time yaitu TimeLib.h serta
DS1307RTC.h digunakan untuk mendukung arduino library time.
#include <Wire.h>
#include <TimeLib.h>
#include <DS1307RTC.h>

Bagian setup digunakan untuk menginisiasi variabel, mengatur mode pin pada
board, mengatur timer, mengatur baudrate serial port dan sebagainya. Bagian
setup hanya dijalankan sekali saja yaitu pada saat awal program dijalankan atau
ketika program direset. Pada program ini sintaks kode diawali dengan pengaturan
baudrate serial port yaitu 9600. Lalu, sintaks while(!Serial) digunakan untuk
menunggu port serial untuk terhubung yang membutuhkan USB asli. Sintaks
Serial.println digunakan untuk untuk menampilkan data ke serial monitor.
void setup() {
Serial.begin(9600);
while(!Serial);
delay(200);
Serial.println("RTC /Read Test");
Serial.println("-------------");
}

Bagian loop adalah fungsi utama program yang akan dijalankan berulang-ulang.
Fungsi tmElements_t tm digunakan untuk memungkinkan akses mudah ke elemen
waktu yang sudah dikenal secara langsung seperti jam, menit, dan detik.
Selanjutnya menjalankan fungsi if dari RTC read. Program dibawah ini

2
memerintahkan untuk menetapkan tampilan yang ada pada serial monitor secara
berulang dengan menggunakan pengaturan waktu yang terdiri dari
jam,menit,detik, tanggal, hari, bulan serta tahun.

tmElements_t tm; //RTC instance

if(RTC.read(tm))
{
Serial.print("Ok, Time = ");
print2digits(tm.Hour);
Serial.write(':');
print2digits(tm.Minute);
Serial.write(':');
print2digits(tm.Second);
Serial.print(", Date (D/M/Y) = ");
Serial.print(tm.Day);
Serial.write('/');
Serial.print(tm.Month);
Serial.write('/');
Serial.print(tmYearToCalendar(tm.Year));
Serial.println();
}
Sedangkan pada program ini berfungsi untuk mengaktifkan fungsi RTC.chip yang
akan memerintahkan program untuk menghentikan fungsi dari program DS1307
dan memrintahkan untuk mengatur waktunya kembali
else
{
if(RTC.chipPresent())
{
Serial.println("The DS1307 is stopped. Please run the SetTime");
Serial.println("example to Initialize the time and begin running.");
Serial.println();
}
else
{
Serial.println("DS1307 read error! Please check the circuity.");
Serial.println();
}
delay(9000);
}
delay(1000);
}

Lalu dilanjutkan dengan sintaks voidprint2digits yang berfungsi untuk menjalankan

3
fungsi if apabila nilai integer lebih besar dari 10 dan kurang dari 10 maka
ditampilkanlah ‘0’
void print2digits(int number)
{
if (number >= 0 && number <10);
{
Serial.write('0');
}
Serial.print(number);
}

P9-2. Hello I2C LCD


A. Jelaskan fungsi chip PCF8574 pada LCD karakter 16x2 I2C.

Fungsi chip PCF8574 pada LCD karakter 16x2 I2C yaitu untuk mengkonversi modul
LCD biasa yang dilakukan dengan komunikasi data secara paralel karena belum
adanya hardware modul LCD yang mendukung/memiliki port I2C. IC ini adalah
sebuah 8 bit I/O expander for I2C bus yang pada dasarnya adalah sebuah shift
register.

B. Jelaskan cara mengubah address dari LCD karakter 16x2 I2C.

Cara mengubah address dari LCD karakter yaitu dengan mengubah sketch pada
bagian bertanda merah LiquidCrystal_I2C lcd(0x27, 16, 2); .Sebagian besar LCD I2C
dikirimkan dengan alamat default ‘0x27’, tetapi bisa berbeda tergantung pada
kelompok / pabrikan. Apabila kita ingin mengubahnya ganti bagian 0x27.

C. Jelaskan hasil eksekusi program TP9-2.

Hasil eksekusi program TP9-2 yaitu LCD 16x2 akan menyalakan backlight dan
menampilkan tulisan "Hello, World !" pada baris pertama dan lcd.print "I'm I2C LCD
16x2".

Hasil :

D. Tuliskan dan analisislah sketch (code breakdown) TP9-2.

4
//Program P9-2 : Hello I2C LCD

Bagian deklarasi awal digunakan untuk menambahkan file-file program yang


dibutuhkan untuk menjalankan program utama. Pada bagian program ini ktia
menggunakan sintaks #include. Fungsi #include adalah sebuah prosesor pengarah
yang mengatakan kepada kompiler untuk meletakan kode dari header file
iostream.h kedalam program. Library Arduino untuk menggunakan I2C adalah
<Wire.h>, untuk library dari LCD yaitu menggunakan <LiquidCrystal_I2C.h> dan
dilanjutkan mengatur variabel LCD. Selanjutnya, mengatur address LCD yang
digunakan 0x27 merupakan address dari lcd tersebut, 16 merupakan karakter dan
2 merupakan tampilan baris.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

//Set the LCD addresss to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

Bagian setup digunakan untuk menginisiasi variabel, mengatur mode pin pada
board, mengatur timer, mengatur baudrate serial port dan sebagainya. Bagian
setup hanya dijalankan sekali saja yaitu pada saat awal program dijalankan atau
ketika program direset. Pada program ini sintaks kode berisi inisiasi LCD dengan
fungsi lcd.begin untuk inisialisasi LCD dan sintaks lcd backlight untuk menyalakan
backlight dan fungsi lcd.print untuk menampilkan tulisan “Hello, World!’ dengan
fungsi lcd.print set kursor dan mencetak ke LCD hasil yaitu “I'm I2C LCD 16x2”

void setup() {
//initialize the LCD
lcd.begin();

//turn on the backlight and print a message


lcd.backlight();
lcd.print("Hello, World !");
lcd.setCursor(0,1);
lcd.print("I'm I2C LCD 16x2");
}

Bagian loop adalah fungsi utama program yang akan dijalankan berulang-
ulang.Namun apabila tidak ada fungsi yang harus dijalankan berulang-ulang bagian
ini boleh dikosongkan namun tetap ditulis fungsi voidloopnya
void loop() {
//Do nothing here...
}

5
P9-3. RTC Display
A. Jelaskan bagaimana cara mengetahui address dari suatu slave I2C.

Cara mengetahui address dari suatu slave I2C dengan menggunakan program
scanner, program ini dapat diakses di
https://playground.arduino.cc/Main/I2cScanner/
Program tersebut berfungsi untuk mengetahui dalam mencari alamat interface i2c
device modul yang terpasang, dengan melihat pada serial monitor.

B. Jelaskan mengapa slave SPI tidak memiliki address seperti slave I2C.

Karena pada slave SPI terdiri dari beberapa slave yang mana nantinya hanya akan
digunakan satu, maka tidak ada pengalamatan khusus dan digantikan dengan fungsi
slave select. Slave select adalah fungsi yang sama dengan chip pilih dan digunakan
sebagai pengganti konsep pengalamatan. Nama pin selalu menggunakan huruf
kapital seperti pada Slave Select, Serial Clock, dan Input Slave Input Master.

C. Jelaskan hasil eksekusi program TP9-3.

Hasil eksekusi program TP9-3 merupakan penggabungan dari P9-1 dan P9-2, yang
mana memanfaatkan RTC DS10 dan LCD karakter dengan chip PCF8574. Output dari
program ini berupa informasi waktu berupa informasi yang berupa waktu (Jam-
Menit-Detik) dan tanggal (Tanggal-Bulan-Tahun) yang selalu berubah tiap detiknya
pada LCD 16x2.

Hasil :

D. Tuliskan dan analisislah sketch (code breakdown) TP9-3.

//Program P9-3 : Real Time Display

Bagian deklarasi awal digunakan untuk menambahkan file-file program yang


dibutuhkan untuk menjalankan program utama. Pada bagian program ini ktia
menggunakan sintaks #include. Fungsi #include adalah sebuah prosesor pengarah
yang mengatakan kepada kompiler untuk meletakan kode dari header file
iostream.h kedalam program. Library Arduino untuk menggunakan I2C adalah
<Wire.h>, untuk library dari arduino library time yaitu TimeLib.h, DS1307RTC.h
digunakan untuk mendukung arduino library time, untuk library dari LCD yaitu

6
menggunakan <LiquidCrystal_I2C.h> dan dilanjutkan mengatur variabel lcd dengan
peletakkan lcd 0x27 dengan 16 karakter dan 2 baris tampilan. Selain itu kita juga
menginisiasi tmElements.

#include <Wire.h>
#include <TimeLib.h>
#include <DS1307RTC.h>
#include <LiquidCrystal_I2C.h>

//Set the LCD addresss to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

tmElements_t tm; //RTC instance

Bagian setup digunakan untuk menginisiasi variabel, mengatur mode pin pada
board, mengatur timer, mengatur baudrate serial port dan sebagainya. Bagian
setup hanya dijalankan sekali saja yaitu pada saat awal program dijalankan atau
ketika program direset. Pada program ini sintaks kode berisi inisiasi LCD dengan
fungsi lcd.begin, lcd.home yang berfungsi untuk memposisikan kursor di kiri atas
LCD. Artinya, menggunakan lokasi itu untuk menampilkan teks berikutnya ke
layar. Lalu lcd.print untuk mencetak tulisan "Real Time Display" ke LCD serta
mengatur waktu delay. Fungsi ini akan terjadi dengan waktu tunda 1000ms.

void setup() {
lcd.begin();
lcd.home();
lcd.print("Real Time Display");
delay(1000);
}

Bagian loop adalah fungsi utama program yang akan dijalankan berulang-ulang.
Fungsi ini digunakan untuk menampilkan hasil pembacaan dari RTC berupa waktu
yang terdiri dari jam, menit, detik,hari, bulan dan tahun dengan memannfaatkan
sintaks lcd.print untuk menampilkan pada LCD Karakter.

void loop() {
{
lcd.clear();
if(RTC.read(tm))
{
lcd.print(tm.Hour);
lcd.print(':');
lcd.print(tm.Minute);

7
lcd.print(':');
lcd.print(tm.Second);
lcd.setCursor(0,1);
lcd.print(tm.Day);
lcd.print('-');
lcd.print(tm.Month);
lcd.print('-');
lcd.print(tmYearToCalendar(tm.Year));
}
delay(1000);
}
}

P9-4. Sequential Fading Lights


A. Jelaskan kegunaan dan spesifikasi chip AD5204.

Kegunaan :
 Penggantian potensiometer mekanik
 Instrumentasi: gain, penyesuaian offset
 Konversi tegangan ke arus yang dapat diprogram
 Filter yang dapat diprogram, penundaan, konstanta waktu
 Line impedance matching

Spesifikasi :
 256 posisi
 Multiple independenprogrammable channels
 Terdiri dari 4-channel
 Pengganti potensiometer : 10 kΩ, 50 kΩ, 100 kΩ
 3-wire SPI-compatible serial data input +2.7 V to
+5.5 V untuk single-supply operation;
±2.7 V untuk dual-supply operation
 Power-on skala menengah

B. Jelaskan fungsi pin Ax, Bx, dan Wx (x=1,2,3,4) pada chip AD4204.

Potensiometer adalah resistor tiga terminal dengan kontak geser atau berputar yang
membentuk pembagi tegangan yang dapat disesuaikan. Jika dua terminal digunakan
(satu ujung dan penghapus), potensiometer bertindak sebagai resistor variabel.

 Fungsi Ax yaitu berfungsi sebagai Terminal Ax Resistive Digital to Analog


Converter (RDAC)

8
 Terminal B yaitu berfungsi sebagai Terminal Bx Resistive Digital to Analog
Converter (RDAC)
 Wiper yaitu sebagai befungsi wiper X atau penghapus X Resistive Digital to
Analog Converter (RDAC)

C. Jelaskan hasil eksekusi program TP9-4.

Hasil eksekusi program yaitu berupa 4 LED yang menyala secara bergantian. Proses
menyalanya melalui beberapa tahap yaitu redup, agak terang, lebih terang dan
terang sesuai sketch yang sudah diatur. LED ini menyala satu persatu hingga
menyala semua. Saat menyala semua, LED 1 mati dan mulai menyala lagi secara
perlahan, lalu setelah menyala dilanjutkan dengan LED 2 yang mati lalu menyala lagi
secara perlahan, dan seterusnya. Terang-redupnya lampu LED ini diatur dari digital
potentiometer chip AD204 yang telah di atur pada sketch code.

D. Tuliskan dan analisislah sketch (code breakdown) TP9-4.

// Program P9-4 : Sequential Fading Lights


// Using Digital Potentiometer 10k , 4 channel, 256 level (AD5204)

Bagian deklarasi awal digunakan untuk menambahkan file-file program yang


dibutuhkan untuk menjalankan program utama. Pada bagian program ini ktia
menggunakan sintaks #include. Fungsi #include adalah sebuah prosesor pengarah
yang mengatakan kepada kompiler untuk meletakan kode dari header file
iostream.h kedalam program. Library Arduino untuk menggunakan SPI adalah
<SPI.h>. Dilanjutkan dengan menginisialisasi pin selective select pada pin 10

#include <SPI.h>
int ssPin = 10;

Bagian setup digunakan untuk menginisiasi variabel, mengatur mode pin pada
board, mengatur timer, mengatur baudrate serial port dan sebagainya. Bagian
setup hanya dijalankan sekali saja yaitu pada saat awal program dijalankan atau
ketika program direset. Pada program ini sintaks kode diawali dengan mengatur
mode pin ss sebagai output dan inisiasi SPI.begin() yang mana master akan
mendisable pin SS sebagai kondisi default, menentukan bit order MSB atau LSB

9
yang terlebih dahulu untuk dikirim, menentukan kecepatan clock, menentukan
kapan slave membaca bit data di tepi naik(rising edge) atau tepi jatuh(falling edge)
dari pulsa clockdan sekaligus menentukan kapan clock dianggap menganggur
apakah pada saat keadaan tinggi atau rendah.
void setup()
{
pinMode(ssPin, OUTPUT);
SPI.begin();
}

Pada fungsi ini digitalWrite berfungsi untuk memberi selective slave Pin nilai low,
SPI.transfer(reg) difungsian untuk memilih register untuk dicetak,
SPI.transfer(level) digunakan untuk mengatur LED level diantara 0 sampai 255
serta digitalWrite(ssPin, HIGH) digunakan untuk memberi SS nilai high.

void setLed(int reg, int level)


{
digitalWrite(ssPin, LOW); // Set the given SS pin low
SPI.transfer(reg); // Choose the register to write to
SPI.transfer(level); // Set the LED level between 0-255
digitalWrite(ssPin, HIGH); // Set the given SS pin high again
}

Bagian loop adalah fungsi utama program yang akan dijalankan berulang-ulang.
Pertama fungsi for digunakan untuk mengatur channel dari 0 smapai tinggi, fungsi
selanjutnya for (int lev=50; lev<=255; lev++) digunakan untuk mengatur level dari
50 sampai 255 yang terus naik (lev++) dilanjutkan dengan mengatur LED channel i
di level j yang mana fungsi ini memiliki waktu tunda sebesar 20ms.
void loop()
{
for (int ch=0; ch<=3; ch++) // from channel 0 to 3
{
for (int lev=50; lev<=255; lev++) // from level 50,51,...,255
{
setLed(ch,lev); // Set the LED chan. i at level j
delay(20);
}

Mengatur waktu tunda lagi sebesar 500 ms dan menjalankan fungsi for (int
lev=255; lev>=255; lev--) untuk mengatur level 255 sampai 50 yang bernilai turun
(lev--) dan dilanjutkan dengan mengatur led chanel di i dan level j.
delay(500);
for (int lev=255; lev>=255; lev--) // from level 255,254,...,50
{

10
setLed(ch,lev); // set the LED chan. i at level j
delay(20);
}

Kesimpulan

1. Kesimpulan P9-1
RTC merupakan komponen yang berfungsi untuk memberikan informasi mengenai
waktu. Waktu disini dapat berupa detik, menit, hari, bulan dan tahun. Arduino UNO
tidak dilengkapi secara internal dengan RTC. Dengan demikian, untuk aplikasi yang
memerlukan pewaktuan, kita harus menyertakannya secara tersendiri seperti pada
praktikum P9-1 iini. Pada program 9-1 ini kita menggunakan RTC DS1307 untuk
menampilkan informasi waktu tersebut. Praktikum ini menghasilkan program yang
menampilkan informasi waktu berupa detik, menit ,jam, tanggal, bulan dan tahun.
Output ini ditampilkan pada virtual terminal yang menampilkan secara berkala sesuai
sketch yang telah kita atur sehingga setiap perubahan detik yang mana akan
menampilkan update waktu , output juga ditampilkan pada DS-1307 Clock juga akan
menampilkan informasi berupa waktu (Jam-Menit-Detik) dan tanggal (Tanggal-Bulan-
Tahun).

2. Kesimpulan P9-2
Arduino sendiri sudah mendukung protokol I2C/IIC. Di papan Arduino Uno, port I2C
terletak pada pin A4 untuk jalur SDA (Serial Data) dan pin A5 untuk jalur SCL (Serial
Clock). Namun, belum ada hardware modul LCD yang mendukung port I2C. Dengan
demikian, kita akan tetap menggunakan modul LCD biasa (dengan komunikasi data
secara paralel), namun akan kita konversi menggunakan modul I2C converter yaitu chip
PCF8574. LCD 16x2 berfungsi untuk menampilkan karakter yang ingin ditampilkan, pada
program ini LCD 16x2 menampilkan tulisan "Hello, World !" pada baris pertama dan “I'm
I2C LCD 16x2” pada baris kedua.

3. Kesimpulan P9-3
Praktikum P9-3 ini merupakan praktikum yang menggabungkan praktikum P9-1 dan P9-
2. Praktikum ini menggunakan RTC danLCD karakter dengan chip PCF8574. Langkah
pertama mengecek alamatnya apakah sudah tepat atau belum, namun biasanya arduino
sudah otomatis menyesuaikan. Untuk mengetahui address dari suatu slave I2C dengan

11
menggunakan program scanner, program ini dapat diakses di
https://playground.arduino.cc/Main/I2cScanner/
Program scanner tersebut berfungsi untuk mengetahui dalam mencari alamat interface
i2c device modul yang terpasang, dengan melihat pada serial monitor.Output dari
program ini berupa informasi waktu berupa informasi yang berupa waktu (Jam-Menit-
Detik) dan tanggal (Tanggal-Bulan-Tahun) yang selalu berubah tiap detiknya yang
ditampilkan pada LCD 16x2.

4. Kesimpulan P9-4
AD5204 (4-Channel) dan AD5206 (6-Channel) Potensiometer Digital adalah 256-posisi
perangkat resistor variabel yang dikontrol secara digital. fungsi pin Ax, Bx, dan Wx
(x=1,2,3,4) pada chip AD4204 yaitu sebagai tiga terminal dengan kontak geser atau
berputar yang membentuk pembagi tegangan yang dapat disesuaikan. Jika dua terminal
digunakan (satu ujung dan penghapus), potensiometer bertindak sebagai resistor
variabel yang mana fungsi Ax yaitu berfungsi sebagai Terminal Ax RDAC, fungsi Bx
sebagai Terminal Bx RDAC dan Wx yaitu sebagai befungsi wiper X atau penghapus X
RDAC. Outputnya berupa 4 LED yang menyala secara bergantian. Proses menyalanya
melalui beberapa tahap yaitu redup, agak terang, lebih terang dan terang sesuai sketch
yang sudah diatur menggunakan potensiometer digital ini AD4204. LED ini menyala satu
persatu hingga menyala semua. Saat menyala semua, LED 1 mati dan mulai menyala lagi
secara perlahan, lalu setelah menyala dilanjutkan dengan LED 2 yang mati lalu menyala
lagi secara perlahan, dan seterusnya. Terang-redupnya lampu LED ini diatur dari digital
disesuaikan dengan sketch code.

12

Anda mungkin juga menyukai