SimulIDE sebagai solusi untuk simulasi uC AVR (Atmega328)

Seperti yang saya ungkap pada tulisan sebelumnya, di kantor kami memiliki development board berupa DI-Super Smart AVR.16. Minimum system (atau sebutan lengkapnya Minimum System Development Board) telah dilengkapi dengan 8 buah led (PC0 sampai PC7) dan 2 buah push-button (PD2 & PD3).

Tantangannya adalah bahwa jumlah papan pengembangan sistem itu terbatas, dan tentu tidak dapat dibawa pulang dengan bebas. Apa solusinya?

Solusi yang tidak gratis adalah dengan menggunakan software simulasi yang sudah tersedia secara komersial. Misalnya Proteus dari Labcenter Electronics. Perangkat lunak ini tentu sangat bagus dan mumpuni, tetapi benarkah tidak ada perangkat lunak yang gratis yang dapat dipergunakan untuk belajar?

Salah satu yang paling gampang teringat adalah WinAvr dan AVR Studio (atau Atmel Studio), jika kita menggunakan komputer dengan sistem operasi Microsoft Windows. Di laptop tua saya sendiri yang masih menggunakan Windows XP, hanya dapat di-install AVR Studio 4. Pilihan lain yang bisa dipergunakan untuk melakukan simulasi adalah SimulIDE.

SimulIDE dapat bekerja di lingkungan OS Windows maupun GNU/Linux. Tentu saja bila dibandingkan dengan Proteus (yang berbayar) ada beberapa kekurangan dari Simulide. Tetapi kekurangan ini, meurut saya, tidak begitu menjadi masalah dan halangan berarti untuk mempergunakannya.

Salah satu kekurangan yang paling menonjol menurut saya adalah bahwa mengenai mikrokontroler yang didukung. Walaupun ada beberapa uC seperti Atmega16 dan Atmega32, hingga saat ini saya belum bisa melakukan firmware loading ke dalam uC varian tersebut. Sebagai gantinya saya mempergunakan saja Atmega328 yang juga tersedia di aplikasi itu. Untuk keperluan belajar logika dan syntax pemrograman mikrokontroler keluarga AVR hal ini tidak terlalu menjadi masalah, silakan dibuktikan sendiri.

SimulIDE_2016-03-01_13-46-03

Kekurangan lain adalah, meski tidak sering, program ini beberapa kali meminta berhenti untuk bekerja. Saya sebut tidak sering karena dalam satu jam penggunaan intensif belum tentu satu kali terjadi error seperti ini. Selebihnya dapat dipergunakan dengan aman. Mungkin karena ini masih dalam pengembangan dengan status alpha.

Dengan menggunakan simulator kita dapat lebih bebas untuk melakukan pengaturan input dan output pada sistem. Misalnya, seperti terlihat saya menggunakan Port D sebagai output utama karena pada SimulIDE port ini (bersama Port B) memiliki I/O yang terbanyak dapat dipergunakan (8 pin). Sementara Port B saya atur sebagai keluaran berupa indikator tambahan, yang visualisasinya menggunakan probe. Sedangkan Port C saya pergunakan sebagai masukan, bukan dua tetapi empat yaitu PC0, PC1, PC2, dan PC3.

2016-03-01_14-57-04

Pada gambar di atas panah dengan huruf pengenal A menunjuk pada toolbar. Di sana ada beberapa icon yang dapat dipergunakan sesuai peruntukannya masing-masing. Misalnya untuk membuat file baru, membuka file, dan meyimpan file. Kita juga dapat mengatur frekuensi kerja (frekuensi kristal) pada sistem. Di sebelah paling kanan adalah tombol On/Off.

Panah dengan huruf pengenal B menunjukkan bagaimana kita bisa mengunggah (upload) file hex ke mikrokontroler. Caranya adalah saat panah berada di atas gambar komponen mikrokontroler (dan cursor berubah menjadi gambar tangan), kita melakukan right-click sehingga pilihan load/reload firmware akan tampil seperti pada gambar di atas.

Jika kita belajar dengan cara yang sistematis, maka kita bisa belajar berbagai skenario kode pemrograman dengan lebih mudah seperti contoh di bawah ini.

2016-03-01_13-57-38

Dengan menggunakan fungsi, membagi kode program ke dalam fungsi-fungsi yang berbeda, kita bisa mencoba beberapa skenario. Hal ini selain memudahkan upaya pemahaman dalam belajar juga memudahkan pemeliharaan kode program.

Misalnya kita mulai dengan mengikuti kode LED berkedip dari sistem Arduino (blink). Kode berikut yang udah dikompilasi dan hasilnya dalam bentuk file hexadesimal dapat dicoba diunggah (uploaded) ke mikrokontroler pada SimulIDE. File hex dapat diunduh di sini.

2016-03-01_13-59-07

2016-03-01_15-24-43

