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.
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.
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 :
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.
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);
}
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);
}
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.
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.
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 :
4
//Program P9-2 : Hello I2C LCD
#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();
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.
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 :
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);
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);
}
}
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.
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)
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.
#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.
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