TEKS BERJALAN

SELAMAT DATANG DI WEB HENRY TORUAN

Minggu, 01 November 2009

Set Instruksi MCS51

referensi dari internet

Program pengendali mikrokontroler disusun dari kumpulan instruksi, instruksi tersebut setara dengan kalimat perintah bahasa manusia yang hanya terdiri atas predikat dan objek. Dengan demikian tahap pertama pembuatan program pengendali mikrokontroler dimulai dengan pengenalan dan pemahaman predikat (kata kerja) dan objek apa saja yang dimiliki mikrokontroler.

Objek dalam pemrograman mikrokontroler adalah data yang tersimpan di dalam memori, register dan input/output. Sedangkan ‘kata kerja’ yang dikenal pun secara umum dikelompokkan menjadi perintah untuk perpindahan data, arithmetik, operasi logika, pengaturan alur program dan beberapa hal khusus. Kombinasi dari ‘kata kerja’ dan objek itulah yang membentuk perintah pengatur kerja mikrokontroler.
Intruksi MOV A,$7F merupakan contoh sebuah intruksi dasar yang sangat spesifik, MOV merupakan ‘kata kerja’ yang memerintahkan peng-copy-an data, merupakan predikat dalam kalimat perintah ini. Sedangkan objeknya adalah data yang di-copy-kan, dalam hal ini adalah data yang ada di dalam memori nomor $7F di-copy-kan ke Akumulator A.
Penyebutan data dalam MCS51
Data bisa berada diberbagai tempat yang berlainan, dengan demikian dikenal beberapa cara untuk menyebut data (dalam bahasa Inggris sering disebut sebagai ‘Addressing Mode’), antara lain sebagai berikut.
1. Penyebutan data konstan (immediate addressing mode): MOV A,#$20. Data konstan merupakan data yang berada di dalam instruksi. Contoh instruksi ini mempunyai makna data konstan $20 (sebagai data konstan ditandai dengan ‘#’) di-copy-kan ke Akumulator A. Yang perlu benar-benar diperhatikan dalam perintah ini adalah bilangan $20 merupakan bagian dari instruksi.
2. Pnyebutan data secara langsung (direct addressing mode), cara ini dipakai untuk menunjuk data yang berada di dalam memori dengan cara menyebut nomor memori tempat data tersebut berada : MOV A,$30. Contoh instruksi ini mempunyai makna data yang berada di dalam memori nomor $30 di-copy-kan ke Akumulator. Sekilas intruksi ini sama dengan instruksi data konstan di atas, perbedaannya instruksi di atas memakai tanda ‘#’ yang menandai $20 adalah data konstan, sedangkan dalam instruksi ini karena tidak ada tanda ‘#’ maka $30 adalah nomor dari memori.
3. Penyebutan data secara tidak langsung (indirect addressing mode), cara ini dipakai untuk menunjuk data yang berada di dalam memori, kalau memori penyimpan data ini letaknya berubah-rubah sehingga nomor memori tidak disebut secara langsung tapi di-‘titip’-kan ke register lain : MOV A,@R0.
4. Dalam instruksi ini register serba guna R0 dipakai untuk mencatat nomor memori, sehingga instruksi ini mempunyai makna memori yang nomornya tercatat dalam R0 isinya di-copy-kan ke Akumulator A.
5. Tanda ‘@’ dipakai untuk menandai nomor memori disimpan di dalam R0.
6. Bandingkan dengan instruksi penyebutan nomor memori secara langsung di atas, dalam instruksi ini nomor memori terlebih dulu disimpan di R0 dan R0 berperan menunjuk memori mana yang dipakai, sehingga kalau nilai R0 berubah memori yang ditunjuk juga akan berubah pula.
7. Dalam instruksi ini register serba guna R0 berfungsi dengan register penampung alamat (indirect address register), selain R0 register serba guna R1 juga bisa dipakai sebagai register penampung alamat.
8. Penyebutan data dalam register (register addressing mode): MOV A,R5. Instruksi ini mempunyai makna data dalam register serba guna R5 di-copy-kan ke Akumulator A. Instruksi ini membuat register serba guna R0 sampai R7 sebagai tempat penyimpan data yang sangat praktis yang kerjanya sangat cepat.
9. Data yang dimaksud dalam bahasan di atas semuanya berada di dalam memori data (termasuk register serba guna letaknya juga di dalam memori data). Dalam penulisan program, sering-sering diperlukan tabel baku yang disimpan bersama dengan program tersebut. Tabel semacam ini sesungguhnya merupakan data yang berada di dalam memori program!
10. Untuk keperluan ini, MCS51 mempunyai cara penyebutan data dalam memori program yang dilakukan secara indirect (code indirect addressing mode) : MOVC A,@A+DPTR.
Perhatikan dalam instruksi ini MOV digantikan dengan MOVC, tambahan huruf C tersebut dimaksud untuk membedakan bahwa instruksi ini dipakai di memori program. (MOV tanpa huruf C artinya instruksi dipakai di memori data).
Tanda ‘@’ dipakai untuk menandai A+DPTR dipakai untuk menyatakan nomor memori yang isinya di-copy-kan ke Akumulator A, dalam hal ini nilai yang tersimpan dalam DPTR (Data Pointer Register - 2 byte) ditambah dengan nilai yang tersimpan dalam Akumulator A (1 byte) dipakai untuk menunjuk nomor memori program.

Secara keseluruhan AT8951 mempunyai sebanyak 255 macam instruksi, yang dibentuk dengan mengkombinasikan ‘kata kerja’ dan objek. “Kata kerja’ tersebut secara kelompok dibahas sebagai berikut :

1. Instruksi copy data
Kode dasar untuk kelompok ini adalah MOV, singkatan dari MOVE yang artinya memindahkan, meskipun demikian lebih tepat dikatakan perintah ini mempunyai makna peng-copy-an data. Hal ini bisa dijelaskan berikut : setelah instruksi MOV A,R7 dikerjakan, Akumulator A dan register serba guna R7 berisikan data yang sama, yang asalnya tersimpan di dalam R7.
Perintah MOV dibedakan sesuai dengan jenis memori AT89Cx051. Perintah ini pada memori data dituliskan menjadi MOV, misalkan :

MOV A,$20
MOV A,@R1
MOV A,P1
MOV P3,A

Untuk pemakaian pada memori program, perintah ini dituliskan menjadi MOVC, hanya ada 2 jenis instruksi yang memakai MOVC, yakni:

MOVC A,@A+DPTR ; DPTR sebagai register indirect
MOVC A,@A+PC ; PC sebagai register indirect

Selain itu, masih dikenal pula perintah MOVX, yakni perintah yang dipakai untuk memori data eksternal (X singkatakan dari External). Perintah ini hanya dimiliki oleh anggota keluarga MCS51 yang mempunyai memori data eksternal, misalnya AT89C51 dan lain sebagainya, dan jelas tidak dikenal oleh kelompok AT89Cx051 yang tidam punya memori data eksternal. Hanya ada 6 macam instruksi yang memakai MOVX, instruksi-instruksi tersebut adalah:

clip_image002

2. Instruksi Aritmatika

Perintah ADD dan ADDC

Isi Akumulator A ditambah dengan bilangan 1 byte, hasil penjumlahan akan ditampung kembali dalam Akumulator. Dalam operasi ini bit Carry (C flag dalam PSW – Program Status Word) berfungsi sebagai penampung limpahan hasil penjumlahan. Jika hasil penjumlahan tersebut melimpah (nilainya lebih besar dari 255) bit Carry akan bernilai ‘1’, kalau tidak bit Carry bernilai ‘0’. ADDC sama dengan ADD, hanya saja dalam ADDC nilai bit Carry dalam proses sebelumnya ikut dijumlahkan bersama.
Bilangan 1 byte yang ditambahkan ke Akumulator, bisa berasal dari bilangan konstan, dari register serba guna, dari memori data yang nomor memorinya disebut secara langsung maupun tidak langsung, seperti terlihat dalam contoh berikut :

