Eksperimen STM32F103 – Blinking LED Singletask Dan Multitask


Setelah berkenalan dengan board Blue Pill STM32F103C8T6, sekarang kita bisa mulai bereksperimen dengan board tersebut. Kita mulai dengan membuat program “Hello World” ala mikrokontroler, yakni Blinking LED.

Pada board STM32F103 terdapat sebuah LED yang terhubung pada pin GPIO PC13. LED ini aktif-rendah, jadi untuk menyalakan LED kita harus memberikan logika LOW pada pin PC13. Caranya bagaimana?

  1. Mengeset Mode Pin GPIO PC13 sebagai output
    PC13 OMODE-PP io-mode!
  2. Mereset (clear) pin PC13
    PC13 ioc!
  3. Untuk mematikan LED, kita harus mengeset pin PC13
    PC13 ios!

Untuk memberikan tundaan waktu (delay), fungsi yang digunakan adalah ms, contohnya adalah sebagai berikut:

   100 ms \ memberikan tundaan 100 milidetik
   500 ms \ memberikan tundaan 500 milidetik

Kita bisa membuat fungsi (mendefinisikan kata baru pada pustaka Forth) dengan cara sebagai berikut:

   : blink PC13 ioc! 300 ms PC13 ios! 300 ms ;

Dengan membuat fungsi tersebut, selanjutnya kita bisa memanggil fungsi blink untuk menghasilkan LED pada PC13 berkedip 1 kali dengan durasi 300 milidetik.

   blink

Mecrisp-Stellaris (Hackaday Edition) telah dilengkapi dengan fungsi-fungsi handy yang siap-pakai. Untuk menyalakan dan memadamkan LED bawaan board pada pin PC13, kita bisa memanggil fungsi:

   led.init
   led.on
   led.off

Sehingga fungsi blink yang kita buat sebelumnya dapat juga didefinisikan dengan cara:

   PC13 led.init
   : blink led.on 300 ms led.off 300 ms ;

 

Program Eksperimen Blinking LED Singletask

Untuk menulis program, kita bisa mengetik baris per baris pada terminal secara langsung. Cara ini efektif untuk melakukan pengujian fungsi yang sedang kita rancang/buat secara interaktif. Akan tetapi cara tersebut menjadi sangat tidak efektif untuk mengetik program secara keseluruhan.

Untuk mengetik kode program, kita bisa menggunakan editor teks apapun. Saya pengguna vim, jadi saya menggunakan vim untuk mengetik kode program.

Program blink.fs selengkapnya untuk eksperimen ini adalah sebagai berikut:

  PC13 led.init
  : 1blink ." one blink" cr 
    led.on 200 ms led.off 200 ms ;
  : 5blink ." five blinks" cr
    1blink 1blink 1blink 1blink 1blink ;
  : 10blink ." ten blinks" cr 
    5blink 5blink ;
  : blinkkey ." blinking until ENTER" cr
    begin 
     1blink key? 
    until 
    drop cr
  ;

Pada program tersebut, saya mendefinisikan fungsi-fungsi:

  • 1blink, fungsi untuk mengedipkan LED sebanyak 1 kali
  • 5blink, fungsi untuk mengedipkan LED sebanyak 5 kali, fungsi ini memanggil fungsi 1blink sebanyak 5 kali
  • 10blink, fungsi untuk mengedipkan LED sebanyak 10 kali, fungsi ini memanggil fungsi 5blink sebanyak 2 kali
  • blinkey, fungsi untuk mengedipkan LED secara terus-menerus hingga user menekan tombol ENTER pada keyboard

Setelah kode program blink.fs selesai diketik dan disimpan, maka kita bisa meng-upload file blink.fs menggunakan perintah include.

   include blink.fs

Dengan syarat file blink.fs terletak pada direktori yang sama ketika kita memanggil program folie. Berikut adalah screenshot eksperimen Blinking LED pada workstation saya.

 

Program Eksperimen Blinking LED Multitask

Untuk membuat program blinking led mulitask, caranya mudah saja. Berikut adalah kode program blinkm.fs yang bisa menjalankan program blinking led sebagai background task.

  task: blinktask
  : blink&
    blinktask activate \ blink& adalah background task
    begin 1 . led.on 100 ms 0 . led.off 200 ms again
  ;

  multitask  \ aktifkan fitur multitasking
  blink&     \ run

Beberapa perintah kunci untuk pemrograman multitasking pada Forth (mecrisp-stellaris) adalah:

  task: blinktask
  blinktask activate
  multitask

Perintah task: blinktask berfungsi mendefinisikan blinktask dan menyiapkan alokasi memori untuk task tersebut. Perintah blinktask activate berfungsi mengaktifkan fungsi task yang bersangkutan, dalam hal ini adalah blink&. Perintah multitask berfungsi untuk mengaktifkan fitur multitask pada sistem operasi Forth Mecrisp-Stellaris.

Ketika fungsi blink& dijalankan, maka fungsi tersebut akan running sebagai background task dimana sistem multitasker yang sudah diaktifkan akan menjalankannya secara kontinyu.

Ketika blinktask aktif dijalankan, kita bisa mengubah statusnya menjadi idle dengan perintah:

  blinktask idle

Task yang sedang dalam kondisi idle bisa diaktifkan kembali dengan perintah:

  blinktask wake

Nah, sangat menarik bukan? Dengan sistem Forth, mengeksplorasi mikrokontroler menjadi lebih mudah dan lebih cepat karena bisa dilakukan secara interaktif.

Semoga tulisan singkat ini bermanfaat bagi Anda. Selamat belajar dan selamat berkarya.

 

Iklan

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Foto Google+

You are commenting using your Google+ account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

w

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.