RS-485: Aplikasi Sederhana

Alhamdulillah, akhirnya selesai juga contoh aplikasi RS-485 sederhana ini.

Aplikasi ini merupakan pengembangan dari aplikasi pembacaan suhu dengan SHT11 dengan penambahan kemampuan RS-485. Protocol yang digunakan adalah protocol yang sangat sederhana sekedar menunjukan bagaimana jaringan RS-485 bekerja. Dengan memahami prinsip dasar ini, penggunaan protocol seperti Modbus, DLMS, dan lain-lain, akan terasa lebih mudah, walaupun sebenarnya saya juga belum pernah mencoba protocol-protokol tersebut.

Antarmuka Mikro dan RS-485

Untuk menghubungkan  mikrokontroler dengan jaringan RS-485 digunakan IC driver MAX487.

IC MAX487 merupakan IC driver RS-485 half-duplex. Pin kendali, terima (RE) dan kirim (DE) disatukan dan dihubungkan ke P3.2. Dengan konfigurasi ini, jika P3.2 HIGH, MAX487 dalam posisi mengirim data, sebaliknya jika P3.2,  MAX487 dalam posisi menerima data.  Untuk lebih jelasnya, silakan baca datasheet MAX487.

Posisi default adalah menerima. Ketika ada perintah dari master (PC), dan alamatnya sesuai, maka ketika harus merespon, mikro akan membuat P3.2 HIGH, lalu mengirim data. Dan mengembalikan P3.2 ke LOW setelah pengiriman selesai.

Antarmuka PC dan RS-485

Hubungan PC dengan RS-485 pada dasarnya sama dengan hubungan Mikro dan RS-485. Masalahnya, kalau di PC mungkin yang digunakan adalah dari RS-232 ke RS-485. Oleh karena itu sebelum masuk ke IC driver, level RS-232 terlebih dahulu dikonvert ke TTL. Untuk kendali driver digunakan pin RTS.

Contoh rangkaian antarmuka dan RS-485:

Dalam percobaan saya, jaringan RS-485 disimulasikan dengan Proteus. Hubungan antara Proteus dengan program aplikasi menggunakan Virtual serial port, seperti halnya contoh-contoh simulasi komunikasi serial yang ada di blog ini. Oleh karena itu agak sedikit berbeda dengan RS-485 sebenarnya.

Dalam simulasi ini, COMPIM di Proteus akan terhubung dengan salah satu port serial virtual, missal COM2, begitu juga dengan aplikasi PC, missal COM2. Nah kedua COM tersebut dihubungkan oleh Virtual Serial Port dengan koneksi sebagai berikut:

Koneksinya:

Oleh karena RTS terhubung dengan CTS, maka pengendali IC driver RS-485 akan terhubung dengan pin CTS.

Protokol Komunikasi

Seperti telah dijelaskan bahwa dalam contoh ini digunakan protocol komunikasi yang sederhana. Pada dasarnya ada 3 perintah yang digunakan

  1. Perintah pembacaan suhu dan kelembaban, menggunakan karakter ‘A’;
  2. Perintah menyalakan LED, ‘B’
  3. Perintah mematikan LED, ‘C’

Format perintahnya adalah:

ALAMAT

PERINTAH

0x0D

Alamat menggunakan 2 karakter ‘00’ – ‘FF’. Jika alamat ‘00’, ini berarti perintah broadcast, artinya semua sensor akan menjalankan perintah tersebut,namun printah broadcast hanya untuk menyalakan dan mematikan LED.

Ketika menerima perintah, hal pertama yang dilakukan oleh mikrokontroler adalah mengecek alamat tersebut, jika sesuai maka mikro akan merespon sesuai dengan perintah yang diterima:

  1. Jika perintah pembacaan, mikro akan mengirimkan data suhu dan kelembaban dengan format seperti pada contoh blog sebelumnya, misalnya “26.3C;87.3%”
  2. Jika perintah menyalakan LED, mikro akan mengirim “LED ON”
  3. Jika mematikan LED, mikro akan mengirimkan “LED OFF”
  4. Jika perintah broadcast, maka mikro tidak akan mengirimkan apapun
Program Mikro
Program mikro ini pada dasarnya hasil modifikasi dari program pembacaan SHT11 postingan sebelumnya. Setelah satu frame data serial diterima, ditandai karakter 0x0D, program pertama akan mengecek apakah alamat ditujukan untuknya atau bukan. Jika ya, langsung mengeksekusi perintah tersebut.
Ada perintah yang membutuhkan jawaban dan ada juga yang tidak, perintag broadcast. Ketika akan mengirim jawaban, sebelum mengirim data serial, pin kendali RS485, RS_485DIR, harus di-set. Setelah selesai di-clear kembali agar bisa menerima perintah selanjutnya.
Program PC
Yang terpenting dari program PC ini adalah proses pengiriman data serial:
procedure TForm1.sendrs485(command: string);
begin
if Port_State then
  with ApdComPort1 do
    begin
      RTS:=true;
      Output:=command+#13;
      while ApdComPort1.OutBuffUsed>0  do
        Application.ProcessMessages;
      RTS:=false;
    end;