Variasi kode berikutnya adalah uji geser kiri dan geser kanan dengan menggunakan bit shift. Untuk fungsi ini kode akan memanggil dua fungsi lain berdasarkan kondisi “push button”. Jika kondisi push button yang di Simulide ini diwakili oleh komponen fixed voltage, menghasilkan pembacaan logika high pada PC0 maka fungsi yang dipanggil adalah fungsi yang akan menggeser satu bit 0x01 dari LSB menuju MSB (PD0 sampai PD4) satu kali setiap waktu. Sengaja diatur demikian karena fungsi ini sekaligus dipakai untuk mempelajari  perulangan for(i=0; i<5; i++).  Sebaliknya, jika pembacaan pada PC0 menghasilkan logika 0 maka tampilan pada probe akan bergeser dari MSB menuju LSB (di simulasi ini dari kiri ke kanan). File hex yang perlu diunggah ke mikrokontroler bisa diperoleh di sini.

2016-03-01_14-00-08

Pada SimulIDE (Simulide) jika dikehendaki kita dapat menggunakan fasilitas Oscope dengan cara melakukan right-click pada probe.

SimulIDE_2016-03-01_13-55-30

Variasi berikutnya sebenarnya hampir serupa dengan contoh sebelumnya. Bedanya jika pada contoh sebelumnya hanya membaca kondisi logika dari PC0 maka pada contoh ini uC membaca daru dua pin, yaitu PC0 dan PC1. Kali ini PC0 akan berfungsi sebagai master-key, jika tidak diaktifkan (kondisi high) maka pergeseran bit yang akan diperlihatkan oleh probe tidak akan terjadi. Jika PC0 sudah diaktifkan maka pengaturan arah pergeseran ditentukan oleh tingkat logika di PC1. Sama dengan contoh sebelumnya, jika kondisinya high maka pergeseran akan berlangsung dari arah LSB menuju MSB. Jika kondisinya low maka pergeseran yang dapat dilihat dengan bantuan probe akan berlangsung dari arah MSB menuju LSB. File hex bisa diambil di sini.

2016-03-01_14-00-35

Berbagai variasi manipulasi bit dan logika serta evolusi kode dapat dicoba pada AVR dengan menggunakan SimulIDE. Kuncinya adalah ketersediaan waktu dan kesediaan untuk belajar dan bekerja keras dengan efektif dan efisien. Seperti yang konon pernah diungkapkan oleh Imam Syafi’i:

Jika kamu tidak dapat menahan lelahnya belajar, maka kamu harus sanggup menahan perihnya kebodohan.<span class="su-quote-cite">Imam Syafi'i</span>

Prinsip ini tampaknya juga berlaku di bidang engineering (termasuk engineering technology).

Sebagaimana semua sistem lain (termasuk perangkat lunak), Simulide memiliki kelebihan dan kekurangan dalam perbandingan. Sebagaian bergantung pula pada peruntukan dan penggunanya. Sebagai bonus gambar, SimulIDE juga dapat dipergunakan untuk melakukan simulasi terbatas untuk sistem Arduino Uno. Pada contoh berikut tingkat tegangan yang dikeluarkan oleh volt. Source dibaca melalui A0 melalui ADC untuk kemudian ditampilkan oleh 7 segment melalui pin digital.

SimulIDE_2016-03-01_13-53-01

 

UPDATE #001

Nah kalau sebelum ini saya menunjukkan versi SimulIDE 0.0.1, maka setelah ini saya akan menunjukkan versi SimulIDE 0.0.2. Kali ini dengan sedikit usaha (mengikuti saran dari Imam Syafi’i di bagian tulisan sebelumnya), saya mencoba mengikuti konfigurasi DI-Super Smart AVR.16 dengan menggunakan komponen mikrokontroler Atmega16. Konfigurasi ini berhasil disimulasikan setelah melakukan sedikit tinkering.

2016-03-01_18-00-31

Seperti yang telah saya tulis sebelumnya, dengan menggunakan bantuan makro, kode program dapat dengan lebih mudah dikonfigurasi ulang sesuai keperluan. Misalnya kode yang sebagian besar sama dan berbeda hanya pada bagian port saja, karena memang ditujukan ke sistem (hardware atau software simulator) yang berbeda, akan jauh lebih cepat dapat diatur ulang bila dibandingkan dengan kode yang akses spesifik port-nya tersebar di banyak tempat dalam program.

2016-03-01_19-05-42

Bersi Simulide 0.0.2 ini membawa banyak fitur tambahan, silakan dicoba.

2016-03-01_18-20-24

Demikianlah tulisan ini tunai saya selesaikan. Setahun sebelum ini saya juga sudah mempergunakan SimulIDE, mudah-mudahan dengan cara ditulis dalam bentuk seperti ini maka nantinya tidak gampang dilupakan lagi.

 

Solusi Avrdude di Windows dan GNU/Linux untuk DI-Super Smart AVR.16

