GENERAL INPUT DAN OUTPUT
a) Asistensi dilakukan 1x
b) Praktikum dilakukan 1x
a) Memahami cara penggunaan PWM,
ADC, Interrupt, dan Millis pada Development Board yang digunakan
b) Memahami cara menggunakan
komponen input dan output yang mengimplementasikan PWM, ADC, Interrupt, dan
Millis pada Development Board yang digunakan
1.4.1 PWM
PWM (Pulse Width Modulation) adalah salah satu teknik modulasi dengan mengubah lebar pulsa (duty cylce) dengan nilai amplitudo dan frekuensi yang tetap. Satu siklus pulsa merupakan kondisi high kemudian berada di zona transisi ke kondisi low. Lebar pulsa PWM berbanding lurus dengan amplitudo sinyal asli yang belum termodulasi. Duty Cycle adalah perbandingan antara waktu ON (lebar pulsa High) dengan perioda. Duty Cycle biasanya dinyatakan dalam bentuk persen (%).
Gambar 1. Duty Cycle
Duty
Cycle : tON / ttotal
Ton : Waktu ON atau Waktu dimana
tegangan keluaran berada pada posisi tinggi (high atau 1)
Toff :
Waktu OFF atau Waktu dimana tegangan keluaran berada pada posisi rendah (low
atau 0)
Ttotal :
Waktu satu siklus atau penjumlahan antara Ton dengan Toff atau disebut juga
dengan “periode satu gelombang”
PWM pada STM32 dihasilkan
menggunakan timer internal yang berfungsi sebagai penghitung waktu dengan
berbagai mode operasi. Mikrokontroler ini memiliki empat timer 16-bit
(TIM1–TIM4), yang dapat dikonfigurasi untuk menghasilkan sinyal dengan
frekuensi dan duty cycle tertentu. Timer bekerja dengan menghitung hingga nilai
tertentu berdasarkan frekuensi clock, lalu mengubah status register untuk menghasilkan
gelombang persegi.
STM32 memiliki 15 pin
yang mendukung PWM, beberapa di antaranya berasal dari timer tingkat lanjut
seperti TIM1, yang memiliki fitur tambahan seperti complementary output. Selain
menghasilkan sinyal PWM, timer juga bisa digunakan untuk mengukur sinyal
eksternal (input capture), menghasilkan sinyal berbasis waktu (output compare),
dan membuat satu pulsa berdasarkan trigger (one pulse mode). PWM sering digunakan
untuk mengontrol kecepatan motor, mengatur kecerahan LED, dan berbagai aplikasi
berbasis waktu lainnya. Pada Raspberry Pi Pico, terdapat blok PWM yang terdiri
dari 8 unit (slice), dan masing-masing slice dapat mengendalikan dua sinyal PWM
atau mengukur frekuensi serta duty cycle dari sinyal input. Dengan total 16 output
PWM yang dapat dikontrol, semua 30 pin GPIO bisa digunakan untuk PWM. Setiap
slice memiliki fitur utama seperti penghitung 16-bit, pembagi clock presisi,
dua output independen dengan duty cycle 0–100%, serta mode pengukuran frekuensi
dan duty cycle. PWM pada Raspberry Pi Pico juga mendukung pengaturan fase
secara presisi serta dapat diaktifkan atau dinonaktifkan secara bersamaan
melalui satu register kontrol global, sehingga memungkinkan sinkronisasi
beberapa output untuk aplikasi yang lebih kompleks.
1.4.2 ADC
ADC atau Analog to
Digital Converter merupakan salah satu perangkat elektronika yang digunakan
sebagai penghubung dalam pemrosesan sinyal analog oleh sistem digital. Fungsi
utama dari fitur ini adalah mengubah sinyal masukan yang masih dalam bentuk
sinyal analog menjadi sinyal digital dengan bentuk kode-kode digital.
1.4.3 INTERRUPT
Interrupt adalah
mekanisme yang memungkinkan suatu instruksi atau perangkat I/O untuk
menghentikan sementara eksekusi normal prosesor agar dapat diproses lebih dulu
seperti memiliki prioritas tertinggi. Misalnya, saat prosesor menjalankan tugas
utama, ia juga dapat terus memantau apakah ada kejadian atau sinyal dari sensor
yang memicu interrupt. Ketika terjadi interrupt eksternal, prosesor akan
menghentikan sementara tugas utamanya untuk menangani interrupt terlebih
dahulu, kemudian melanjutkan eksekusi normal setelah selesai menangani
interrupt tersebut. Fungsi yang menangani interrupt disebut Interrupt Service
Routine (ISR), yang dieksekusi secara otomatis setiap kali interrupt terjadi. Pada
STM32F103C8, semua pin GPIO dapat digunakan sebagai pin interrupt, berbeda
dengan Arduino Uno yang hanya memiliki pin tertentu (misalnya pin 2 dan 3).
Untuk mengaktifkan interrupt di STM32 menggunakan Arduino IDE, digunakan fungsi
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode). Parameter pin menentukan
pin mana yang digunakan untuk interrupt, ISR adalah fungsi yang dijalankan saat
interrupt terjadi, dan mode menentukan jenis perubahan sinyal yang memicu
interrupt. Mode yang tersedia adalah RISING (dari LOW ke HIGH), FALLING (dari
HIGH ke LOW), dan CHANGE (baik dari LOW ke HIGH maupun HIGH ke LOW). Saat
menggunakan lebih dari satu interrupt secara bersamaan, terkadang perlu
memperhatikan batasan tertentu dalam pemrograman.
Pada RP2040, setiap inti
prosesor dilengkapi dengan ARM Nested Vectored Interrupt Controller (NVIC) yang
memiliki 32 jalur interrupt. Namun, hanya 26 jalur pertama yang digunakan,
sedangkan jalur IRQ 26 hingga 31 tidak aktif. Setiap NVIC menerima interrupt
yang sama, kecuali untuk GPIO, di mana setiap bank GPIO memiliki satu interrupt
per inti. Ini berarti, misalnya, core 0 dapat menerima interrupt dari GPIO 0 di
bank 0, sementara core 1 menerima interrupt dari GPIO 1 di bank yang sama
secara independen. Jika diperlukan, inti prosesor masih bisa dipaksa masuk ke interrupt
handler dengan menulis bit 26 hingga 31 pada register NVIC ISPR.
1.4.4 MILLIS
Fungsi millis() pada
mikrokontroler, seperti pada platform Arduino dan STM32 (dengan HAL), digunakan
untuk menghitung waktu dalam milidetik sejak perangkat mulai berjalan. Berbeda
dengan delay(), yang menghentikan eksekusi program selama waktu tertentu,
millis() memungkinkan sistem untuk menjalankan beberapa tugas secara bersamaan tanpa
menghentikan proses lainnya. Hal ini berguna dalam aplikasi yang memerlukan
multitasking berbasis waktu, seperti pengendalian sensor, komunikasi serial,
atau implementasi sistem real-time. Dalam STM32 dengan HAL, millis() dapat
diimplementasikan menggunakan HAL_GetTick(), yang mengandalkan interrupt timer
internal untuk mencatat waktu yang terus berjalan sejak mikrokontroler
diaktifkan.
Sementara itu, pada
platform seperti Raspberry Pi Pico yang sering diprogram menggunakan MicroPython,
fungsi utime.ticks_ms() menyediakan fungsionalitas yang sepadan. Fungsi ini
mengembalikan nilai penghitung milidetik yang bersifat monotonik (terus
bertambah) sejak sistem dimulai atau modul utime dimuat. Sama seperti millis()
dan HAL_GetTick(), nilai ticks_ms() juga akan mengalami wrap-around (kembali ke
nol) setelah mencapai batasnya, sehingga penggunaan fungsi utime.ticks_diff()
menjadi penting untuk perhitungan selisih waktu yang akurat dan aman terhadap
overflow. Dengan demikian, utime.ticks_ms() memungkinkan implementasi pola
penjadwalan dan delay non-blocking yang serupa untuk menciptakan aplikasi yang
responsif di lingkungan MicroPython.
1.4.5 Raspberry Pi Pico
Raspberry Pi Pico adalah
papan rangkaian elektronik yang di dalamnya terdapat komponen utama chip
mikrokontroler RP2040, yang dirancang dan diproduksi oleh Raspberry Pi
Foundatio. Tidak seperti komputer mini raspberry Pi lainnya yang menjalankan
sistem operasi seperti Linux, Pico dirancang untuk tugas-tugas yang lebih
sederhana dan langsung (embedded system), seperti membaca sensor, mengontrol
perangkat, atau melakukan pengolahan data pada tingkat hardware.
Adapun spesifikasi dari Raspberry Pi Pico adalah sebagai berikut:
Gambar
1. Arduino Uno
| |
Microcontroller |
RP2040 |
Operating Voltage |
3.3
V |
Input
Voltage (recommended) |
5 V
via USB |
Input Voltage (limit) |
1.8–5.5
V |
Digital
I/O Pins |
26
GPIO pins |
PWM Digital I/O Pins |
16 |
Analog
Input Pins |
3 |
DC Current per I/O Pin |
16
mA |
DC
Current for 3.3V Pin |
300mA |
Flash Memory |
2
MB on-board QSPI Flash |
SRAM |
264
KB |
Clock Speed |
Hingga 133 MHz |
1.4.6 STM32F103C8
STM32F103C8 adalah mikrokontroler berbasis ARM Cortex-M3 yang dikembangkan oleh STMicroelectronics. Mikrokontroler ini sering digunakan dalam pengembangan sistem tertanam karena kinerjanya yang baik, konsumsi daya yang rendah, dan kompatibilitas dengan berbagai protokol komunikasi. Pada praktikum ini, kita menggunakan STM32F103C8 yang dapat diprogram menggunakan berbagai metode, termasuk komunikasi serial (USART), SWD (Serial Wire Debug), atau JTAG untuk berhubungan dengan komputer maupun perangkat lain. Adapun spesifikasi dari STM32F4 yang digunakan dalam praktikum ini adalah sebagai berikut:
Gambar
3. STM32F103C8
|
|
Microcontroller |
ARM
Cortex-M3 |
Operating Voltage |
3.3
V |
Input
Voltage (recommended) |
5 V |
Input Voltage (limit) |
2
– 3.6 V |
Digital
I/O Pins |
37 |
PWM Digital I/O Pins |
15 |
Analog
Input Pins |
10
(dengan resolusi 12-bit ADC) |
DC Current per I/O Pin |
25
mA |
DC
Current for 3.3V Pin |
150
mA |
Flash Memory |
64
KB |
SRAM |
20
KB |
EEPROM |
Emulasi
dalam Flash |
Clock
Speed |
72 MHz |
A. BAGIAN-BAGIAN
PENDUKUNG
1. Raspberry Pi Pico
1. RAM (Random Access
Memory)
Raspberry Pi Pico
dilengkapi dengan 264KB SRAM on-chip. Kapasitas RAM yang lebih besar ini
memungkinkan Pico menjalankan aplikasi yang lebih kompleks dan menyimpan data
lebih banyak.
2. Memori Flash Eksternal
Raspberry Pi Pico tidak
memiliki ROM tradisional. Sebagai gantinya, ia menggunakan memori flash
eksternal. Kapasitas memori flash ini dapat bervariasi, umumnya antara 2MB
hingga 16MB, tergantung pada konfigurasi. Memori flash ini digunakan untuk menyimpan
firmware dan program pengguna. Penggunaan memori flash eksternal pada Pico
memberikan fleksibilitas lebih besar dalam hal kapasitas penyimpanan program.
3. Crystal Oscillator
Raspberry Pi Pico
menggunakan crystal oscillator untuk menghasilkan sinyal clock yang stabil.
Sinyal clock ini penting untuk mengatur kecepatan operasi mikrokontroler dan
komponen lainnya.
4. Regulator Tegangan
Untuk memastikan pasokan
tegangan yang stabil ke mikrokontroler.
5. Pin GPIO (General
Purpose Input/Output):
Untuk menghubungkan Pico
ke berbagai perangkat eksternal seperti sensor, motor, dan LED.
2. STM32
1. RAM (Random Access Memory)
STM32F103C8 dilengkapi
dengan 20KB SRAM on-chip. Kapasitas RAM ini memungkinkan mikrokontroler
menjalankan berbagai aplikasi serta menyimpan data sementara selama eksekusi
program.
2. Memori Flash Internal
STM32F103C8 memiliki
memori flash internal sebesar 64KB atau 128KB, yang digunakan untuk menyimpan
firmware dan program pengguna. Memori ini memungkinkan penyimpanan kode program
secara permanen tanpa memerlukan media penyimpanan eksternal.
3. Crystal Oscillator
STM32F103C8 menggunakan
crystal oscillator eksternal (biasanya 8MHz) yang bekerja dengan PLL untuk
meningkatkan frekuensi clock hingga 72MHz. Sinyal clock yang stabil ini penting
untuk mengatur kecepatan operasi mikrokontroler dan komponen lainnya.
4. Regulator Tegangan
STM32F103C8 memiliki
sistem pengaturan tegangan internal yang memastikan pasokan daya stabil ke
mikrokontroler. Tegangan operasi yang didukung berkisar antara 2.0V hingga
3.6V.
5. Pin GPIO (General
Purpose Input/Output)
STM32F103C8 memiliki
hingga 37 pin GPIO yang dapat digunakan untuk menghubungkan berbagai perangkat
eksternal seperti sensor, motor, LED, serta komunikasi dengan antarmuka seperti
UART, SPI, dan I²C.
Tidak ada komentar:
Posting Komentar