Pengantar Pemrograman MSP430 Launchpad

From Indonesian Research And Development Center
Jump to: navigation, search

Pendahuluan

Tutorial ini bertujuan sebagai pengantar pemrograman microcontroller berbasis MSP430 buatan Texas Instruments. Adapun sistem operasi yang digunakan pada tutorial kali ini adalah GNU/Linux distro Fedora. Jika Anda menggunakan distro lainnya, maka kemungkinan Anda membutuhkan beberapa penyesuaian khususnya yang berkaitan dengan instruksi yang harus Anda jalankan pada command line. Tools yang akan digunakan pada tutorial ini antara lain: energia, msp430-gcc dan naken_asm dan development board yang digunakan adalah MSP430 Launchpad.


Hardware

MSP430 Launchpad adalah development board yang diproduksi oleh Texas Instruments dan dalam paketnya disertakan dua buah microcontroller yaitu M430G2452 dan M430G2553. Untuk informasi yang lebih lengkap, Anda dapat membacanya pada situs Texas Instruments.


Software

Berikut ini adalah beberapa piranti lunak yang dapat digunakan untuk pemrograman MSP430, yaitu Energia IDE yang memiliki kemiripan dengan IDE untuk Arduino karena basisnya memang sama, msp430-gcc yaitu compiler dan beberapa perangkat pendukung untuk pengembangan aplikasi berbasis msp430 dan yang terakhir akan dibahas adalah assembler naken_asm yang juga memiliki dukungan untuk microcontroller msp430.

Energia

# cd /opt/
# wget -O energia-0101E0011-linux64.tgz http://energia.nu/download/downloadv3.php?file=energia-0101E0011-linux64.tgz
  • Ekstrak paket yang telah diunduh tadi:
# tar xf energia-0101E0011-linux64.tgz
  • Selanjutnya Anda dapat mengganti nama direktori hasil ekstraksi dan menghapus direktori __MACOSX yang tidak dibutuhkan:
# mv energia-0101E0011 energia
# rm -r energia/__MACOSX/
  • Agar IDE dapat dijalankan dengan mudah, kita perlu membuat shortcut. Adapun file shortcut tersebut dapat disimpan pada path /usr/local/share/applications/energia.desktop dan isinya adalah sebagai berikut:
[Desktop Entry]
Name=Energia
Comment=Energia IDE
Exec=/opt/energia/energia
Icon=/opt/energia/lib/energia_48.png
Categories=Application;Development;IDE;
Version=1.0
Type=Application
Terminal=false
  • Selanjutnya, kita dapat menjalankan IDE Energia melalui gnome launcher dan mulai menulis script pertama yang umum digunakan yaitu blink. Berikut ini adalah source codenya:
#define LED_R        2        // led merah
#define LED_G       14        // led hijau
#define LED_DELAY 1000        // delay

void setup() {
  pinMode(LED_R, OUTPUT);     // set led merah sebagai output
  pinMode(LED_G, OUTPUT);     // set led hijau sebagai output
}

void loop() {
  digitalWrite(LED_R, HIGH);  // nyalakan led merah
  digitalWrite(LED_G, LOW);   // padamkan led hijau
  delay(LED_DELAY);           // delay
  digitalWrite(LED_R, LOW);   // padamkan led merah
  digitalWrite(LED_G, HIGH);  // nyalakan led hijau
  delay(LED_DELAY);           // delay
}
  • Setelah proses kompilasi, maka pada panel log Energia akan muncul hasil akhir kurang lebih seperti ini:
...
[/opt/energia/hardware/tools/msp430/bin/msp430-objcopy, -O, ihex, -R, .eeprom,
 /tmp/build5723176490897752226.tmp/sketch_feb23a.cpp.elf, /tmp/build5723176490897752226.tmp/sketch_feb23a.cpp.hex]
Binary sketch size: 707 bytes (of a 16,384 byte maximum)
  • Selanjutnya, Anda dapat melakukan upload terhadap sketch yang telah dibuat. Jika pada tahap ini Anda gagal dalam meng-upload sketch, maka Anda perlu untuk mengatur ulang posisi jumper RXD dan TXD pada board launchpad. Posisikan jumper RXD dan TXD vertikal terhadap posisi awal yaitu seperti pada diagram berikut ini:
 Sebelum       Sesudah

 [- -] RXD     [-] [-] RXD
 [- -] TXD     [-] [-] TXD
 RXD TXD       RXD TXD
  • Upload sketch dengan menekan tombol upload pada toolbar energia atau dengan menekan Ctrl+U pada keyboard. Jika proses upload berhasil, maka akan muncul informasi seperti ini pada panel log energia:
