Tugas Sederhana I/O dengan uP 8086




Aplikasi Touch Sensor sebagai Input Kendali Motor Stepper berbasis uP 8086

1. Tujuan [back]

  1. Mengetahui proses input-output dengan mikroprosesor 8086
  2. Dapat membuat rangkaian input-output dengan mikroprosesor 8086

2. Komponen [back]

1. Logic State

Logic state

    Adalah sebuah penanda, digunakan untuk menset input digital dari sebuah rangkaian maupun sistem digital. Pada percobaan ini, logic state digunakan sebagai input berupa bilangan biner.

2. 74HC373

    74HC373 adalah octal D-type transparent latch dengan output tri-state yang banyak digunakan dalam sistem mikroprosesor sebagai register sementara untuk menyimpan data. IC ini memiliki delapan input data (D0–D7), delapan output (Q0–Q7), pin LE (Latch Enable) untuk mengatur apakah data pada input langsung diteruskan ke output (mode transparan) atau ditahan (mode latch), serta pin OE (Output Enable) untuk mengaktifkan atau menonaktifkan output secara tri-state (high impedance). Dengan kemampuannya ini, 74HC373 berfungsi penting sebagai buffer, register latch, atau pemisah data dan alamat dalam aplikasi interfacing, sehingga memungkinkan pengendalian aliran data yang lebih teratur antara mikroprosesor dan perangkat eksternal.

3. 8086


    Mikroprosesor Intel 8086 adalah prosesor 16-bit pertama dari keluarga x86 yang diperkenalkan pada tahun 1978, dan menjadi dasar arsitektur komputer modern. Prosesor ini memiliki alamat 20-bit sehingga mampu mengakses memori hingga 1 MB, dengan lebar data internal 16-bit dan jalur data eksternal 16-bit (pada varian 8088 hanya 8-bit). Arsitektur 8086 terdiri dari Bus Interface Unit (BIU) yang menangani pengambilan instruksi dan akses memori, serta Execution Unit (EU) yang mengeksekusi instruksi. Mikroprosesor ini memiliki set instruksi yang lengkap, mendukung operasi aritmatika, logika, kontrol, serta pengolahan string, sehingga banyak digunakan dalam sistem embedded, komputer pribadi generasi awal, dan aplikasi pengendalian. Keunggulan utama 8086 adalah konsep segmented memory yang membagi memori ke dalam segmen (code, data, stack, extra), sehingga memungkinkan pengorganisasian program lebih fleksibel.

4. 8255A

   8255A adalah Programmable Peripheral Interface (PPI) yang umum digunakan untuk menghubungkan mikroprosesor dengan perangkat input/output secara paralel. IC ini memiliki 24 jalur I/O yang terbagi dalam tiga port (Port A, Port B, dan Port C), di mana masing-masing port dapat diprogram sebagai input maupun output sesuai kebutuhan aplikasi. Mode operasi 8255A dibagi menjadi tiga, yaitu Mode 0 (simple I/O), Mode 1 (strobed I/O), dan Mode 2 (bidirectional bus), yang memberikan fleksibilitas dalam mengatur komunikasi data. Selain itu, Port C dapat digunakan secara penuh sebagai I/O atau dibagi menjadi kontrol untuk sinkronisasi. Dengan kemampuannya, 8255A banyak diaplikasikan pada sistem berbasis mikroprosesor seperti 8086 untuk mengendalikan perangkat eksternal, misalnya motor stepper, display, sensor, maupun keypad.

5. ULN2003A

   ULN2003A adalah IC driver transistor Darlington array yang berisi tujuh kanal transistor NPN Darlington dalam satu kemasan, dirancang untuk mengendalikan beban arus tinggi dari sinyal logika berarus rendah. Setiap kanal mampu menangani arus hingga sekitar 500 mA dengan tegangan kolektor maksimum 50 V, sehingga cocok untuk menggerakkan perangkat seperti relay, motor stepper, solenoid, dan lampu. IC ini dilengkapi internal clamp diode untuk melindungi rangkaian dari tegangan balik (back EMF) yang dihasilkan oleh beban induktif, sehingga meningkatkan keandalan sistem. Dengan input yang kompatibel dengan level logika TTL/CMOS, ULN2003A sering digunakan sebagai penguat daya dalam sistem mikroprosesor maupun mikrokontroler, karena mampu menjembatani keluaran logika berdaya rendah dengan beban berdaya lebih tinggi.

6. Motor Stepper

    Motor stepper adalah motor listrik yang bergerak secara bertahap (step) sesuai dengan pulsa sinyal yang diberikan pada kumparannya, sehingga sudut putaran poros dapat dikendalikan secara presisi tanpa memerlukan sensor umpan balik. Motor ini bekerja berdasarkan prinsip elektromagnetik, di mana pulsa arus yang dikirim ke lilitan stator menghasilkan medan magnet yang menarik rotor bergerigi untuk berputar dalam langkah tertentu. Setiap pulsa input menghasilkan satu langkah putaran dengan sudut tertentu (misalnya 1,8° atau 7,5° per step), sehingga posisi dan kecepatan dapat diatur dengan mudah melalui frekuensi serta urutan pulsa. Motor stepper banyak digunakan pada printer, CNC, robotika, dan peralatan otomasi karena mampu memberikan kontrol posisi yang akurat, respons cepat, serta struktur pengendalian yang relatif sederhana.

7. Touch Sensor

    Touch sensor kapasitif adalah jenis sensor sentuh yang bekerja berdasarkan perubahan kapasitansi akibat adanya sentuhan atau pendekatan jari manusia. Prinsip dasarnya, ketika jari menyentuh atau mendekati permukaan elektroda sensor, terjadi perubahan medan listrik karena tubuh manusia bersifat konduktor, sehingga kapasitansi total meningkat. Perubahan kapasitansi ini kemudian dideteksi dan diolah oleh rangkaian pengendali sensor menjadi sinyal logika digital (HIGH/LOW) atau analog. Sensor kapasitif lebih unggul dibanding sensor mekanik karena tidak memerlukan tekanan fisik, lebih tahan lama, responsif, serta dapat bekerja melalui lapisan tipis seperti kaca atau plastik. Teknologi ini banyak diaplikasikan pada layar sentuh, tombol elektronik, peralatan rumah tangga, hingga sistem keamanan.

3. Dasar Teori [back]

  Rangkaian ini menggabungkan mikroprosesor 8086 dengan beberapa IC pendukung untuk mengendalikan motor stepper menggunakan input dari sensor sentuh kapasitif. Mikroprosesor 8086 bertugas mengeksekusi program kontrol, 74HC373 digunakan sebagai latch untuk mengunci data alamat, sedangkan IC 8255A berfungsi sebagai antarmuka I/O yang menyediakan jalur komunikasi antara prosesor dengan perangkat eksternal. Sinyal keluaran dari 8255A diteruskan ke ULN2003A, sebuah driver transistor Darlington array yang mampu memberikan arus cukup besar untuk menggerakkan motor stepper. Sensor sentuh kapasitif menghasilkan sinyal logika digital saat disentuh, yang selanjutnya menjadi input kendali bagi mikroprosesor untuk mengaktifkan atau menghentikan motor stepper. Dengan konfigurasi ini, sistem memperlihatkan contoh penerapan interfacing mikroprosesor dengan perangkat input-output eksternal dalam bentuk kontrol motor berbasis sentuhan.

4. Gambar Rangkaian  [back]

5. Prinsip Kerja [back]

  • Sensor sentuh kapasitif mendeteksi sentuhan jari, menghasilkan sinyal logika HIGH atau LOW pada outputnya.
  • Sinyal ini masuk ke salah satu port input 8255A (misalnya Port B) yang dikonfigurasi sebagai input.
  • Program pada mikroprosesor 8086 secara terus-menerus membaca kondisi port input. Jika sensor disentuh, prosesor akan mengeksekusi instruksi untuk menghentikan motor stepper (output ke Port A diset nol). Jika tidak disentuh, prosesor akan mengirimkan pola pulsa berurutan ke Port A.
  • Data keluaran dari Port A diteruskan ke ULN2003A yang berfungsi sebagai driver penguat arus. Driver ini kemudian mengaktifkan lilitan motor stepper sesuai urutan logika yang dikirim prosesor.
  • Motor stepper pun berputar sesuai urutan pulsa, tetapi akan berhenti ketika input sensor terdeteksi aktif.
  • Latch 74HC373 digunakan untuk mengunci alamat/data sehingga tidak terjadi konflik pada bus saat prosesor mengakses memori maupun perangkat I/O.