ADD A,R0 ; register serba guna
ADD A,#$23 ; bilangan konstan
ADD A,@R0 ; no memori tak langsung
ADD A,P1 ; no memori langsung (port 1)

Perintah SUBB
Isi Akumulator A dikurangi dengan bilangan 1 byte berikut dengan nilai bit Carry, hasil pengurangan akan ditampung kembali dalam Akumulator. Dalam operasi ini bit Carry juga berfungsi sebagai penampung limpahan hasil pengurangan. Jika hasil pengurangan tersebut melimpah (nilainya kurang dari 0) bit Carry akan bernilai ‘1’, kalau tidak bit Carry bernilai ‘0’.
SUBB A,R0 ; A = A - R0 - C
SUBB A,#$23 ; A = A - $23
SUBB A,@R1
SUBB A,P0

Perintah DA
Perintah DA (Decimal Adjust) dipakai setelah perintah ADD; ADDC atau SUBB, dipakai untuk merubah nilai biner 8 bit yang tersimpan dalam Akumulator menjadi 2 buah bilangan desimal yang masing-masing terdiri dari nilai biner 4 bit.
Perintah MUL AB
Bilangan biner 8 bit dalam Akumulator A dikalikan dengan bilangan biner 8 bit dalam register B. Hasil perkalian berupa bilangan biner 16 bit, 8 bit bilangan biner yang bobotnya lebih besar ditampung di register B, sedangkan 8 bit lainnya yang bobotnya lebih kecil ditampung di Akumulator A.
Bit OV dalam PSW (Program Status Word) dipakai untuk menandai nilai hasil perkalian yang ada dalam register B. Bit OV akan bernilai ‘0’ jika register B bernilai $00, kalau tidak bit OV bernilai ‘1’.

MOV A,#10
MOV B,#20
MUL AB

Perintah DIV AB
Bilangan biner 8 bit dalam Akumulator A dibagi dengan bilangan biner 8 bit dalam register B. Hasil pembagian berupa bilangan biner 8 bit ditampung di Akumulator, sedangkan sisa pembagian berupa bilangan biner 8 bit ditampung di register B.
Bit OV dalam PSW (Program Status Word) dipakai untuk menandai nilai sebelum pembagian yang ada dalam register B. Bit OV akan bernilai ‘1’ jika register B asalnya bernilai $00.

Table 1.3. Instruksi Aritmatika

clip_image002[5]

3. Instruksi Logika

Kelompok perintah ini dipakai untuk melakukan operasi logika mikrokontroler MCS51, operasi logika yang bisa dilakukan adalah operasi AND (kode operasi ANL), operasi OR (kode operasi ORL) dan operasi Exclusive-OR (kode operasi XRL).
Data yang dipakai dalam operasi ini bisa berupa data yang berada dalam Akumulator atau data yang berada dalam memori-data, hal ini sedikit berlainan dengan operasi aritmatik yang harus melihatkan Akumulator secara aktip.
Hasil operasi ditampung di sumber data yang pertama.

1. Operasi logika AND banyak dipakai untuk me-‘0’-kan beberapa bit tertentu dari sebuah bilangan biner 8 bit, caranya dengan membentuk sebuah bilangan biner 8 bit sebagai data konstan yang di-ANL-kan bilangan asal. Bit yang ingin di-‘0’-kan diwakili dengan ‘0’ pada data konstan, sedangkan bit lainnya diberi nilai ‘1’, misalnya. Instruksi ANL P1,#%01111110 akan mengakibatkan bit 0 dan bit 7 dari Port 1 (P1) bernilai ‘0’ sedangkan bit-bit lainnya tetap tidak berubah nilai.

2. Operasi logika OR banyak dipakai untuk me-‘1’-kan beberapa bit tertentu dari sebuah bilangan biner 8 bit, caranya dengan membentuk sebuah bilangan biner 8 bit sebagai data konstan yang di-ORL-kan bilangan asal. Bit yang ingin di-‘1’-kan diwakili dengan ‘1’ pada data konstan, sedangkan bit lainnya diberi nilai ‘0’, misalnya :Instruksi ORL A,#%01111110 akan mengakibatkan bit 1 sampai dengan bit 6 dari Akumulator bernilai ‘1’ sedangkan bit-bit lainnya tetap tidak berubah nilai.
3. Operasi logika Exclusive-OR banyak dipakai untuk membalik nilai (complement) beberapa bit tertentu dari sebuah bilangan biner 8 bit, caranya dengan membentuk sebuah bilangan biner 8 bit sebagai data konstan yang di-XRL-kan bilangan asal. Bit yang ingin dibalik-nilai diwakili dengan ‘1’ pada data konstan, sedangkan bit lainnya diberi nilai ‘0’, misalnya: Instruksi XRL A,#%01111110 akan mengakibatkan bit 1 sampai dengan bit 6 dari Akumulator berbalik nilai, sedangkan bit-bit lainnya tetap tidak berubah nilai.

clip_image002[7]

Operasi logika pada umumnya mencakup empat hal, yaitu operasi AND, operasi OR, operasi EX-OR dan operasi NOT. MCS51 hanya bisa melaksanakan tiga jenis operasi logika yang ada, yakni intruksi ANL (AND Logical) untuk operasi AND instruksi ORL (OR Logical) untuk operasi OR, CPL (Complement bit) untuk operasi NOT.
Bit Carry pada PSW diperlakukan sebagai ‘akumulator bit’, dengan demikian operasi AND dan operasi OR dilakukan antara bit yang tersimpan pada bit Carry dengan salah satu dari 256 bit data yang dibahas di atas. Contoh dari instruksi-instruksi ini adalah :

ANL C,P1.1
ANL C,/P1.2
Instruksi ANL C,P1.1 meng-AND-kan nilai pada bit Carry dengan nilai Port 1 bit 1 (P1.1), dan hasil operasi tersebut ditampung pada bit Carry. Instruksi ANL C,/P1.1 persis sama dengan instruksi sebelumnya, hanya saja sebelum di-AND-kan, nilai P1.1 dibalik (complemented) lebih dulu, jika nilai P1.1=‘0’ maka yang di-AND-kan dengan bit Carry adalah ‘1’, demikian pula sebaliknya. Hal serupa berlaku pada instruksi ORL.
Instruksi CPL dipakai untuk membalik (complement) nilai semua 256 bit data yang dibahas di atas. Misalnya :
CPL C
CPL P1.0

CPL C akan membalik nilai biner dalam bit Carry (jangan lupa bit Carry merupakan salah satu bit yang ada dalam 256 bit yang dibahas di atas, yakni bit nomor $E7 atau PSW.7).

4. Instruksi Lompatan

Pada dasarnya program dijalankan intruksi demi instruksi, artinya selesai menjalankan satu instruksi mikrokontroler langsung menjalankan instruksi berikutnya, untuk keperluan ini mikrokontroler dilengkapi dengan Program Counter yang mengatur pengambilan intruksi secara berurutan. Meskipun demikian, program yang kerjanya hanya berurutan saja tidaklah banyak artinya, untuk keperluan ini mikrokontroler dilengkapi dengan instruksi-instruksi untuk mengatur alur program.

Secara umum kelompok instruksi yang dipakai untuk mengatur alur program terdiri atas instruksi-instruksi JUMP (setara dengan statemen GOTO dalam Pascal), instruksi-instruksi untuk membuat dan memakai sub-rutin/modul (setara dengan PROCEDURE dalam Pascal), instruksi-instruksi JUMP bersyarat (conditional Jump, setara dengan statemen IF .. THEN dalam Pascal). Di samping itu ada pula instruksi PUSH dan POP yang bisa memengaruhi alur program.
Karena Program Counter adalah satu-satunya register dalam mikrokontroler yang mengatur alur program, maka kelompok instruksi pengatur program yang dibicarakan di atas, semuanya merubah nilai Program Counter, sehingga pada saat kelompok instruksi ini dijalankan, nilai Program Counter akan tidak akan runtun dari nilai instruksi sebelumnya.
Selain karena instruksi-instruksi di atas, nilai Program Counter bisa pula berubah karena pengaruh perangkat keras, yaitu saat mikrokontroler di-reset atau menerima sinyal interupsi dari perangkat input/output. Hal ini akan dibicarakan secara detail dibagian lagi.