end;

Sebelum ngirim, RTS dibuat true, kemudian setelah ngirim, program harus nunggu data di buffer output harus kosong, artinya data telah terkirim semua, baru RTS di-false-kan kembali agar bisa menerima data dari slave.
Simulasi Proteus
Ada yang aneh pada saat disimulasi di proteus, saya membuat 3 perangkat RS-485, saat di run, program tidak jalan! Kemudian satu perangkat saya ganti dengan program lain…dan jalan!!
Saya sudah coba di 2 PC, hasilnya sama…kemungkinan Proteus tidak bisa mensimulasi dengan benar, karena masalah memori dari PC yang digunakan..entahlah.
Semoga bermanfaat…
About these ads

16 Responses

  1. gan, tolong kirim ke email sya dong.
    buat rangkaian konverter rs232 to rs 485 (MASTER) klu diproteus itu gmna?
    sya pake rangkaian MASTER diatas kok gak bisa ya?
    mphpn bantuanny gan.
    ini buat tugas akhir saya gan.
    THx

  2. Kalau di proteus kan contoh aplikasi yng saya buat disimulasi oleh proteus? Pakai Compim, dan compim itu outputnya sudah TTL jadi bisa langsung sambung ke IC MAX487.
    Kalau yang RS-232 to RS-485 ya pakai gambar yang lengkap di atas.

  3. konfigurasiny gmna gan?
    untuk pin RE sma pin DE max 487 itu masuk pin compim yg mna?
    yg CTS ya?
    tpi kok gak bisa di simulasikan ya?
    saya pake VB 6.0 untuk ngendaliin simulasi di proteus.
    CTSny itu di program di VB juga ya gan?
    klu iya tolong kasih contoh programny dong?
    ane msih blajar VB soalnya.
    klu bsa kirim ke email saya ya?hehe

    • Seperti sudah dijelaskan di atas, untuk berkomunikasi dengan Proteus, program saya menggunakan Virtual Serial Port, semoga anda juga menggunakannya…

      Kalau di-simulasi, karena konfigurasi virtual serial portnya, iya DE dan RE dikendalikan oleh CTS. Kalau diaktual, yang umum menggunakan RTS.

      Untuk di VB6, akses port serialnya pakai MSCOMM ya? Kalau ya tinggal ngatur properti CTS true atau false saja

  4. mas punya modul pembelajaran untuk membuat aplikasi usb 2 spi gak mas???kalau punya tlng di share mas….

    • Kalau modul pembelajarannya sih belum dibikin, tapi saya pernah buat USB 2 SPI untuk downloader AT89S…

  5. mas, mikronya yang ketiga-tiganya tu jadi slave semuanya y? file Hexa yang diisikan ke 3 mikro itu sama jg y? dari 1 aplikasi yang source nya sama… terima kasih.

  6. gan kalau pngen monitoring suhu aja gak pakek kndali,,,dari beberapa slave ke satu PC (master) bagaimana yaw…mohon bimbingannya!!!

    terima kasih

    • contoh yang saya buat juga gak pakai kendali, hanya monitoring suhu..mungkin bisa diperjelas maksudnya?

      • ya cuma untuk melihat nilai suhu pada sisi slave dan ditampilkan di tampilan software (akuisisi data) di PC bagaimana??

        intinya untuk monitoring multi channel..bg2 kang!!

        ada contoh yang pakai AVR tidak kang??

      • Untuk yang AVRnya belum ada nih…diambil prinsip-prinsipnya aja. RS-485 kan pada dasarnya komunikasi serial UART

  7. oh ya kang misal saya ingin menampilkan nilai suhu dari beberapa slave ke master (mikrokontroler) dan di tampilkan pada lcd pada masternya,,,bagaimana contoh source code pengiriman dari masing2 slave dan bagaimana dengan penerimaan data pada sisi master yang pada nantinya di tampilkan di LCD….

    thank’s

  8. sangar kang, BSOD nya sudah tidak ada lagi pake jurus yang ini, hehehehe, hidup kang Usman….

  9. mas..klo bikin keluaran RS 485 menjadi 2bh rs 485. yang satu buat display dan yang satu lagi buat mengirim data bisa g?balasin ke e-mail donk

  10. buat perintah dari master k sleve listing programnya gimana ya?
    soalnya saya pernah nyoba gagal terus.
    mohon bantuannya

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 1,120 other followers

%d bloggers like this: