Anda di halaman 1dari 11

LAPORAN PRAKTIKUM

ANTARMUKA MIKROPROSESOR DAN MIKROCONTROLER

PERCOBAAN IV
SERIALTO PARALEL IO
TM1638

Dosen Pengampu : Sabar Pramono, BSEE., MT

Disusun Oleh:

GUNAWAN SETIA LUMBAN TOBING 171311009

PROGRAM STUDI TEKNIK ELEKTRONIKA


JURUSAN TEKNIK ELEKTRO
POLITEKNIK NEGERI BANDUNG
2019
SERIAL TO PARALEL IO TM1638

I. Tujuan
Setelah melaksanakan praktikum saya mampu:
1. Mengimplementasi algoritma ke program dari datasheet
2. Membuat program bahasa ‘C’ untuk membuat tampilan pada modul
3. Mengatur tampilan display
4. Menggunakan modul serial to parallel io tm1638

II. Petunjuk Keselamatan Kerja


 Memeriksa seluruh koneksi sebelum power dinyalakan atau dihubungkan dengan
komputer

III. Landasan Teori

Board hanya memiliki 3 pin kontrol plus power dan ground. Pin kontrol adalah strobe,
clock dan data. Pin strobe dan clock hanya OUTPUT sedangkan pin data bisa OUTPUT dan
INPUT. Pin strobe digunakan saat mengirim data ke board, mengatur pin strobe ke LOW
sebelum mulai mengirim data satu atau lebih byte dan kemudian mengatur pin strobe kembali
ke HIGH. Perhatikan bahwa hanya ada satu pin data yang berarti data sedang dikirim 1 bit
setiap kali. Di sinilah pin clock berperan. Saat mengirim data, Anda mengatur pin clock ke
LOW maka Anda mengatur pin data dan mengatur pin clock kembali ke HIGH untuk
mengkomit nilai bit. Anda mungkin sudah terbiasa dengan pola ini adalah cara standar untuk
mengirim data dengan register geser dan oleh karena itu kami hanya dapat menggunakan
fungsi shiftOut standar untuk mengirim 8 bit data hanya dengan satu baris kode. Data yang
dikirim ke board mengikuti protokol di mana byte pertama memberi tahu board apa yang
ingin kita lakukan dan diikuti oleh nol atau lebih byte yang merupakan argumen untuk fungsi
yang dipilih. Argumen dikirim secara terpisah (mis. Pin strobe harus diatur ke HIGH setelah
mengirim perintah dan sekali lagi ke LOW sebelum mengirim argumen). Board memiliki 4
fungsi:
 Mengaktifkan / menonaktifkan board dan menginisialisasi layar
 Tulis byte di alamat tertentu
 Tulis byte mulai dari alamat tertentu
 Tombol baca

Untuk mengaktifkan board dan mengatur kecerahan layar kami menggunakan perintah
1000abbb (0x8?) Di mana bit yang ditandai sebagai a digunakan untuk mengaktifkan /
menonaktifkan board dan bit yang ditandai sebagai bbb digunakan untuk mengatur kecerahan
layar. Misalnya untuk mengaktifkan board dan mengatur kecerahan tampilan ke nilai
maksimum yang kita perlu kirim 0x8f. Fungsi ini tidak memiliki argumen. Untuk menulis
byte pada alamat tertentu, kami mengirim perintah 010000100 (0x44) diikuti dengan alamat
dalam bentuk 1100aaaa (aaaa bit menunjukkan lokasi yang ingin kami tulis) diikuti dengan
nilainya. Sebagai contoh untuk menulis nilai 0x45 pada alamat 0x0a kita harus mengirim
urutan byte berikut: 0x44 0xca 0x45.
Jika kita ingin menulis nilai pada alamat yang berurutan (sangat membantu untuk mereset
board) kita akan mengirim 01000000 (0x40) diikuti dengan alamat awal (lagi dalam bentuk
1100aaaa) diikuti oleh nilai yang ingin kita tulis. Misalnya jika kita mengirim 0x40 0xc0
0x00 0x01 0x02 0 akan ditulis di alamat 0, 1 akan ditulis di alamat 1 dan 2 akan ditulis di
alamat 2. Perhatikan bahwa kita memiliki 4 bit untuk memilih alamat yang berarti ada enam
belas lokasi yang dapat ditulis. Jika Anda terus menulis setelah mencapai alamat 0x0f itu
akan dibungkus dan Anda akan mulai lagi dari alamat 0x00. Untuk membaca tombol, kami
mengirim perintah 010000010 (0x42), mengatur pin data sebagai INPUT dan membaca 4
byte yang berisi status tombol.