Mikrokontroler menjalankan intruksi demi instruksi, selesai menjalankan satu instruksi mikrokontroler langsung menjalankan instruksi berikutnya, hal ini dilakukan dengan cara nilai Program Counter bertambah sebanyak jumlah byte yang membentuk instruksi yang sedang dijalankan, dengan demikian pada saat instruksi bersangkutan dijalankan Program Counter selalu menyimpan nomor memori-program yang menyimpan instruksi berikutnya.
Pada saat mikrokontroler menjalankan kelompok instruksi JUMP, nilai Program Counter yang runtun sesuai dengan alur program diganti dengan nomor memori-program baru yang dikehendaki programer.
Mikrokontroler MCS51 mempunyai 3 macam intruksi JUMP, yakni instruksi LJMP (Long Jump), instruksi AJMP (Absolute Jump) dan instruksi SJMP (Short Jump). Kerja dari ketiga instruksi ini persis sama, yakni memberi nilai baru pada Program Counter, kecepatan melaksanakan ketiga instruksi ini juga persis sama, yakni memerlukan waktu 2 periode instruksi (jika MCS51 bekerja pada frekuensi 12 MHz, maka instruksi ini dijalankan dalam waktu 2 mikro-detik), yang berbeda dalam jumlah byte pembentuk instruksinya, instruksi LJMP dibentuk dengan 3 byte, sedangkan instuksi AJMP dan SJMP cukup 2 byte.

Instruksi LJMP
Kode untuk instruksi LJMP adalah $02, nomor memori-program baru yang dituju dinyatakan dengan bilangan biner 16 bit, dengan demikian instruksi ini bisa menjangkau semua memori-program MCS51 yang jumlahnya 64 KiloByte. Instruksi LJMP terdiri atas 3 byte, yang bisa dinyatakan dengan bentuk umum 02 aa aa, aa yang pertama adalah nomor memori-program bit 8 sampai dengan bit 15, sedangkan aa yang kedua adalah nomor memori-program bit 0 sampai dengan bit 7.
Pemakaian instruksi LJMP bisa dipelajari dari potongan program berikut :

LJMP TugasBaru

ORG $2000
TugasBaru:
MOV A,P3.1

Dalam potongan program di atas, ORG adalah perintah pada assembler agar berikutnya assembler bekerja pada memori-program nomor yang disebut di belakang ORG (dalam hal ini minta assembler berikutnya bekerja pada memori-program nomor $2000). TugasBaru disebut sebagai LABEL, yakni sarana assembler untuk menandai/ menamai nomor memori-program. Dengan demikian, dalam potongan program di atas, memori-program nomor $2000 diberi nama TugasBaru, atau bisa juga dikatakan bahwa TugasBaru bernilai $2000. (Catatan : LABEL ditulis minimal satu huruf lebih kiri dari instruksi, artinya LABEL ditulis setelah menekan tombol Enter, tapi instruksi ditulis setelah menekan tombol Enter, kemudian diikuti dengan 1 tombol spasi atau tombol TAB).
Dengan demikian intruksi LJMP TugasBaru di atas, sama artinya dengan LJMP $2000 yang oleh assembler akan diterjemahkan menjadi 02 20 00 (heksadesimal).

Instruksi AJMP
Nomor memori-program baru yang dituju dinyatakan dengan bilangan biner 11 bit, dengan demikian instruksi ini hanya bisa menjangkau satu daerah memori-program MCS51 sejauh 2 KiloByte. Instruksi AJMP terdiri atas 2 byte, byte pertama merupakan kode untuk instruksi AJMP (00001b) yang digabung dengan nomor memori-program bit nomor 8 sampai dengan bit nomor 10, byte kedua dipakai untuk menyatakan nomor memori-program bit nomor 0 sampai dengan bit nomor 7.
Berikut ini adalah potongan program untuk menjelaskan pemakaian instruksi AJMP:

ORG $800
AJMP DaerahIni
AJMP DaerahLain
ORG $900
DaerahIni:
. . .
ORG $1000
DaerahLain:
. . .

Potongan program di atas dimulai di memori-program nomor $800, dengan demikian instruksi AJMP DaerahIni bisa dipakai, karena nomor-memori $800 (tempat instruksi AJMP DaerahIni) dan LABEL DaerahIni yang terletak di dalam satu daerah memori-progam 2 KiloByte yang sama dengan. (Dikatakan terletak di dalam satu daerah memori-program 2 KiloByte yang sama, karena bit nomor 11 sampai dengan bit nomor 15 dari nomor memorinya sama).
Tapi AJMP DaerahLain akan di-salah-kan oleh Assembler, karena DaerahLain yang terletak di memori-program nomor $1000 terletak di daerah memori-program 2 KiloByte yang lain.
Karena instruksi AJMP hanya terdiri dari 2 byte, sedangkan instruksi LJMP 3 byte, maka memakai instruksi AJMP lebih hemat memori-program dibanding dengan LJMP. Hanya saja karena jangkauan instrusksi AJMP hanya 2 KiloByte, pemakaiannya harus hati-hati.
Memori-program IC mikrokontroler AT89C1051 dan AT89C2051 masing-masing hanya 1 KiloByte dan 2 KiloByte, dengan demikian program untuk kedua mikrokontroler di atas tidak perlu memakai instruksi LJMP, karena program yang ditulis tidak mungkin menjangkau lebih dari 2 KiloByte memori-program.

Instruksi SJMP
Nomor memori-program dalam instruksi ini tidak dinyatakan dengan nomor memori-program yang sesungguhnya, tapi dinyatakan dengan ‘pergeseran relatip’ terhadap nilai Program Counter saat instruksi ini dilaksanakan.
Pergeseran relatip tersebut dinyatakan dengan 1 byte bilangan 2’s complement, yang bisa dipakai untuk menyakatakan nilai antara –128 sampai dengan +127. Nilai minus dipakai untuk menyatakan bergeser ke instruksi-instruksi sebelumnya, sedangkan nilai positip untuk menyatakan bergeser ke instruksi-instruksi sesudahnya.
Meskipun jangkauan instruksi SJMP hanya –128 sampai +127, tapi instruksi ini tidak dibatasi dengan pengertian daerah memori-program 2 KiloByte yang membatasi instruksi AJMP.
ORG $0F80
SJMP DaerahLain
. . .
ORG $1000
DaerahLain:

Dalam potongan program di atas, memori-program $0F80 tidak terletak dalam daerah memori-program 2 KiloByte yang sama dengan $1000, tapi instruksi SJMP DaerahLain tetap bisa dipakai, asalkan jarak antara instruksi itu dengan LABEL DaerahLain tidak lebih dari 127 byte.

Instruksi sub-rutin
Instruksi-instruksi untuk membuat dan memakai sub-rutin/modul program, selain melibatkan Program Counter, melibatkan pula Stack yang diatur oleh Register Stack Pointer.
Sub-rutin merupakan suatu potong program yang karena berbagai pertimbangan dipisahkan dari program utama. Bagian-bagian di program utama akan ‘memanggil’ (CALL) sub-rutin, artinya mikrokontroler sementara meninggalkan alur program utama untuk mengerjakan instruksi-instruksi dalam sub-rutin, selesai mengerjakan sub-rutin mikrokontroler kembali ke alur program utama.
Satu-satunya cara membentuk sub-rutin adalah memberi instruksi RET pada akhir potongan program sub-rutin. Program sub-rutin di-’panggil’ dengan instruksi ACALL atau LCALL.
Agar nantinya mikrokontroler bisa meneruskan alur program utama, pada saat menerima instruksi ACALL atau LCALL, sebelum mikrokontroler pergi mengerjakan sub-rutin, nilai Program Counter saat itu disimpan dulu ke dalam Stack (Stack adalah sebagian kecil dari memori-data yang dipakai untuk menyimpan nilai Program Counter secara otomatis, kerja dari Stack dikendalikan oleh Register Stack Poiner).
Selanjutnya mikrokontroler mengerjakan instruksi-instruksi di dalam sub-rutin sampai menjumpai instruksi RET yang berfungsi sebagai penutup dari sub-rutin. Saat menerima instruksi RET, nilai asal Program Counter sebelum mengerjakan sub-rutin yang disimpan di dalam Stack, dikembalikan ke Program Counter sehingga mikrokontroler bisa meneruskan pekerjaan di alur program utama.
Instruksi ACALL dipakai untuk me-‘manggil’ program sub-rutin dalam daerah memori-program 2 KiloByte yang sama, setara dengan instruksi AJMP yang sudah dibahas di atas. Sedangkan instruksi LCALL setara dengan instruksi LCALL, yang bisa menjangkau seluruh memori-program mikrokontroler MCS51 sebanyak 64 KiloByte. (Tapi tidak ada instrusk SCALL yang setara dengan instruksi SJMP).
Program untuk AT89C1051 dan AT89C2051 tidak perlu memakai instruksi LCALL.
Instruksi RET dipakai untuk mengakhiri program sub-rutin, di samping itu masih ada pula instruksi RETI, yakni instruksi yang dipakai untuk mengakhiri Program Layanan Interupsi (Interrupt Service Routine), yaitu semacam program sub-rutin yang dijalankan mikrokontroler pada saat mikrokontroler menerima sinyal permintaan interupsi.
Catatan : Saat mikrokontroler menerima sinyal permintaaan interupsi, mikrokontroler akan melakukan satu hal yang setara dengan intruksi LCALL untuk menjalankan Program Layanan Interupsi dari sinyal interupsi bersangkutan. Di samping itu, mikrokontroler juga me-‘mati’-kan sementara mekanisme layanan interupsi, sehingga permintaan interupsi berikutnya tidak dilayani. Saat menerima instruksi RETI, makanisme layanan interusi kembali diaktipkan dan mikrokontroler melaksanakan hal yang setara dengan instruksi RET.

Instruksi Lompatan Bersyarat
Instruksi Jump bersyarat merupakan instruksi inti bagi mikrokontroler, tanpa kelompok instruksi ini program yang ditulis tidak banyak berarti. Instruksi-instruksi ini selain melibatkan Program Counter, melibatkan pula kondisi-kondisi tertentu yang biasanya dicatat dalam bit-bit tertentu yang dihimpun dalam Register tertentu.
Khusus untuk keluarga mikrokontroler MCS51 yang mempunyai kemampuan menangani operasi dalam level bit, instruksi jump bersyarat dalam MCS51 dikaitkan pula dengan kemampuan operasi bit MCS51.
Nomor memori-program baru yang harus dituju tidak dinyatakan dengan nomor memori-program yang sesungguhnya, tapi dinyatakan dengan ‘pergeseran relatip’ terhadap nilai Program Counter saat instruksi ini dilaksanakan. Cara ini dipakai pula untuk instruksi SJMP.

Instruksi JZ / JNZ
Instruksi JZ (Jump if Zero) dan instruksi JNZ (Jump if not Zero) adalah instruksi JUMP bersyarat yang memantau nilai Akumulator A.

MOV A,#0
JNZ BukanNol
JZ Nol
. . .
BukanNol:
. . .
Nol :
. . .

Dalam contoh program di atas, MOV A,#0 membuat A bernilai nol, hal ini mengakibatkan instruksi JNZ BukanNol tidak akan pernah dikerjakan (JNZ artinya Jump kalau nilai A<>0, syarat ini tidak pernah dipenuhi karena saat instruksi ini dijalankan nilai A=0), sedangankan instruksi JZ Nol selalu dikerjakan karena syaratnya selalu dipenuhi.

Instruksi JC / JNC
Instruksi JC (Jump on Carry) dan instruksi JNC (Jump on no Carry) adalah instruksi jump bersyarat yang memantau nilai bit Carry di dalam Program Status Word (PSW).
Bit Carry merupakan bit yang banyak sekali dipakai untuk keperluan operasi bit, untuk menghemat pemakaian memori-program disediakan 2 instruksi yang khusus untuk memeriksa keadaan bit Carry, yakni JC dan JNC. Karena bit akan diperiksa sudah pasti, yakni bit Carry, maka instruksi ini cukup dibentuk dengan 2 byte saja, dengan demikian bisa lebih menghemat memori program.

JC Periksa
JB PSW.7,Periksa

Hasil kerja kedua instruksi di atas sama, yakni MCS51 akan JUMP ke Periksa jika ternyata bit Carry bernilai ‘1’ (ingat bit Carry sama dengan PSW bit 7). Meskipun sama tapi instruksi JC Periksa lebih pendek dari instruksi JB PSW.7,Periksa, instruksi pertama dibentuk dengan 2 byte dan instruksi yang kedua 3 byte.
Instruksi JBC sama dengan instruksi JB, hanya saja jika ternyata bit yang diperiksa memang benar bernilai ‘1’, selain MCS51 akan JUMP ke instruksi lain yang dikehendaki MCS51 akan me-nol-kan bit yang baru saja diperiksa

Instruksi JB / JNB / JBC
Instruksi JB (Jump on Bit Set), instruksi JNB (Jump on not Bit Set) dan instruksi JBC (Jump on Bit Set Then Clear Bit) merupakan instruksi Jump bersyarat yang memantau nilai-nilai bit tertentu. Bit-bit tertentu bisa merupakan bit-bit dalam register status maupun kaki input mikrokontroler MCS51.
Pengujian Nilai Boolean dilakukan dengan instruksi JUMP bersyarat, ada 5 instruksi yang dipakai untuk keperluan ini, yakni instruksi JB (JUMP if bit set), JNB (JUMP if bit Not Set), JC (JUMP if Carry Bit set), JNC (JUMP if Carry Bit Not Set) dan JBC (JUMP if Bit Set and Clear Bit).
Dalam instruksi JB dan JNB, salah satu dari 256 bit yang ada akan diperiksa, jika keadaannya (false atau true) memenuhi syarat, maka MCS51 akan menjalankan instruksi yang tersimpan di memori-program yang dimaksud. Alamat memori-program dinyatakan dengan bilangan relatip terhadap nilai Program Counter saat itu, dan cukup dinyatakan dengan angka 1 byte. Dengan demikian instruksi ini terdisi dari 3 byte, byte pertama adalah kode operasinya ($29 untuk JB dan $30 untuk JNB), byte kedua untuk menyatakan nomor bit yang harus diuji, dan byte ketiga adalah bilangan relatip untuk instruksi tujuan.
Contoh pemakaian instruksi JB dan JNB sebagai berikut :

JB P1.1,$
JNB P1.1,$

Instruksi-instruksi di atas memantau kedaan kaki IC MCS51 Port 1 bit 1. Instruksi pertama memantau P1.1, jika P1.1 bernilai ‘1’ maka MCS51 akan mengulang instruksi ini, (tanda $ mempunyai arti jika syarat terpenuhi kerjakan lagi instruksi bersangkutan). Instruksi berikutnya melakukan hal sebaliknya, yakni selama P1.1 bernilai ‘0’ maka MCS51 akan tertahan pada instruksi ini.

Instruksi proses dan test
Instruksi-instruksi Jump bersyarat yang dibahas di atas, memantau kondisi yang sudah terjadi yang dicatat MCS51. Ada dua instruksi yang melakukan dulu suatu proses baru kemudian memantau hasil proses untuk menentukan apakah harus Jump. Kedua instruksi yang dimaksud adalah instruksi DJNZ dan instruksi CJNE.

Instruksi DJNZ
Instruksi DJNZ (Decrement and Jump if not Zero), merupakan instruksi yang akan mengurangi 1 nilai register serbaguna (R0..R7) atau memori-data, dan Jump jika ternyata setelah pengurangan 1 tersebut hasilnya tidak nol.
Contoh berikut merupakan potongan program untuk membentuk waktu tunda secara sederhana :
MOV R0,#$23
DJNZ R0,$

