Makala h
-
Upload
andi-zendol-mshadows -
Category
Documents
-
view
17 -
download
0
Transcript of Makala h
![Page 1: Makala h](https://reader033.fdocuments.net/reader033/viewer/2022052902/557202c74979599169a4129d/html5/thumbnails/1.jpg)
1. Teori RS-232 dan RS-485
RS-232
Merupakan standard interface untuk komunikasi asinkron yang menghubungkan Data
Terminal Equipment (DTE) dengan Data Communication Equipment (DCE) atau dapat juga
menghubungkan antara DTE dengan DTE.
Data Terminal Equipment (DTE) merupakan perangkat yang dilengkapi Universal
Asynchronous Receiver and Transmitter (UART) atau Universal Asynchronous Synchronous
Receiver and Transmitter (USART) yang dapat mengubah data paralel ke data serial atau
sebaliknya. Perangkat DTE ini pada komputer PC disebut Asynchronous Communication
Card (COM).
Data Communication Equipment (DCE) adalah perangkat yang dapat mengubah data
serial ke besaran analog yang dapat di transmisikan pada saluran transmisi seperti; telepon,
listrik atau pemancar radio.
Untuk komunikasi antar computer dapat menggunakan RS-232 dengan perantara kabel.
Penggunaan RS-232 ini, jaraknya tidak lebih dari 50 feet pada kecepatan 20 Kbaud. Bila
jarak yang dipergunakan lebih dari 50 feet pada kecepatan 20 Kbaud, signal yang
ditransmisikan akan mengalami degradasi oleh noise dan attenuasi. Jarak komunikasi dapat
diperpanjang beberapa ratus feet, tetapi kecepatan data harus diturunkan, misalnya dengan
kecepatan 2400 baud dapat mencapai jarak maksimum 150 feet.
Gambar 1. Susunan PIN serial rs232 (DB9)
1
![Page 2: Makala h](https://reader033.fdocuments.net/reader033/viewer/2022052902/557202c74979599169a4129d/html5/thumbnails/2.jpg)
PC SN75176BMAX232RS232
TTL
LM555
RS485
CONTROL
RS-485
Standard RS-485 mendukung komunikasi data half-duplex, ini berarti bahwa untuk
mengirimkan dan menerima data hanya menggunakan 2 jalur kabel. Spesifikasi dari standar
ini mampu mendukung komunikasi data dari sejumlah perangkat dan juga mampu
menyangga komunikasi data dalam jarak hingga 1200 meter.
Gambar 2. SN65176B
RS-232 to RS-485 Converter
Berikut adalah diagram blok system RS-232 to RS-485 Converter
2. Fungsi dan Spesifikasi Alat
Mengubah sinyal analog ke digital melalui ADC internal mikrokontroler AVR ATMega
8535 dan mentransmisikannya ke computer desktop melalui antarmuka RS-485 serta
menampilkan ekuivalen digitalnya (dalam bilangan decimal, heksa dan level tegangan) pada
monitor komputer.
Peralatan yang digunakan adalah:
Desktop PC
Hasil ADC ditampilkan pada program VB yang dibuat pada Desktop PC
2 buah Mikrokontroler ATMega 8535
Mikrokontroler 1 pada PB0=0 maka mikrokontroler mengirimkan data analog ke PC,
PB0=1 maka mikrokontroler 1 menunggu mikrokontroler 2 mengirimkan data analog
ke PC.
2
![Page 3: Makala h](https://reader033.fdocuments.net/reader033/viewer/2022052902/557202c74979599169a4129d/html5/thumbnails/3.jpg)
Mikrokontroler 2 pada PB1=0 maka mikrokontroler mengirimkan data analog ke PC,
PB1=1 maka mikrokontroler 2 menunggu mikrokontroler 1 mengirimkan data analog
ke PC.
2 buah Potensiometer
1 buah RS-232
3 buah RS-485
3. Prinsip Kerja Alat
Mengubah sinyal analog dari potensiometer yang masuk ke ADC pada mikrokontroler
secara free running atau mode konversi secara continue sebanyak 8 bit. Mikrokontroler pertama
akan mengirimkan data analog ke PC ketika PIN B1 itu bernilai 0 dan ketika PIN B1 itu bernilai
1, maka PIN B0 pada mikrokontroler kedua bernilai 0, begitupun ketika PIN B0 bernilai 1.
Metode kerja dua mikrokontroler itu secara bergantian (switching) tergantung bagaimana
mikrokontroler membaca Port B0 dan Port B1.
4. Gambar diagram blok dan rangkaian lengkap system
3
![Page 4: Makala h](https://reader033.fdocuments.net/reader033/viewer/2022052902/557202c74979599169a4129d/html5/thumbnails/4.jpg)
5. Algoritma dan Flowchart Program
Flowchart VB:
Tabel Algoritma dan Flowchart
Flowchart Algoritma Penjelasan
Start Aksi menjalankan program
Private Sub Form_Load()
KomunikasiSerial.RThreshold = 1
KomunikasiSerial.Settings = "9600,n,8,1"
KomunikasiSerial.DTREnable = False
KomunikasiSerial.CommPort = 14
KomunikasiSerial.PortOpen = True
End Sub
Inisialisasi port serial dan
mengaktifkan interupsi serial
Program berjalan di tempat
karena tidak ada sub program
yang di jalankan (idle) untuk
menunggu sampai interupsi
Akhir Program
4
![Page 5: Makala h](https://reader033.fdocuments.net/reader033/viewer/2022052902/557202c74979599169a4129d/html5/thumbnails/5.jpg)
Tabel Algoritma dan Flowchart
Flowchart Algoritma Penjelasan
Start Aksi Menjalan Program
datamasuk =
KomunikasiSerial.Input
Membaca data masuk
dari serial
idm = Left(datamasuk, 1)
adc = Right(datamasuk, 1)
simpan data dari bufer
serial ke variabel str1
datamasuk =
datamasuk &
KomunikasiSerial.Input
If idm = "A" Then
TextDesimal(0).Text =
Val(Asc(adcTextTegangan(0).
Text = CStr(Val(Asc(adc)) *
0.019)
heksa = Hex$
(Val(Me.TextDesimal(0).Text
))
TextHeksa(0).Text = heksa
Jika variable idm itu A
maka nilai ADC akan di
tampilkan pada Frame
DATA MIKRO 1
ElseIf idm = "B" Then
TextDesimal(1).Text =
Val(Asc(adc))
TextTegangan(1).Text =
CStr(Val(Asc(adc)) * 0.019)
heksa = Hex$
(Val(Me.TextDesimal(1).Text
))
TextHeksa(1).Text = heksa
End If
Jika variable idm itu B
maka nilai ADC akan di
tampilkan pada Frame
DATA MIKRO 2
Berhenti Akhir Program
5
![Page 6: Makala h](https://reader033.fdocuments.net/reader033/viewer/2022052902/557202c74979599169a4129d/html5/thumbnails/6.jpg)
Flowchart Asembler
Flowchart Algoritma Penjelasan.org 0x0000 mulai
rjmp HardInitHardInit:ldi RegTemp,LOW(RAMEND)out SPL,RegTempldi RegTemp,HIGH(RAMEND)out SPH,RegTempldi RegTemp,(1<<PB0)out DDRB,RegTempldi RegTemp,0xffout PORTB,RegTemp
Konfigurasi port sebagai input atau output
InitSerial:ldi RegTemp,LOW(ubrr_val)out UBRRL,RegTempldi
RegTemp,HIGH(ubrr_val)out UBRRH,RegTempldi RegTemp,(1<<TXEN)out UCSRB,RegTempldi RegTemp,(1<<URSEL)|(3<<UCSZ0)out UCSRC,RegTempretADC_init:ldi RegTemp,0x00out ADMUX,RegTempldi RegTemp,0b11101101out ADCSRA,RegTempret
Inisialisasi komunikasi serial UBRRL (67H), UBRRH(00H) dan ADC.
ADC_read:sbis ADCSRA,ADIFrjmp ADC_readsbi ADCSRA,ADIFin ADC_ValL,ADCLin ADC_ValH,ADCHlsr ADC_ValHror ADC_ValLlsr ADC_ValHror ADC_ValLret
Membaca data ADC
mov RegTx,ADC_ValLrcall UsartTx
Data ADC dikirimin ke PC melalui komunikasi serial . PB0 sebagai switch ke mikro 2
wait:sbic PINB,PB1rjmp waitrjmp main
Baca port B1 apakah sama dengan 0 atau 1, jika 0 maka baca ADC
ret selesai
FLowchart Algortima Penjelasan6
![Page 7: Makala h](https://reader033.fdocuments.net/reader033/viewer/2022052902/557202c74979599169a4129d/html5/thumbnails/7.jpg)
.org 0x0000 mulai
rjmp HardInitHardInit:ldi RegTemp,LOW(RAMEND)out SPL,RegTempldi RegTemp,HIGH(RAMEND)out SPH,RegTempldi RegTemp,(1<<PB1)out DDRB,RegTempldi RegTemp,0xffout PORTB,RegTemp
Konfigurasi port sebagai input atau output
InitSerial:ldi RegTemp,LOW(ubrr_val)out UBRRL,RegTempldi
RegTemp,HIGH(ubrr_val)out UBRRH,RegTempldi RegTemp,(1<<TXEN)out UCSRB,RegTempldi RegTemp,(1<<URSEL)|(3<<UCSZ0)out UCSRC,RegTempret
Inisialisasi komunikasi serial UBRRL (67H), UBRRH(00H)
dan ADC.
loop:sbic PINB,PB0rjmp loop
Baca port B0 apakah sama dengan 0 atau 1, jika 0 maka
baca ADC
ADC_read:sbis ADCSRA,ADIFrjmp ADC_readsbi ADCSRA,ADIFin ADC_ValL,ADCLin ADC_ValH,ADCHlsr ADC_ValHror ADC_ValLlsr ADC_ValHror ADC_ValL
Membaca data ADC
mov RegTx,ADC_ValLrcall UsartTx
Baca port B1 apakah sama dengan 0 atau 1, jika 0 maka
baca ADC
selesai
6. Kesimpulan dan Analisis
7
![Page 8: Makala h](https://reader033.fdocuments.net/reader033/viewer/2022052902/557202c74979599169a4129d/html5/thumbnails/8.jpg)
Gambar 3. User interface pada VB
Alat yang dibuat bisa membaca ADC dengan secara Half Duplex, Di sini desktop menggunakan
bahasa pemograman tingkat tinggi yaitu Visual Basic 6. Mikrokontroler ATmega8535 memiliki
fasilitas analog yang sudah build in di dalam chip. Atmega memiliki resolusi ADC 10bit (dapat
juga menggunakan ADC 8 bit) dengan 8 channel (PA0-PA7) sebagai input. ADC ini bekerja
dengan teknik succecive approximation. Rangkaian internal ADC memiliki catu daya tersendiri
yaitu pin Avcc. Data hasil konversi ADC 10 bit (1024) dan ADC 8 bit (255) adalah:
ADC=(Vin*1024)/Vref Mode operasi ADC 8535 terdiri dari dua macam yaitu konversi
berkelanjutan dan konversi tunggal. Berikut ini adalah table hasil perhitungan tegangan pada
potensiometer dan program VB
Pin 32 Vref=4.98
8
![Page 9: Makala h](https://reader033.fdocuments.net/reader033/viewer/2022052902/557202c74979599169a4129d/html5/thumbnails/9.jpg)
Pin 30 Vin=4.98
Mikrokontroler 1No Nilai V Potensio Nilai V Program Desimal Persentase1 0.04 0.10 1 75.00 2 0.20 0.17 9 15.00 3 0.31 0.28 15 9.68 4 0.42 0.39 21 7.14 5 0.55 0.51 27 7.27 6 0.71 0.68 36 4.23 7 1.46 1.42 75 2.74 8 2.01 1.95 103 2.99 9 2.21 2.14 113 3.17 10 2.66 2.58 136 3.01 11 3.59 3.49 184 2.79 12 4.11 4.10 211 0.24 13 4.41 4.31 227 2.27 14 4.77 4.65 245 2.52 15 4.98 4.84 255 2.81
Rata-rata persentase 9.390667Rata-rata kesalahan 0.178423
Vref=4.98
Vin=4.98
Mikrokontroler 2No Nilai V Potensio Nilai V Program Desimal Persentase1 0.03 0.00 0 100.00 2 0.06 0.03 2 50.00 3 0.90 0.05 3 94.44 4 0.34 0.30 16 11.76 5 0.89 0.85 45 4.49 6 1.11 1.06 56 4.50 7 1.39 1.35 71 2.88 8 1.78 1.72 91 3.37 9 2.15 2.09 110 2.79 10 2.44 2.37 125 2.87 11 2.68 2.62 138 2.2412 4.08 3.99 210 2.21 13 4.80 4.69 247 2.29 14 4.93 4.82 254 2.23 15 4.98 4.84 255 2.81
Rata-rata persentase 19.25867Rata-rata kesalahan 0.365915
7. Program Listing9
![Page 10: Makala h](https://reader033.fdocuments.net/reader033/viewer/2022052902/557202c74979599169a4129d/html5/thumbnails/10.jpg)
Program VB:
Private Sub Form_Load()
KomunikasiSerial.RThreshold = 1
KomunikasiSerial.Settings = "9600,n,8,1"
KomunikasiSerial.DTREnable = False
KomunikasiSerial.CommPort = 14
KomunikasiSerial.PortOpen = True
End Sub
Private Sub KomunikasiSerial_OnComm()
Dim datamasuk As Variant
Dim idm As String
Dim adc As String
Dim heksa As String
Select Case KomunikasiSerial.CommEvent
Case comEvReceive ' jika terjadi penerimaan data serial
If KomunikasiSerial.InBufferCount > 1 Then ' jika buffer serial kosong , maka
'TextDesimal(0).Text = "" ' kosongkan tanda data tidak ada yang diterima
'Else ' jika ada data yang diterima, maka
datamasuk = KomunikasiSerial.Input ' simpan data dari bufer serial ke variabel str1
'datamasuk = datamasuk & KomunikasiSerial.Input
idm = Left(datamasuk, 1)
adc = Right(datamasuk, 1)
If idm = "A" Then
TextDesimal(0).Text = Val(Asc(adc)) 'simpan hasil pemilihan str1 ke variabel dataawal
TextTegangan(0).Text = CStr(Val(Asc(adc)) * 0.019)
heksa = Hex$(Val(Me.TextDesimal(0).Text))
TextHeksa(0).Text = heksa
ElseIf idm = "B" Then
TextDesimal(1).Text = Val(Asc(adc))
TextTegangan(1).Text = CStr(Val(Asc(adc)) * 0.019)
heksa = Hex$(Val(Me.TextDesimal(1).Text))
TextHeksa(1).Text = heksa
End If
End If
End Select
End Sub
10
![Page 11: Makala h](https://reader033.fdocuments.net/reader033/viewer/2022052902/557202c74979599169a4129d/html5/thumbnails/11.jpg)
Private Sub TombolQuit_Click()
Unload Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
KomunikasiSerial.PortOpen = False
End Sub
Program Assembler mikrokontroler 1:
.include "m8535def.inc"
.equ kristal=16000000
.equ baudrate=9600
.equ ubrr_val=(kristal/(16*baudrate))-1
.def RegTx=r17
.def ADC_ValL=r18
.def ADC_ValH=r19
.def RegTemp=r20
.org 0x0000
rjmp HardInit
HardInit:
ldi RegTemp,LOW(RAMEND)
out SPL,RegTemp
ldi RegTemp,HIGH(RAMEND)
out SPH,RegTemp
ldi RegTemp,(1<<PB0)
out DDRB,RegTemp
ldi RegTemp,0xff
out PORTB,RegTemp
rcall InitSerial
rcall ADC_init
rcall Delay
rcall Delay
main:
rcall ADC_read
ldi RegTx,'A'
rcall UsartTx
11
![Page 12: Makala h](https://reader033.fdocuments.net/reader033/viewer/2022052902/557202c74979599169a4129d/html5/thumbnails/12.jpg)
mov RegTx,ADC_ValL
rcall UsartTx
WaitTransmit:
sbis UCSRA,TXC
rjmp WaitTransmit
push RegTemp
ldi RegTemp,0x08
lagi:
rcall Delay
dec RegTemp
cpi RegTemp,0x00
brne Lagi
pop RegTemp
cbi PORTB,PB0
rcall Delay
sbi PORTB,PB0
wait:
sbic PINB,PB1
rjmp wait
rjmp main
InitSerial:
ldi RegTemp,LOW(ubrr_val)
out UBRRL,RegTemp
ldi RegTemp,HIGH(ubrr_val)
out UBRRH,RegTemp
ldi RegTemp,(1<<TXEN)
out UCSRB,RegTemp
ldi RegTemp,(1<<URSEL)|(3<<UCSZ0)
out UCSRC,RegTemp
ret
UsartTx:
sbis UCSRA,UDRE
rjmp UsartTx
out UDR,RegTx
ret
12
![Page 13: Makala h](https://reader033.fdocuments.net/reader033/viewer/2022052902/557202c74979599169a4129d/html5/thumbnails/13.jpg)
ADC_init:
ldi RegTemp,0x00
out ADMUX,RegTemp
ldi RegTemp,0b11101101
out ADCSRA,RegTemp
ret
ADC_read:
sbis ADCSRA,ADIF
rjmp ADC_read
sbi ADCSRA,ADIF
in ADC_ValL,ADCL
in ADC_ValH,ADCH
lsr ADC_ValH
ror ADC_ValL
lsr ADC_ValH
ror ADC_ValL
ret
Delay:
push RegTemp
push r21
ldi RegTemp,0xff
DelayL:
ldi r21,0xff
DelayS:
dec r21
cpi r21,0x00
brne DelayS
dec RegTemp
cpi RegTemp,0x00
brne DelayL
pop r21
pop RegTemp
ret
13
![Page 14: Makala h](https://reader033.fdocuments.net/reader033/viewer/2022052902/557202c74979599169a4129d/html5/thumbnails/14.jpg)
Program Assembler mikrokontroler 2:
.include "m8535def.inc"
.equ kristal=16000000
.equ baudrate=9600
.equ ubrr_val=(kristal/(16*baudrate))-1
.def RegTx=r17
.def ADC_ValL=r18
.def ADC_ValH=r19
.def RegTemp=r20
.org 0x0000
rjmp HardInit
HardInit:
ldi RegTemp,LOW(RAMEND)
out SPL,RegTemp
ldi RegTemp,HIGH(RAMEND)
out SPH,RegTemp
ldi RegTemp,(1<<PB1)
out DDRB,RegTemp
ldi RegTemp,0xff
out PORTB,RegTemp
rcall InitSerial
rcall ADC_init
main:
sbi PORTB,PB1
loop:
sbic PINB,PB0
rjmp loop
ldi RegTemp,0x08
tunggu:
rcall Delay
dec RegTemp
cpi RegTemp,0x00
brne tunggu
pop RegTemp
rcall ADC_read
ldi RegTx,'B'
14
![Page 15: Makala h](https://reader033.fdocuments.net/reader033/viewer/2022052902/557202c74979599169a4129d/html5/thumbnails/15.jpg)
rcall UsartTx
mov RegTx,ADC_ValL
rcall UsartTx
WaitTransmit:
sbis UCSRA,TXC
rjmp WaitTransmit
push RegTemp
ldi RegTemp,0x08
tunggu1:
rcall Delay
dec RegTemp
cpi RegTemp,0x00
brne tunggu1
pop RegTemp
cbi PORTB,PB1
rcall Delay
rjmp main
InitSerial:
ldi RegTemp,LOW(ubrr_val)
out UBRRL,RegTemp
ldi RegTemp,HIGH(ubrr_val)
out UBRRH,RegTemp
ldi RegTemp,(1<<TXEN)
out UCSRB,RegTemp
ldi RegTemp,(1<<URSEL)|(3<<UCSZ0)
out UCSRC,RegTemp
ret
UsartTx:
sbis UCSRA,UDRE
rjmp UsartTx
out UDR,RegTx
ret
ADC_init:
15
![Page 16: Makala h](https://reader033.fdocuments.net/reader033/viewer/2022052902/557202c74979599169a4129d/html5/thumbnails/16.jpg)
ldi RegTemp,0x00
out ADMUX,RegTemp
ldi RegTemp,0b11101101
out ADCSRA,RegTemp
ret
ADC_read:
sbis ADCSRA,ADIF
rjmp ADC_read
sbi ADCSRA,ADIF
in ADC_ValL,ADCL
in ADC_ValH,ADCH
lsr ADC_ValH
ror ADC_ValL
lsr ADC_ValH
ror ADC_ValL
ret
Delay:
push RegTemp
push r21
ldi RegTemp,0xff
DelayL:
ldi r21,0xff
DelayS:
dec r21
cpi r21,0x00
brne DelayS
dec RegTemp
cpi RegTemp,0x00
brne DelayL
pop r21
pop RegTemp
ret
16