You are on page 1of 25

LAPORAN RESMI

SISTEM KOMUNIKASI ANTARA KOMPUTER DENGAN


MIKROKONTROLLER DENGAN MENGGUNAKAN KONEKTOR RS-232
OUTPUT RELAY

Nama

: Amien Raharja

NRP

: 1310121031

Kelas

: 3 D4 Elin B

3 D4 ELEKTRO INDUSTRI B

TEKNIK ELEKTRO INDUSTRI


POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
JL. RAYA ITS KEPUTIH SUKOLILO SURABAYA 60111 INDONESIA
TELP : (031)5947280. FAX : (031)5946114
E-mail : pens@eepis-its.edu http://www.eepis-its.edu

I.

Tujuan
1. Mahasiswa dapat merangkai sistem komunikasi antara komputer dengan
mikrokontroller dengan menggunakan konektor RS-232
2. Mahasiswa dapat membuat program sistem komunikasi antara komputer
dengan mikrokontroller dengan menggunakan konektor RS-232
3. Mahasiswa dapat menganalisa sistem komunikasi antara komputer dengan
mikrokontroller dengan menggunakan konektor RS-232

II.

Teori Dasar

Sistem komputer selalu terkait dengan data karena komputer berfungsi untuk memproses
data secara digital, data dalam komputer sering perlu untuk dikomunikasikan dengan
paralatan luar komputer. Salah satu sistem komunikasi data pada komputer adalah dengan
memanfaatkan serial port yang sudah terpasang pada komputer tersebut, dan standard
komunikasi serial yang digunakan untuk koneksi adalah jalur port serial RS232. Standar
RS232 merupakan standar protokol yang diaplikasikan pada semua sistem peralatan yang
berbasia komputer atau mikrokontroler, untuk itu pada tahun 1962Electronic Industry
Association (EIA) and Telecomunication Industry Association.(TIA) telah menetapkan
sebuah standar komunikasi data antar dua peralatan elektronik, yaituData Terminal
Equipment(DTE) dan Data Communication Equipment(DCE) menggunakan pertukaran
data biner secara serial (Serial Binary Data Interchang) yang diberi nama EIA/TIA-232.
Paling sering kita temui komunikasi data
adalah koneksi antara komputer dengan
modem, komputer dengan printer, scaner,
joystik game atau mouse..

Untuk pemakaian lebih luas komunikasi antara komputer dengan komputer, sehingga
bisa digunakan saling tukar menukar data.

Komunikasi antara komputer dengan peralatan otomasi dalam industri (PLC),

dimana koneksimenggunakan fasilitasjalur port serial RS232.


PRISIP KERJA RS232
Komunikasi data secara serialdilakukan dengan metode untuk mengirimkan data dari
sebuah pengirim secara bit per bit dengan kecepatan tertentu (bit per detik/bps), dan
penmgiriman dilakukan melalui jalur satu kawat (Tx) dan diterima oleh sebuah penerima
(Rx) dalam waktu tertentu. Oleh karena komputer penerima dapat berfungsi sebagai
pengirim begitu juga pengirim juga dapat berfungsi sebagai penerima, maka komunikasi
dapat
arah.

dilakukan dalam dua

Seperti diketahui bahwa dalam sebuah komputer data dialirkan melalui jalur (bus) data
secara paralel dan data yang dikirimkan atau yang diterima melalui port serial, oleh karena
itu dibutuhan suatu interface yang dapat mengubah dari jalur paralel menjadi jalur data
serial.
Sebuah rangkaian RS232 yang dapat mengubah jalur paralel menjadi jalur serial ditunjuk
oleh sebuah IC tipe 6850, yaitu sebuah rangkaian yang dikenal dengan istilah
Asynchronous Communications Interface Adapter (UART).

(Datasheet UART 6850).

UART 6850 secara blok terdiri dari:


1.

sistem clock berfungsi sebagai sinkronisasi operasi seluruh sistem UART untuk
terima data atau kirim data.

2.

Chip select and R/W berfungsi sebagai kendali operasi UART oleh devais
eksternal.

3.

Data Bus Buffer berfungsi sebagai buffer data masuk dan data keluar secara
paralel untuk dikoneksikan dengan sistem data bus pada mikro atau komputer..

4.

Transmit Data Register berfungsi sebagai penampung data dari data bus buffer
untuk segera dikirimkan secara serial.

5.

Receiver Data Register berfungsi sebagai penampung data dari masukan serial
untuk dikirim ke data bus buffer untuk dibaca oleh mikro atau komputer secara
paralel.

6. Control Register berfungsi untuk mengendalikan proses kirim dan terima data
terkait dengan devais eksternal.
7.