Instruksi MOV R0,#$23 memberi nilai $23 pada R0, selanjutnya setiap kali instruksi DJNZ R0,$ dikerjakan, MCS51 akan mengurangi nilai R0 dengan ‘1’, jika R0 belum menjadi nol maka MCS51 akan mengulang instruksi tersebut (tanda $ dalam instruksi ini maksudnya adalah kerjakan kembali instruksi ini). Selama mengerjakan 2 instruksi di atas, semua pekerjaan lain akan tertunda, waktu tundanya ditentukan oleh besarnya nilai yang diisikan ke R0.

Instruksi CJNE
Instruksi CJNE (Compare and Jump if Not Equal) membandingkan dua nilai yang disebut dan MCS akan Jump kalau kedua nilai tersebut tidak sama!

MOV A,P1
CJNE A,#$0A,TidakSama
...
SJMP EXIT
;
TidakSama:
...
Instruksi MOV A,P1 membaca nilai input dari Port 1, instruksi CJNE A,#$0A,Tidaksama memeriksa apakah nilai Port 1 yang sudah disimpan di A sama dengan $0A, jika tidak maka Jump ke TidakSama

Selengkapnya...

Kamis, 08 Oktober 2009

FUZZY LOGIC 2 (M A T L A B)

sumber : buku


Suatu perusahaan makanan kaleng memproduksi jenis makanan ABC. Dari data satu bulan terakhir :

1. Permintaan terbesar mencapai 5000 kemasan/hari

2. Permintaan terkecil mencapai 1000 kemasan/hari

3. Persediaan barang di gudang terbanyak sampai 600 kemasan/hari

4. Persediaan barang di gudang terkecil sampai 600 kemasan/hari

5. Produksi barang maksimum dengan segala keterbatasannya mencapai 7000 kemasan/hari

6. Produksi barang minimum demi efisiensi mesin dan SDM mencapai 2000 kemasan/hari

Proses produksi perusahaan ini mengikuti aturan :

  1. Bila permintaan turun dan persediaan banyak, maka produksi barang berkurang
  2. Bila permintaan turun dan persediaan sedikit, maka produksi barang berkurang
  3. Bila permintaan naik dan persediaan banyak, maka produksi barang bertambah
  4. Bila permintaan naik dan persediaan sedikit, maka produksi barang bertambah

Permasalahan :

Berapa kemasan makanan yang harus diproduksi jika permintaan sebanyak 4000 kemasan, dan persediaan di gudang masih ada 300 kemasan ?

Penyelesaian :

Pengaturan input, output, aturan/rules dan proses data permasalahan dengan menggunakan metode Mamdani pada toolbox fuzzy logic MATLAB.

Pengaturan Variabel Input (Permintaan, Persediaan) dan Output (Produksi) :

clip_image002

Pengaturan Membership Function Input Permintaan :

clip_image004

Pengaturan Membership Function Input Persediaan :

clip_image006

Pengaturan Membership Function Output Produksi :

clip_image008

Pengaturan Rules

clip_image010

Pemrosesan Data

clip_image012

Untuk permintaan sebanyak 4000 kemasan, dan persediaan di gudang masih ada 300 kemasan didapatkan data untuk produksi yang dihasilkan itu adalah 4910 kemasan

Penampilan Surface :

clip_image014

Selengkapnya...

FUZZY LOGIC 1 ( M A T L A B )

by: Henry Toruan

Suatu rancangan sistem kontrol penyiraman taman dengan menggunakan fuzzy logic dimana sistem ini memiliki 2 input, yaitu suhu dan kelembaban (moisture) dan 1 output yaitu durasi penyiraman. Pengaturan input, output dan aturan/ rules yang harus dipenuhi adalah sebagai berikut :

Input 1 : Suhu Input 2 : Moisture

clip_image002 clip_image004

Output : Durasi Aturan/ Rules :

clip_image006 clip_image008

Permasalahan :

Berapakah durasi penyiraman yang dibutuhkan untuk keadaan :

  1. Suhu 10oF dan kelembaban (moisture) 90%
  2. Suhu 66oF dan kelembaban (moisture) 24%

PENYELESAIAN

FIS Editor Mamdani

clip_image010

Pengaturan Variabel Input (Suhu , Moisture) dan Output (Durasi)

clip_image012

Pengaturan Membership Function Suhu

clip_image013

Pengaturan Membership Function Moisture

clip_image014

Pengaturan Membership Durasi

clip_image015

Pengaturan Rules

clip_image017

Penampilan Surface

clip_image019

Penampilan Rules

Untuk Suhu 100F dan Kelembaban 90% Untuk Suhu 660F dan Kelembaban 24%

clip_image021 clip_image023

Kita dapatkan durasi 6.47 menit Kita dapatkan durasi 38.4 menit

Selengkapnya...

Rabu, 07 Oktober 2009

Istilah dalam Fuzzy Logic

by : Henry Toruan

1.Crisp input : nilai input analog yang kita berikan untuk mencari degree of membership, contohnya kurang dari 35 tahun untuk usia muda, diantara 35 sampai 55 tahun untuk paruh baya dan diatas 55 tahun.untuk usia tua.

2. Crisp output : nilai output analog yang kita peroleh dari hasil defuzzifikasi, contohnya 6.47 menit untuk waktu pembukaan kran air pada saat suhu 10oF dan kelembaban 90%.

3. Label : kata-kata untuk memberikan keterangan pada scope/ domain misalnya: dingin, normal, panas atau muda, paruh baya, tua.

4. Degree of membership : derajat keanggotaan yang memberikan bobot pada suatu input yang telah diberikan, misalnya suhu adalah dengan derajat keanggotaan 0.5 untuk suhu dingin dan hangat . Batasan dari degree of membership adalah 0-1.

5. Scope/domain : batas dari kumpulan input tertentu. Misal suhu dingin adalah dari 0 – 40o F, normal dari 30-70o F dan panas dari 60-110oF.

6. Input membership function : fungsi input dalam keanggotaannya dan bentuk fungsi keanggotaannya, contoh :

clip_image002

7. Output membership fungsi : fungsi output yang mempresentasikan hasil dari masukan dalam keanggotaannya dan bentuk fungsi keanggotaannya, contohnya :

clip_image004

8. Antecedent : pernyataan dari rule evaluation sebagai keadaan masukan , misalnya if suhu is panas dan kelembaban is kering .

9. Consequent : pernyataan dari rule evaluation sebagai keadaan akibat atau hasil, seperti then lama penyiraman panjang.

10. Rule strength : nilai degree of membership fuzzy output sebagai penyelesaian rule evaluation, contohnya : if temperatur is hot and soil is dry then water duration is long memberi nilai 0.25

11. Strength value : nilai yang diambil sebagai hasil nilai evaluation rule dimana misalnya strength value terkecil diambil sebagai rule strength.

12. Singleton defuzzification : perubahan dari suatu besaran fuzzy ke besaran numerik dari suatu singleton, contohnya COG (Center of Gravity) atau centroid method

Selengkapnya...

Selasa, 06 Oktober 2009

FILOSOFI FUZZY LOGIC

dikutip dari tulisan aswan hamonangan

Pada suatu hari ada seekor kancil sedang meminum air di pinggir sebuah muara sungai. Tiba-tiba seekor buaya datang menyergap dan siap menyantap sang kancil. Namun sang kancil yang terkenal cerdik, mengatakan kepada sang buaya yang kira-kira terjemahannya adalah. Hai raja buaya yang pintar, aku rela menjadi santapanmu asal kamu bisa menjawab pertanyaanku. Sang buaya setuju dan si kancilpun mengajukan pertanyaannya. "Semua kancil dihutan ini adalah pembohong, apakah saya berkata jujur ?" ujar sang kancil kepada sang buaya. Mendengar pertanyaan ini sang buaya berfikir keras, kalau si kancil ini jujur artinya penyataan pertama menjadi salah, karena ada satu kancil yang jujur. Kalau begitu si kancil ini tentu berbohong, tetapi kalau kancil berbohong artinya pernyataan pertama adalah bohong dan semua kancil dihutan ini jujur termasuk sang kancil. Akhirnya sang kancil melenggang meninggalkan sang buaya yang bingung sendiri.

