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.Imam Syafi'i

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.