Uji Maple Mini compatible (STM32F103C8T6)

Jika sebelum ini catatan yang saya unggah adalah mengenai STM8S103F3P6 (STM8) maka untuk catatan ini giliran mikrokontroler STM32F103C8T6. Sekalipun sama-sama produksi STMicroelectronics, arsitektur keduanya berbeda. STM32F103C8T6 adalah bagian dari keluarga STM32, μC 32-bit yang core prosesornya bukan berasal dari rancangan ST sendiri (seperti STM8), melainkan mengadopsi arsitektur dasar dari ARM. Tepatnya ARM®Cortex®-M3 32-bit RISC core [link]. Lebih jauh tentang ini nanti akan diungkapkan di artikel lain.

Untuk artikel ini, akan coba diungkap pengujian cepat pada sistem STM8S103F3P6 yang merupakan papan Maple Mini atau yang kompatibel. Ini mirip dengan Arduino (Uno/Zero/Mega/Micro/Nano) yang sebenarnya mempergunakan mikrokontroler Atmel AVR. Untuk Maple Mini ini pun sama, bahkan kalau melihat IDE-nya maka pengguna akan segera ingat dengan IDE milik Arduino (tentu jika sudah pernah melihat sebelumnya).

wp-1471368581561.jpegGambar 1.

Berdasarkan penanda pada papan, Maple Mini clone yang saya miliki sepertinya diproduksi oleh Baite. Papan ini clone ini menggunakan bootloader asli dari LeafLabs. Produk asli dari LeafLabs (Maple Mini) sepertinya sudah tidak diproduksi lagi.

BTE-1407fGambar 2. [image credit: lincomatic.com]

BTE-1407bbGambar 3. [image credit: lincomatic.com]

Berbeda dengan papan Arduino (dan clone-nya), cara pemrograman clone dari Maple Mini ini agak “unik” jika menggunakan STM32duino (Arduino IDE) maupun Maple IDE v.0.0.12 (dibangun dari Arduino 0018). Menurut Roger Clark, untuk pemrograman dari OS GNU/Linux papan Maple Mini ini perlu perlakuan khusus agar dapat diprogram dengan baik. Setelah tombol reset pada papan ditekan, saat lampu led masih berkedip cepat maka pengguna harus segera menekan-tahan tombol yang lain. Saat led mulai berkedip pelan, pengguna bisa melepas tombol tadi. Indikator keberhasilan prosedur ini akan mudah dilihat jika sistem tidak berisi kode program led berkedip (blinking). Pada kondisi normal, setelah tobol reset ditekan lalu dilepas, led akan berkedip dalam dua tahap. Tahap cepat lalu tahap lambat, kemudian led akan padam. Jika pengguna sukses melakukan prosedur sebagaimana yang dikemukakan di atas maka saat tahap led berkedip cepat, led kemudian akan terus berkedip lambat dan tidak berhenti.

Before each upload the board needs to be put into “Perpetual bootloader” mode.

  • Press the reset button (it’s the button labeled RESET). The board should blink quickly 6 times, then blinks slowly a few more times, then stop flashing (unless it has a sketch loaded that flashes the LED)
  • Press reset again, and this time push and hold the other button during the 6 fast blinks (the normal button is labeled BUT). You can release it once the slow blinks start.

Someone did a Youtube video of this http://youtu.be/rvNIeKuXsxM

Pemantauan bisa jadi lebih mudah jika di sistem anda juga anda install sendiri program dfu-util.

$ sudo apt-get install dfu-util

Jika papan sedang tidak berada dalam mode “perpetual bootloader” maka hasil tampilan akan seperti pada Gambar 4.

maple001Gambar 4.

Sedangkan jika papan berhasil dibuat berada dalam mode perpetual bootloader, terus menerus sampai IDE mengirim sinyal reset, maka tampilan akan seperti pada Gambar 5.

maple002Gambar 5.

Selain itu jangan lupa juga untuk mengatur file konfigurasi udev. Jika perlu buar file baru (gunakan sudo jika perlu akses sebagai admin) /etc/udev/rules.d/45-maple.rules . Mengacu sumber inilah seharusnya isi file tersebut.

ATTRS{idProduct}=="1001", ATTRS{idVendor}=="0110", MODE="664", GROUP="dialout"
ATTRS{idProduct}=="1002", ATTRS{idVendor}=="0110", MODE="664", GROUP="dialout"
ATTRS{idProduct}=="0003", ATTRS{idVendor}=="1eaf", MODE="664", GROUP="dialout" SYMLINK+="maple"
ATTRS{idProduct}=="0004", ATTRS{idVendor}=="1eaf", MODE="664", GROUP="dialout" SYMLINK+="maple"

 

Selain dengan cara memasukkan sistem papan ke “perpetual bootloader mode” ada cara lain yang berhasil saya coba. Caranya adalah setelah melakukan perintah upload dari IDE, maka akan ada pesan di IDE; “Uploading to I/O Board”. Proses akan seperti terhenti, hang. Pada saat itulah saya menekan tombol reset di papan mikrokontroler hingga program selesai di-upload (diunggah).

maple004

maple005Gambar 6.

Listing program kosong, jika diperlukan.

maple003Gambar 7.

maple006Gambar 8. Pemrograman menggunakan Arduino IDE (menggunakan STM32duino)

Untuk pemrograman dengan Arduino IDE 1.6.10 ada tantangan tambahan jika mempergunakan cara hanya menekan tombol reset satu kali untuk memprogram. Berbeda dengan Maple IDE yang berbasis pada Arduino IDE yang lama, pada Arduino IDE yang baru ini penguna harus lebih sigap, cepat dalam hal menekan tombol reset pada papan Maple Mini. Tidak terdapat saat “menunggu” seperti pada Maple IDE, jika terlambat menekan maka proses uploading akan langsung dinyatakan gagal dan pesan kesalahan akan tampil.

maple007Gambar 9.

Proses instalasi STM32duino sendiri cukup mudah, menurut situs sumber [link];

  • Copy the Arduino_STM32 folder to the hardware folder in your Arduino sketches folder . If the hardware folder does not exist, please create one.
  • Run the udev rules installation script in tools/linux/install.sh
  • Note. If you are uploading via USB to Serial or STLink etc, you may need to set the relevant permissions for your specific upload device in order to be able to use it from within the Arduino IDE. You may also need to change the udev rules for the device in question.

Untuk pengujian cepat seperti ini maupun untuk prototyping,  fasilitas penggunaan bootloader dan penggunaan Arduino IDE sangatlah mempermudah. Selain itu sistem berbasis mikrokontroler STM32F103C8T6 (keluarga ARM® Cortex® -M3 32-bit) yang telah diberi Maple-bootloader (versi original) dan dapat diprogram dengan Arduino IDE ini juga menarik sebagai bahan belajar awal arsitektur mikrokontroler modern.

Adapun pin mapping dari Maple Mini ini dapat di lihat di link ini atau lebih lengkap lagi di link ini. Dokumentasi skematik dan pcb Maple Mini terdapat di GitHub.

Sumber belajar Maple Mini dari halaman lama LeafLabs dapat diakses di sini: LeafLabs Documentation Index.

 

Uji blinking led STM8 STM8S103F3P6