Logika biner 0 atau 1 dasarnya berfikirnya adalah dari filsuf Aristoteles yang mengajarkan hukum berfikir bahwa sesuatunya mesti tergolong benar atau salah.  Logika biner hanya mengenal on atau off, hidup atau mati, gelap atau terang, benar atau salah. Tidak ada yang samar-samar, tidak ada abu-abu yang ada hanya hitam atau putih. Jika tidak 1 maka 0, jika tidak gelap berarti terang dan ini adalah sesuatu yang logis. Dan ini juga yang menjadi dasar perkembangan teknologi digital saat ini. Jika menggunakan logika biner, pertanyaan sang kancil di atas tentu tidak ada ujungnya.

Logika fuzzy pertama kali diformulasikan dalam sebuah seminar oleh Lotfi A Zadeh dari University of Califonia, Berkeley tahun 1965. Metode ini diformulasikan dalam rangka mencari nilai tengah antara bilangan Aristoteles 0 dan 1. Hal itu seiring dengan usaha untuk membuat komputer yang bekerja seperti cara manusia berfikir. Sebab komputer pada dasarnya adalah sebuah mesin hitung yang tidak berfikir. Sebelumnya Plato sudah mencetuskan ide adanya daerah ketiga diantara benar dan salah. Ini yang menjadi dasar logika fuzzy yang memformulasikan bilangan antara 0 dan 1 atau lebih tepat antara 0.0 dan 1.0.

Sebagai contoh bagaimana logika fuzzy diformulasikan, misalnya pernyataan tentang tinggi badan seseorang. Misalnya ditentukan batasan-batasan mutlak, bahwa jika tinggi badan dibawah 150 cm maka sebut pendek (mutlak) dan jika di atas 170 cm dikategorikan tinggi (mutlak). Tentu mesti ada satu cara untuk menyatakan agak pendek, sedang dan agak tinggi dan lainnya diantara tinggi dan pendek. Secara matematis penyataan ini dapat diformulasikan dengan

clip_image002[5]

Kalau dibuatkan tabel, akan didapat tingkat ketinggian badan teman-teman seperti tabel berikut :

clip_image002

Tuti dengan tinggi 145 cm tergolong pendek mutlak (0), Karjo memiliki tinggi 175 cm tergolong tinggi mutlak (1). Tinggi Budi 168 cm, maka Budi tergolong agak tinggi dengan tingkat ketinggian 0.9 dan Eko dengan tinggi 156 cm memiliki tingkat ketinggian 0.3. Beginilah nilai tengah antara 0.0 dan 1.0 diformulasikan dan ini adalah cara manusia berfikir. Angka-angka ini yang dikenal oleh sebuah mesin (komputer) untuk "berfikir". Pada awal logika fuzzy di cetuskan sebagai metode, komputer belum se-kompleks dan secanggih yang dikenal saat ini. Sehingga pada saat itu belum banyak aplikasi dari logika fuzzy ada di dalam kehidupan sehari-hari. Namun sekarang ini sudah banyak terdapat peralatan disekitar kita yang mengadopsi sistem fuzzy logic. Diantaranya yang kita kenal adalah mesin cuci. Mesin cuci otomatis satu tabung yang muktahir saat ini sering mencantumkan kata fuzzy logic sebagai bagian dari promosinya.

Cara kerjanya gampang, tinggal memasukkan baju kotor kedalam tabungnnya, tekan satu atau beberapa tombol dan mesin ini akan melakukan sisanya untuk anda. Mengisi air dengan jumlah yang cukup, mengisi deterjen dan mencuci dengan waktu yang sesuai. Mesin ini bekerja meniru cara ibu rumahtangga mencuci dengan mesin cuci konvensional. Ibu rumahtangga akan mengisi air dan deterjen yang secukupnya sesuai dengan banyaknya baju yang hendak dicuci agar lebih hemat, lalu memutar timer yang sesuai dengan tingkat kekotoran pakaian. Jika pakaian lebih kotor maka timer dibuat lebih lama. Di sinilah contohnya metode logika fuzzy dipakai, dengan menjawab pernyataan jika dan maka (IF THEN). Jika pakaian yang dicuci tidak terlalu kotor maka mencuci mestinya harus lebih cepat. Dengan menimbang tingkat kekotoran kain yang direalisasikan dengan mengukur tingkat kekeruhan air cucian dengan sensor cahaya, mesin dapat memutuskan berapa lama harus mencuci pakaian supaya lebih hemat dan efisien.

Saat ini teknologi digital sudah semakin kompleks, mikrokontroler dan mikroprosesor sudah mampu mengerjakan perintah-perintah yang kompleks. Selain mesin cuci ada sederetan peralatan yang menerapkan fuzzy logic, mulai dari ABS pada sistem pengereman mobil, patern recognition untuk mengenal tulisan tangan pada banyak palm top, image processing, aplikasi robotik dan sebagainya. Traffic light yang modern bisa juga dibuat dengan metode fuzzy logic sehingga dapat bekerja sepintar pak polisi lantas. Jika beban kendaraan di satu ruas persimpangan lebih padat, maka lampu hijaunya akan menyala lebih lama. Dengan metode logika fuzzy, sistem pengaturan dapat direalisasikan lebih mudah, lebih manusiawi dan user friendly.

Mestinya sang buaya pada cerita di atas dapat menjawab pertanyaan sang kancil dengan fuz fuzzy logic bahwa sang kancil itu setengah jujur atau sepertiga jujur. Dunia memang selalu ada pasangannya, ada besar ada kecil, ada tinggi ada pendek, ada kaya ada miskin, ada yang baik ada yang jahat. Dan kita adalah manusia kompleks yang ada diantaranya, bukan ?

-end-

Selengkapnya...

Senin, 05 Oktober 2009

SIMULASI SISTEM KONTROL PID UNTUK MOTOR DC DENGAN SIMULINK MATLAB

by: Henry Toruan


Pemodelan sistem

Motor DC diilustrasikan seperti Gambar 1 dimana input motor berupa tegangan suplai (ν) dan output adalah posisi rotasi (θ).

clip_image002

Gambar 1. Ilustrasi motor DC

Pada kasus kontrol ini yang digunakan adalah motor DC dengan parameter-parameter fisik motor sebagai berikut :

Moment inertia motor (J) =0.01 kg m2/s2

Damping ratio sistem mekanis (b) =0.1 Nms

Konstanta electromotive force (k=kt=ke)=0.01 Nm/A

Resistansi motor (R) = 1Ω

Induktansi motor (L) = 0.5 H

Torsi motor berhubungan dengan arus armature dengan faktor konstanta armature kt dan emf balik e berhubungan dengan kecepatan rotasi ω dengan factor konstanta motor ke.

clip_image002[4]

Berdasarkan Gambar 1 diatas, dengan mengkombinasikan hukum Newton dan Kirchhoff dimana kt=ke= k maka dapat ditulis persamaan :

clip_image006

Hubungan antara kecepatan rotasi dan posisi rotasi adalah : clip_image008

Operasi transformasi Laplace pada persamaan diatas akan menghasilkan :

clip_image010

Selanutnya didapatkan fungsi alih yang merupakan perbandingan antara kecepatan rotasi terhadap tegangan input.

clip_image012

Model matematika motor DC pada simulink dapat dilihat pada Gambar 2.

clip_image014

Gambar 2. Model matematika motor DC pada simulink


PENGANALISAAN SISTEM