Sekarang kita tahu bahwa kita dapat menulis nilai ke salah satu dari 16 lokasi. Ini adalah
cara kita menyalakan LED dan mengontrol tampilan. Board ini memiliki dua tampilan LED 7
segmen 7 digit dan 8 LED. Masing-masing dari mereka memiliki alamat khusus yang
nilainya perlu ditulis untuk mengontrol item yang sesuai. Misalnya jika menyalakan LED
pertama kita akan menulis 1 pada alamat 0x01. Di bawah ini adalah daftar lokasi dengan
penjelasan singkat.
Pertama-tama kita perlu menghubungkan board berbasis TM1638 ke board Arduino kita.
Beginilah cara saya melakukannya:

Board berbasis Arduino TM1638


5V ------------------ VCC
GND ------------------ GND
PIN # 7 ------------------ STB
PIN # 8 ------------------ DIO
PIN # 9 ------------------ CLK

Fungsi pengaturan perlu mengaktifkan dan mengatur ulang board. Agar mudah dibaca,
dibuat fungsi pembantu untuk mengirim perintah dan fungsi terpisah untuk pengaturan.
Inilah cara kerjanya. Kode mulai dijalankan dari fungsi pengaturan. Pertama-tama kita
menetapkan pin 7, 8, 9 sebagai pin keluaran. Selanjutnya kita mengaktifkan board dan
mengatur kecerahan ke nilai maksimum dengan mengirim 0x8f. Akhirnya mereset board
dengan membersihkan semua lokasi memori. Dengan mengatur board ke mode kenaikan
otomatis alamat (0x40), memilih 0 sebagai alamat awal (0xc0) dan mengirim 0 enam belas
kali. Sekarang board siap bekerja dengan menampilkan sesuatu. Yang mudah ditampilkan
adalah 8, pada posisi digit pertama dan terakhir pada layar dan menyalakan LED ke-3 dan ke-
6. Untuk melakukan itu kita akan menggunakan mode alamat tunggal karena lokasi yang
akan kita tulis tidak berurutan.
Menampilkan 8 akan lebih baik jika kita tahu hubungan antara nilai yang dikirim ke board
dan apa yang akan ditampilkan. Board menggunakan pengkodean 7 segmen standar, sehingga
nilai yang dikirim ke board adalah byte dengan bit kode sebagai berikut: [DP] GFEDCBA.
Setiap bit akan menyalakan satu segmen sesuai gambar di bawah ini:

Jadi, misalnya jika ingin menampilkan A harus menulis 0x77 di lokasi yang sesuai.
Sekarang kita tahu cara mengontrol LED dan tampilan. Tapi ada satu hal lagi yang
ditawarkan board - tombol. Membaca tombol apa yang ditekan bekerja sedikit berbeda dari
apa yang telah kita lihat sejauh ini. Pertama kita perlu mengirim perintah 0x42, kemudian kita
mengatur pin data sebagai pin input. Akhirnya kita perlu membaca 4 byte dari board (sedikit
demi sedikit). Byte pertama berisi status untuk tombol S1 (bit 1) dan S5 (bit 4), byte kedua
berisi status untuk tombol S2 (bit 2) dan S6 (bit 5) dan seterusnya. Jika kita | (mis. logis
`atau`) semua byte kita akan berakhir dengan byte di mana setiap bit berhubungan dengan
satu tombol - jika bit diatur ke satu berarti bahwa tombol yang sesuai ditekan. Ini adalah
sedikit program di mana board akan menyalakan LED di atas tombol yang ditekan.
IV. Alat dan Komponen yang digunakan
1. Komputer PC/ Laptop
2. WinAVR
3. Usbasp
4. Usbasp driver
5. Arduino Pro mini atau Arduino Uno
6. Kabel penghubung secukupnya