Di post sebelumnya telah memuat catatan uji coba dan setup untuk keluarga mikrokontroler produksi dari TI (Texas Instrument); MSP430, MSP432 dan Tiva C.  Pada catatan ini akan dipaparkan uji coba untuk mikrokontroler produksi dari STMicroelectronics (ST) yaitu salah satu anggota keluarga STM8, tepatnya μC STM8S103F3. Mikrokontroler STM8S103F3P6 adalah mirkokontroler 8-bit, sama dengan keluarga ATmega8535 (ATmega) dan ATtiny85 (ATtiny). Dan sama pula dengan keluarga AVR, STM8S103F3 dapat diprogram dengan software di sistem GNU/Linux seperti Ubuntu, Mint, BlankOn.

wp-1470912333051.jpegGambar 1. Uji pemrograman STM8 di GNU/Linux.

Untuk melakukan pemrograman singkat dan sederhana pada STM8 hanya diperlukan sebuah text editor seperti nano atau gedit dan terminal untuk mengunggah kode ke STM8.

ashampoo_snap10.pngGambar 2. Pemrograman pada terminal di GNU/Linux

 

Perangkat compiler yang dipergunakan untuk melakukan pemrograman pada STM8 (STM8S103F3P6) yang tersedia gratis tanpa batasan adalah SDCC. SDCC (Small Device C Compiler) dapat dipergunakan di sistem GNU/Linux maupun MS Windows. Untuk memprogram STM8 diperlukan SDCC dari versi yang sudah memiliki fasilitas untuk pemrograman STM8, misalnya di atas versi 3.5.0. Saya sendiri mempergunakan versi yang lebih baru:

$ sdcc -v
SDCC : mcs51/z80/z180/r2k/r3ka/gbz80/tlcs90/ds390/pic16/pic14/TININative/ds400/hc08/s08/stm8 3.6.0 #9615 (Linux)
published under GNU General Public License (GPL)

 

Sebagaimana prinsip dasar saat mencoba mempelajari sesuatu yang intinya meminimalkan sedapat mungkin berbagai sumber/faltor masalah/kesalahan maka untuk menguji sistem ini pun sebaiknya mempergunakan contoh yang diperkirakan lebih dapat dipercaya akan menghasilkan pengujian yang baik. Atau setidaknya mengambil dari sumber yang sudah pernah melaporkan hasil pengujian dan melakukan modifikasi untuk memperbaiki bug atau kesalahan. Untuk uji coba ini, contoh yang dapat dipakai bersumber dari: http://technologyrealm.blogspot.co.id/2015/07/getting-started-with-stm8-development.html atau http://www.cnx-software.com/2015/04/13/how-to-program-stm8s-1-board-in-linux/. Keduanya mengacu pada sumber kode asli (stm8-examples-sdcc) yang sama yang kemudian dimodifikasi.

#include "stm8l.h"

int main() 
{
	int d;
	// Configure pins
	PB_DDR = 0x20; //ganti dari 0x80 ke 0x20
	PB_CR1 = 0x20; //ganti dari 0x80 ke 0x20
	// Loop
	do 
	{
		PB_ODR ^= 0x20; //ganti dari 0x80 ke 0x20
		for(d = 0; d < 29000; d++) { }
	} while(1);
}

Dalam file contoh yang sama dapat dilihat isi dari makefile. Konfigurasi berikut adalah hasil modifikasi dari pengaturan aslinya;

SDCC=sdcc
SDLD=sdld
OBJECTS=blinky.ihx
 
.PHONY: all clean flash
 
all: $(OBJECTS)
 
clean:
    rm -f $(OBJECTS)
 
flash: $(OBJECTS)
    stm8flash -c stlinkv2 -p stm8s103f3 -w $(OBJECTS)
 
%.ihx: %.c
 
    $(SDCC) -lstm8 -mstm8 --out-fmt-ihx $(CFLAGS) $(LDFLAGS) $<

Adapun isi lengkap dari file  asli  contoh terlihat di Gambar 1.

Gambar 3.

Untuk kompilasi tunggal, bisa dilakukan dengan perintah:

$ sdcc -lstm8 -mstm8 --out-fmt-ihx blinky.c

Berikutnya, untuk melakukan upload ke mikrokontroler STM8S103F3P6 diperlukan program stm8flash. Ada dua cara agar program ini dapat diinstalasi di komputer. Pertama dengan cara mengunduh (download) dari dengan alamat; https://github.com/vdudouyt/stm8flash/archive/master.zip. Cara lain adalah dengan mempergunakan git ($ sudo apt-get install git). Perintah yang dengan mempergunakan git adalah; git clone https://github.com/vdudouyt/stm8flash.git. Perintah lengkapnya adalah:

git clone https://github.com/vdudouyt/stm8flash.git

cd stm8flash
make
sudo make install

Perintah untuk mengunggah ke mikrokontroler dengan stm8flash dapat dilakukan dengan cara;

$ stm8flash -c stlinkv2 -p stm8s103f3 -w blinky.ihx

 

Saya mempergunakan versi papan sistem yang murah dari mikrokontroler STM8S103F3P6 sebagaimana yang telah dilaporkan di dua situs ini;

http://www.cnx-software.com/wp-content/uploads/2015/01/STM8S_Board_Schematics.png
Gambar 4. [image credit: cnx-software.com]

Papan yang saya miliki hampir serupa dengan tampilan pada Gambar 4. Tetapi posisi led untuk pengguna berbeda. Pada papan terdapat dua led, led yang berwarna biru adalah indikator catu daya dan memiliki tulisan penanda PWR. Sedangkan led yang berwarna merah dengan tulisan penanda TEST adalah led yang dapat dipergunakan oleh programer. Led merah pada papan yang saya miliki terhubung pada pin PB5 (port B5) dan bukan pada Port D atau Port E. Tampilan yang lebih tepat seperti pada Gambar 5.

Image

Gambar 5. [image credit:  forum.hobbycomponents.com]

Untuk papan yang saya miliki ada saat pertama mikrokontroler tidak berhasil diprogram. Seperti umumnya solusi permasalahan teknis seperti ini sudah pernah dikemukakan [link]. Caranya pertama adalah dengan mengunduh (download) file berikut; optdefault.bin . Jalu menjalankan perintah;

$ stm8flash -c stlinkv2 -p stm8s103f3 -s opt -w optdefault.bin

Setelah itu baru jalankan perintah;

$ stm8flash -c stlinkv2 -p stm8s103f3 -w blinky.ihx

 

Cara lain untuk melakukan pemrograman adalah dengan menggunakan make dan makefile. Tentang tutorial mengenai makefile sendiri sudah saya cantumkan daftar urutan tutorial pada bagian akhir catatan sebelumnya. Misalnya untuk contoh ini pemanggilan make dapat dilakukan sesuai tujuan. Untuk menghasilkan file intel hex, cukup dengan memanggil make dari dalam direktori file C sumber.

$ make

Untuk melakukan uploading ke mikrokontroler, bisa dilakukan dengan perintah yang sesuai isi penamaan di dalam makefile. Misalnya untuk contoh ini;

$ make flash

 

wp-1470913902302.jpegGambar 6.

 