Penganalisaan terhadap gangguan dapat dilakukan dengan memodelkan sistem motor DC, kontroler dan membuat simulasi tegangan referensi dan gangguan pada simulink matlab. Pada sistem ini gangguan diset terjadi pada detik ke-5 dengan besar gangguan konstan 2 V hingga seterusnya. Model dari sistem keseluruhan dapat dilihat pada Gambar 3. Model sistem motor DC dapat dilihat pada Gambar 4. Rancangan model kontroler PID yang digunakan dapat dilihat pada Gambar 5. Tampilan osiloskop dari sinyal referensi, gangguan dan respon keluaran sistem kontrol dapat dilihat pada Gambar 6.

clip_image016

Gambar 3. Model simulasi sistem dengan simulink matlab

clip_image018

Gambar 4. Model sistem motor DC

clip_image020

Gambar 5. Rancangan model kontroler PID

clip_image022

Gambar 6. Tampilan sinyal referensi, gangguan dan respon keluaran sistem kontrol

Dari respon keluaran sistem dapat dilihat bahwa saat terjadi gangguan pada detik ke-5 sebesar 2 Volt, sistem sedikit terganggu tetapi pada saat yang singkat sistem kembali pada keadaan semula seperti yang diinginkan yaitu saat referensi 10 Volt.

KESIMPULAN

Berdasarkan hasil analisis dapat diambil kesimpulan sebagai berikut :

  1. Penggunaan simulink pada matlab akan memudahkan untuk menganalisa sistem kontrol yang kompleks dan tampilan scope menjadikannya lebih menarik.
  2. Dari hasil analisa untuk kasus diatas dapat dilihat bahwa dengan kontrol PID yang digunakan dapat mengembalikan kestabilan sistem ke keadaan awal pada saat ada gangguan yang kontinu.

DAFTAR PUSTAKA

1. Djoko Purwanto, PhD, (2006),”Perancangan Sistem Kontrol dengan Matlab”, Surabaya, ITS

2. Ogata, Katsuhiko, (1997), “Teknik Kontrol Automatik Jilid I dan II” Edisi 2, Jakarta, Erlangga

3. Stanley M.Shinners, (1998),”Matlab and Simulink Based Books. Modern Control System Theory and Design, 2ed, New York John Wiley &Sons,Inc.

4. Thomas Wahyu Dwi Hartanto dan Y.Wahyu Agung P., (2003), “Analisis dan Desain Sistem Kontrol dengan Matlab”, Yogyakarta, ANDI

Selengkapnya...

Minggu, 04 Oktober 2009

Sistem Pengolahan Sinyal Digital

sumber asli : I Made Wiryana

Pada masa sekarang ini, pengolahan sinyal secara digital telah diterapkan begitu luas. Dari peralatan instrumentasi dan kontrol, peralatan musik, peralatan kesehatan dan peralatan lainnya. Istilah pengolahan sinyal digital sebenarnya kurang begitu tepat, yang lebih tepat adalah pengolahan sinyal diskrete. Tetapi karena istilah ini sudah luas digunakan, maka istilah pengolahan sinyal digital tetap digunakan dalam artikel ini. Dalam artikel ini akan dibahas dasar-dasar pengolahan sinyal digital, terutama dari sudut algoritma dan pemrograman di samping juga sedikit pembahasan tentang pertimbangan hardware dari sistem yang disusun.

Sistem Pengolahan Sinyal Digital

Proses pengolahan sinyal digital, diawali dengan proses pencuplikan sinyal masukan yang berupa sinyal kontinyu. Proses ini mengubah representasi sinyal yang tadinya berupa sinyal kontinyu menjadi sinyal diskrete. Proses ini dilakukan oleh suatu unit ADC (Analog to Digital Converter). Unit ADC ini terdiri dari sebuah bagian Sample/Hold dan sebuah bagian quantiser. Unit sample/hold merupakan bagian yang melakukan pencuplikan orde ke-0, yang berarti nilai masukan selama kurun waktu T dianggap memiliki nilai yang sama. Pencuplikan dilakukan setiap satu satuan waktu yang lazim disebut sebagai waktu cuplik (sampling time). Bagian quantiser akan merubah menjadi beberapa level nilai, pembagian level nilai ini bisa secara uniform ataupun secara non-uniform misal pada Gaussian quantiser.

Unjuk kerja dari suatu ADC bergantung pada beberapa parameter, parameter utama yang menjadi pertimbangan adalah sebagai berikut :

  • Kecepatan maksimum dari waktu cuplik.
  • Kecepatan ADC melakukan konversi.
  • Resolusi dari quantiser, misal 8 bit akan mengubah menjadi 256 tingkatan nilai.
  • Metoda kuantisasi akan mempengaruhi terhadap kekebalan noise.

clip_image001

Gambar 1. Proses sampling

Sinyal input asli yang tadinya berupa sinyal kontinyu, x(T) akan dicuplik dan diquantise sehingga berubah menjadi sinyal diskrete x(kT). Dalam representasi yang baru inilah sinyal diolah. Keuntungan dari metoda ini adalah pengolahan menjadi mudah dan dapat memanfaatkan program sebagai pengolahnya. Dalam proses sampling ini diasumsikan kita menggunakan waktu cuplik yang sama dan konstan, yaitu Ts. Parameter cuplik ini menentukan dari frekuensi harmonis tertinggi dari sinyal yang masih dapat ditangkap oleh proses cuplik ini. Frekuensi sampling minimal adalah 2 kali dari frekuensi harmonis dari sinyal.

Untuk mengurangi kesalahan cuplik maka lazimnya digunakan filter anti-aliasing sebelum dilakukan proses pencuplikan. Filter ini digunakan untuk meyakinkan bahwa komponen sinyal yang dicuplik adalah benar-benar yang kurang dari batas tersebut. Sebagai ilustrasi, proses pencuplikan suatu sinyal digambarkan pada gambar berikut ini.

clip_image002

Gambar 2. Pengubahan dari sinyal kontinyu ke sinyal diskret

Setelah sinyal diubah representasinya menjadi deretan data diskrete, selanjutnya data ini dapat diolah oleh prosesor menggunakan suatu algoritma pemrosesan yang diimplementasikan dalam program. Hasil dari pemrosesan akan dilewatkan ke suatu DAC (Digital to Analog Converter) dan LPF (Low Pass Filter) untuk dapat diubah menjadi sinyal kontinyu kembali. Secara garis besar, blok diagram dari suatu pengolahan sinyal digital adalah sebagai berikut :

clip_image003

Gambar 3. Blok Diagram Sistem Pengolahan Sinyal Digital

Proses pengolahan sinyal digital dapat dilakukan oleh prosesor general seperti halnya yang lazim digunakan di personal komputer, misal processor 80386, 68030, ataupun oleh prosesor RISC seperti 80860. Untuk kebutuhan pemrosesan real time, dibutuhkan prosesor yang khusus dirancang untuk tujuan tersebut, misal ADSP2100, DSP56001, TMS320C25, atau untuk kebutuhan proses yang cepat dapat digunakan paralel chip TMS320C40. Chip-chip DSP ini memiliki arsitektur khusus yang lazim dikenal dengan arsitektur Harvard, yang memisahkan antara jalur data dan jalur kode. Arsitektur ini memberikan keuntungan yaitu adanya kemampuan untuk mengolah perhitungan matematis dengan cepat, misal dalam satu siklus dapat melakukan suatu perkalian matrix. Untuk chip-chip DSP, instruksi yang digunakan berbeda pula. Lazimnya mereka memiliki suatu instruksi yang sangat membantu dalam perhitungan matrix, yaitu perkalian dan penjumlahan dilakukan dalam siklus (bandingkan dengan 80386, proses penjumlahan saja dilakukan lebih dari 1 siklus mesin).

Proses pengembagan aplikasi DSP

Apabila proses pengolahan sinyal dilakukan menggunakan komputer biasa, maka pengembangan program tidak berbeda seperti halnya pemrograman biasa lazimnya. Hanya algoritma yang diterapkan dan teknik pengkodean harus mempertimbangkan waktu eksekusi dari program tersebut.