V. Langkah – langkah Percobaan


1. Menjalankan Programmers Notepad
2. Membuat project file dan beri nama
3. Membuat Header file dan beri nama dengan isi sebagai berikut, lalu
menambahkannya ke project

1. #ifndef tm1638_h
2. #define tm1638_h
3. #define SET_DISP 0x88
4. #define INC_ADD 0x40
5. #define FIX_ADD 0x44
6. #define SEL_ADD(x) 0xc0+x

7. void send_data(char);
8. void send_command(char);
9. void clear(void);
10. void running_led(void);
11. void send_data(char data)
{
12. char i;
13. for(i=0;i<8;i++)
{
a) clrbit(PORTB,dio);
b) clrbit(PORTB,clk);
c) if(bit_is_set(data,i))
d) setbit(PORTB,dio);
e) setbit(PORTB,clk);
}
}

14. void send_command(char cmd)


{
15. clrbit(PORTB,stb);
16. send_data(cmd);
17. setbit(PORTB,stb);
}
18. void clear(void)
{
19. int i;
20. send_command(INC_ADD);
21. clrbit(PORTB,stb);
22. send_data(SEL_ADD(0));
23. for(i=0;i<16;i++)
a. send_data(0);
24. setbit(PORTB,stb);
}
25. #endif

4. Membuat C file dan beri nama dengan isi sebagai berikut kemudian
menambahkannya ke project

1. #include <avr/io.h>
2. #include <util/delay.h>
3. #define setbit(port,bit) port |= _BV(bit)
4. #define clrbit(port,bit) port &= ~(_BV(bit))
5. #define dio 0
6. #define clk 1
7. #define stb 2
8. #include "tm1638.h"
9. int main(void)
{
10. int i;
11. PORTB=0;
12. DDRB=0xff;
13. PORTB |=0x06;
14. send_command(SET_DISP);
15. clear();
16. while(1)
{
17. for(i=1;i<16;i+=2)
{
a. clrbit(PORTB,stb);
b. send_data(SEL_ADD(i));
c. send_data(1);
d. setbit(PORTB,stb);
e. _delay_ms(15);
f. clrbit(PORTB,stb);
g. send_data(SEL_ADD(i));
h. send_data(0);
i. setbit(PORTB,stb);
j. _delay_ms(3);
}
18. for(i=13;i>2;i-=2)
{
a. clrbit(PORTB,stb);
b. send_data(SEL_ADD(i));
c. send_data(1);
d. setbit(PORTB,stb);
e. _delay_ms(15);
f. clrbit(PORTB,stb);
g. send_data(SEL_ADD(i));
h. send_data(0);
i. setbit(PORTB,stb);
j. _delay_ms(3);
}
}
19. return 0;
}

5. Menjalankan Makefile Generator


6. Setting
 MCU type
 Target file name
 programmer Usbasp
 enable editing make file
 Edit F_CPU = 16000000
7. Save Makefile ke project directory
8. Menambahkan Makefile ke project
9. Tools → make all
10. Menghubungkan Promini dengan Usbasp sebgai berikut, lihat gambar
Usbasp => Promini
GND => GND
VCC => VCC
RST => RST
MOSI => 11
MISO => 12
SCK => 13

Promini => Modul TM1638


GND => GND
VCC => VCC
8 => DIO
9 => CLK
10 => STB

11. Tools → program


12. Mengamati output di modul
13. Mengulangi langkah 3 untuk file ‘C’ berikut

1. #include <avr/io.h>
2. #include <util/delay.h>
3. #define setbit(port,bit) port |= _BV(bit)
4. #define clrbit(port,bit) port &= ~(_BV(bit))
5. #define dio 0
6. #define clk 1
7. #define stb 2
8. #include "tm1638.h"

