Rabu, 24 Oktober 2012

Tutorial RS485 Sederhana dengan Bascom AVR


RS485 atau TIA/EIA-485 dapat digunakan untuk komunikasi serial dengan jarak yang sangat jauh dan memiliki banyak titik (multipoint). Multiple receiver (penerima) terhubung dalam jaringan yang paralel, dengan kecepatan transmisi data 35 Mbit/s untuk jarak 10 meter dan 100 kbit/s untuk jarak sekitar 1200 meter.
Pada tutorial ini saya menggunakan IC MAX485/487 untuk komunikasi RS485, datasheetnya dapat didownload disini.
Komunikasi RS485 dapat digunakan dengan Half-Duplex dan Full-Duplex. Half duplex adalah komunikasi dua arah, tapi hanya satu arah pada satu waktu alias tidak mengirim dan menerima secara bersamaan tapi bergantian, sedangkan Full duplex dapat dilakukan secara simultan atau bersamaan ketika mengirim dan menerima.

Contoh berikut yang akan saya berikan adalah RS485 antar mikrokontroler, dengan  1 master dan  1 slave alias contoh dasar dan sederhana. Jika slave yang digunakan ada banyak, pada program akan lebih efektif jika menggunakan perintah modbus, tapi untuk contoh kali ini tidak pakai modbus.

Gambaran sederhana untuk perbedaan RS485 dengan Half-duplex dan Full-duplex sbb:
(Gambar (a) Hal-Duplex dan Gambar (b) Full-Duplex)
 

Rangkaian pada tutorial ini akan mengirimkan data dari master ke slave dan ditampilkan pada Hyperterminal dan LCD:



Program untuk master:
'==============================================
'Program RS485 Sederhana
'Programmer : Wahyu Rahmaniar
'Company    : Technologination
'==============================================

$regfile = "m8535.dat"
$crystal = 8000000
$baud = 9600

Config Portd.2 = Output
Ddrd.2 = 1
Portd.2 = 0

Do
Portd.2 = 1
Print "-Test RS485" ; Chr(13)
Wait 1
Loop

Master mengirimkan tulisan "Test RS485" dan enter atau chr(13), ketika mengirimkan tulisan master akan memberikan logika satu pada PORTD.2, sehingga pin RE dan DE yang juga menerima logika 1 akan mengirimkan data.

Program untuk slave:
'==============================================
'Program RS485 Sederhana
'Programmer : Wahyu Rahmaniar
'Company    : Technologination
'==============================================

$regfile = "m8535.dat"
$crystal = 8000000
$baud = 9600

Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
Config Lcd = 16 * 2

Config Portd.3 = Output
Ddrd.3 = 1
Portd.3 = 0

Config Portd.2 = Input
Ddrd.2 = 0
Portd.2 = 1

Terima Alias Pind.2
Led Alias Portd.3

Dim X As Byte , Datas As String * 15

Datas = ""
Do
If Terima = 0 Then
Led = 1
   If Ischarwaiting() <> 0 Then
   X = Waitkey()
      If X = "-" Then
         Do
         If Ischarwaiting() <> 0 Then
         X = Waitkey()
           If X > 0 Then
           Datas = Datas + Chr(x)
           End If
         End If
         Loop Until X = 13
         Led = 0
         Print Datas
         Cls
         Cursor Off
         Locate 1 , 1
         Lcd Datas
         Wait 1
         Datas = ""
      End If
   End If
End If
Loop

PORTD.2 akan menerima data dari master jika mendapat logika 0 (hasil not dari PORTD.2 master), sehingga pin RE dan DE pada slave juga menerima logika 0 akan bertindak sebagai penerima data.
Sehingga sistem RS485 pada contoh diatas bersifat Half-duplex.

Jika ada data masuk led akan menyala. Data yang masuk diterima perkarakter dan berupa nilai byte untuk ascii kemudian diubah menjadi karakter dengan perintah Chr. Jika diterima karakter "-" maka data dibaca sampai diterima ENTER atau ascii 13. Jika data telah selesai diterima led akan mati.
Kemudian data ditampilkan pada LCD dan Hyperterminal.
Pemberian tanda awal "-" dan tanda akhir ENTER adalah untuk menghindari diterimanya noise atau pemisahan data yang tidak tepat.

Simulasi dengan proteus dan source code bisa didownload disini.

Tempat Jual Komponen dan Elektronik.
-ayuchan-