Pada beberapa waktu yang lalu, ada seorang teman yang meminta dibuatkan prototype sistem antrian bank, dimana ia meminta, ada sebuah master kontrol yang akan memantau, bila teller, menekan tombol, dan kemudian master kontrol ini akan mengeluarkan bunyi2an yang berupa angka dari nomor urut masing2 nasabah, kemudian didepan teller tersebut muncul angka dari nomor urut pelanggan. Prototype sistem yang dirancang terdiri dari 4 teller.
Setelah memastikan sistem yang dirancang akhirnya, tibalah untuk beli komponen. Akhirnya untuk master kontrol, digunakan ATMega8515, sedangkan untuk penampil masing2 teller menggunakan ATTiny2313. Ketika ada seorang teller menekan suatu tombol, maka MCU (ATMega8515) akan mendeteksi teller nomor berapa yang menekan tombol, kemudian MCU akan mengirimkan data pada penampil teller yang bersangkutan. Pada saat yang bersamaan MCU akan memerintahkan perangkat rekam suara untuk mengeluarkan bunyi2an berupa angka sesuai pada nomor nasabah. Untuk dapat mengirimkan data penampil kepada masing penampil pada teller, maka dirancanglah suatu sistem komunikasi. Dalam perancangan ini didesain, agar komunikasi yang terjadi bisa menghemat jumlah kabel data (untuk ini digunakan serial), kemudian bisa digunakan untuk jarak jauh dan tidak mengalami kesalahan (untuk ini digunakan mode serial yang bisa support terhadap komponen driver seperti RS232, atau RS485). Agar masing2 penampil tersambung dengan satu kabel, maka mau tidak mau, setiap penampil harus memiliki alamat, sehingga bila MCU akan mengirimkan data, maka MCU harus mengikut sertakan alamat, sehingga penampil akan mendeteksi apakah data tersebut untuk dirinya atau bukan (untuk ini maka cara termudah adalah dengan memanfaatkan komunikasi multiprosesor pada mikrokontroler AVR). Sistem komunikasi multiprosesor mungkin dapat digambarkan seperti gambar dibawah:

Agar komunikasi multiprosesor dapat berjalan lancar, maka prosedur yang harus dijalankan adalah:
- Semua perangkat yang tersambung harus dalam mode multiprosesor dengan mengatur pada bit MPCM pada register UCSRA
- Master mengirim alamat, dan semua slave akan membaca alamat tersebut. Untuk pengiriman alamat, maka bit ke 9 pada data yang akan dikirim (berada pada TXB), harus diset “1″, sedangkan untuk pengiriman data maka TXB diisi “0″
- Bila alamat yang dikirim adalah alamat dirinya, maka slave akan menunggu data berikutnya, sedangkan slave yang lain akan mengabaikan. Pada kondisi ini, si penerima alamat tersebut akan menonaktifkan mode multiprosesor (MPCM=0), sampai proses penerimaan data selesai.
- Bila penerimaan data selesai, maka yang bersangkutan harus kembali ke mode multiprosesor,agar dapat menerima data berikutnya
- Proses akan diulangi lagi mulai dari no 2.
Berikut contoh inisialisasi komunikasi multiprosesor pada MCU menggunakan ATMega8515:
;**************************
;routine inisialisasi usart
;**************************
init_usart:
ldi bufferdata, high(ubbrvalue)
out UBRRH,bufferdata
ldi bufferdata, low(ubbrvalue)
out UBRRL,bufferdata
ldi bufferdata,(1<<MPCM)
out UCSRA,bufferdata
ldi bufferdata,(1<<TXEN)|(1<<UCSZ2)
out UCSRB,bufferdata
ldi bufferdata, (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0)
out UCSRC,bufferdata
ret
Berikut contoh program ketika MCU mengirimkan data ke salah satu penampil (slave):
;*************************
;routine pengiriman serial
;proses pengiriman dilakukan
;dengan mengirim bit ke 9 (TX8)
;terlebih dahulu, baru kemudian
;diikuti dengan pengiriman paket
;*************************
kirimdata:
txa:
mov bufferdata,alamat
sbis UCSRA,UDRE
rjmp txa
sbi UCSRB,TXB8 ;ngirim alamat
out UDR,bufferdata
txd1:
sbis UCSRA,UDRE
rjmp txd1
lds bufferdata,satuan
cbi UCSRB,TXB8
out UDR,bufferdata
ret
Berikut contoh inisialisasi komunikasi multiprosesor pada slave menggunakan ATTiny2313:
;**************************
;routine inisialisasi usart.
;usart yang digunakan adalah
;mode multiprosesor, pada mode ini
;data pertama yang dikirimkan adalah
;alamat, yang ditandai dengan MPCM=1,
;sedangkan sesudahnya MPCM diclear
;oleh program, dan pada pengirim
;mengirimkan MPCM=0, sebagai tanda
;bahwa yang dikirimkan adalah data,
;data MPCM dikirimkan pada register TX8
;yang berada pada register UCSRA
;**************************
init_usart:
ldi bufferdata, high(ubbrvalue)
out UBRRH,bufferdata
ldi bufferdata, low(ubbrvalue)
out UBRRL,bufferdata
ldi bufferdata,(1<<MPCM)
out UCSRA,bufferdata
ldi bufferdata,(1<<RXCIE)|(1<<RXEN)|(1<<UCSZ2)
out UCSRB,bufferdata
ldi bufferdata, (1<<UCSZ1)|(1<<UCSZ0)
out UCSRC,bufferdata
ret
Berikut contoh program ketika slave menerima data dari MCU:
;*************************
;routine penerimaan serial
;routine ini akan mendeteksi
;register pada RX8 yang merepresentasikan
;MPCM, bila MPCM=1 maka data yang mengikuti
;merupakan alamat, dan user harus mendeteksi
;bila alamat tersebut merupakan alamat dirinya,
;maka user tersebut harus meng nol (0) kan
;register MPCM, agar user tersebut bisa menerima
;data yang merepresentasikan data (pengirim harus
;mengirim data TX8=0)
;*************************
dataserial:
push bufferdata
in bufferdata,SREG
push bufferdata
tungguterimah:
sbis UCSRA,RXC ;nunggu data diterima
rjmp tungguterimah
in bufferdata,UCSRB ;ngecek register RX8
lsr bufferdata
andi bufferdata,0b00000001
cpi bufferdata,$01 ;jika RX8=1, maka paket berupa alamat
brne bukanalamat ;jika RX8=0, maka paket berupa data
in bufferdata,UDR
cpi bufferdata,$04 ;ngecek alamat user
brne bukanuntukku1
ldi bufferdata,(0<<MPCM)
out UCSRA,bufferdata
rxd1:
sbis UCSRA,RXC
rjmp rxd1
in bufferdata,UCSRB
in satuan,UDR
datausai:
pop bufferdata
out SREG,bufferdata
pop bufferdata
reti
Mei 23, 2008 pukul 10:53 am |
Saya juga sedang memerlukan system ini. Bisa nggak tulisan lengkapnya dishare ke saya?
Tulisan lengkap seperti apa yang anda maksud? kalo yang anda maksud adalah source code, sebenarnya yang komunikasi multiprosesor itu ya seperti yang tertera pada tulisan ini. Selebihnya hanyalah program untuk manipulasi data, seperti untuk menentukan client, mengubah hexa ke bcd.
Juni 12, 2008 pukul 8:38 pm |
saya tertarik dengan beberapa artikel yang mas sajiin,,
tapi untuk halaman ini saya mau tanya,,
untuk program komunikasi master slave diatas ,,
ada ga yang versi nya langsung dengan bahasa C (code vision) untuk avr..
mohon banget ya mas..
ditunggu,,
ato mungkin bisa kirim ke email saya..
makasih..
Juni 21, 2008 pukul 11:52 am |
mas saya masih bingung dengan point ( buferdata, alamat, dan satuan)
misalnya untuk alamat,
saya bingung mau nulis alamat ke masing2 slave maupun master itu sendiri,,
kalo boleh tau nomor phone mas berapa??
mungkin saya bisa langsung ketemuan sama mas aja gmn??
soalnya ujian TA saya tinggal 3 minggu lagi..
soal royalti bisa diatur nantinya,, hehe..
mohon info selanjutnya mas,,
makasih..
Oktober 14, 2008 pukul 4:11 pm |
wahh kirimi juga dong untuk saya file nya saya butuh juga
tengs ya
Desember 24, 2008 pukul 7:44 am |
mas kalo mau komunikasi mikro ke mikro seri AVR tapi pemrogramannya dengan bahasa C gimana mas, tolong beri contoh source code bahasa C.
Mei 8, 2009 pukul 9:40 am |
mas klo komunikasi mikro ke mikro dengan AVR menggunakan ATmega16 gmn caranya ya…?
kirim ke email saya ya….
ghifari_inside@yahoo.com
terimakasih sebelumnya
Juli 1, 2009 pukul 4:02 pm |
mas, mohon bantuannya…
saya pengen menampilkan data dari sensor ke desktop komputer. misalnya saya pakai mikrokontroller sebagai pengolah data analog, menyambungkan ke PC nya gimana ya mas ?? (maaf, saya baru di mikrokontroller..)
mohon pencerahannya ya mas
tenqyu…