Komunikasi Multiprosesor pada Mikrokontroler AVR

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:

  1. Semua perangkat yang tersambung harus dalam mode multiprosesor dengan mengatur pada bit MPCM pada register UCSRA
  2. 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”
  3. 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.
  4. Bila penerimaan data selesai, maka yang bersangkutan harus kembali ke mode multiprosesor,agar dapat menerima data berikutnya
  5. 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

8 Balasan ke Komunikasi Multiprosesor pada Mikrokontroler AVR

  1. Agus Haryanto mengatakan:

    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.

  2. trea mengatakan:

    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..

    Makasih. Kalo untuk yang langsung ke C saya gak punya. tapi biasanya kalo pake C (aku biasa pake CAVR), bahasa assembly yang sudah ada tinggal dimasukkan ke C

  3. trea mengatakan:

    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..

    Maaf, saya bukan konsultasi TA, mengenai bufferdata, alamat, satuan, itu sebenarnya hanya penamaan register saja (R16-R31), anda bisa menggantinya sesuai keinginan anda. Untuk alamat sudah ditentukan sejak awal. Jadi masing2 client memiliki alamat sendiri2, jadi nanti si master langsung mengalamati alamat yang diinginkan.

  4. febi yanto mengatakan:

    wahh kirimi juga dong untuk saya file nya saya butuh juga
    tengs ya

    fike apaan? kalo source code, garis besarnya seperti postingan diatas, untuk program yang lain hanya sekedar tambahan sesuai konfigurasi hardware dan port pada mikrokontroler yang digunakan

  5. aditya mengatakan:

    mas kalo mau komunikasi mikro ke mikro seri AVR tapi pemrogramannya dengan bahasa C gimana mas, tolong beri contoh source code bahasa C.

    wah sori mas, aku belum familiar dengan bahasa C, masih dalam tahap belajar

  6. Dani mengatakan:

    mas klo komunikasi mikro ke mikro dengan AVR menggunakan ATmega16 gmn caranya ya…?
    kirim ke email saya ya….
    ghifari_inside@yahoo.com
    terimakasih sebelumnya

  7. ade mengatakan:

    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…

  8. SAADMUH mengatakan:

    saya tertarik komunikasi mikrokontroler, ada source programnya yang langsung bisa diaplikasikan sebagai bahan referensi saya untuk digunakan pada robot, minta tolong ya mas emile saya saadmuh@yahoo.co.id

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: