DT COMBO AVR 51

Pada post sebelumnya, saya sudah membuat catatan mengenai sistem papan DST-51. Sedang pada post ini saya membuat catatan mengenai DT-COMBO AVR-51. Papan ini juga merupakan papan lama yang saya miliki saat belajar beralih dari arsitektur MCS-51 (seperti AT89C52/AT89S52) ke arsitektur Atmel AVR. Sebelum papan Arduino banyak tersedia dengan harga yang relatif terjangkau seperti sekarang ini, papan yang disebut minimum sistem adalah papan mikrokontroler yang tersedia untuk belajar. Peningkatan dari minimum sistem dengan beberapa pelengkap seperti DT-COMBO AVR-51, lebih memudahkan bagi mereka yang belajar.

Catatan ini saya buat karena sistem ini sudah semakin tua, dikhawatirkan manual akan semakin sulit ditemukan. Selain itu ada hack kecil hasil tinkering yang semakin memudahkan penggunaan sistem ini.

http://www.innovativeelectronics.com/innovative_electronics/images/DT-COMBO/DT-COMBO%20AVR-51.gifGambar 1. Penampakan asli [sumber]

Salah satu keunggulan papan seperti ini untuk belajar adalah sudah tersedianya komponen-komponen tambahan yang memudahkan proses belajar. Bahkan di tahap lanjutan juga akan mempermudah proses prototyping. Misalnya adalah keberadaan push-button dan LED, seperti yang terlihat di Gambar 1.

Gambar 2.

Papan DT-COMBO milik saya terlihat di Gambar 2. Ada dua hal yang saya kombinasikan di sistem itu, yang pertama adalah soket ZIF seperti yang juga terlihat di Gambar 3. Soket ini memudahkan proses untuk mengganti-ganti IC yang dipakai pada papan sistem, juga mengurangi kemungkinan (kaki) IC rusak pada saat bongkar-pasang di papan.

Gambar 3.

Gambar 4.

Pada Gambar 2, dan lebih jelas lagi pada Gambar 4, terlihat bahwa saya mempergunakan USBasp untuk melakukan pemrograman di papan sistem DT-COMBO (menggunakan header yang tersedia). USBasp bisa dibuat sendiri karena rancangannya telah sengaja disebarluaskan di Internet.

Gambar-gambar berikut saya kutip dari manual yang juga saya cantumkan link-nya di bagian bawah post ini.

Gambar 5. Port

Gambar 6.

 

Gambar 7.

Gambar 8.

 

Manual dan file-file untuk DT-COMBO AVR-51:

 

 

 

 

 

Arduino Uno plus ZIF socket

Tinkering ini bisa jadi tergolong pada proyek “ya karena saya bisa” (just because I can). Sekalipun masih tetap bermanfaat, utak-atik ini lebih merupakan kesenangan dan keisengan.

Gambar 1.

Gambar 2.

 

Arduino (dan sistem yang kompatibel dengannya) sebenarnya terdiri dari dua bagian yang utuh menjadi satu. Di satu bagian adalah hardware, perangkat keras, berupa papan Arduino. Di satu bagian lain adalah software (perangkat lunak), yang juga terdiri dari dua bagian yaitu firmware/bootloader yang terdapat di papan Arduino dan bagian lain adalah Arduino IDE yang dipakai oleh pengguna untuk menyusun program yang akan dimasukkan ke mikrokontroler (papan Arduino). Umumnya Arduino IDE-lah yang lebih dikenal sebagai bagian software.

Karena itu papan Arduino dapat dipakai tanpa mempergunakan bootloader {{1}} dan sistem masih berfungsi dengan baik. Misalnya pada Arduino Mega, Arduino Uno, Arduino Nano, dan Arduino Micro, pengguna bisa langsung menggunakan mikrokontroler AVR dari keluarga ATmega. Pengguna bisa mempergunakan header untuk port ISP/ICSP untuk melakukan pemrograman μC tanpa bantuan bootloader untuk melakukan pemrograman melalui USB port.

Dari Gambar 2, bisa dilihat bahwa kabel pita/kabel pelangi dihubungkan semi permanen ke ICSP port di papan Arduino agar dapat memudahkan proses pemrograman dengan perangkat keras pemrogram seperti USBasp. Dengan demikian papan Arduino Uno bisa juga difungsikan sebagai papan untuk memprogram mikrokontroler Atmel AVR ATmega328P tanpa bootloader Arduino.

Berikutnya adalah mengenai ZIF socket. Pada Gambar 1 dan Gambar 2, bisa dilihat ZIF (Zero Insertion Force) {{2}} adalah benda berwarna hijau tempat IC mikrokontroler dipasang. ZIF memudahkan pengguna untuk memindahkan dan memasang kembali IC. Jadi, untuk mempergunakan papan Arduino Uno sebagai papan mikrokontroler tanpa bootloader Arduino, soket ZIF sebenarnya tidak diperlukan. Itu sebabnya di awal saya sebut utak-atik ini sebagai “just because I can”.  Tetapi, lagi, ZIF memudahkan jika saya hendak mengganti IC yang sedang diprogram. Segala yang mempermudah dan mempercepat proses layak untuk dipertimbangkan untuk dimiliki atau dibuat.

[[1]]Not using a bootloader: If you want to use the full program space (flash) of the chip or avoid the bootloader delay, you can burn your sketches using an external programmer. ~Arduino.cc [[1]] [[2]]Stands for “Zero Insertion Force.” ZIF is a type of CPU socket on a computer motherboard that allows for the simple replacement or upgrade of the processor. Processors that use a ZIF socket can easily be removed by pulling a small release lever next to the processor and lifting it out. The replacement processor is then placed in the socket and secured by pushing the lever in the opposite direction — hence the phrase, “zero insertion force.” I suppose there is some force required to push the lever, but it is significantly less than non-ZIF sockets, which require special tools to force the processor out. ~techterms.com [[2]]

 

ATtiny85 development board

