Penjelasan Bit Banging/Software Port Serial
Halo
lagi sobat MJL, beberapa pekan yang lalu MJL kan pernah berencana
ngirim 100 surat ke seluruh universitas di Indonesia. Seabrek surat itu
kita kirim lewat jasa pos supaya mereka yang ngurus, jadi kita tetep
bisa nyari sebongkah ide buat kelangsungan hidup MJL tanpa perlu repot
diganggu urusan ngirim-mengirim surat. Nah, kali ini kita mau cerita apa
yang terjadi kalo kita ngirim semua surat itu sendiri. Nah lho, kok
ngiklan??
Eits, tunggu dulu tapi, yang kita ceritain bukan pengiriman surat, tapi pengiriman data serial dari device ke device lain. Otre?
Kalo di dunia ‘mereka’, jasa pengiriman data jelas bukan lewat pos, tapi bisa bermacam-macam juga melalui dedicated pin di device
itu, seperti lazimnya mikrokontroller menggunakan UART, dan seperti
halnya mengirim surat, kita tinggal nulis beberapa kriteria beserta isi
datanya dengan benar, lalu mereka akan mengurus pengiriman data tersebut
ke tempat tujuan.
Tapi
kita bisa aja mengirim data tersebut tanpa mesti mengirimnya lewat pin
khusus tadi. Perlu sedikit trik untuk membuat pin I/O biasa menjadi pin
untuk komunikasi, yaitu menggunakan software atau program yang mirip
dengan kinerja hardware aslinya. Cara ini disebut Bit-Banging!
Cara ini aslinya punya banyak kelemahan dibanding menggunakan langsung
fungsi hardware seperti UART tadi. Tapi bukan tidak mungkin kita akan
menemukan bahwa ilmu ini bakalan terpakai nanti, entah karena kebutuhan
atau kesesatan penggunanya. So buat mikrokontroler macem ATmega yang
biasanya cuma punya 1 pasang serial, kita bisa hack jadi banyak !
Bayangkan
kekurangannya, seperti halnya jika MJL mengirim ke 100 surat itu
sendiri. Yang jelas pasti memakan waktu lama, selain itu kita juga gak
sempet mikirin nasib MJL. Entah berapa lama harus vakum sampai selesai
mengirimkannya, ditambah lagi, kita juga kecapekan. Begitu pula efek
samping yang dirasakan mikrokontroler/prosesor kita jika kita
menggunakan metode pengiriman sesat ini, di antaranya:
- Kecepatan transfer datanya lebih lambat dari standar fitur hardware aslinya.
- Tidak bisa mengerjakan proses lain ketika pengiriman data dilakukan.
- Kontroler/prosesor mendapat beban kerja lebih berat, mungkin jadi lebih mudah panas.
Namun
dibandingkan dengan hardware aslinya, dimana pin dengan fitur ini
biasanya terbatas, dan ketika digunakan tidak bisa dipakai untuk
keperluan lain, maka kita bisa menggunakan bit banging ini yang bisa
digunakan pada pin mana saja, misal ketika kita kekurangan jumlah fitur
yang disediakan oleh kontroler/prosesor tersebut atau ketika kita
tiba-tiba iseng ingin menggunakan pin biasa untuk mengirim data serial
untuk proyek yang ringan, bisa saja bukan?
Garis
besarnya, cara pengiriman data melalui UART itu dimulai dengan bit
‘start’ dan diakhiri dengan bit ‘stop’, Setelah bit start, maka
selanjutnya data sebanyak 8 bit dikirimkan dan dilanjutkan dengan bit
stop. Begitu juga penerimaan datanya, receiver akan menerima bit start,
dan mengambil 8 bit data berikut sebagai data, dan berhenti setelah bit
stop, dan alur seperti inilah kira-kira yang akan direalisasikan melalui
program kita. Masalahnya sebagai receiver jadi-jadian (hasil bit
banging) ia belum otomatis aktif hanya ketika start bit sudah terbaca.
Karena ini pin normal, maka ia harus selalu membaca kondisi pin receiver
ini terus menerus, sehingga bisa membuat beban bertambah. Jadi ada
baiknya dipakai trik seperti menghubungkan pin tersebut ke interrupt
handler, yang akan langsung menghentikan proses lain ketika pin tersebut
menerima sinyal start dari transmitter.
Dan berikut adalah contoh sederhana dari program bahasa C yang bisa sobat liat di Wikipedia.
voidsend_8bit_serial_data(unsigned char data)
{
int i;
// select device
output_high(SD_CS);
// send bits 7..0
for (i = 0; i < 8; i++)
{
// consider leftmost bit
// set line high if bit is 1, low if bitis 0
if (data & 0x80)
output_high(SD_DI);
else
output_low(SD_DI);
// pulse clock to indicate that bitvalue should be read
output_low(SD_CLK);
output_high(SD_CLK);
// shift byte left so next bit will beleftmost
data <<= 1;
}
// deselect device
output_low(SD_CS);
}
Nah,
mungkin program di atas masih amat sederhana. Gini penjelasannya :
program itu mengirimkan 8 bit data, 1 bit data pada satu waktu. Mulai
dari MSBnya, atau bit yang paling kiri. Jika MSBnya itu 1, maka ia buat
sinyal high, atau jika MSB 0 dibuatlah sinyal low. Setelah itu sinyalnya
di-clock sebagai isyarat untuk dibaca. Setelah 1 alur ini, data
tersebut digeser ke kiri 1 kali (shift bit left), untuk dilihat lagi
apakah nilai MSB yang sekarang ini 1 atau 0. Langkah itu
diulang sampai ke-8 bit tersebut selesai dikirim dan dibaca. Sedikit
berbeda memang dari yang diutarakan sebelumnya, bukan menggunakan bit
start/stop, ia cuma menggunakan enable saja (Select device) untuk mengaktifkan/mematikan fitur ini.
Mungkin
di situ juga letak asiknya. Namanya juga ngotak-ngatik, terserah kita
mau bikin programnya seperti apa, yang penting jalan kan? Jabaran di atas cuma generalisasi aja kok. Silakan keluarkan ilmu sesat kalian masing-masing jika ingin bereksperimen.
oleh : Sean
Posting Komentar untuk "Penjelasan Bit Banging/Software Port Serial"