Saya mempergunakan ST-Link V2 compatible dongle. Untuk keperluan ini hanya bagian satu sisi dari header yang dipergunakan. Jalur untuk sinyal RST (untuk NRST), SWIM, GND, 3.3V. Hubungan dari dongle ini ke papan mikrokontroler tidaklah lurus. Hubungan antara GND dan SWIM tidak lurus akibat letak pin yang berbeda.

wp-1470808435627.jpegGambar 7.

 

img_20160810_020354.jpgGambar 8. Hasil pengukuran pada pin PB5

img_20160810_020654.jpgGambar 9.

Dari situs STMicroelectronics terdapat beberapa dokumen yang bisa dipakai untuk sember belajar. Diantaranya saya urutkan sebagai berikut;

  • AN2752: Getting started with the STM8S and STM8A [download]
  • RM0016: STM8S series and STM8AF series 8-bit microcontrollers
    [download]
  • DS6120: STM8S103F3 datasheet [download]
  • PM0051: How to program STM8S and STM8A Flash program memory and data EEPROM
    [download]
  • PM0044: STM8 CPU programming manual [download]

Pemrograman C untuk MSP430 dengan Netbeans

Ada beberapa text editor dan IDE (integrated development environment) yang bisa dipergunakan untuk melakukan pemrograman untuk mikrokontroler keluarga MSP430. Salah satu yang menarik adalah Netbeans. Sampai saat ini yang saya ketahui (AFAIK), yang menarik dari IDE Netbeans bila dibandingkan dengan Eclipse adalah bahwa adanya kemudahan pengaturan satu IDE untuk berbagai toolchain. Pada IDE Eclipse juga ada kemudahan mirip seperti ini, tetapi menurut saya sejauh ini Netbeans masih lebih mudah daripada Eclipse.

Dengan makefile yang sesuai ada beberapa sistem yang dapat diprogram dengan satu IDE Netbeans yang sama. Misalnya Avr, Arduino dan MSP430. Untuk make dan makefile pada sistem MSP430 sudah diungkap pada catatan sebelumnya.

nbeans05Gambar 1.

nbeans04Gambar 2.

nbeans06Gambar 3.

nbeans07Gambar 4.

nbeans08Gambar 5.

nbeans09Gambar 6.

nbeans10Gambar 7.

nbeans11Gambar 8.

nbeans12Gambar 9.

 

 

Makefile untuk kompilasi kode C MSP430 dengan Netbeans

Catatan konfigurasi Makefile untuk IDE Netbeans.  Artikel mengenai penggunaan Netbeans akan dibuat terpisah [link].

nbeans01Gambar 1.

 

Sebelum sampai ke bagian contoh beberapa modifikasi konfigurasi file makefile, berikut contoh kode yang dipakai untuk menguji toolchain, makefile, dan IDE Netbeans.

Modifikasi dari sumber aslinya untuk IDE Netbeans.

//#include <io.h>
#include <msp430.h>
#include <stdint.h>

void wait(void)          //delay function
{
  volatile uint32_t i;   //declare i as volatile unsigned int 32
  for(i=0;i<12000;i++);  //repeat n times
}
 
int main(void)
{
  WDTCTL = WDTPW | WDTHOLD;
 
  P1DIR=0xFF;            //port 1 = output
  P1OUT=0x01;            //set bit 0 in port 1
 
  for(;;) {              //infinite loop
    P1OUT=~P1OUT;        //invert port 1
    wait();              //call delay function
  }
 
}

 

nbeans02Gambar 2.

 

Konfigurasi yang pertama adalah yang paling singkat dimodifikasi dari sumber ini untuk IDE Netbeans (μC MSP430G2553).

TARGET=main
MCU=msp430g2553

CC=msp430-gcc
CFLAGS=-Os -Wall -Wno-main -g -mmcu=$(MCU)

all: $(TARGET).elf

%.elf: %.c
	$(CC) $(CFLAGS) -o $@ $<
	/usr/bin/mspdebug -n rf2500 "prog $(TARGET).elf" "exit"
	
flash: $(TARGET).elf
	/usr/bin/mspdebug rf2500 "prog $(TARGET).elf"
	
erase: $(TARGET).elf
	/usr/bin/mspdebug rf2500 "erase"

clean:
	rm -fr *.o *.elf

Sumber contoh lain yang serupa dapat diakses lewat link ini.

nbeans03Gambar 3.

 

Makefile kedua merupakan modifikasi dari sumber ini untuk IDE Netbeans.

# Generic MSP430 Makefile
#
#######################################
# user configuration:
#######################################
# TARGET: name of the output file
TARGET = main
# MCU: part number to build for
MCU = msp430g2553
# SOURCES: list of input source files
SOURCES = main.c
# INCLUDES: list of includes, by default, use Includes directory
INCLUDES = -IInclude
# OUTDIR: directory to use for output
OUTDIR = buildc
# define flags
CFLAGS = -mmcu=$(MCU) -g -Os -Wall -Wunused $(INCLUDES)
ASFLAGS = -mmcu=$(MCU) -x assembler-with-cpp -Wa,-gstabs
LDFLAGS = -mmcu=$(MCU) -Wl,-Map=$(OUTDIR)/$(TARGET).map
#######################################
# end of user configuration
#######################################
#
#######################################
# binaries
#######################################
CC      = msp430-gcc
LD      = msp430-ld
AR      = msp430-ar
AS      = msp430-gcc
GASP    = msp430-gasp
NM      = msp430-nm
OBJCOPY = msp430-objcopy
MAKETXT = srec_cat
RM      = rm -f
MKDIR	= mkdir -p
#######################################

# file that includes all dependancies
DEPEND = $(SOURCES:.c=.d)
# list all object files
OBJECTS = $(addprefix $(OUTDIR)/,$(SOURCES:.c=.o))

# default: build all
all: $(OUTDIR)/$(TARGET).elf $(OUTDIR)/$(TARGET).hex $(OUTDIR)/$(TARGET).txt


$(OUTDIR)/$(TARGET).elf: $(OBJECTS)
	$(CC) $(OBJECTS) $(LDFLAGS) $(LIBS) -o $@


$(OUTDIR)/%.hex: $(OUTDIR)/%.elf
	$(OBJCOPY) -O ihex $< $@


$(OUTDIR)/%.txt: $(OUTDIR)/%.hex
	$(MAKETXT) -O $@ -TITXT $< -I
	unix2dos $(OUTDIR)/$(TARGET).txt


$(OUTDIR)/%.o: %.c | $(OUTDIR)
	$(CC) -c $(CFLAGS) -o $@ $<
	/usr/bin/mspdebug rf2500 "prog $(OUTDIR)/$(TARGET).elf"

%.lst: %.c
	$(CC) -c $(ASFLAGS) -Wa,-anlhd $< > $@


# create the output directory
$(OUTDIR):
	$(MKDIR) $(OUTDIR)
	

clean:
	-$(RM) $(OUTDIR)
	/usr/bin/mspdebug rf2500 "prog $(OUTDIR)/$(TARGET).elf"