9. char s[16]={1,2,4,8,16,32,64,128};
10. int main(void)
{
11. int i,j;
12. PORTB=0;
13. DDRB=0xff;
14. PORTB |=0x06;
15. send_command(SET_DISP);
16. while(1)
{
a. clear();
b. for(j=0;j<16;j+=2)
c. {
d. send_command(FIX_ADD);
e. clrbit(PORTB,stb);
f. send_data(SEL_ADD(j));
g. for(i=0;i<8;i++)
{
1. send_data(s[i]);
2. _delay_ms(500);
}
h. setbit(PORTB,stb);
}
17. }
18. return 0;
19. }

14. Mengubah Target File Name dengan file yang baru


15. Save Makefile
16. Tools → make all
17. Tools → Program
18. Mengamati output di modul
19. Mengulangi langkah 12 s/d 17 untuk file ‘C’ berikut

1. #include <avr/io.h>
2. #include <util/delay.h>
3. #define setbit(port,bit) port |= _BV(bit)
4. #define clrbit(port,bit) port &= ~(_BV(bit))
5. #define dio 0
6. #define clk 1
7. #define stb 2
8. #include "tm1638.h"

9. char s[16]={0,0,115,0,63,0,56,0,124,1,95,1,84,1,0,1};
10. char t[16]={0,1,115,1,63,1,56,1,124,0,95,0,84,0,0,0};

11. int main(void)


{
12. int i;
13. PORTB=0;
14. DDRB=0XFF;
15. PORTB |=0x06;
16. send_command(SET_DISP);
17. while(1)
{
18. send_command(INC_ADD);
19. clrbit(PORTB,stb);
20. send_data(SEL_ADD(0));

21. for(i=0;i<16;i++)
a. send_data(s[i]);
22. setbit(PORTB,stb);
23. _delay_ms(1000);
24. send_command(INC_ADD);
25. clrbit(PORTB,stb);
26. send_data(SEL_ADD(0));
27. for(i=0;i<16;i++)
28. send_data(t[i]);
29. setbit(PORTB,stb);
30. _delay_ms(1000);
}
31. return 0;
}

VI. Hasil Pengamatan

1. Hasil pengamatan dengan display menambilkan kata “heybro” dari


program pada langkah ke - 19
a) Program

#include <avr/io.h>
#include <util/delay.h>
#define setbit(port,bit) port |= _BV(bit)
#define clrbit(port,bit) port &= ~(_BV(bit))
#define dio 0
#define clk 1
#define stb 2
#include "tm1638.h"

char s[16]={0,0,118,0,121,0,102,0,124,1,80,1,63,1,0,1};
char t[16]={0,1,118,1,121,1,102,1,124,0,80,0,63,0,0,0};

int main(void)
{
int i;
PORTB=0;
DDRB=0XFF;
PORTB |=0x06;
send_command(SET_DISP);
while(1)
{
send_command(INC_ADD);
clrbit(PORTB,stb);
send_data(SEL_ADD(0));
for(i=0;i<16;i++)
send_data(s[i]);
setbit(PORTB,stb);
_delay_ms(1000);
send_command(INC_ADD);
clrbit(PORTB,stb);
send_data(SEL_ADD(0));
for(i=0;i<16;i++)
send_data(t[i]);
setbit(PORTB,stb);
_delay_ms(1000);
}
return 0;
}

b) Output

Pada percobaan ini pada display akan menampilkan tulisan “Hey br0” sesuai
yang ditulis dalam program dimana board menggunakan pengkodean 7 segmen
standar, sehingga nilai yang dikirim ke board adalah byte dengan bit kode dan
dengan keempat LED diatasnya bergeser bergiliran.

VI. Kesimpulan
Pada percobaan ini dapat disimpulkan bahwa:
 Dapat menggunakan TM1638 dalam komunikasi serial to parallel
 Untuk mengatur tampilan display perlu mengubah isi pada char s dan char t dengan
menggunakan pengkodean 7 segmen standar

Anda mungkin juga menyukai