Tata cara pengembangan perangkat lunak menjadi berbeda apabila kita menggunakan sistem chip DSP, misal TMS320C25. Terlebih lagi bila sistem tersebut nantinya akan bekerja sendiri (stand alone). Pengembangan model harus dilakukan dengan menggunakan perangkat bantu pengembang (development tool). Sebagai contoh digambarkan suatu sistem pendisain perangkat lunak DSP buatan SPW- DSP Frameworks, yang secara garis besar digambarkan sebagai berikut :

clip_image004

Gambar 4. Perangkat lunak pengembang aplikasi pengolahan sinyal digital.

Keterangan :

  • Design Database, berisi library disain yang telah tersedia dan lazim digunakan misal, FIR, IIR, Comb Filter dan lain-lain.
  • Signal Calculator, merupakan perangkat lunak simulasi sinyal. Dapat melakukan manipulasi dan pengolahan sinyal sederhana.
  • Sistem Disain Filter, merupakan perangkat lunak, untuk mendisain filter dengan response yang kita ingini, berikut pengujian filter tersebut. Lazimnya menggunakan beberapa algoritma disain seperti Park-McLelland, dan akan dihasilkan koefisien filter yang diingini.
  • TIL, akan menghasilkan Custon HDL dan Netlist , yaitu gambar diagram implementasi algoritma secara perangkat keras, dengan menggunakan chip-chip, misal chip FIR, IIR.
  • HDS, VHDL Generator, akan menghasilkan implementasi algoritma dalam deskripsi VHDL yang lazim digunakan dalam disain chip ASIC.
  • DSP ProCoder - Assembly Code Generator, menghasilkan program dalam bahasa assembly chip DSP tertentu
  • MultiProx, akan menghasilkan program yang diimplementasikan pada paralel DSP chip.
  • CGS, C Code Generator akan menghasilkan program dalam bahasa C.

Pada komputer utama, kita melakukan simulasi, disain filter, dan uji-coba awal. Program bantu tersebut tersedia pada program pengembang (development tool program). Apabila kita telah puas dengan algoritma tersebut, kita dapat mengimplementasikan sesuai dengan sistem yang akan kita gunakan. Program akan menghasilkan kode atau deskripsi yang dibutuhkan oleh jenis implementasi tertentu. Misal akan menghasilkan deskripsi dalam format VHDL, apabila kita ingin mengimplementasikan sistem menggunakan chip ASIC. Atau juga dapat dihasilkan kode dalam bahasa C bila kita menginginkan portabilitas dari implementasi yang dihasilkan.

Untuk lebih jelasnya langkah-langkah pengembangan program untuk sistem DSP dapat digambarkan sebagai berikut :

clip_image005

Gambar 5. Langkah-langkah pengembangan sistem DSP

Dalam tahapan pengembangan ini, digunakan komputer utama sebagai perangkat bantu pengembang, dan sebuah DSP board, sebagai sasaran (target board) dari pengembangan program. DSP Board ini ada yang berhubungan dengan PC melalui ekspansion slot, dan melalui memori share, ada juga yang berhubungan dengan PC menggunakan hubungan serial atau parallel printer card, sehingga benar-benar terpisah dari PC dan proses hubungan dengan PC hanyalah pentransferan kode biner. Langkah-langkah pengembangan program aplikasi adalah sebagai berikut :

Langkah pertama, adalah mensimulasikan algoritma pengolahan sinyal dengan menggunakan perangkat simulasi ataupun program. Sinyal masukan disimulasikan dengan menggunakan data-data sinyal standard. Untuk keperluan ini dapat digunakan program-program khusus simulasi ataupun program bantu matematis seperti halnya MATLAB dengan Sinyal Processing Toolbox, Mathematica dengan DSP extension, DSPWorks, Khoros, dan lain-lain.

Langkah kedua dilakukan dengan menggunakan sistem DSP yang akan kita gunakan akhrinya, misal dengan menggunakan TMS320C25 Card (tipe ini telah digunakan di Laboratorium Teknik Komputer, STMIK Gunadarma). Biasanya pada card DSP telah terdapat unit ADC dan DAC, sehingga dapat dilakukan proses pencuplikan sinyal sesungguhnya. Pertama kali dicoba mengakuisisi sinyal masukan sesungguhnya, ini dilakukan dengan mencuplik sinyal masukan tersebut. Hasil akuisisi tersebut akan berupa deretan data akan digunakan untuk menguji algoritma. Kemudian secara off-line, baik menggunakan program bantu matematis ataupun melalui program yang ditulis untuk keperluan simulasi, sinyal tersebut diolah berdasarkan algortima yang diimplementasikan. Hasil olahan sinyal tersebut disalurkan ke jalur keluaran untuk menguji hasil akhir sesungguhnya dari algoritma tersebut. Proses ini masih dilakukan secara non-real time dan diproses oleh prosesor pada PC. Pengujian terhadap sinyal sesungguhnya dapat diukur dengan menggunakan alat ukur seperti osciloscope, spectrum analyzer dan lain-lain.

Kemudian, program yang ditulis dengan menggunakan instruksi dari chip DSP yang terdapat pada DSP Board tersebut diuji. Proses penulisan program dilakukan di komputer utama (misal PC), dan proses kompilasi juga dilakukan di komputer utama. Pengkompilasian menggunakan cross-compiler atau cross asseembler khusus. Setelah program berbentuk format biner, data akan ditransfer ke dalam memory di DSP board, dan sistem DSP tersebut dieksekusi. Pada tahap ini, komputer utama hanya bekerja untuk mengawasi keadaan memori, dan kerja dari program, tetapi tidak melakukan pengolahan sinyal. Pada tahap ini, masukan sesungguhnya digunakan untuk diolah dapat diberikan sehingga kerja dari algoritma dapat diamati pada keadaan sesungguhnya.

Langkah terakhir adalah dengan menulis kode biner tersebut ke dalam ROM, dan meletakkannya ke DSP board yang nantinya akan bekerja berdiri sendiri tanpa adanya sebuah PC. Misal DSP sistem tersebut digunakan untuk noise eliminator pada line telepon. Untuk membuat sistem yang lebih lengkap, sistem dapat dikombinasikan dengan mikrokontroller atau SBC (Single Board Computer) sebagai perangkat pengatur user interface.

Dengan demikian, secara garis besar langkah-langkah pengembangan perangkat lunak untuk sistem DSP dapat diringkas sebagai berikut :

  • Simulasikan algoritma dengan menggunakan data simulasi.
  • Lakukan simulasi dengan sinyal sesungguhnya, pengolahan secara off-line dan proses masih dilakukan di PC
  • Tulis program menggunakan instruksi DSP.
  • Kompilasi dan transfer ke RAM di DSP board.
  • Eksekusi dan uji dengan sinyal sesungguhnya.
  • Bila program sudah tidak ada kesalahan, tulis kode biner dari program ke ROM.
  • Sistem siap pakai dengan ditambahkan prosesor utama yang menangani sistem pendukung.

Demikianlah pada tulisan awal ini telah dijelaskan secara singkat tentang pengolahan sinyal digital dan tahapan pengembangan sistem pengolahan sinyal digital. Lebih lanjut akan diterangkan tentang algoritma-algoritma yang digunakan untuk pengolahan sinyal digital.

REFERENCE :

Oppenheim, Alan V., Ronald W. Schafer (1989), Discrete Tme Signal Processing, New Jersey: Prentice Hall Inc.

Kuc, Roman (1988), Introduction to Digital Signal Processing, Singapore: Mc Graw-Hill Book Co.

Lynn, Paul A., Wolfgang Fuerst (1989), Introductory Digital Signal Processing with Computer Applications, England: John Willey and Sons Ltd.

Smith, M. R. (1992), To DSP or Not to DSP, will a RISC do it better ?, The Computer Application Journal, Agustus-Septermber, 28, pp. 14-25.

Borax, Craig , David Beck (1992), VFX Digital Signal Processor, use this effects processors to change the pitch of your voice and to create special effects, Electronics, September, pp.37-47.

Chen, Daniel (1992), Parallel DSP for designing adaptive filters, Dr Dobb Journal, Januari 1992, pp.16-22.

Selengkapnya...