MIKROPROSESSOR
Kelompok 14 :
Puji Syukur dipanjaktkan kepada Tuhan Yang Mahas Esa penulis sampaikan
atas kenikmatan yang tiada tara yang selalu dilimpahkan oleh-Nya. Keberhasilan
penulisan modul Praktikum Mikroprosesor ini pun atas karunia-Nya. Mata kuliah
praktikum mikroprosesor adalah mata kuliah pendamping teori-teori yang telah
diberikan dari dosen kepada mahasiswa. Salah satu praktikum yang ada di Teknik
Elektro Fakutas Teknik Universitas Mataram adalah praktikum Mikroprosesor. Mata
kuliah sistem mikroprosesor pada periode saaat ini memegang peranan sangat
penting dalam kehidupan industri. Penerapan nya dimulai dari alat komunikasi, alat-
alat rumah tangga, alat keamanan, dan lain sebagainya khususnya yang berbasis
teknologi elektronika dan mikrokomputer. Modul Praktikum Mikroprosesor ini
berada dibawah Laboratorium Sistem Kendali disusun diperuntukan bagi
mahasiswan dalam memberi bekal kepada mahasiswa Teknik elektro dalam
menghadapi kemajuan teknologi. Ucapan terima kasih penulis sampaikan kepada
semua pihak yang telah membantu dan membaca, serta mempraktikkan modul ini.
Demikian kata pengantar ini di sampaikan dan semoga bermanfaat bagi kita
semua
Supriono
i
PANDUAN PELAKSANAN PRAKTIKUM
ii
DAFTAR ISI
iii
MODUL A
INTERRUPT
A.1. Teori Pendukung
Interrupt merupakan salah satu fasilitas yang sangat penting pada
Mikroprosessor. Dalam keadaan normal, tidak ada Interrupt, maka program utama
dijalankan. Ketika terjadi Interrupt, maka prosessor akan melompat ke program
Interrupt vector (Interrupt Service Routine). Setelah Interrupt vektor dijalankan
maka prosessor kembali ke program utama untuk melanjutkan perintah yang
ditinggalkan. Contoh Interrupt dalam kehidupan kita, bayangkan kita sedang bekerja
didepan komputer mengerjakantugas kampus. Ketika sedang mengerjakan tugas, HP
kita berdering sehingga kita meninggalkan pengerjaan tugas kampus untuk
menjawab panggilan HP. Setelah pembicaraan di HP selesai maka kita melanjutkan
kembali untuk mengerjakan tugas kampus.
Prosessor Raspberry RP2040, selanjutnya disebut RP2040, memiliki dua
macam Interrupt yaitu Interrupt Internal dan Interrupt external. Interrupt eksternal
adalah perubahan state pada pin RP2040 (GPIO) sementara Interrupt Internal adalah
telah dipenuhi suatu kondisi misalnya timer/counter. Pada kedua Interrupt ini,
Prosessor akan beralih dari program utama ke program Interrupt vektor. Setelah
Interrupt vektor dijalankan maka prosessor kembali ke program utama. Program
pada Interrupt vector dapat berupa program yang kompleks, hal ini yang merupakan
keunggulan RP2040 dibandingkan denganprosessor jenis lainnya.
1
HIGH_LEVEL
2
Selain itu ada juga komponen-komponen yang terdapat pada mikroprosesor
diantaranya:
a. Arithmetic Logic Unit (ALU)
Tugasnya melakukan operasi aritmetika seperti penjumlahan, pengurangan,
perkalian, dan pembagian. Juga melakukan operasi logika seperti AND, OR,
NOT.
b. Control Unit (CU)
Mengendalikan alur eksekusi instruksi, menghasilkan sinyal kendali yang
mengarahkan operasi sistem dan komponen-komponen mikroprosesor, dan
mengelola interupsi.
c. Register
Merupakan tempat penyimpanan sementara untuk data yang digunakan
oleh ALU dan operasi lainnya.
d. Cache Memory
Fungsinya menyimpan data dan instruksi yang sering digunakan dari
memori utama. Juga untuk meningkatkan kecepatan akses dengan menyediakan
penyimpanan yang lebih cepat daripada memori utama.
e. Unit Pewaktu (Clock)
Menyediakan waktu atau clock cycle yang mengatur eksekusi instruksi dan
operasi sistem. Pewaktuan yang tepat memastikan koordinasi yang baik antara
komponen mikroprosesor.
f. Floating Point Unit (FPU)
Tugasnya melakukan operasi floating-point untuk operasi matematika yang
melibatkan pecahan.
g. Unit Kontrol Memori
Mengelola akses ke memori utama dan menangani operasi baca/tulis data
antara mikroprosesor dan memori.
h. Bus System
Fungsinya yaitu menyediakan jalur komunikasi antara berbagai komponen
mikroprosesor.
3
A.2 Tujuan:
1. Melihat kerja eksternal Interrupt pada Prosessor RP2040.
2. Melihat prioritas Interrupt pada Prosessor RP2040
A.3 Peralatan:
1. Unit Controller PED RG-144
2. Computer dengan software Thonny dengan Python3 versi 6 atau lebih besar
3. Kapasitor minimal 100 nF dan Kabel jumper.
A.4 Rangkaian Percobaan 1. Eksternal Interrupt
4
A.5 Prosedur Percobaan 1. Eksternal Interrupt
1. Rangkailah percobaan seperti gambar 2.
2. Tulis program 1 pada IDE Thonny.
3. Jalankan program tersebut.
4. Lihat, apakah LED 1 s/d LED 4 menyala dan padam secara bergantian? Jika
ya lanjut ke prosedur 5.Jika tidak tanyakan kepada asisten.
5. Berikan tegangan high (3V3) pada kaki 5.
6. Catat jumlah Interrupt yang terjadi.
7. Pasang kapasitor 100 nF atau lebih pada kaki 5.
8. Berikan tegangan high (3V3) pada kaki 5. 10.Catat jumlah Interrupt yang
terjadi.
9. Kerjakan tabel 1.
10. Selesai
Flowchart
5
# PROGRAM 1 EKSTERNAL INTERRUPT
#====================================
from machine import Pin
from time import sleep
#import utime
#def eksternal2(pin):
#machine.disable_irq()
#global x
#print("Kaki 5 mendapat pulsa LOW")
#print("jenis Interrupt adalah Falling")#x =
x+1 #print ("Sekarang Interrupt ke-", x)
#machine.enable_irq()
#def eksternal3(pin):
#machine.disable_irq()
#global x
#print("Kaki 5 mendapat pulsa LOW")
#print("jenis Interrupt adalah HIGH LEVEL")
#x = x+1
#print ("Sekarang Interrupt ke-", x)
#machine.enable_irq()
#def eksternal4(pin):
#machine.disable_irq()
#global x
#print("Kaki 5 mendapat pulsa LOW")
#print("jenis Interrupt adalah LOW LEVEL")
#x = x+1
#print ("Sekarang Interrupt ke-", x)
#machine.enable_irq()
6
# mengkonfigurasi Interrupt pada Pin 5
sela.irq(trigger = Pin.IRQ_RISING, handler = eksternal1)
#sela.irq(trigger = Pin.IRQ_FALLING, handler = eksternal2)
#sela.irq(trigger = –Pin.IRQ_HIGH_LEVEL, handler = eksternal3)
#sela.irq(trigger = Pin.IRQ_LOW_LEVEL, handler = eksternal4)
# ============================================
# =========PROGRAM UTAMA======================
while True:
led1.low()
#utime.sleep_ms(200)
sleep(0.2)
# alternative lain untuk penundaan menggunakan for,
#yaitu for i in range(1, 100, 2):
led2.low()
sleep(0.2)
#utime.sleep_ms(200)
led3.low()
sleep(0.2)
#utime.sleep_ms(200)
led4.low()
sleep(0.2)
#utime.sleep_ms(200)
led1.high()
sleep(0.2)
#utime.sleep_ms(200)
led2.high()
sleep(0.2)
#utime.sleep_ms(200)
led3.high()
sleep(0.2)
#utime.sleep_ms(200)
led4.high()
sleep(0.2)
#utime.sleep_ms(200)
7
Tabel 1. Eksternal Interrupt
No Kegiatan Hasil
1. Memberikan tegangan 3V3 pada kaki 5.
jumlah Interrupt yang terjadi.
8
3. Meng-aktifkan baris
sela.irq(trigger =
Pin.IRQ_FALLING, handler =
eksternal)
4. Meng-aktifkan baris
sela.irq(trigger =
Pin.IRQ_HIGH_LEVEL, handler =
eksternal)
5. Meng-aktifkan baris
sela.irq(trigger =
Pin.IRQ_LOW_LEVEL, handler =
eksternal)
9
6. Aktifkan semua konfigurasi Interrupt
dan semua fungsi #def eksternalx
Interrupt jenis apa saja yang menimbulkan
error
referensi
lihat pada hal. 42
micropython-docs.pdf
trigger configures the event which can
generate anInterrupt. Possible values are:
10
A.6 ANALISA DATA
1. Memberikan tegangan 3V3 pada kaki 5. Jumlah interrupt yang terjadi
11
dihubungkan. Hal ini dikarenakan peran sebuah kapasitor yang dapat
memperbaiki sinyal pulsa yang memiliki gelombang noise tersebut sehingga
interrupt tidak akan terjadi beberapa kali lagi.
12
5. Meng-aktifkan baris sela.irq(trigger = Pin.IRQ_LOW_LEVEL, handler =
eksternal)
13
7. Aktifkan semua baris import utime utime.sleep_ms(200) dan non-
aktifkan semua baris from time import sleepsleep(0.2).Berikan eksternal
interrupt pada kaki 5
Maka semua kode utime akan tersimpan pada mikrokontroler dan dapat berjalan
sendiri tanpa perlu lagi menjalankan program pada aplikasi Thonny dan
menghasilkan interrupt jenis Falling. Yang dimana kode utime itu sendiri
digunakan untuk mengatur penundaan atau mengukur waktu dalam
mikrokontroler atau perangkat yang menjalankan MicroPython. sleep, fungsi ini
digunakan untuk menghentikan eksekusi program selama jumlah detik yang
ditentukan sebelum melanjutkan eksekusi.
14
A.7 Rangkaian Percobaan 2. Internal Interrupt
6. Kerjakan tabel 2.
7. Percobaan selesai
15
# PROGRAM 2 PRIORITAS INTERRUPT
#====================================
from machine import Pin
from machine import Timer
from time import sleep
import utime
def eksternal(pin):
#machine.disable_irq() global hitung
#for i in range(1, 100, 1):
print("++++++++++++++++++++++++++++++++++++")
print("Kaki 5 mendapat pulsa high")
print("jenis Interrupt adalah Rising")
print ("Kaki 5 mengalami Interrupt ke : ", hitung) print("+++++++++++++
++++++++++++++++++++++++++++++")
hitung = hitung + 1
utime.sleep_ms(2000)
#machine.enable_irq()
def pewaktu(source):
for i in range(1, 20, 1):
print(" ============================================")
print(" Telah terjadi interupt oleh timer")
print(" berikan Interrupt pada pin 5 ")
print(" Perhatikan apakah Interrupt dan LED bekerja !!!")
print(" Loop pewaktu ke :", i)
utime.sleep_ms(200)
# mengkonfigurasi Interrupt pada Pin 5
sela.irq(trigger = Pin.IRQ_RISING, handler = eksternal)
# coba juga menggunakan Pin.IRQ_FALLING, Pin.IRQ_LOW_LEVEL # and
Pin.IRQ_HIGH_LEVEL,
# ============================================
# =========PROGRAM UTAMA======================
while True:
for i in range(1, 100000, 1):
#led1.low()
print(" Baris ke : 1 pada program utama")
16
#led2.low()
#sleep(0.2)
#utime.sleep_ms(200)
print(" Baris ke : 2 pada program
utama")
#led3.low()
#sleep(0.2)
#utime.sleep_ms(200)
print(" Baris ke : 3 pada program utama")
#led4.low()
#sleep(0.2)
#utime.sleep_ms(200)
print(" Baris ke : 4 pada program utama")
#led1.high()
#sleep(0.2)
#utime.sleep_ms(200)
print(" Baris ke : 5 pada program utama")
#led2.high()
#sleep(0.2)
#utime.sleep_ms(200)
print(" Baris ke : 6 pada program utama")
#led3.high()
#sleep(0.2)
#utime.sleep_ms(200)
print(" Baris ke : 7 pada program utama")
#led4.high()
#sleep(0.2)
#utime.sleep_ms(200)
print(" Baris ke : 8 pada program utama")
# Menonaktifkan timer
waktu.deinit()
17
Tabel 2. Percobaan Prioritas Interrupt
No Kegiatan Hasil
1 Memberikan pulsa high (3V3)
pada kaki 5
Apakah Interrupt eksternal dan
Interrupt Internal bekerja
Catatan
perintah print merupakan
Interrupt serial Tx dan Rx
dari Raspberry ke Komputer
18
callback=pewaktu)
Non-aktifkan baris
waktu =
Timer(period=10000,
mode=Timer.ONE_SHOT,
callback=pewaktu)
Berikan pulsa high (3V3) pada
kaki 5
19
A.9 Analisa Data
1. Memberikan pulsa high (3V3) pada kaki 5
Apakah interrupt eksternal dan interrupt internal bekerja
20
2. Aktifkan baris %for i in range(1, 100, 2): dan non-aktifkan baris
sleep(5000)pada fungsi def pewaktu(): aktifkan semua LED dan tundaan
waktu pada program utama. Berikan pulsa high (3V3) pada kaki 5
21
Berdasarkan gambar diatas dapat dilihat bahwa ketika interrupt eksternal
berjalan maka interrupt internal tidak bisa dijalankan. Dimana interrupt internal
akan menunggu interrupt eksternal selesai menjalankan programnya terlebih
dahulu.
22
PERTANYAAN
1. Pada tabel 1 eksternal Interrupt kegiatan no.1 memberikan tegangan 3V3 pada
kaki 5. Mengapa telah terjadi beberapa kali Interrupt sedangkan kaki 5 hanya
sekali diberikan pulsa high.
2. Pada tabel 1 eksternal Interrupt kegiatan no. 2. Apa fungsi kapasitor pada kaki
5? Bagaimana cara kerja kapasitor tersebut?
3. Pada tabel 1 eksternal Interrupt kegiatan no. 3, 4, 5. Mengapa tidak semua
kegiatan menghasilkan Interrupt sedangkan program Interrupt tersebut berasal
dari MicroPython Documentation?
4. Pada tabel 1 eksternal Interrupt kegiatan no. 7 Mengapa tidak semua Interrupt
bekerja?
5. Pada tabel 1 eksternal Interrupt kegiatan no. 8. Dimana letak perbedaan kerja
utime.sleep_ms(200) dengan sleep(0.2)?
6. Pada Tabel 3. Percobaan Prioritas Interrupt. Manakah lebih tinggi
prioritasnya eksternal Interrupt dengan timer Interrupt. Berikanlah buktinya?.
Jika dibandingkan kedua Interrupt tersebut dengan serial Interrupt. Manakah
yang lebih tinggi?. Berikan buktinya.
7. Apakah semua prosessor yang ada dipasaran memiliki urutan prioritas Interrupt
seperti prosessor Raspberry. Berikanlah bukti dan alasannya.
JAWAB
1. Karena sinyal yang keluar tidak sempurna, terdapat getaran (ripple) pada
sinyal sehingga interupt tertrigger berkali kali.
2. Kapasitor berfungsi sebagai penyaring atau filter dalam sebuah rangkaian agar
dapat menstabilkan sinyal.
3. Karena bahasa mikroPython dipakai untuk board dari pyhton sedangkan saat
praktikum memakai board dari rapsberry. Dan bahasa dari mikrophyton tidak
sesuai saat digunakan pada rapsbery.
4. Karena bahasa mikroPython dipakai untuk board dari pyhton sedangkan saat
praktikum memakai board dari rapsberry. Dan bahasa dari mikrophyton tidak
23
sesuai saat digunakan pada rapsberry.
5. Pada utime.sleep_ms(200) progran dapat langsung tersimpan pada
rapsberry pada mikrokontroller tanpa menggunakan software thonny dan
dapat berjalan secara otomatis. Sedangkan pada sleep(0.2)program tidak
dapat tersimpan tanpa bantuan software Thonny.
6. Kedudukannya sama tetapi yang lebih di prioritaskan adalah program yang
lebih dulu dijalankan dimana saat program yang akan dInterrupt lagi harus
menunggu program pertama selesai terlebih dahulu.
Jika dibandingakan serial Interrupt maka kedudukan serial akan lebih prioritas
dikarenakan adanya perintah print.
7. Tidak semua prosessor yang ada dipasaran memiliki urutan prioritas Interrupt
seperti prosessor Raspberry. Dimana prossesor rapsberry memiliki prioritas
interupt paling tinggi. Buktinya saat running program, tidak ada program yang
terpotong dengan kata lain program harus selesai sebelum muncul interupt
selanjutnya.
24
MODUL B
MULTI CORE
B.1 Teori
Pendukung
Multi Core pada prosessor berari prosessor tersebut memiliki lebih dari satu
core dalam satu chip. Manfaat dari sistem Multi Core adalah data dapat
didistribusikan ke masing masing core sehingga proses dapat berjalan lebih cepat.
Sebagai analoginya, misalnya Iqbal disuruh menyolder sebanyak 50 (lima puluh)
LED maka waktu yang dibutuhkan oleh Iqbal untuk menyelesaikan pekerjaan
tersebut 1 (satu) jam. Pekerjaan tersebut dapat diselesaikan kurang dari 15 (lima
belas) menit jika didistribusikan kepada ke-4 teman Iqbal ( Landi, Made, Rusli dan
Awi).
Contoh kasus Iqbal adalah sistem Multi Core dengan resources yang
memadai. Untuk sistem yang resourcesnya tidak memadai, sistem Multi Core
dapat menimbulkan masalah. Sebagai analoginya jika solder yang ada hanya 3
(tiga) unit maka kemungkinan ada 2 (dua) orang tidak bekerja (idle) bahkan dalam
kondisi terburuk dapat terjadi perkelahian dalam memperebutkan solder. Begitu
juga dengan sistem Multi Core dapat terjadi hang . Agar rebutan resource tidak
terjadi maka perlu dibuatkan rule dalam penggunaan resource.
25
Gambar B.1 Bus Fabric dari Prosessor RP2040.
26
B.2 Tujuan:
1. Melihat kerja sistem Multi Core khususnya pada Prosessor RP2040.
2. Melihat koordinasi/rule sistem berbagi resources pada Prosessor RP2040
B.3 Rangkaian Percobaan 3. Multi Core pada Prosessor RP2040
27
led17 = Pin(17, mode = Pin.OUT, value =
0) led18 = Pin(18, mode = Pin.OUT, value
= 0) led19 = Pin(19, mode = Pin.OUT,
value = 0) lock = _thread.allocate_lock()
# Proses pada core – 2
def Core2():
while True:
#lock.acquire()
led16.low()
#print(" BARIS KE : 1 pada PROSESSOR 2")
led17.low()
sleep(0.2)
#print(" BARIS KE : 2 pada PROSESSOR 2")
led18.low()
sleep(0.2)
#print(" BARIS KE : 3 pada PROSESSOR 2")
led19.low()
sleep(0.2)
#print(" BARIS KE : 4 pada PROSESSOR 2")
led16.high()
sleep(0.2)
#print(" BARIS KE : 5 pada PROSESSOR 2")
led17.high()
sleep(0.2)
#print(" BARIS KE : 6 pada PROSESSOR 2")
led18.high()
sleep(0.2)
#print(" BARIS KE : 7 pada PROSESSOR 2")
led19.high()
sleep(0.2)
#print(" BARIS KE : 8 pada PROSESSOR 2")
#lock.release()
thread.start_new_thread(Core2, ())
# ===========================================
# Proses pada core – 1
while True:
#lock.acquire()
led1.low()
#print(" Baris ke : 1 pada CORE 1")
led2.low()
sleep(0.2)
#print(" Baris ke : 2 pada CORE 1")
led3.low()
sleep(0.2)
#print(" Baris ke : 3 pada CORE 1")
led4.low()
sleep(0.2)
#print(" Baris ke : 4 pada CORE 1")
led1.high()
28
sleep(0.2)
#print(" Baris ke : 5 pada CORE 1")
led2.high()
sleep(0.2)
#print(" Baris ke : 6 pada CORE 1")
led3.high()
sleep(0.2)
#print(" Baris ke : 7 pada CORE
1") #print(" Baris ke : 8 pada
CORE 1") #lock.release()
29
Tabel 3. Percobaan Multi Core
No Kegiatan Hasil
1 Tampa menggunakan Rule
3 Mengunakan rule
- Aktifkan baris
#lock.acquire()
dan
#lock.release()
Amati LED dan teks dilayar
30
4 Tampa menggunakan Rule
- Non-Aktifkan baris
#lock.acquire()
dan
#lock.release()
31
B.5 Analisa Data
1. Menon-aktifkan semua baris print (Tanpa menggunakan Rule)
Berdasarkan percobaan yang dilakukan dengan menonaktifkan seluruh
baris print dan tanpa menggunakan rule. Dapat dianalisa bahwa pada kedua
core yang sedang berjalan tanpa menggunakan rule maka, lampu indikator
yang terdapat pada unit controller akan menyala secara acak. Hal ini dapat
terjadi dikarenakan pada kedua core tidak diberikan perintah prioritas
(rule) yang mengakibatkan pada core 1 lebih banyak bekerja daripada core
2 sedangkan core 2 berusaha akan mengambil alih perkejaan dari core 1
yang menyebabkan lampu indikator menyala secara acak.
32
3. Mengunakan rule
- Aktifkan baris #lock.acquire() dan #lock.release()
33
Pada percobaan ini dapat diketahui pada saat tanpa menggunakan rule
dengan menonatktifkan lock acquire dan menonaktifkan lock release
didapatkan bahwa hasil percobaan ini sama dengan hasil percobaan
kedua.
34
PERTANYAAN
1. Jika dianalogikan contoh kasus Iqbal, Landi, Made, Rusli dan Awi, Solder
dan 50 LED terhadap sistem Prosessor maka :
Core adalah Memory adalah
Data yang diolah adalah
JAWAB
1. Core adalah Manusia (Iqbal, Landi, Made, Rusli,
Awi) Memory adalah Solder
Data yang diolah adalah LED
2. Core ke 1 atau pertama karena harus ada perintah atau rule nya terlebih
dahulu untuk menjalankan program kedua.
3. Karena jika tanpa menggunakan rule maka core 1 dan core 2 akan saling
berebutan dalam menjalankan programnya.
4. Karena untuk menjeda harus menggunakan rule dan seluruh baris sleep
diaktifkan supaya program dapat dikendalikan.
35
5. Bekerja, karena jika menggunakan rule maka salah satu core akan bekerja
dan yang satunya akan menunggu sampai program yang pertama selesai
6. Tidak, karena tidak semua core bisa bekerja secara bersamaan tapi paling
bisa bekerja bersamaan 2 atau 3 core secara bersamaan.
36
DAFTAR PUSTAKA
37