Agar makefile di atas dapat bekerja dengan baik diperlukan beberapa program yang harus diinstalasi jika belum ada.

  1. UNIX2DOS (http://www.virtualhelp.me/linux/164-dos2unix-missing-ubuntu-1004) [sudo aptitude install tofrodos]
  2. srec_cat (srecord)  (https://www.howtoinstall.co/en/ubuntu/utopic/srecord) [“sudo apt-get install srecord”]

 

Setidaknya ada dua contoh makefile yang hampir serupa dengan contoh di atas, bisa dilihat di daftar berikut:

[intense_emphasis color=”#223d57″ tag=”span”]

[/intense_emphasis]

Makefile ketiga lebih panjang daripada yang sebelumnya.  Dimodifikasi dari sumber pada link ini.

#
# Makefile for msp430
#
# 'make' builds TARGET
# 'make clean' deletes everything except source files and Makefile
# 'make program' programs flash on msp430 with TARGET, then resets it.
# 'make reset' resets the msp430

# You need to set TARGET, MCU and SOURCES for your project.
# TARGET is the name of the executable file to be produced (.elf)
# eg if TARGET is foo.elf, then foo.elf will be produced, which can be programmed
#    into the msp430 flash by typing 'make program'
#
# If you want to see the assembler source from file foo.c, then use make foo.lst

TARGET   = main.elf
MCU      = msp430g2553

# List all the source files here
# eg if you have a source file foo.c then list it here
SOURCES = main.c

# Use lines like those below to include your own libraries, include files (if you have any).
# Changing a library won't cause a rebuild - use make clean then make.
# this will link libboard430.a (use LIBPATH to say where it is, and take care of the order):
#LIBS = -lcc2420 -lboard430

# paths to extra libraries and extra standard includes
#ROOTPATH = ../..
#LIBPATH = -L$(ROOTPATH)/lib
#INCLUDES = -I$(ROOTPATH)/include


# You probably don't need to change anything below this line.
#######################################################################################
CFLAGS   = -mmcu=$(MCU) -g -O3 -Wall -Wcast-align -Wcast-qual -Wimplicit \
	   -Wmissing-declarations -Wmissing-prototypes -Wnested-externs \
	   -Wpointer-arith -Wredundant-decls -Wreturn-type -Wshadow \
	   -Wstrict-prototypes -Wswitch -Wunused $(INCLUDES)
ASFLAGS  = -mmcu=$(MCU) -x assembler-with-cpp -Wa,-gstabs
LDFLAGS  = -mmcu=$(MCU) -Wl $(LIBPATH)

########################################################################################

CC       = msp430-gcc
LD       = msp430-ld
AR       = msp430-ar
AS       = msp430-gcc
GASP     = msp430-gasp
NM       = msp430-nm
OBJCOPY  = msp430-objcopy
RANLIB   = msp430-ranlib
STRIP    = msp430-strip
SIZE     = msp430-size
READELF  = msp430-readelf
CP       = cp -p
RM       = rm -f
MV       = mv
#Linux jtag program
JTAGPROG = jtag.py
#Windows jtag program
#JTAGPROG = msp430-jtag
PROGRAM  = $(JTAGPROG) -mEpv
RESET    = $(JTAGPROG) -r
########################################################################################

# the file which will include dependencies
DEPEND = $(TARGET:.elf=.d)

# all the object files
OBJECTS = $(SOURCES:.c=.o)

$(TARGET): $(OBJECTS) Makefile
	$(CC) $(OBJECTS) $(LDFLAGS) $(LIBS) -o $@
	/usr/bin/mspdebug -n rf2500 "prog $(TARGET)"

# rule for making assembler source listing, to see the code
%.lst : %.c
	$(CC) -c $(CFLAGS) -Wa,-anlhd $< > $@

# include the dependencies
-include $(DEPEND)


# dependencies file
# includes also considered, since some of these are our own
# (otherwise use -MM instead of -M)
$(DEPEND): $(SOURCES) Makefile
	$(CC) -M ${CFLAGS} $(SOURCES) >$@
	
	

.PHONY:	clean
clean:
	-$(RM) $(OBJECTS)
	-$(RM) $(TARGET)
	-$(RM) $(SOURCES:.c=.lst)
	-$(RM) $(DEPEND)	

.PHONY: program
program: $(TARGET)
	$(PROGRAM) $(TARGET)

.PHONY: reset
reset:
	$(RESET)

Beberapa makefile serupa yang dapat dijadikan perbandingan:

 

[intense_emphasis color=”#a8931c”]

Mencoba mempelajari makefile bukanlah hal yang sangat mudah. Ada beberapa sumber yang bisa dicoba untuk dipakai sebagai awalan untuk mempelajari make dan makefile, jika diperlukan. Saya urutkan sebagai berikut:

[/intense_emphasis]

 

Uji coba kompilasi program MSP430G2553 dengan Codelite

Untuk melakukan pemrograman pada mikrokontroler MSP430G2553, ada beberapa cara yang bisa dipakai. Misalnya dengan menggunakan Energia, seperti yang sudah pernah ditunjukkan sebelumnya. Cara lain yang disarankan oleh TI (Texas Instruments) adalah dengan menggunakan CCS (Code Composer Studio), baik versi desktop maupun versi cloud (web). Tetapi selain itu, sebenarnya ada banyak aplikasi yang bisa dipakai untuk melakukan pemrograman, selama terdapat akses yang baik ke compiler dan toolchain lainnya.

Dengan akses ke compiler, seorang programer dapat memilih text editor yang hendak dipakainya. Bisa berupa software klasik seperti Vim atau Emacs, bisa juga yang relatif modern seperti nano atau gedit. Programer juga bisa memilih IDE yang lebih kompleks untuk proyeknya seperti Geany, CodeLite, Code::Blocks, atau bahkan yang berbasis Eclipse.

TI telah menyediakan dua versi desktop IDE yang normalnya masing-masing bekerja di sistem Windows dan GNU/Linux. Sayangnya baik CCSv6 maupun CCSv5 belum dapat berfungsi dengan baik di laptop saya. Pemrograman tentu masih bisa dilakukan dengan text editor yang sederhana, tetapi untuk memudahkan pengerjaan maka saya coba mempergunakan IDE. Kali ini saya mencoba menggunakan Codelite. Bila dibandingkan dengan IDE berbasis Eclipse atau bahkan Code::Blocks, menurut saya Codelite lebih ringan dan mempercepat kerja. Sebelum menggunakan Sublime Text, saya senang mempergunakan IDE ini. IDE Geany sebenarnya lebih terasa ringan, tetapi untuk proyek dengan compiler dan toolchain yang berbeda-beda, Codelite lebih memudahkan pekerjaan.

Sampai saat saya menulis catatan ini untuk pemrograman Launchpad MSP430 (MSP-EXP430G2) dengan CodeLite masih perlu saya bagi ke dalam dua tahapan yang berbeda. Pekerjaan coding, compiling, building, sudah bisa saya lakukan dari dalam CodeLite. Sedangkan untuk uploading ke launchpad masih saya lakukan di terminal dengan mspdebug.

Instalasi CodeLite di sistem GNU/Linux Ubuntu dan variannya dapat diakukan dengan perintah sudo apt-get install codelite. Untuk lebih mengenal CodeLite, berikut beberapa sumber bacaan yang baik;

[intense_emphasis color=”#FFB157″ tag=”span”] [/intense_emphasis]

 

Berikutnya untuk menguji apakah sistem IDE dan toolchain sudah berfungsi dengan baik diperlukan kode untuk uji coba. Template dasar kode kadang-kadang dapat berfungsi baik sebagai kode uji dasar. Tetapi sering juga terjadi, terutama pada embedded system,  diperlukan kode yang sedikit lebih lengkap. Jika di PC dikenal kode program “Hello World“, maka di embedded systems dikenal kode “Blinking Led” yang berfungsi utama sama yaitu untuk memastikan sistem kompilasi dan pendukungnya bekerja dengan baik. Sebagai bonus, kode led berkedip juga membantu untuk memeriksa kondisi peripheral. Beberapa sumber untuk contoh kode dasar yang dapat dipakai;

Pada dasarnya semua kode pada sumber-sumber acuan di atas adalah serupa. Ini adalah salah satu bukti bahwa sepanjang berkenaan dengan sumber belajar untuk electronics engineering technology, jauh lebih sering daripada tidak sumbernya sudah cukup banyak. Tergantung kemauan dan kesempatan untuk mempelajarinya. Dari contoh-contoh itu, salah satu yang bisa dipakai untuk pengujian adalah kode berikut:

//Demo app to blink the red LED (LED1) on the TI Launchpad
//which is attached to P1.0
//The green LED(LED2) is connected to P1.6

#include <msp430g2553.h>
 
int main(void) {
  volatile int i;
 
  // stop watchdog timer
  WDTCTL = WDTPW | WDTHOLD;
  // set up bit 0 of P1 as output
  P1DIR = 0x01;
  // intialize bit 0 of P1 to 0
  P1OUT = 0x00;
 
  // loop forever
  for (;;) {
    // toggle bit 0 of P1
    P1OUT ^= 0x01;
    // delay for a while
    for (i = 0; i < 0x6000; i++);
  }
}

 

Selain contoh kode sederhana (yang diharapkan sudah tidak mengandung kesalahan yang signifikan), pengguna juga perlu mempelajari bagaimana melakukan instalasi toolchain (termasuk compiler). Beberapa sumber belajar singkat yang bagus untuk dibaca mengenai hal ini:

Hasil instalasi toolchain dari satu atau lebih cara dapat kemudian diperiksa, di sistem saya hasilnya:

[intense_emphasis color=”#25a89f” tag=”span”]
$ msp430
msp430-addr2line  msp430-g++        msp430-ld.bfd     msp430-run
msp430-ar         msp430-gcc        msp430mcu-config  msp430-size
msp430-as         msp430-gcc-4.6.3  msp430-nm         msp430-strings
msp430-c++        msp430-gcov       msp430-objcopy    msp430-strip
msp430-c++filt    msp430-gdb        msp430-objdump
msp430-cpp        msp430-gprof      msp430-ranlib
msp430-elfedit    msp430-ld         msp430-readelf

$ locate msp430-gcc
/home/rumahku/energia0101E0017/hardware/tools/msp430/bin/msp430-gcc
/home/rumahku/energia0101E0017/hardware/tools/msp430/bin/msp430-gcc-4.6.3
/home/rumahku/energia0101E0017/hardware/tools/msp430/share/man/man1/msp430-gcc.1
/home/rumahku/energia18/hardware/tools/msp430/bin/msp430-gcc
/home/rumahku/energia18/hardware/tools/msp430/bin/msp430-gcc-4.6.3
/home/rumahku/energia18/hardware/tools/msp430/share/man/man1/msp430-gcc.1
/home/rumahku/msp430toolChain/bin/msp430-gcc
/home/rumahku/msp430toolChain/bin/msp430-gcc-4.7.0
/home/rumahku/msp430toolChain/bin/msp430-gcc-ar
/home/rumahku/msp430toolChain/bin/msp430-gcc-nm
/home/rumahku/msp430toolChain/bin/msp430-gcc-ranlib
/home/rumahku/msp430toolChain/bin/msp430-gcc-wrapper
/home/rumahku/msp430toolChain/bin/msp430-msp430-gcc-ar
/home/rumahku/msp430toolChain/bin/msp430-msp430-gcc-nm
/home/rumahku/msp430toolChain/bin/msp430-msp430-gcc-ranlib
/home/rumahku/msp430toolChain/share/man/man1/msp430-gcc.1
/usr/bin/msp430-gcc
/usr/bin/msp430-gcc-4.6.3
/usr/share/codeblocks/compilers/compiler_msp430-gcc.xml
/usr/share/codeblocks/compilers/options_msp430-gcc.xml

$ msp430-gcc -v
Using built-in specs.
Reading specs from /usr/lib/gcc/msp430/4.6.3/../../../../msp430/lib/msp430mcu.spec
COLLECT_GCC=msp430-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/msp430/4.6.3/lto-wrapper
Target: msp430
Configured with: '/build/buildd/gcc-msp430-4.6.3~mspgcc-20120406/./gcc-4.6.3/configure' -v --enable-languages=c,c++ --prefix=/usr --with-system-zlib --infodir='/usr/share/info' --mandir='/usr/share/man' --bindir='/usr/bin' --libexecdir='/usr/lib' --libdir='/usr/lib' --build=x86_64-linux-gnu --host=x86_64-linux-gnu MAKEINFO=missing --target=msp430
Thread model: single
gcc version 4.6.3 20120301 (mspgcc LTS 20120406 unpatched) (GCC)
[/intense_emphasis]

Sistem GNU/Linux;

[intense_emphasis color=”#AAB1BE” tag=”span”]

Linux XXX 3.16.0-38-generic #52~14.04.1-Ubuntu SMP Fri May 8 09:43:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

[/intense_emphasis]

 

Perbandingan antar compiler menurut TI GCC User’s Guide [pdf file]

evd8

codelite002Gambar 1.

codelite001Gambar 2.

codelite003Gambar 3.

codelite004Gambar 4.

codelite005Gambar 5.

codelite006Gambar 6.

codelite007Gambar 7.

codelite008Gambar 8.

codelite009Gambar 9.

codelite010Gambar 10.

codelite011

Gambar 11.

codelite012Gambar 12.

codelite013Gambar 13.

 

Uji blinking led MSP432 (MSP-EXP432P401R) di GNU Linux dengan Energia dan CCS Cloud [teaser]

Ini adalah catatan uji coba pertama dari Launchpad  produksi Texas Instruments yaitu MSP-EXP432P401R. Ini papan ketiga yang saya miliki dari TI yang sekalipun terdapat beberapa kesamaan dengan dua papan sistem sebelumnya tetapi juga memiliki perbedaan yang sekilas akan membingungkan saat perkenalan untuk pertama kali. Papan MSP-EXP432P401R ini berasal dari rumpun keluarga MSP432, jadi berdasarkan “silsilah” keluarga, papan ini lebih dekat pada papan MSP-EXP430G2 yang berasal dari keluarga MSP430. Tetapi berbeda dengan MSP430 yang merupakan keluarga mikrokontroler 16-bit, MSP432 adalah keluarga mikrokontroler 32-bit. Selain itu jika MSP430 dibangun berdasarkan pada arsitektur asli rancangan TI sendiri, MSP432 dibangun berdasarkan arsitektur ARM.

Papan Launchpad MSP-EXP432P401R berintikan mirkokontroler MSP432P401R. Menurut TI prosesor inti dari mikrokontroler ini berdasar pada arsitektur ARM;

ARM 32-Bit Cortex-M4F CPU With Floating-Point Unit and Memory Protection UnitTexas Instruments

Jadi perihal prosesor inti, papan launchpad ini sebenarnya lebih dekat kepada Tiva C, yaitu papan  EK-TM4C123GXL . Mikrokontroler pada kedua papan itu berbasis pada arsitektur ARM Cortex-M4F. Tambahan huruf F menandakan adanya fasilitas Floating-Point unit. Situs letsmakerobots.com memuat artikel tentang perbandingan antara dua mikrokontroler ini:

MSP432 processor main features diagram

TM4C123x processor main features diagram

 

Berbeda dengan catatan sebelumnya saat uji coba led blinking untuk sistem MSP430 dan Tiva C, pada catatan ini pengungkapan akan mendekati urutan kronologis.

 

Catatan sistem GNU/Linux:

$ uname -a
Linux xxx 3.16.0-38-generic #52~14.04.1-Ubuntu SMP Fri May 8 09:43:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

Sebagian dari $ lsusb
Bus 003 Device 027: ID 0451:bef3 Texas Instruments, Inc.

Sebagian dari $ dmesg
[37080.370024] usb 3-1: new full-speed USB device number 27 using xhci_hcd
[37080.499458] usb 3-1: New USB device found, idVendor=0451, idProduct=bef3
[37080.499466] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[37080.499470] usb 3-1: Product: XDS110 (02.03.00.00) with CMSIS-DAP
[37080.499474] usb 3-1: Manufacturer: Texas Instruments
[37080.499477] usb 3-1: SerialNumber: 00000000
[37080.500199] cdc_acm 3-1:1.0: This device cannot do calls on its own. It is not a modem.
[37080.500230] cdc_acm 3-1:1.0: ttyACM0: USB ACM device
[37080.500924] cdc_acm 3-1:1.3: This device cannot do calls on its own. It is not a modem.
[37080.500955] cdc_acm 3-1:1.3: ttyACM1: USB ACM device
[37080.502418] hid-generic 0003:0451:BEF3.0014: hiddev0,hidraw1: USB HID v1.11 Device [Texas Instruments XDS110 (02.03.00.00) with CMSIS-DAP] on usb-0000:00:14.0-1/input5

 

Potensi masalah (tantangan):

Pertama kali saya mencoba untuk menguji papan sistem ini dengan menggunakan Energia 0101E0017, tetapi gagal dan mendapatkan pesan kesalahan sebagai berikut:
[intense_emphasis tag=”span”]

Connecting…
fatal: CS_DAP_0: Error connecting to the target: (Error -260 @ 0x0) An attempt to connect to the XDS110 failed. The cause may be one or more of: invalid firmware update, invalid XDS110 serial number, or faulty USB connection. The firmware and serial number may be updated using the xdsdfu utility found in the …/ccs_base/common/uscif/xds110 directory of your installation. View the ReadMe.txt file there for instructions. (Emulation package 6.0.14.5)
Failed: Operation was aborted

[/intense_emphasis]

 

Kemudian saya mencoba peruntungan dengan mempergunakan CCS Cloud dari Texas Instruments. Selain dengan menggunakan Energia, pengguna (programmer) dapat melakukan pemrograman dengan CCS (Code Composer Studio). TI (Texas Instruments) menyediakan dua pilihan penggunaan CCS; CCS berbasis web (CCS Cloud) dan CCS pada desktop.

http://www.ti.com/ww/en/launchpad/img/launchpad_software_bubbles.png

image credit: ti.com

 

Sayangnya sekalipun saya berhasil melakukan instalasi plug-in untuk browser Firefox, saya mengalami masalah saat perlu melakukan instalasi TI Cloud Agent. Aplikasi tersebut memerlukan libusb-1.0.so. Seperti pada panduan, permasalah seperti ini bisa dicoba diselesaikan dengan melakukan instalasi:

[intense_emphasis tag=”span”]

sudo apt-get install lib32stdc++6 libc6-i386 libusb-1.0-0-dev:i386

[/intense_emphasis]

Jika saat instalasi terjadi pesan kesalahan berikut:

Reading package lists… Error!

E: Encountered a section with no Package: header

maka dapat diperbaiki dengan perintah:

sudo rm /var/lib/apt/lists/* -vf

sudo apt-get update

Cara lain untuk mendapatkan file libusb-1.0.so adalah dengan mencari file tersebut di dalam sistem. Karena mungkin saja file tersebut sebenarnya sudah ada di dalam sistem. Misalnya untuk sistem saya:

[intense_emphasis tag=”span”]

$ locate libusb-1.0.so

/home/sunuXx/.arduino15/packages/arduino/tools/openocd/0.9.0-arduino/lib/libusb-1.0.so

/home/sunuXx/.arduino15/packages/arduino/tools/openocd/0.9.0-arduino/lib/libusb-1.0.so.0

/home/sunuXx/.arduino15/packages/arduino/tools/openocd/0.9.0-arduino/lib/libusb-1.0.so.0.1.0

/home/sunuXx/AC6SyWbSTM32/plugins/fr.ac6.mcu.externaltools.openocd.linux64_1.10.0.201607251855/tools/openocd/lib/libusb-1.0.so

/home/sunuXx/AC6SyWbSTM32/plugins/fr.ac6.mcu.externaltools.openocd.linux64_1.10.0.201607251855/tools/openocd/lib/libusb-1.0.so.0

/home/sunuXx/AC6SyWbSTM32/plugins/fr.ac6.mcu.externaltools.openocd.linux64_1.10.0.201607251855/tools/openocd/lib/libusb-1.0.so.0.1.0

/home/sunuXx/AC6SyWbSTM32/plugins/fr.ac6.mcu.externaltools.openocd.linux64_1.8.0.201603291120/tools/openocd/lib/libusb-1.0.so

/home/sunuXx/AC6SyWbSTM32/plugins/fr.ac6.mcu.externaltools.openocd.linux64_1.8.0.201603291120/tools/openocd/lib/libusb-1.0.so.0

/home/sunuXx/AC6SyWbSTM32/plugins/fr.ac6.mcu.externaltools.openocd.linux64_1.8.0.201603291120/tools/openocd/lib/libusb-1.0.so.0.1.0

/home/sunuXx/eclipseArduino/arduinoPlugin/tools/arduino/avrdude/6.0.1-arduino5/lib/libusb-1.0.so

/home/sunuXx/eclipseArduino/arduinoPlugin/tools/arduino/avrdude/6.0.1-arduino5/lib/libusb-1.0.so.0

/home/sunuXx/eclipseArduino/arduinoPlugin/tools/arduino/avrdude/6.0.1-arduino5/lib/libusb-1.0.so.0.1.0

/lib/i386-linux-gnu/libusb-1.0.so.0

/lib/i386-linux-gnu/libusb-1.0.so.0.1.0

/lib/x86_64-linux-gnu/libusb-1.0.so.0

/lib/x86_64-linux-gnu/libusb-1.0.so.0.1.0

/usr/lib/x86_64-linux-gnu/libusb-1.0.so

[/intense_emphasis]

 

Jika file tersedia maka bisa diberikan perintah berikut untuk soft link;

[intense_emphasis tag=”span”]

$ cd /usr/lib

/usr/lib $ sudo ln /home/sunuXx/.arduino15/packages/arduino/tools/openocd/0.9.0-arduino/lib/libusb-1.0.so libusb-1.0.so

[/intense_emphasis]

 

Kembali ke permasalahan dengan Energia, tampaknya saya sedang beruntung. Energia telah merilis Energia 18 aka Energia 1.6.10E18 yang merupakan pembaharuan yang membawa perbedaan yang cukup signifikan dari versi terdahulu. Versi terbaru ini telah mendekati versi IDE yang baru dari Arduino. Misalnya sudah terdapat fasilitas line numbers dan code folding. Pengaturan pustaka dan pengaturan papan (board management) juga berubah. Sayangnya saya mendapatkan pesan adanya invalid library pada versi ini. Sebagai solusinya untuk sementara maka pustaka SPI dan WIRE saya hapus dari  .energia15/packages/energia/hardware/msp432/1.0.15/libraries/. Keduanya masih saya biarkan di folder Energia 17.

Kemudian setelah membaca beberapa pengalaman orang lain sepertinya masalah yang pertama kali saya temui sebagaimana yang telah saya ungkapkan di awal catatan ini adalah masalah yang berkaitan dengan DSlite. Pengalaman para pendahulu dapat dibaca dan dipelajari di sumber-sumber berikut:

 

Upaya penyelesaian masalah yang saya tempuh adalah dengan melakukan copy DSlite dari Energia 18 ke Energia 17.

~/energia18 $ reset;find . -iname “*DSl*”

./hardware/tools/DSLite
./hardware/tools/DSLite/DebugServer/bin/DSLite
./hardware/tools/DSLite/DebugServer/scripts/readAtBp.dsls
./hardware/tools/DSLite/DebugServer/scripts/load.dsls
./hardware/tools/DSLite/DebugServer/scripts/flash.dsls
./hardware/tools/DSLite/DebugServer/scripts/help.dsls
./hardware/tools/DSLite/DebugServer/scripts/runWithCIO.dsls
./hardware/tools/DSLite/common/uscif/libxdslocal.so

Sedangkan pada Energia 17

~/energia0101E0017 $ reset;find . -iname “*DSlite*”

./tools/common/DSLite
./tools/common/DSLite/DebugServer/bin/DSLite

 

Pada Energia 18, file DSlite akan memberikan keterangan sebagai berikut:

~/energia18 $ ./hardware/tools/DSLite/DebugServer/bin/DSLite help

DSLite version 6.2.1.1595
DSLite [operation] [Args…]

load
Loads the specified file and exits, leaving the
target running

runWithCIO
Loads the specified file and runs the target,
printing stdout to the console. Exits when the
application returns from main

flash
Performs multiple flash-based operations as
specified on the command line including
erasing, loading, verifying, and device-
specific flash operations

readAtBp
Loads the specified file and runs the target to
a specified location. Variables can be written
before the run, and others echoed to the
console after

help
Prints this message

 

wp-1471014060962.jpegGambar 1. Uji pemgrograman dengan menggunakan Energia

wp-1471012462589.jpegGambar 2. Uji pemrograman online dengan CCS Cloud di Firefox

wp-1471013479603.jpegGambar 3.  Uji online debuging (stepping) menggunakan CCS Cloud

wp-1471016447336.jpegGambar 4. Uji pengaturan (penggantian) warna LED secara online

Demikianlah catatan tinkering kali ini. Di lain kesempatan saya upayakan catatan untuk compiler, juga IDE lain. Juga uji coba pada sistem Microsoft Windows.

Uji led kedip MSP430 Launchpad MSP-EXP430G2 di GNU Linux dengan Energia [teaser]

Pada post sebelumnya saya mencatat perihal uji coba pertama dari salah satu dari seri Launchpad yang dikeluarkan oleh Texas Instruments, yaitu papan  EK-TM4C123GXL . Mikrokontroler pada papan itu berbasis pada arsitektur ARM Cortex-M4.

Untuk catatan otak atik singkat kali ini akan berisi tentang papan yang lain dari Launchpad, yaitu MSP-EXP430G2. Dalam paket terdapat dua buah mikrokontroler, yaitu MSP430G2553 dan yang lebih kecil; MSP430G2452. Uji coba dilakukan dengan IC yang telah terpasang default pada paket kiriman; MSP430G2553. Berbeda dengan mikrokontroler TM4C123GH6PM yang merupakan anggota keluarga Tiva C yang berbasis pada ARM Cortex-M4, keluarga MSP430 (termasuk  MSP430G2553) adalah μC yang menggunakan arsitektur asli dari TI, bukan dari ARM. Ini mirip dengan keluarga MCS51 (AT89S5*) dengan keluarga AVR, pada perusahaan Atmel (sebelum Atmel dibeli Microchip).

Sama seperti varian Launchpad dari keluarga Tiva C, EK-TM4C123GXL sistem MSP430 ini dapat diprogram dengan beberapa cara. Salah satu dan yang termudah adalah dengan menggunakan Energia. Pada kali ini untuk sekedar mencoba melakukan uji led berkedip, maka saya menggunakan Energia di sistem GNU/Linux

 

Catatan sistem GNU/Linux:

$ uname -a
Linux xxx 3.16.0-38-generic #52~14.04.1-Ubuntu SMP Fri May 8 09:43:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

Sebagian dari $ lsusb
Bus 003 Device 005: ID 0451:f432 Texas Instruments, Inc. eZ430 Development Tool

Sebagian dari $ dmesg
[ 5406.733241] usb 3-1: new full-speed USB device number 7 using xhci_hcd
[ 5406.940568] usb 3-1: New USB device found, idVendor=0451, idProduct=f432
[ 5406.940578] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 5406.940582] usb 3-1: Product: Texas Instruments MSP-FET430UIF
[ 5406.940586] usb 3-1: Manufacturer: Texas Instruments
[ 5406.940589] usb 3-1: SerialNumber: 5BFF4D53F4193B46
[ 5406.940880] usb 3-1: ep 0x82 – rounding interval to 1024 microframes, ep desc says 2040 microframes
[ 5406.947129] cdc_acm 3-1:1.0: This device cannot do calls on its own. It is not a modem.
[ 5406.947141] cdc_acm 3-1:1.0: No union descriptor, testing for castrated device
[ 5406.947175] cdc_acm 3-1:1.0: ttyACM0: USB ACM device

 

Potensi masalah (tantangan):

Akan mungkin aplikasi Energia akan menampilkan pesan kesalahan saat akan melakukan pengiriman hasil kompilasi kode program ke papan Launchpad. Misalnya sebagai berikut:
[intense_emphasis tag=”span”]

Trying to open interface 1 on 033
rf2500: warning: can’t detach kernel driver: Operation not permitted
rf2500: can’t claim interface: Operation not permitted
rf2500: failed to open RF2500 device

[/intense_emphasis]

 

Sebagaimana yang sangat sering saya ungkapkan, selama berkenaan dengan sains dan terutama teknologi (juga kerekayasaan / engineering), banyak permasalahan yang “baru” kita temukan sudah pernah ditemukan oleh orang lain di negara-negara yang lebih maju. Perangkat keras (hardware) maupun perangkat lunak (software) yang kita pergunakan mayoritas adalah produk impor dari negara-negara tersebut. Jadi wajar jika mereka terlebih dahulu menemukan permasalahan yang baru kita temui. Sebagian permasalahan itu pun telah mereka temukan solusinya. Sedikit perkecualian, barangkali adalah yang berkenaan dengan penerapan teknologi secara lokal. Itu pun dasar solusinya bisa jadi telah tersedia. Misalnya dataran rendah maupun dataran tinggi kita memang unik, tetapi sejauh berkenaan dengan hal teknis (seperti kelembapan, suhu, tekanan udara) tidaklah begitu unik. Kita bisa belajar dari pengalaman orang lain di tempat lain yang hampir serupa.

Karenanya untuk mengatasi masalah pesan kesalahan tadi kita bisa menemukan solusinya dengan membaca dan mencoba solusi yang diajukan di sumber-sumber berikut:

 

Serupa dengan permasalahan dengan Tiva C, pada intinya permasalahan terjadi karena ada masalah akses ke jalur komunikasi. Indikasinya adalah jika saya menggunakan privilege sebagai root dengan menggunakan perintah sudo untuk menjalankan Energia, permasalahan akses tersebut tadi tidak lagi terjadi.

Di sistem GNU/Linux, terdapat apa yang dinamakan sebagai udev. Pada dasarnya udev adalah sebuah device manager pada sistem GNU/Linux yang baru. Dengan adanya udev pengguna sistem GNU/Linux (seperti Ubuntu atau Mint) dapat mempergunakan peralatan dengan menghubungkannya (mencolokkan ) dengan komputer seperti notebook atau desktop PC  walaupun sistem komputer tersebut sudah boot up. Ini sangat memudahkan karena penggguna tidak pelu melakukan restart setiap kali ingin mempergunakan peralatan yang belum terhubung pada saat boot.

Untuk dapat berfungsi baik, maka kita perlu memberikan informasi kepada udev berupa isian dalam file rules. Pengaturan rules pada udev perlu dilakukan sesuai contoh. Misalnya seperti yang dicontohkan pada page di situs Energia.nu.

  • Download the udev rules: TI udev rules
  • Open a terminal and execute the following command: sudo mv /71-ti-permissions.rules /etc/udev/rules.d/
  • If your Linux distribution supports the service command you can active the new rules with sudo service udev restart. If your Linux distribution does not support this command or if you are not able to upload to the LaunchPad with Energia, then restart your computer to activate the rules.
  • If your board is pulled in, unplug it and plug it back in. Not needed if you rebooted your computer.
Energia.nu

 

wp-1470924578281.jpeg

Pengaturan user juga perlu dilakukan agar termasuk dalam group yang berhak untuk mengakses jalur komunikasi data. Pada percobaan yang saya lakukan, perintah sudo restart udev tidak membawa pengaruh. Setelah konfigurasi pada file di /etc/udev/rules.d/, saya masih perlu melakukan restart pada sistem GNU/Linux saya. Demikianlah catatan tinkering kali ini. Di lain kesempatan saya upayakan catatan untuk compiler, juga IDE lain. Juga uji coba pada sistem Microsoft Windows.

Uji blinking led Tiva C Launchpad EK-TM4C123GXL di GNU Linux dengan Energia [teaser]

Papan  EK-TM4C123GXL adalah salah satu dari seri Launchpad yang dikeluarkan oleh Texas Instruments. Salah satu klaim yang menarik yang dikemukakan oleh TI adalah:

The Tiva C Series LaunchPad includes everything you need to get started with ARM Cortex-M4 development!Texas Instruments

Papan ini berintikan prosesor TM4C123GH6PM yang memang dibangun dari arsitektur ARM tersebut. Lebih jauh diungkapkan bahwa:

The Tiva C Series TM4C123GH6PM microcontroller offers an 80-MHz, 32-bit ARM Cortex-M4 CPU with floating point, 256 kBytes of 100,000 write-erase cycles of flash memory, and a wide range of peripherals including motion control PWMs, 1-MSPS ADCs, eight UARTs, four SPIs, four I2Cs, USB H/D/OTG, and up to 27 timers. Texas Instruments

wp-1470913436580.jpeg

Sistem ini dapat diprogram dengan beberapa cara. Salah satu dan yang termudah adalah dengan menggunakan Energia. Pada kali ini untuk sekedar mencoba melakukan uji led berkedip, maka saya menggunakan Energia di sistem GNU/Linux. Ini juga cara pertama yang akan saya tempuh untuk mempelajari sistem Tiva C.

 

Catatan sistem GNU/Linux:

$ uname -a
Linux xxx 3.16.0-38-generic #52~14.04.1-Ubuntu SMP Fri May 8 09:43:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

$ lsb_release -a
No LSB modules are available.
Distributor ID: LinuxMint
Description: Linux Mint 17.2 Rafaela
Release: 17.2
Codename: rafaela

Sebagian dari $ lsusb
Bus 003 Device 004: ID 1cbe:00fd Luminary Micro Inc. In-Circuit Debug Interface

Sebagian dari $ dmesg
usb 3-1: new full-speed USB device number 4 using xhci_hcd
usb 3-1: New USB device found, idVendor=1cbe, idProduct=00fd
usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 3-1: Product: In-Circuit Debug Interface
usb 3-1: Manufacturer: Texas Instruments
usb 3-1: SerialNumber: 0E21404E
acm 3-1:1.0: This device cannot do calls on its own. It is not a modem.
cdc_acm 3-1:1.0: ttyACM0: USB ACM device

 

Potensi masalah (tantangan):

Ada kemungkinan aplikasi Energia akan menampilkan pesan kesalahan saat akan melakukan pengiriman hasil kompilasi kode program ke papan Launchpad. Pesan yang pernah saya terima adalah sebagai berikut:
[intense_emphasis tag=”span”]

Unable to open USB device: LIBUSB_ERROR_ACCESS
Unable to find any ICDI devices
[/intense_emphasis]

Untuk mengatasi masalah tersebut saya menemukan solusinya dengan membaca dan mencoba beberapa alternatif solusi yang diajukan di sumber-sumber berikut:

wp-1470911952099.jpeg

Pada intinya permasalahan terjadi karena ada masalah akses ke jalur komunikasi. Indikasinya adalah jika saya menggunakan privilege sebagai root dengan menggunakan perintah sudo untuk menjalankan Energia, permasalahan akses tersebut tadi tidak lagi terjadi. Pengaturan rules pada udev perlu dilakukan sesuai contoh. Pada percobaan yang saya lakukan, perintah sudo restart udev tidak membawa pengaruh. Setelah konfigurasi pada file di /etc/udev/rules.d/, saya masih perlu melakukan restart pada sistem GNU/Linux saya. Demikianlah catatan tinkering kali ini. Di lain kesempatan saya upayakan catatan untuk compiler, IDE lain. Juga uji coba pada sistem Microsoft Windows.