...
MSPDebug version 0.20 - debugging tool for MSP430 MCUs
Copyright (C) 2009-2012 Daniel Beer <dlbeer@gmail.com>
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Trying to open interface 1 on 009
rf2500: warning: can't detach kernel driver: No data available
Initializing FET...
FET protocol version is 30394216
Configured for Spy-Bi-Wire
Sending reset...
Set Vcc: 3000 mV
Device ID: 0x2553
  Code start address: 0xc000
  Code size         : 16384 byte = 16 kb
  RAM  start address: 0x200
  RAM  end   address: 0x3ff
  RAM  size         : 512 byte = 0 kb
Device: MSP430G2553/G2403
Code memory starts at 0xc000
Number of breakpoints: 2
Chip ID data: 25 53
Erasing...
Programming...
Writing  676 bytes at c000...
Writing   32 bytes at ffe0...
Done, 708 bytes total
  • Selanjutnya, LED merah dan hijau pada board launchpad akan berkedip secara bergantian dengan jeda waktu selama 1 detik.


MSPGCC

MSPGCC adalah compiler yang digunakan sebagai backend oleh Energia, dan dapat digunakan tanpa perlu melakukan instalasi Energia. Berikut ini adalah langkah-langkah yang dapat Anda lakukan untuk menggunakan mspgcc:

  • Jika Anda menggunakan GNU/Linux distro Fedora, maka Anda dapat melakukan instalasi mspgcc dengan menggunakan perintah berikut ini (jalankan sebagai root):
# yum -y install msp430mcu msp430-gcc msp430-lib
  • Selanjutnya setelah proses instalasi, Anda dapat mulai melakukan kompilasi source code. Sebagai tahap awal, Anda dapat menggunakan contoh source code blink seperti ini:
#include <msp430.h>

#define LED_BITS    0x41

// fungsi interupsi timer A0 pada msp430g2553
void led_timer(void) __attribute__((interrupt(TIMER0_A0_VECTOR)));
void led_timer(void)
{
    P1OUT ^= LED_BITS;
}

int main(void)
{
    WDTCTL = WDTPW + WDTHOLD;       // set bit yang dibutuhkan untuk menonaktifkan watchdog timer register control

    P1DIR = LED_BITS;               // set P1.0 (LED berwarna merah) dan P1.6 (LED berwarna hijau) sebagai output
    P1OUT = 1;                      // nyalakan LED merah dan padamkan LED hijau pada saat inisialisasi

    BCSCTL3 |= LFXT1S_2;            // set basic clock system control register 3 menggunakan xtal internal
    TACTL   = TASSEL_1 | MC_1;      // set timer A control register menggunakan clock auxiliary pada mode UP
    TACCR0  = 11999;                // isi nilai register timer A capture/compare control 0 dengan delay selama 1 detik pada clock 12 kHz
    TACCTL0 = CCIE;                 // set bit Capture/Compare Interrupt Enable pada timer A capture/compare control 0

    WRITE_SR(GIE);                  // set bit global interrupt (Global Interrupt Enable)

    for (;;) { }                    // infinite loop
}
  • Lakukan kompilasi terhadap source code di atas dengan perintah seperti ini:
% msp430-gcc -Wall -Os -s -mmcu=msp430g2553 -o msp430blink.elf msp430blink.c
  • Setelah proses kompilasi selesai, maka akan dihasilkan file output seperti ini:
% ls -gGah *.elf
-rwxr-xr-x 1 544 Feb 23 09:23 msp430blink.elf
  • Lanjutkan dengan proses terakhir yaitu melakukan upload ke board msp430 launchpad dengan menggunakan msp430debug. Berikut ini adalah contoh penggunaannya:
% mspdebug -q rf2500 "prog msp430blink.elf"
Trying to open interface 1 on 011
rf2500: warning: can't detach kernel driver: No such file or directory
fet: FET returned error code 4 (Could not find device or device not supported)
fet: command C_IDENT1 failed
Device: MSP430G2xx3
fet: FET returned NAK
warning: device does not support power profiling
Erasing...
Programming...
elf32: no symbol table
Done, 162 bytes total
  • Setelah melakukan upload dan menjalankannya, maka LED berwarna merah dan hijau akan tampak kelap-kelip secara bergantian pada board launchpad. Sebenarnya masih ada banyak fitur yang dapat digunakan pada msp430debug, dan tugas Anda adalah melakukan eksplorasi fitur-fitur tersebut.


Naken ASM

Selain menggunakan compiler yang telah dijelaskan di atas, Anda juga dapat menggunakan assembler yang dibuat oleh Michael Kohn yang diberi nama naken_asm. Berikut ini adalah proses instalasi untuk naken_asm:

  • Unduh source code naken_asm (pada saat tutorial ini ditulis, versi terbaru adalah 2014-02-14):