Di kantor, kami menggunakan alat yang bernama DI-Smart AVR System (atau dinamakan ulang sebagai DI-Super Smart AVR.16 karena menggunakan masukan dari USB port).

Dari seorang rekan, saya memperoleh software untuk memprogram (AvrOspII programmer).

2016-02-28_18-12-15

Ada beberapa masalah / tantangan yang berkaitan dengan perangkat lunak prmrogram IC mikrokontroler ini. Pertama, saya menggunakan laptop bekas IBM Thinkpad T43 dengan sistem XP original yang tentu saja sudah ketinggalan zaman. Entah apa penyebabnya yang pasti sebagian besar port urutan awal di laptop saya ini berstatus in use.

2016-02-28_18-40-35

Padahal software AvrOspII sendiri dibatasi hanya dapat menggunakan sampai port 16.

2016-02-28_18-55-20

Untuk masalah ini, mengikuti saran rekan saya yang sebelumnya memberi program ini maka solusi yang saya gunakan adalah dengan brute force, alias main paksa. Saya menetapkan untuk menggunakan port COM 2 walaupun statusnya in use. Cara ini berhasil, saya tidak mendapat masalah memprogram uC dengan port COM 2.

2016-02-28_18-55-35

Dari screenshot di atas, bisa diperoleh beberapa informasi yang nantinya dapat dipergunakan juga di sistem lain. Port yang dipakai oleh laptop untuk berkomunikasi dengan minimum system DI-Super Smart AVR.16 adalah port COM 2. Baud rate yang dipergunakan adalah 115 200. Protokol komunikasi yang dipakai adalah AVR911.

img_20160225_204709.jpg

Sekedar untuk memastikan secara cepat bahwa cara ini berhasil, saya memprogram Atmega16 di sistem itu dengan blinking LED.

Masalah berikutnya adalah bagaimana caranya agar sistem ini dapat dipergunakan di sistem dengan OS GNU/Linux seperti Debian, Ubuntu atau Mint tanpa masalah. Solusi paling probable adalah dengan menggunakan aplikasi Avrdude. Perangkat lunak kecil ini dapat bekerja dengan baik pada lingkungan bersistem operasi Windows maupun GNU/Linux. Bahkan sebenarnya, jika kita telah menginstal Arduino IDE (Genuino IDE), maka berarti otomatis avrdude telah ada di sistem kita.

Tantangannya adalah pertama mengetahui apakah DI-Super Smart AVR.16 dapat diprogram dengan avrdude, kedua apa konfigurasi perintah yang tepat untuk memprogram? Tantangan pertama diperkirakan dapat diatasi mengingat tampaknya DI-Super Smart AVR.16 menggunakan protokol AVR911, seperti yang informasi yang diperoleh pada setting AvrOspII. Tantangan kedua yang ternyata (untuk saya) perlu berjam-jam untuk mencoba dan mengingat kembali cara-cara yang pernah dicoba.

Singkat cerita, ternyata kita bisa memprogram DI-Super Smart AVR.16 dengan mempergunakan avrdude (yang jika diperlukan bisa diunduh / downloaded di sini) baik di sistem dengan OS Windows (diuji di XP) maupun di sistem dengan OS GNU/Linux (diuji di Mint). Yang paling penting adalah dengan menggunakan konfigurasi yang tepat terutama tentang protokol. Saya berhasil dengan cara menggunakan protokol AVR910.

Di sistem Windows, kita bisa mempergunakan IDE atau editor lain yang sesuai. Jika dilakukan secara manual dengan cmd, gunakan perintah berikut (tanpa tanda titik di akhir):
avrdude -p m16 -c avr910 -P com2 -b 115200 -U flash:w:a.hex  .
File a.hex hanyalah permisalan nama file hex yang perlu anda program ke Atmega16 pada DI-Super Smart AVR.16. Sekedar sebagai perbandingan ada salah satu text editor yang memberikan konfigurasi otomatis seperti ini:
avrdude $(AVRDUDE_FLAGS) -U flash:w:$(TARGET).hex.

Di sistem GNU/Linux konfigurasinya agak sedikit berbeda, dengan asumsi DI-Super Smart AVR.16 berkomunikasi melalui /dev/ttyUSB0 (USB nomor nol). Berikut konfigurasi yang bisa anda ketik di terminal:
$ avrdude -c avr910 -p m16 -b 115200 -P /dev/ttyUSB0 -U flash:w:a.hex

Nah, kalau hanya ini masalahnya maka anda tidak perlu beralih dari sistem dengan OS GNU/Linux dan membajak OS, atau malah membeli lisensi dengan uang tabungan. Masih ada jalan yang possible, dan lebih dari itu, probable.

wp-1456446197329.jpeg

UPDATE 16-03-2016

2016-03-16_11-44-02

2016-03-16_11-55-57

2016-03-16_12-03-07