Dengan demikian, rangkaian ini bekerja sebagai sistem kontrol motor stepper berbasis mikroprosesor 8086 dengan input sensor sentuh kapasitif, di mana motor hanya berputar ketika sensor tidak disentuh, dan berhenti saat sensor disentuh.

Kode Program (assembly)

; Stepper motor stop with push button on PB0 (active-LOW)

PORTA    EQU 00H

PORTB    EQU 02H

PORTC    EQU 04H

PORT_CON EQU 06H


CODE SEGMENT

    ORG 100H


    ; Konfigurasi 8255:

    ; 1 000 0010b  -> 10000010b = Port A = output, Port B = input, Port C = output, Mode 0

    MOV DX, PORT_CON

    MOV AL, 10000010B

    OUT DX, AL


START:

    ; sebelum setiap langkah cek PB0

    CALL CHECK_PB0


    MOV DX, PORTA

    ; langkah 1

    MOV AL, 00001001B

    OUT DX, AL

    CALL DELAY_SHORT


    CALL CHECK_PB0


    ; langkah 2

    MOV AL, 00000011B

    OUT DX, AL

    CALL DELAY_SHORT


    CALL CHECK_PB0


    ; langkah 3

    MOV AL, 00000110B

    OUT DX, AL

    CALL DELAY_SHORT


    CALL CHECK_PB0


    ; langkah 4

    MOV AL, 00001100B

    OUT DX, AL

    CALL DELAY_SHORT


    JMP START


; ---------------------------

; Subroutines

; ---------------------------


; Delay pendek sederhana (loop sebanyak 04FFFh -> sesuaikan jika butuh lebih lambat/cepat)

DELAY_SHORT:

    PUSH CX

    MOV CX, 04FFFh

LPS:

    LOOP LPS

    POP CX

    RET


; Cek PB0 (active-low). Jika ditekan -> masuk STOP_LOOP

CHECK_PB0:

    PUSH AX

    PUSH DX


    MOV DX, PORTB

    IN  AL, DX          ; baca port B

    ; tes bit0

    TEST AL, 00000001B

    JNZ  PB0_OK         ; jika bit0 = 1 -> tidak ditekan, lanjut

    ; jika bit0 = 0 -> kemungkinan ditekan, debounce: cek lagi setelah cepat delay

    CALL DEBOUNCE_SHORT

    IN  AL, DX

    TEST AL, 00000001B

    JNZ  PB0_OK         ; jika sekarang 1, dianggap noise -> lanjut


    ; confirmed pressed -> stop motor sampai tombol dilepas

    CALL STOP_LOOP


PB0_OK:

    POP DX

    POP AX

    RET


; very short debounce delay

DEBOUNCE_SHORT:

    PUSH CX

    MOV CX, 0FFFh

DBL:

    LOOP DBL

    POP CX

    RET


; Stop loop: keluarkan 0 ke PORTA (mematikan output) dan tunggu sampai PB0 dilepas

STOP_LOOP:

    ; set PORTA = 0 (matikan motor outputs)

    MOV DX, PORTA

    MOV AL, 00000000B

    OUT DX, AL


WAIT_RELEASE:

    MOV DX, PORTB

    IN  AL, DX

    TEST AL, 00000001B

    JZ  WAIT_RELEASE   ; masih ditekan -> tunggu

    ; debounced release: cek lagi cepat

    CALL DEBOUNCE_SHORT

    IN  AL, DX

    TEST AL, 00000001B

    JZ  WAIT_RELEASE


    RET


CODE ENDS

END

Gambaran Umum Fungsi Program [klik disini]

6. Video [back]


7. Download File [back]





Posting Komentar

Lebih baru Lebih lama