# wget http://downloads.mikekohn.net/naken_asm/naken_asm-2014-02-14.tar.gz
  • Ekstrak arsip naken_asm:
# tar xf naken_asm-2014-02-14.tar.gz
  • Pindah ke sub direktori hasil ekstraksi dari langkah di atas:
# cd naken_asm-2014-02-14/
  • Lakukan konfigurasi dan dilanjutkan dengan kompilasi serta diakhiri dengan instalasi (naken_asm secara otomatis akan diinstall pada direktori /usr/local/):
# ./configure && make -j3 && make install
  • Setelah proses instalasi berhasil, Anda dapat menjalankan naken_asm dari command line:
% naken_asm

naken_asm - by Michael Kohn (base code, 6800, 68HC08, 805x, ARM, dsPIC, MIPS, MSP430, STM8, TMS1000, TMS1100, TMS9900, Z80)
               Joe Davisson (65xx)
    Web: http://www.mikekohn.net/
  Email: mike@mikekohn.net

Version: February 17, 2014

Usage: naken_asm [options] <infile>
   -o <outfile>
   -h             [output hex file]
   -e             [output elf file]
   -b             [output binary file]
   -d             [create .ndbg debug file]
   -l             [create .lst listing file]
   -I             [add to include path]
  • Selanjutnya, Anda dapat mulai menggunakan naken_asm untuk melakukan kompilasi terhadap contoh source code blink berikut ini:
    .include "msp430g2x31.inc"                      ; file include untuk msp430g2552 sama dengan msp4302231
    org 0xf800                                      ; alamat awal program

main:
    mov.w #(WDTPW | WDTHOLD), &WDTCTL               ; nonaktifkan watchdog timer register control
    mov.b #0x41, &P1DIR                             ; set P1.0 dan P1.6 sebagai output
    mov.b #1, &P1OUT                                ; nyalakan LED merah
    mov.w #(TASSEL_2 | MC_2 | ID_3 | TAIE), &TACTL  ; set bit timer A control register
    eint                                            ; aktifkan global interrupt

here:
    jmp here                                        ; infinite loop

timer:                                              ; label untuk fungsi yang akan menangani interupsi timer
    xor.b #0x41, &P1OUT                             ; lakukan operasi XOR untuk mengubah kondisi LED merah dan hijau
    bic.w #1, &TACTL                                ; reset/clear timer A control register
    reti                                            ; keluar dari interrupt

    org     0fff0h
    dw      timer                                   ; alamat interupsi timer

    org     0fffeh                                  ; reset vector
    dw      main                                    ; entry point
  • Lakukan kompilasi menggunakan naken_asm dengan perintah seperti ini:
% naken_asm -o msp430blink.hex msp430blink.asm
  • Jika proses kompilasi berjalan lancar, maka akan muncul informasi seperti ini:
naken_asm - by Michael Kohn (base code, 6800, 68HC08, 805x, ARM, dsPIC, MIPS, MSP430, STM8, TMS1000, TMS1100, TMS9900, Z80)
               Joe Davisson (65xx)
    Web: http://www.mikekohn.net/
  Email: mike@mikekohn.net

Version: February 17, 2014

 Input file: msp430blink.asm
Output file: msp430blink.hex

Pass 1...
Pass 2...

Program Info:
Include Paths: .
               /usr/local/share/naken_asm/include
 Instructions: 9
   Code Bytes: 38
   Data Bytes: 4
  Low Address: f800 (63488)
 High Address: ffff (65535)
  • Langkah berikutnya adalah melakukan upload file hex dari proses di atas menggunakan mspdebug:
% mspdebug -q rf2500 "prog msp430blink.hex"
Trying to open interface 1 on 011
rf2500: warning: can't detach kernel driver: No such file or directory
fet: FET returned error code 4 (Could not find device or device not supported)
fet: command C_IDENT1 failed
Device: MSP430G2xx3
fet: FET returned NAK
warning: device does not support power profiling
Erasing...
Programming...
Done, 42 bytes total
  • Setelah proses upload berhasil, maka LED merah dan hijau pada board launchpad akan berkelap-kelip secara bergantian.


Penutup

Sebagai catatan akhir, tutorial ini tidak membahas compiler buatan Texas Instruments, yaitu CCS (Code Composer Studio) karena sifatnya yang tidak bebas dan memiliki keterbatasan. Sekian tutorial kali ini, semoga bermanfaat. Terima kasih kepada Tuhan Yang Maha Esa, RNDC, Maxindo, N3 dan Anda yang telah membaca tutorial ini.


Referensi