[ [ images & links ] ]
[su_panel border=”3px solid #66FF00″ radius=”10″]

Gambar 1.

Gambar 2.

https://i.stack.imgur.com/gpt63.pngGambar 3.

[/su_panel] [su_panel border=”3px solid #30C0F0″ radius=”10″]

Gambar 4.

Gambar 5.

Gambar 6.

Gambar 7.

Gambar 8.

Gambar 9.

[/su_panel] [su_panel border=”3px solid #FF6666″ radius=”10″]

Gambar 10.

Gambar 11.

Jika tertarik untuk mempergunakan papan yang mikrokontrolernya dapat diisi bootloader yang stabil, bisa membaca di halaman ini.

[/su_panel]

[su_panel border=”3px solid #990066″ radius=”10″]

https://cdn.sparkfun.com/assets/f/8/f/d/9/52713d5b757b7fc0658b4567.pngGambar 12. ATtiny85 Use Hints

Gambar 13.

Gambar 14. [sumber]

http://orig06.deviantart.net/82c9/f/2013/038/3/7/attiny_web_by_pighixxx-d5u4aur.pngGambar 15.

[/su_panel]

 

Digispark

[ [ images & links ] ]
[su_panel border=”3px solid #FFCC00″ radius=”10″]

Image result for digisparkGambar 1. [sumber]

Image result for digisparkGambar 2. [sumber]

Image result for digisparkGambar 3. [sumber]

Image result for digispark attiny85 kickstarterGambar 4. [sumber]

Image result for digispark attiny85 kickstarterGambar 5. [sumber]

Pin outs:

  • All pins can be used as Digital I/O
  • Pin 0 → I2C SDA, PWM (LED on Model B)
  • Pin 1 → PWM (LED on Model A)
  • Pin 2 → I2C SCK, Analog In
  • Pin 3 → Analog In (also used for USB+ when USB is in use)
  • Pin 4 → PWM, Analog (also used for USB- when USB is in use)
  • Pin 5 → Analog In

Gambar 6.Gambar 7.

Program Upload

As opposed to most arduinos, to upload a new program to the device this should not be connected to the USB port. With the device unpluggled click on upload in the Arduino IDE and then connect the device to the USB port. The system will automatically detect it and upload the code.

[/su_panel] [su_panel border=”3px solid #30C0F0″ radius=”10″]

Gambar 8. Koneksi dengan USBasp

Gambar 9.

Gambar 10.

[/su_panel] [su_panel border=”3px solid #FF6666″ radius=”10″]

Gambar 11.

Gambar 12. Jika menggunakan “t85_aggressive.hex”, pemrograman berlangsung otomatis

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(0, OUTPUT); //LED on Model B
  pinMode(1, OUTPUT); //LED on Model A  or Pro
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(0, HIGH);   // turn the LED on (HIGH is the voltage level)
  digitalWrite(1, HIGH);
  delay(400);               // wait for a second
  digitalWrite(0, LOW);    // turn the LED off by making the voltage LOW
  digitalWrite(1, LOW); 
  delay(400);               // wait for a second
}
[/su_panel] [su_panel border=”3px solid #990066″ radius=”10″]

Linux Rules

If you are running GNU/Linux and getting errors on upload or other strange results you might need to add the USB device to udev. You must place the udev rules below into a file named /etc/udev/rules.d/49-micronucleus.rules

Create the /etc/udev/rules.d/49-micronucleus.rules file with this content (setting up the correct permissions for user and group if desired):

# UDEV Rules for Micronucleus boards including the Digispark.
# This file must be placed at:
#
# /etc/udev/rules.d/49-micronucleus.rules    (preferred location)
#   or
# /lib/udev/rules.d/49-micronucleus.rules    (req'd on some broken systems)
#
# After this file is copied, physically unplug and reconnect the board.
#
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666"
KERNEL=="ttyACM*", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
#
# If you share your linux system with other users, or just don't like the
# idea of write permission for everybody, you can replace MODE:="0666" with
# OWNER:="yourusername" to create the device owned by you, or with
# GROUP:="somegroupname" and mange access using standard unix groups.

Then restart the system or run this command to apply the rules:

udevadm control --reload-rules

[/su_panel]

Mengisi ulang bootloader papan Arduino Uno

Sebelum memulai, pertanyaan yang mungkin timbul adalah mengapat kita perlu mengisi ulang/membakar (burn) bootloader untuk Arduino Uno? Sebelumnya apakah bootloader itu sendiri? Mari mulai dari istilah firmware, secara singkat firmware adalah program yang paling awal diisikan ke sebuah mikrokontroler, program ini bersifat permen (atau tepatnya semi-permanen). Sekali diisikan, program ini tidak mudah untuk diubah seperti program lain. Menurut sumber di Arduino.cc ini, “So named because you couldn’t change it once it had been programmed in the chip.”

Lebih lengkap lagi bisa dipelajari dari sumber ini:

Lalu bagaimanakah bootloader menurut Arduino sendiri ? Jawabannya bisa dibaca di sini:

What’s a bootloader?

Microcontrollers are usually programmed through a programmer unless you have a piece of firmware in your microcontroller that allows installing new firmware without the need of an external programmer. This is called a bootloader.

Not using a bootloader

If you want to use the full program space (flash) of the chip or avoid the bootloader delay, you can burn your sketches using an external programmer.

Secara sederhana bootloader Arduino memudahkan pengguna (programmer) untuk memprogram mikrokontroler di papan sistem. Pengguna tidak perlu hardware programmer lainnya, cukup menggunakan kabel USB (dahulu kabel serial) ke papan sistem Arduino. Kecuali pengguna memilih untuk memprogram tanpa bantuan bootloader.

Kembali ke pertanyaan awal, mengapa perlu mengisi ulang bootloader ? Sekenario yang bisa terjadi adalah karena adanya kerusakan pada bootloader, meskipun kemungkinannya kecil. Kemungkinan lain adalah karena mikrokontroler asli pada papan Arduino mengalami kerusakan. Jika mikrokontroler yang dipergunakan adalah versi DIP. Salah satu penjual di salah satu toko online menjual μC ATmega328P dengan harga kurang dari dua puluh ribu rupiah (di luar ongkos kirim). Bisa juga karena ingin menggunakan μC ATmega328P yang berisi bootloader Arduino di tempat lain, misalnya seperti yang ditulis di link ini dan link ini. Lalu kemungkinan ketiga adalah karena ingin/perlu mengganti bootloader dengan versi lain.

  Bootloader (firmware) untuk Arduino:    <<klik di sini untuk membuka>>
Sekarang dengan menggunakan AVRDUDE dan AVRDUDESS kita melihat kondisi awal (kosong) dari mikrokontroler ATmega328P.

Gambar 1.

Bandingkan dengan kondisi default sebagaimana yang bisa dilihat di sini:

Gambar 2.

Gambar 3.

Pada Gambar 3, untuk mengisi bootloader pilih board yang sesuai dengan papan yang hendak diisi lalu pilih item menu Burn Bootloader. Gambar 4 menunjukkan proses pengisian berlangsung lancar.

Gambar 4.

Gambar 5.

Dapat dilihat di Gambar 5 kondisi fuse bits & lock bits setelah Arduino Nano diisi dengan bootloader, bandingkan dengan kondisi yang terlihat pada Gambar 1.

Gambar 6.

Makna dari konfigurasi bits dapat dilihat pada Gambar 6. Konfigurasi seperti ini dapat dengan lebih mudah diatur dengan bantuan fasilitas yang tersedia secara online, misalnya fusecalc atau Engbedded Atmel AVR® Fuse Calculator. Meskipun fasilitas bantuan seperti ini tidak selalu dapat sepenuhnya menggantikan keperluan untuk membaca datasheet. Bahkan sering kali kita juga perlu belajar dari pemahaman dan pengalaman orang lain yang telah mencoba terlebih dahulu, jadi bukan hanya belajar kepada pegawai dari produsen saja. Sebagai contoh, untuk memahami tentang CKSEL pada Gambar 6, kita bisa membaca di halaman ini. Dalam kutipan berikut bisa diketahui konfigurasi seperti pada Gambar 6, CKSEL=1111 diartikan bahwa frekuensi dapat dipilih berdasarkan nilai crystal antara 8 MHz sampai 16 MHz.

Gambar 7. Uji coba bootloader yang baru diisikan pada Arduino Uno

Sekadar sebagai pembanding cara-cara untuk mengisi bootloader Arduino bisa dibaca di sini: Installing an Arduino Bootloader.

Berikutnya adalah percobaan untuk menggunaakan bootloader Optiboot. Saya akan mencobanya di Arduino Nano dengan ATmega328P 5 V.

Gambar 8. Kondisi awal Arduino Nano ATmega328P

Gambar 9. Lock bits berubah setelah penghapusan isi

Gambar 10. Pengaturan konfigurasi untuk pengisian bootloader

Gambar 11.

Pada Gambar 11, terlihat adanya pesan kesalahan (failed). Meskipun begitu sebenarnya proses pengisian bootloader optiboot telah berhasil. Pesan kesalahan terjadi karena pengaturan efuse (extended fuse) yang sesungghuhnya tidak benar-benar mengakibatkan kesalahan. Solusi dari permasalahan ini adalah pengaturan konfigurasi di boards.txt:

## Optiboot for ATmega328p
## ---------------------------------------------
optiboot32.menu.cpu.atmega328p=ATmega328p
optiboot32.menu.cpu.atmega328p.upload.maximum_size=32256
optiboot32.menu.cpu.atmega328p.upload.maximum_data_size=2048

optiboot32.menu.cpu.atmega328p.bootloader.high_fuses=0xDE
optiboot32.menu.cpu.atmega328p.bootloader.extended_fuses=0xFD
optiboot32.menu.cpu.atmega328p.bootloader.file=optiboot/optiboot_atmega328.hex

optiboot32.menu.cpu.atmega328p.build.mcu=atmega328p

Untuk mempelajari lebih lanjut tentang masalah ini silakan baca: <<klik di sini untuk membuka>>

Gambar 12. Pengisian bootloader dengan USBasp, AVRDUDE dan AVRDUDESS

Gambar 13.

Gambar 13 menunjukkan proses bootloader burning setelah perbaikan boards.txt, tidak ada pesan kesalahan sama sekali; bandingkan dengan Gambar 11.

Gambar 14. Pengisian program menggunakan bootloader Arduino otiboot melalui ttyUSB0

Gambar 15. Upload program Arduino melalui USB port (ttyUSB0)

Graphical User Interface untuk upload program Atmel AVR

[intense_panel shadow=”5″ border=”1px solid #a8a5a5″ margin_top=”1″]

Seperti yang sudah disebutkan pada post terdahulu, perintah pada AVRDUDE dapat diberikan langsung melalui terminal di sistem GNU/Linux (misalnya Ubuntu atau Mint). Tetapi ada kalanya cara point-and-click lebih menarik, lebih menyenangkan atau bahkan mempermudah. Di sistem Microsoft Windows maupun GNU/Linux terdapat beberapa GUI (Graphical User Interface) yang bisa dipergunakan. Di sistem Windows terdapat lebih banyak program GUI yang saya temukan daripada GUI untuk GNU/Linux.

Salah satu yang dapat bekerja baik di sistem Windows maupun GNU/Linux adalah AVRDUDESS. Blog untuk avrdudess (termasuk program untuk di-download) ada di link ini. Sedangkan kode sumber program ada di GitHub.

Sebagai contoh akan saya pakai untuk memprogram sistem papan ATtiny2313A dan ATmega8, keduanya mikrokontroler produksi Atmel (saat saya menulis halaman ini perusahaan itu telah beberapa waktu yang lalu dibeli oleh Microchip)

[/intense_panel] [su_panel border=”3px solid #33CCFF” radius=”10″]

Yang pertama adalah uji coba menggunakan papan ATtiny2313A. Papan ini saya buat sebelum sistem papan Arduino banyak tersedia dengan harga yang relatif sudah murah seperti sekarang ini. Selain mikrokontroler ATtiny2313A papan itu saya buat berisi LED dan pushbutton. Waktu itu lumayan untuk mempelajari AVR sekaligus engingat kembali cara merancang PCB sederhana.

Gambar 1.

Di Gambar 1 dapat dilihat beberapa tombol pilihan untuk mengoperasikan AVRDUDE melalui AVRDUDES. Pertama, pastikan terlebuh dahulu bahwa perangkat programmer yang kita pilh sudah benar-benar sesuai dengan perangkat keras yang kita pakai. Dalam hal ini saya menggunakan USBasp. Kedua pilihlah Bit Clock yang sesuai, sebab beberapa sistem target tidak dapat merespon dengan baik jika diatur terlalu cepat. Kurangi frekuensi jika target dilaporkan tidak merespon dengan baik. Tiga, pilihan opsi -e untuk melakukan penghapusan dapat dipakai untuk beberapa skenario. Misalnya untuk sekadar menghapus program pada μC target tanpa mengisi ulang program. Bisa juga dipakai untuk memastikan bahwa isi sebelumnya benar-benar telah terhapus. Saya menemui beberapa papan yang akan beberapa kali mengalami kesalahan jika tidak diperintah dengan opsi ini.

Empat, perhatikan tulisan perintah untuk avrdude. Inilah perintah manual yang akan dieksekusi yang berasal dari pilihan yang dilakukan oleh pengguna melalui bantuan GUI avrdudess. Perhatikan opsi -B ditulis dengan cara berbeda, berkebalikan dari pilihan via GUI pada langkah dua. Lima, tekan tombol detect untuk secara otomatis mendeteksi tipe mikrokontroler yang sudah terhubung di programmer. Tombol ini juga saya pakai untuk mencoba kondisi sistem pemrograman, apakah sudah terhubung dengan baik dan apakah μC dalam kondisi baik dan siap untuk diprogram. Enam, yang saya tandai dengan kotak berwarna merah itu berfungsi untuk mengetahui konfigurasi fuse pada μC. Di sistem Atmel AVR fuse memegang peranan penting, dan kesalahan pada pengaturannya seringkali membuat μC tidak lagi mudah untuk diprogram (perlu perangkat berbeda untuk fuse reset).

Gambar 2.

Hasil eksekusi program terlihat di Gambar 3, pin: PB2, PB3, PB4, PB5.

Gambar 3. Papan ATtiny2313A

[/su_panel] [su_panel border=”3px solid #D8067D” radius=”10″]

Pengoperasian avrdudess (Gambar 4) untuk sistem papan ATmega8 tidak berbeda dari sebelumnya (Gambar 1). Berbeda dengan ATmega328P yang memiliki memori program sebesar 32 KB, ATmega8 hanya memiliki 8 KB, sekalipun secara fisik keduanya sama. Di pasaran lokal Indonesia (saat saya menulis ini) harganya sudah tidak jauh berbeda, selilish sekitar lima ribu rupiah.

Gambar 4.

Hasil eksekusi terlihat pada Gambar 5; LED pada PC0, PC1, PC2, PC3, PC4, PC5.

Gambar 5.

[/su_panel]

Visual Studio Code dan PlatformIO

Beberapa waktu lalu saya sempat membuat catatan pengenalan tentang PlatformIO. Saat itu PlatformIO dikombinasikan dengan text editor Atom. Untuk kali ini saya akan memperkenalkan kombinasi antara PlatformIO dengan Visual Studio Code. Berbeda dengan Sublime Text, VSCode benar-benar gratis, bebas pakai seperti Atom. VS Code tersedia untuk sistem Windows, GNU/Linux maupun Mac.

PlatformIO memungkinkan pengguna untuk melakukan pemrograman terhadap mikrokontroler Atmel AVR. Bahkan lebih dari itu, ada banyak sistem lain selain AVR yang semakin mudah untuk diprogram dengan bantuan PlatformIO. Berikut saya kutip dari PlatformIO IDE for VSCode:

The next generation integrated development environment for IoT

PlatformIO is an open source ecosystem for IoT development.
Cross-platform build system and unified debugger. Remote unit testing and firmware updates.

Atmel AVR & SAM, Espressif 8266 & 32, Freescale Kinetis, Intel ARC32, Lattice iCE40,
Maxim Integrated MAX32, Microchip PIC32, Nordic nRF51, Nordic nRF52, NXP LPC, Silicon Labs EFM32, ST STM32,
TI MSP430 & Tiva, Teensy, Arduino, ARM mbed, libOpenCM3, ESP8266, etc.

Features

  • Cross-platform code builder without external dependencies to a system software:
    • 400+ embedded boards
    • 20+ development platforms
    • 10+ frameworks
  • PIO Remote™
  • PIO Unified Debugger
  • Unit Testing
  • C/C++ Intelligent Code Completion
  • C/C++ Smart Code Linter for rapid professional development
  • Library Manager for the hundreds popular libraries
  • Multi-projects workflow with multiple panes
  • Themes support with dark and light colors
  • Serial Port Monitor
  • Built-in Terminal with PlatformIO Core tool (pio, platformio)

Proses instalasi PlatformIO untuk VSCode cukup mudah, ikuti saja urutan langkah pada Gambar 1.

../_images/platformio-ide-vscode-pkg-installer.pngGambar 1. Instalasi [sumber]

Gambar 2.

Untuk memulai suatu proyek dengan PlatformIO, pengguna perlu membuka suatu direktori/folder dalam file system agar semua file proyek bisa disimpan. Pengguna bisa membuat folder baru dari aplikasi file browser tersendiri di luar VSCode, atau membuka folder yang sudah ada lalu mencari tempat untuk membuat folder yang baru dari dalam VSCode dengan menggunakan Open Folder (Gambar 2).

Gambar 3.

Setelah pengguna memilih sebuah folder untuk proyek (entah folder yang sudah ada atau yang baru dibuat), selanjutnya pengguna bisa membuat file atau folder baru. Caranya  seperti tampak pada Gambar 3, pilih icon yang sesuai (silakan hoover mouse di atas icon untuk mengetahui).

Gambar 4.

Awal pembuatan proyek yang akan menempatkan file-file di dalam folder dimulai dengan menekan Crtl+Shift+P, lalu memilih menu yang sesuai seperti pada Gambar 4. Yang lebih mudah adalah dengan menggunakan shortcut keys Ctrl+Alt+I.

Gambar 5.

Di Gambar 5 terlihat bahwa pengguna bisa memilih mikrokontroler atau sistem papan yang sesuai setelah PlatformIO menyelesaikan proses inisialisasi. Di bar bagian bawah akan muncul tulisan Selecting a board – PlatformIO Project initialization….

Gambar 6.

Pengaturan tentang bagaimana PlatformIO membantu pengguna di atur di dalam file platformio.ini seperti pada Gambar 6. Pengguna dapat memilih untuk menggunakan framework seperti bootloader dari Arduino atau mengakses langsung mikrokontroler. Dengan cara itu pengguna/pemrogram dapat memilih dari banyak mikrokontroler tanpa perlu/harus menggunakan framework.

Pertama pengguna memilih platform yang ingin dipergunakan, misalnya untuk mikrokontroler Atmel AVR di PlatformIO platform dinamai sebagai atmelavr. Berikutnya adalah framework, sebagai contoh adalah Arduino. Jangan khawatir, pengguna tidak perlu mempergunakan (mengaktifkan)  framework jika memang tidak diinginkan. Ini hanyalah cara PlatformIO untuk mengorganisasi prosesor (mikrokontroler) dan sistem. Setelah platform dan framework berikutnya pengguna memilih board. Contoh adalah boards dari Adafruit, Arduino, EnviroDIY adan SparkFun, yang untuk masing-masing papan (board) diberi nama pengenal yang berbeda. Jika ingin membaca keterangan mengenai boards berdasar pada platform atmelavr, silakan baca halaman di link ini. Sedangkan jika ingin membaca boards yang diurutkan dalam framework yang sama (sebagai contoh Arduino) maka bisa dibaca di link ini.

Jika pengguna ingin memprogram mikrokontroler ATmega328P, maka dapat memilih board mana saja yang menggunakan mikrokontroler tersebut. Contohnya boards dari Adafruit: metro, protrinket5; dari Arduino: diecimilaatmega328, miniatmega328, nanoatmega328, pro8MHzatmega328, uno; dari SparkFun: uview. Kesemuanya bisa dipilih karena mempergunakan mikrokontroler yang sama sesuai keperluan (ATmega328P). Jika akan menggunakan pemrograman murni dengan GCC C (cara pure AVR), opsi framework di dalam file platformio.ini dapat dihapus atau dijadikan sebagai komentar.

Jadi seperti pada Gambar 5, pengguna yang ingin memprogram ATmega32 dapat memilih board mightycore32,  dari MCUdude. MightyCore adalah core atau bootloader untuk framework Arduino yang ditujukan untuk dipergunakan pada mikrokontroler seperti ATmega16, ATmega32 dan ATmega8535. Seperti terlihat pada Gambar 6, framework Arduino bisa tidak dipakai (opsinya dijadikan komentar) sehingga pengguna langsung memprogram μC dalam bahasa C (dengan compiler GCC).

Gambar 7.

Setelah selesai tahap inisialisasi, folder scr masih kosong. Pengguna perlu membuat setidaknya satu file sumber (main.c) dengan cara memilih menu New File seperti pada Gambar 7.

Gambar 8.

Pada Gambar 8 diperlihatkan jika pengguna melakukan klik untuk membuka file main.c maka kode bisa ditulis di dalam workspace.

Gambar  9.

Perhatikan bahwa proses build berhasil dilakukan walaupun frekuensi mikrokontroler dalam program pada Gambar 9 diatur sebesar 40 MHz untuk Atmega32 yang memiliki frekuensi CPU maksimum sebesar 16 MHz. Karena itu kecuali kesalahan syntax, pemrogram masih perlu sangat berhati-hati dan mengandalkan diri sendiri. Modifikasi kode untuk contoh dalam file main.c sebagai berikut.

//#ifndef F_CPU
#define F_CPU 1000000UL
//#endif

#include <avr/io.h>
#include <util/delay.h>

int main()
{
    DDRB = 0xFF;

    while(1)
    {
        // PORTB = 0x00;
        PORTB ^= (1<<PB5);
        _delay_ms(500);
    }
}

Gambar  10. Modifikasi untuk mikrokontroler ATmega16

Gambar 10 menampilkan proyek yang baru untuk ATmega16 dengan dasar kode yang sama dengan proyek untuk ATmega32 (Gambar 8). Penyesuaian dilakukan untuk frekuensi kerja mikrokontroler sehingga pengaturan untuk penundaan (delay) akan tepat.

Gambar  11. Hasil upload dengan avrdude dan usbasp

PlatformIO di VS Code juga mendukung proses upload kode ke mikrokontroler target, dengan menggunakan avrdude seperti terlihat pada Gambar 11. Uji coba dengan μC Atmel AVR ATmega16 berhasil dengan baik (Gambar 12).

Gambar  12. Uji upload dengan Atmega16 + LED

Gambar  13. Upload dengan Eclipse IDE sebagai pembanding

Gambar  14.

Proses uploading dengan avrdude tidak selalu berhasil dengan lancar. Kadang-kadang terjadi kegagalan dengan beberapa pesan kesalahan. Hal ini terutama terjadi karena masalah komunikasi dengan target. Gambar 13 memperlihatkan proses uploading menggunakan avrdude yang diatur dari konfigurasi internal di Eclipse. Cara ini bisa dipakai sebagai pembanding untuk menentukan sumber kesalahan. Gambar 14 memperlihatkan cara yang lebih ringan daripada cara pada Gambar 13. Di GNU/Linux seperti Ubuntu atau Mint pengguna cukup membuka terminal dan mengetik perintah sebagai berikut:

avrdude -p m16 -P usb -c usbasp -B 10

Perintah ini akan menghasilkan keluaran seperti pada Gambar 14. Salah satu sumber kegagalan upload program adalah karena kecepatan pengiriman data. Solusinya adalah dengan mencoba mengatur kecepatan dengan opsi -B. Semakin besar nilainya, maka akan semakin rendah frekuensinya. Di Gambar 14 terlihat untuk -B 10, frekuensi SCK diatur menjadi 93750 Hz. Pengguna bisa mencoba-coba dari nilai -B yang besar kemudian secara bertahap dikurangi.

Opsi lain adalah -v, yaitu verbose yang berfungsi memberikan keterangan lebih banyak saat perintah avrdude dieksekusi.

avrdude -p m16 -P usb -c usbasp -B 10 -v

Opsi -e berguna untuk memberi perintah penghapusan chip. Ini berguna karena beberapa kali terjadi kesalahan akibat avrdude gagal melakukan pemeriksaan ulang kode program yang sudah diunggah ke mikrokontroler. Di dalam file platformio.ini opsi -e saya cantumkan untuk lebih menjamin keberhasilan proses upload kode.

avrdude -p m16 -P usb -c usbasp -B 10 -e

Perintah upload kode sebenarnya juga bisa dilakukan dengan menggunakan CLI pada terminal. Cukup gunakan opsi -U dan nama program.

avrdude -p m16 -P usb -c usbasp -B 10 -U flash:w:firmware.hex

Untuk lebih mudahnya, lakukan pemanggilan dari dalam direktori/folder yang sama dengan letak file *.hex.

Gambar  15.

Gambar  16. Build dan upload untuk Atmel ATmega328P

Gambar 16 menunjukkan PlatformIO dapat dipakai untuk memprogram mikrokontroler Atmel ATmega328P tanpa framework.  Kode program tidak jauh berbeda, hanya seperti modifikasi yang terdahulu, perlu menyesuaikan setting frekuensi kerja dari CPU (mikrokontroler). Isi file platformio.ini untuk memprogram mikrokontroler ATmega328P tanpa bootloader Arduino:

[env:metro]
platform = atmelavr
board = metro
; framework = arduino
upload_protocol = usbasp
upload_flags = -e -P usb -B 10

Gambar  17. Pemrograman mikrokontroler ATmega328P dengan memanfaatkan papan Arduino Uno

Gambar 17 menampilkan cara memprogram ATmega328P dengan menggunakan papan Arduino UNO. Perlu diingat, hanya karena menggunakan papan Arduino Uno tidak berarti pemrograman dilakukan dengan menggunakan Arduino sebagaimana normalnya (menggunakan port USB). Perhatikan bahwa di dalam file konfigurasi platformio.ini, baris framework = arduino dijadikan komentar sehingga tidak akan ikut dieksekusi. Artinya framework berupa bootloader Arduino tidak akan dipakai dalam pemrograman ini. Bahkan isi (termasuk bootloader Arduino) dari mikrokontroler ATmega328P telah dihapus semuanya sebelum diisi program yang baru.

Gambar  18. Upload untuk ATtiny2313A

Gambar  19. Papan latih dengan mikrokontroler ATtiny2313A

Gambar 18 dan Gambar 19 menunjukkan pemanfaatan PlatformIO untuk melakukan pemrograman pada mikrokontroler Atmel AVR ATtiny2313A. Cara yang sama berlaku untuk banyak mikrokontroler yang lain. Pengguna bahkan bisa langsung memprogram mikrokontroler tanpa mempergunakan framework/bootloader seperti dari Arduino, Adafruit atau SparkFun. Khusus untuk mikrokontroler keluarga Atmel AVR keterangan lebih rinci mengenai pemrogramannya dengan PlatformIO bisa dibaca di halaman ini. Untuk keluarga STM32 bisa dibaca di halaman ST STM32, demikian seterusnya untuk masing-masing keluarga prosesor.

http://foros.giltesa.com/otros/arduino/fc/docs/pinout/uno.jpgGambar  20. Arduino Uno pinout [sumber]

Dalam Gambar 20 sebagai contoh terlihat bahwa sesungguhnya papan Arduino Uno R3 terdiri dari mikrokontroler ATmega328P sebagai komponen utama. Gambar pinout seperti ini memudahkan pengguna untuk mencari padanan saat hendak langsung mengakses pin/port tanpa bantuan framework/bootloader. Misalnya, jika biasanya LED indikator di Arduino Uno diakses melalui pin 13 maka dapat dilihat bahwa sesungguhnya pin itu adalah pin PB5 dari μC ATmega328P.

Konfigurasi seperti ini dapat dicari untuk sistem yang lain sehingga akses langsung ke pin/port bisa dilakukan tanpa menggunakan bootloader/framework.

 

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.

 

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