Kamis, 25 Maret 2010

KAuC : Komunikasi dgn Parallel

.
Silahkan baca posting sebelumnya.

Setelah KAuC dengan UART selanjutnya dengan parallel.
KAuC dengan parallel lebih mudah dan lebih cepat dibandingkan dengan UART tetapi cukup rumit untuk dijelaskan sehingga tampak lebih sulit. Hal ini karena KAuC dgn parallel bisa menggunakan data ASCII, heksadesimal, data 1 byte, 2 byte, 1 bit, 2 bit, 3 bit, 4 bit, 5 bit, 6 bit, 7 bit, 8 bit, dst dan tergantung programmer sehingga bisa banyak cara yang berbeda.

Beberapa contoh :
  • 2 Byte (16 pin) : anda ingin KAuC untuk pembacaan suhu sistem mencapai 6500° C (Bah serem..^^) yaitu hingga 13 bit, karena 1 Byte (8 bit) maksimum bernilai 255 sehingga ditambahkan bit lain hingga memakan 13 pin MCU, jika ditambahkan Handshake RD, WR, dan CS maka memakan 16 pin (2 byte).
  • 1 Byte (8 pin) : Seperti pada karakter LCD 16x2.
  • 3 pin : anda ingin MCU Master mengolah arah jalan mobil robot dan MCU Slave menerima data dan menggerakkan motor DC. Master hanya mengirim dan Slave hanya menerima, Data komunikasi sbb : 000 = stop, 010 = Maju Lurus, 001 = belok kanan, 100 = belok kiri, 111 = mundur, dst.
Seperti biasa, pastikan Hardware yang dibuat telah benar dan tidak error lagi sehingga hanya fokus masalah Coding saja, Langkah ini adalah langkah awal dan penting untuk memperkecil kesalahan.
Karena mode parallel, pengecekan MCU cukup dengan memprogram Running LED atau Led kedap-kedip bergantian dan untuk cek input menggunakan dip switch atau saklar togle.

Jangan lanjut sebelum proses pengecekan Parallel benar-benar berhasil.

Protokol dan Komunikasi Data ASCII atau Heksadesimal
Jika menggunakan interface Parallel komunikasi data bisa menggunakan data Heksadesimal ataupun karakter ASCII akan tetapi (relatif) lebih mudah dan lebih cepat menggunakan komunikasi bit dan Heksadesimal.
Menentukan protokol komunikasi data bisa sesuai keinginan anda berdasarkan sistem yang dikendalikan dan juga jangan lupa pada Master dan Slave terdapat kesesuaian protokol-nya. Oleh sebab itu beda kepala bisa berbeda protokol yang diinginkan.

Berikut protokol dengan contoh kasus pengendalian motor servo oleh Slave dengan data sudut pergerakan setiap servo ditentukan oleh Master.

Dari gambar, Master sebagai Main Processor yaitu "pemikir" yang berfungsi membaca sensor mengolah dan mengatur nilai sudut-sudut pergerakan setiap motor Servo, sedangkan Slave hanya sebagai penggerak motor servo pada tujuan sudut yang telah diberikan oleh Master.
Master hanya pemberi data sedangkan Slave hanya penerima data. Komunikasi data yang digunakan adalah 4 bit dengan 3 pin sebagai alamat motor Servo dan 1 pin untuk nibble atas dan nibble bawah. Pengertian sederhana nibble adalah setengahnya dari byte, jika byte 8 bit maka nibble 4 bit. Bit 0-3 disebut nibble bawah dan bit 4-7 disebut nibble atas.
Beberapa link tentang penjelasan Nibble dalam byte.
http://memo.tv/bits_bytes_nibbles_binary_and_hex
http://en.wikipedia.org/wiki/Nibble

Komunikasi Data.
Berdasarkan gambar atau rancangan diatas dan penggunaan pin pada port mikrokontroller maka :
Pin 0-2 = Alamat motor Servo.
Pin 3 = Nible bawah (0) / Nible atas (1)
pin 4-7 = Nilai sudut motor Servo

Cara kerja coding Master adalah sebagai berikut :
  • Kondisi default PORT_servo = 0x00 = 0b00000000, yang berarti tidak ada data dan tidak terjadi komunikasi.
  • Seluruh data sudut servo berada pada variabel master_sudut yaitu sebanyak 7 servo.
  • Semua data sudut motor servo, baik yang nilai sudutnya berubah maupun tetap akan diberikan kepada slave melalui perintah perulangan for loop.
  • Data yang pertama dipersiapkan (tapi belum diberikan) adalah alamat motor servo yaitu dimulai dari motor servo 1 (terakhir motor servo 7).
  • PORT_nibble (PORTC.3) berlogika 1 yang berarti nibble atas dulu yang diberikan, bit 7 - bit 4.
  • Berikan data nibble atas + alamat dan tunggu 50 ms (bisa diubah sesuai keinginan, semakin cepat semakin baik).
  • PORT_nibble (PORTC.3) berlogika 0 yang berarti nibble bawah diberikan, bit 3 - bit 0.
  • Berikan data nibble bawah + alamat dan tunggu 50 ms (bisa diubah sesuai keinginan, semakin cepat semakin baik).
  • Jika semua data sudut servo sudah diberikan kondisi PORT_servo = 0x00 = 0b00000000.
Cara kerja coding Slave adalah sebagai berikut :
  • Kondisi default PIN_servo = 0xff = 0b11111111, yang berarti aktif low.
  • Jika PIN_servo tidak sama dengan 0x00 berarti Master memberikan data servo dan terjadi komunikasi.
  • Data yang bertama diolah adalah alamat servo yang akan diberikan nilai sudut dan disimpan pada variabel add_srv.
  • Deteksi PIN_nible jika LOW (0) maka data yang diterima adalah nibble bawah dan jika HIGH (1) data yang diterima adalah nibble atas, simpan di variable nible_high dan nible_low.
  • Alamat servo sudah diterima nible atas dan nible bawah sudah diterima, selanjutnya menggabungkan setiap data.
  • Data tersebut olah dan berikan ke setiap motor servo yang ada.
Wow...terlihat rumit...
Memang terlihat rumit karena "maksa" 1 port, jika menggunakan 2 PORT (Misal PORTB dan PORTC) dengan PORTB handshake atau alamat kemudian PORTC sebagai data, akan lebih sederhana lagi programnya.
Bayangkan, anda bisa mengendalikan 255 motor servo tanpa mengubah protokol program untuk komunikasi data.
Jika menggunakan UART semakin banyak motor servo, protokolnya semakin banyak dan panjang serta semakin ribet.
Sebenarnya tetap tergantung codingnya... Xixixixixixiixii... ^^v

Semoga Manfaat ;)

Topik yang Populer