Status Register berfungsi untuk mencatat status dari setiap proses yang dilakukan
oleh UART.

8.

Blok kontrol baik untuk terima data maupun kirim data yang merupakan bagian
dari control register dalam operasi terima ataupun kirim data.

9.

Pin-pin konektor yang digunakan untuk menghubungkan internal UART dengan


devais eksternal.

Proses Operasi UART


Diperlukan memilih dan membuka devais melalui 3 buah saluran pemilih CS0, CS1 dan
CS2) dan saluran E (yang juga berfungsi sebagai clock data dari dan ke buffer 6850
databus), dilanjutkan dengan melakukan reset pada power up melalui pemberian bit0 dan
bit1 dengan logika 1 pada Register kontrol.
Empat logika sebagai kombinasi dari kedua bit adalah 00, 01, 10, 11, berfungsi untuk pilih
register dan Baca / Tulis yang digunakan untuk memilih dan membaca dari Receive Data
Register atau Status Register atau menulis ke Transmit Data Register atau Control
Register .
Sekali di reset, E toggle dan dengan demikian makabit pada Control Register (CR) dapat
diatur untuk program perilaku serial sesuai dengan yang diinginkan.
Sebagai contoh untuk keperluan khusus UART clock dibuat 500 KHz, CR0 dan CR1
diprogram untuk pembagi clock 16 sehingga akan diperoleh 500 KHz 16 = 31,25 KHz.
CR2, 3,4 diprogram untuk 8 bit, 1 stop bit, no parity dan CR7 diatur untuk memungkinkan
menerima mendaftar interupt penuh. Saluran IRQ berfungsi untuk memberikan sinyal

interupsi NMI ke mikro atau ke prosesor, yang berarti UART meminta layanan untuk bisa
melakukan pengiriman atau penerimaan data secara serial.
Selanjutnya komunikasi data dapat dilakukan baik untuk pengiriman data atau penerimaan
data, setelah penyambungan antar devais atau komunikasi serial dengan standar
komunikasi RS-232 yang menghubungkan periferal eksternal seperti modem dengan
komputer.

Konektor RS-232
Konektor DB9 atau DB25digunakan sebagai penghubung antar devais, RS232 dengan
konektor DB9 dipakai untuk mouse, modem dan lain-lain.Sedang konektor DB25 dipakai
untukjoystik game. Serial port RS232 dengan konektor DB9 memiliki 9 buah pin dan pada
konektor DB25 memiliki pin 25 buah.
Sedangkan fungsi masing-masing pin pada konektor dapat dilihat pada tabel berikut

Dengan memanfaatkan pin konektor RS-232 dapat digunakan untuk


mengkoneksi secara data serial di antara komputer dan modem atau
piranti lain, di industri koneksi ini digunakan untuk pengujian atau pengetesan. Sebagai
contohterkoneksi

dengan

Oscilloscope,sehingga

hasil

Digital
dapat

Multimeter,
langsung dibaca

Frequency
oleh

Counter

komputer

mengendalikan peralatan tertentu sesuai dengan fungsi yang diharapkan. .

atau

atau
utnuk

Terdapat banyak industri mengembangkan sistem yang berbeda, artinya sistem yang satu
dengan sistem yang lain tidak memiliki pola pengambangan yang sama dan tidak saling
tergantung. Akan tetapi dengan menambahkan port komunikasi standar RS-232 maka antar
peralatan tersebut dapat saling dikoneksikan dalam rangka untuk mengkomunikasikan data.
Fungsi pin berdasarkan tabel di atas dapat dijelaskan sebagai berikut:

Signal Ground (SG)berfungsi untuk memberikan masa (ground) pada setiap sinyal
secara bersama (common signal ground).

Transmit Data (TX)berfungsi sebagai saluran keluarnya data dari UART atau
sebagai pengirim data ke devais secara serial.

Receive Data (RX)berfungsi sebagai saluran masuknya data ke UART atau sebagai
penerima data dari devais secara serial.

Data Terminal Ready (DTR)berfungsi sebagai pemberi informasi status ke devais


terkoneksi bahwaUART telah siap. Saat terkoneksi dan berkomunikasi dengan
devais DTR perlu beri logika 1.

Data Set Ready (DSR)berfungsi untuk menerima informasi status devais bahwa
devais siap utnuik diakses oleh komputer melalui UART.

Request to Send (RTS)berfungsi sebagai isyarat permintaan UART ke devais


untukmemfasilitasi bahwa UART akan mengirimkan data ke devais.

Clear to Send (CTS) berfungsi sebagaipenerima jawaban atas pengiriman isyarat


RTS bila modem/piranti telah menerima data.

Data Carrier Detect (DCD) berfungsisebagai penerima isyaratagar komputer


bersedia menerima data pada pada waktu tertentu.

Ring Indicator (RI) berfungsi menerima isyarat dari modem bahwa ada devais
(eksternal) yang membutuhkan koneksi dalam rangka pengiriman atau permintaan
data.

Tegangan Logik RS-232


Tegangan logik pada interface atau port RS-232 berbeda dengan tegangan logik pada tenik
digital (5 volt), disini berlaku tegangan negatif merupakan sinyal untuk logika 1 dan
tegangan positif merupakan sinyal untuk logika0. Sebagai standar tegangan pada RS-232
digunakan 5V 12V dan -5V (-12V) untuk sistem komputer.
Untuk sistem RS232 serial port padasistem mikrokontroler 0 1.8V untuk logika
0 dan 2.2V 5V untuk logika 1, hal ini merupakan logika yang berlaku untuk TTL. Jika
diinginkan koneksi antara komputer dengan mikrokontroler maka level dari tegangan TTL
harus diubah menjadi tegangan standar RS-232, berikut merupakan rangkaian pengubah
level tegangan TTL ke standar level tegangan RS-232 menggunakan IC max 232:

KOMUNIKASI SERIAL RS232

Terdapat beberapa metode penerapan interface pada komunikasi data biner secara serial
dan, diantaranya adalah RS-232. Dalam komunikasi data RS-232 terdapat hubungan dua

perangkat yaitu menghubungkan DTE (Data Terminal Equipment) ke DCE (Data


Communication Equipment).
Protokol standar yang digunakan untuk mengatur komunikasi data secara serial disebut RS232, yaitu berupa standar yang dikembangkan EIA (Electronic Industries Association).
Prinsip komunikasinya adalah komunikasi asyncronous, dan sinyal clock pada komunikasi
ini tidak disertakanpada frame data. Untuk melakukan sinkronisasi maka setiap kali
pengiriman data disertakan sebuah start bit dan sebuah stop bit.

Frame data yang dikirimkan disusun dengan urutan start bit, diikuti bit-bit data, paritas dan
diakhiri dengan stop bit.

III.

Wiring

Rs-232

Mikrokontrller

IV.

Program
#include <alcd.h>
#include <mega128.h>
#include <stdio.h>
#include <stdlib.h>
#include <delay.h>

#ifndef RXB8
#define RXB8 1
#endif

#ifndef TXB8
#define TXB8 0

Relay

#endif

#ifndef UPE
#define UPE 2
#endif

#ifndef DOR
#define DOR 3
#endif

#ifndef FE
#define FE 4
#endif

#ifndef UDRE
#define UDRE 5
#endif

#ifndef RXC
#define RXC 7
#endif

#define FRAMING_ERROR (1<<FE)


#define PARITY_ERROR (1<<UPE)

#define DATA_OVERRUN (1<<DOR)


#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

// USART1 Receiver buffer


#define RX_BUFFER_SIZE1 8
char rx_buffer1[RX_BUFFER_SIZE1];

#if RX_BUFFER_SIZE1 <= 256


unsigned char rx_wr_index1,rx_rd_index1,rx_counter1;
#else
unsigned int rx_wr_index1,rx_rd_index1,rx_counter1;
#endif

// This flag is set on USART1 Receiver buffer overflow


bit rx_buffer_overflow1;

// USART1 Receiver interrupt service routine

interrupt [USART1_RXC] void usart1_rx_isr(void)


{
char status,data;
status=UCSR1A;
data=UDR1;

if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)


{
if (data =='*')rx_wr_index1=0;
rx_buffer1[rx_wr_index1]=data;
rx_wr_index1++;
#if RX_BUFFER_SIZE1 == 256
// special case for receiver buffer size=256
if (++rx_counter1 == 0) rx_buffer_overflow1=1;
#else
if (rx_wr_index1 == RX_BUFFER_SIZE1) rx_wr_index1=0;
if (++rx_counter1 == RX_BUFFER_SIZE1)
{
rx_counter1=0;
rx_buffer_overflow1=1;
}
#endif
}
}

// Get a character from the USART1 Receiver buffer


#pragma used+
char getchar1(void)
{
char data;

while (rx_counter1==0);
data=rx_buffer1[rx_rd_index1++];
#if RX_BUFFER_SIZE1 != 256
if (rx_rd_index1 == RX_BUFFER_SIZE1) rx_rd_index1=0;
#endif
#asm("cli")
--rx_counter1;
#asm("sei")
return data;
}
#pragma used// Write a character to the USART1 Transmitter
#pragma used+
void putchar1(char c)
{
while ((UCSR1A & DATA_REGISTER_EMPTY)==0);
UDR1=c;
}
#pragma used-

// Declare your global variables here

void main(void)
{

int add,code,ch,i;
char buffer[10];
// Declare your local variables here

// Input/Output Ports initialization


// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out
Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Port E initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTE=0x00;
DDRE=0x00;

// Port F initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTF=0x00;
DDRF=0x00;

// Port G initialization
// Func4=In Func3=In Func2=In Func1=In Func0=In
// State4=T State3=T State2=T State1=T State0=T
PORTG=0x00;
DDRG=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
ASSR=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// OC1C output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off

TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// Timer/Counter 3 initialization
// Clock source: System Clock

// Clock value: Timer3 Stopped


// Mode: Normal top=0xFFFF
// OC3A output: Discon.
// OC3B output: Discon.
// OC3C output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer3 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR3A=0x00;
TCCR3B=0x00;
TCNT3H=0x00;
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x00;
OCR3AL=0x00;
OCR3BH=0x00;
OCR3BL=0x00;
OCR3CH=0x00;
OCR3CL=0x00;

// External Interrupt(s) initialization


// INT0: Off
// INT1: Off
// INT2: Off
// INT3: Off
// INT4: Off
// INT5: Off
// INT6: Off
// INT7: Off
EICRA=0x00;
EICRB=0x00;
EIMSK=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization


TIMSK=0x00;

ETIMSK=0x00;

// USART0 initialization
// USART0 disabled
UCSR0B=0x00;

// USART1 initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity


// USART1 Receiver: On
// USART1 Transmitter: On
// USART1 Mode: Asynchronous
// USART1 Baud Rate: 9600
UCSR1A=0x00;
UCSR1B=0x98;
UCSR1C=0x06;
UBRR1H=0x00;
UBRR1L=0x33;

// Analog Comparator initialization


// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

// Global enable interrupts


#asm("sei")
code=36;
lcd_init(20);
while (1)
{
// Place your code here
lcd_gotoxy(0,0);
lcd_putchar(rx_buffer1[0]);
lcd_putchar(rx_buffer1[1]);
lcd_putchar(rx_buffer1[2]);
lcd_putchar(rx_buffer1[3]);
lcd_putchar(rx_buffer1[4]);
lcd_putchar(rx_buffer1[5]);
lcd_putchar(rx_buffer1[6]);
lcd_putchar(rx_buffer1[7]);

if(rx_buffer1[0]=='*' && rx_buffer1[7]=='#')

{if(rx_buffer1[1]=='A' || rx_buffer1[1]=='a')
{sprintf(buffer,"%c%c",rx_buffer1[2],rx_buffer1[3]);
add=atoi(buffer);
}
if(add==code)

{sprintf(buffer,"%c%c",rx_buffer1[4],rx_buffer1[5]);
ch=atoi (buffer);
if (ch==1)
{
if (rx_buffer1[6]=='1') PORTC.1=1;
else if (rx_buffer1[6]=='0') PORTC.1=0;
}

if (ch==2)
{
if (rx_buffer1[6]=='1') PORTC.3=1;
else if (rx_buffer1[6]=='0') PORTC.3=0;
}

if (ch==3)
{
if (rx_buffer1[6]=='1') PORTC.5=1;
else if (rx_buffer1[6]=='0') PORTC.5=0;

if (ch==4)
{
if (rx_buffer1[6]=='1') PORTC.7=1;
else if (rx_buffer1[6]=='0') PORTC.7=0;
}

if (ch==0)
{
if (rx_buffer1[6]=='1') PORTC=0xff;
else if (rx_buffer1[6]=='0') PORTC=0;
}

}
rx_buffer1[0]=0;
rx_buffer1[7]=0;
}

}
V.

Analisa

Komunikasi antara komputer dengan mikrokontroller dengan output relay dapat


berlangsung ketika kode enskirpsi dikirim untuk menyalakan atau mematikan relay
yang sesuai dengan chanelnya contohnya : *A0101# (digunakan untuk menyalakan
relay dengan channel 1) dan *A0100# (digunakan untuk mematikan relay dengan
channel 1). Pada percobaan ini kode enskripsi akan muncul atau ditampilkan pada
LCD. Komunikasi yang berupa kode enskripsi akan dikirim melalui terminal pada
CodeVisionAVR, namun apabila ada salah pengetikan kode enskripsi maka pada
terminal tidak ada menu delete maka dari itu langsung diketikkan kode enskripsi
yang benar saja.
VI.

Kesimpulan
Fungsi dari kode enskripsi adalah sebagai syarat perjanjian antara dua device yaitu
komputer dengan relay, dimana ada beberapa kode yang akan dikirim untuk proses
mematikan atau menyalakan relay. Kode ini bisa dibuat sesuka hati asalkan sudah
ada kesepakatan antara dua device dan berjumlah 7 digit.