Upload Program ke MCU dengan Bantuan Test Hook/Probe Terminal

Selama ini saya mendesain embedded sistem tanpa menambahkan interface untuk upload program. Tidak adanya interface ini karena saya tidak memiliki piranti programmer khusus untuk MCU. Di samping saya tidak ingin menambah ribet desain PCB.

Selama ini saya hanya menggunakan breadboard atau board programmer jadi-jadian. Cara ini tentu lebih murah dibandingkan membeli piranti programer khusus. Saya cukup menggunakan Arduino Uno atau Nano andalan saya untuk upload program via breadboard.

Test hook - Probe terminal
Test hook – Probe terminal

Tapi cara ini jadi merepotkan saat saya harus merevisi program sedangkan microcontroller sudah terpasang di board. Saya mencoba menggunakan kabel jumper biasa yang dipaksakan menancap di socket yang telah terisi IC-nya, tapi tidak bisa. Jalan satu-satunya adalah mencabut chip dari soket dan mengkonfigurasikannya di breadboard. Setelah upload program, chip dikembalikan ke board untuk uji coba. Kalau revisinya cuma sekali sih tidak mengapa. Tapi kalau sering? Ribet bolak-balik bongkar-pasang jungkir-balik! Apalagi bongkar pasang IC di socket beresiko merusak kaki IC itu sendiri.

Upload program ke Jamdario
Upload program ke Jamdario

Jadi saya pun mencari akal. Syukurlah ketemu akalnya, hehehe. Saya pun membeli hook atau probe terminal yang biasa digunakan untuk mengetest IC atau komponen yang sudah terpasang di board. Probe ini digunakan untuk menjepit pin IC untuk berkomunikasi serial dengan Arduino Uno yang dikonfigurasi sebagai programmer. Tidak lupa probe juga digunakan untuk menyalurkan power ke board. Hasilnya baik. Upload program berhasil dengan baik. Saya tidak perlu membongkar-pasang IC lagi. Horeee…

Mari kita lihat lebih dekat
Mari kita lihat lebih dekat

Sekarang tibalah saatnya fokus di ngoprek code untuk Jamdario.

Say It with Light! (Revision 1)

Ini adalah catatan saya dalam mendesain “Say It with Light!”. Setelah mempertimbangkan beberapa hal untuk memenuhi prinsip murah, meriah dan mudah, maka saya pun me-redesain rangkaian dengan menggunakan ATmega8 dari Atmel. Saya sangat berterima kasih kepada Atmel yang telah mengirimkan sample dari beberapa microcontrollernya.

Tampilan prototype "Say it with Light!" revisi 1
Tampilan prototype “Say it with Light!” revisi 1

Menggunakan chip ATmega8 justru mempermudah saya dalam mendesain “Say It with Light!” karena ATmega8 telah menyediakan 20 pin bebas setelah dikurangi beberapa pin yang digunakan untuk kebutuhan internal Arduino. Sedangkan “Say It with Light!” cuma butuh 17 pin I/O dengan perincian 16 pin untuk pengaturan display dot matrix dan 1 pin untuk tombol pengubah tampilan.

Cukup menggunakan 1 chip
Cukup menggunakan 1 chip

Ke-16 pin ini dibutuhkan untuk mengendalikan display dot matrix secara langsung. Pendekatan ini memang tidak efisien karena sebenarnya kita cukup menggunakan 3 pin pengendali jika menggunakan 2 buah Shift Register seperti ketika mendesain dengan ATtiny85. Kelemahan lain adalah ketika memprogramnya karena butuh pengelolaan pin yang lebih banyak.

Rangkaian rev 1 lengkap dengan komponen pasif pendukung
Rangkaian rev 1 lengkap dengan komponen pasif pendukung

Di balik ketidakefisienan ini, teknik pengendalian langsung justru punya kelebihan, yaitu proses penampilan jadi lebih cepat karena tidak perlu diproses chip external. Tampilan jadi tampak lebih terang dan stabil. Bebas flicker walau pun saya tambah perintah delayMicroseconds. Pada code ATtiny85 saya tidak menambahkan delay tapi tampilan tetap flicker.

Dengan ATmega8 lebih stabil
Dengan ATmega8 lebih stabil

Saya mendesain ATmega8 untuk bekerja dengan clock external memanfaatkan crystal 16 MHz. Kecepatan proses jadi lebih cepat 16× (atau lebih?) dari pada desain dgn ATtiny85. Sebenarnya ATtiny85 bisa bekerja sampai 20 MHz tapi itu sama saja memboroskan pin I/O-nya untuk dipakai dengan crystal external. Jadi desain tempo hari cuma mengandalkan clock internal ATtiny85 yang cuma 1 MHz.

Dari segi memori ternyata antara ATmega8 dan ATtiny85 sama-sama punya 8 KB ISP (in-system self-programmable flash program memory). Wow, ATtiny85 memang hebat ya? Jadi dalam hal kapasitas program sejajar. Hanya saja ada kelemahan dalam pemrograman ATtiny85 terutama jika kita menggunakan IDE Arduino, yaitu karena ATtiny85 tidak bisa mengakomodasi array 2 dimensi. Jadi penyimpanan text yang akan ditampilkan disimpan dalam array linear. Sedangkan jika menggunakan ATmega8 hal ini tidak masalah (tentu setelah burning bootloader Arduino).

Dalam pemrograman “Say It with Light!” Rev 1 (dgn ATmega8) ini saya menambahkan beberapa pesan yang bisa ditampilkan, misalnya icon smile, animasi panah (ceritanya untuk nembak hati), Y/N (untuk menjawab), dan beberapa icon lain yang sedang saya coba apakah bisa ditampilkan dengan baik atau tidak. Saat ini code ukurannya cuma 2,5 KB dari sekitar 7,2 KB yg tersedia. Berarti masih punya ruang untuk pesan-pesan lain yang ingin ditampilkan.

Saat ini saya sedang mendesain PCB untuk membuat permanen prototype “Say It with Light!” revisi 1. Kali ini desain PCB tidak terpaku dengan sambungan urut karena tidak menggunakan Shift Register tapi langsung dari pin ATmega8. Ini berarti desain PCB bisa diatur sambungan antara ATmega8 dengan pin display dot matrix berdasarkan kedekatan pin. Jadi bisa didesain jalur yang terdekat dan terbaik. Sisanya tinggal mapping di code. Hasilnya desain saya kali ini tidak ada jumper-nya. Horeee…

Sementara ini dulu catatan desain prototype “Say It with Light!” revisi 1. Jika ada masukan, silakan dituangkan dalam box komentar di bawah.

Salam ngoprek

Masih Bersemangat Ngoprek

Ketika terjadi hiruk pikuk saat launching Arduino Due saya hanya bisa berdecak kagum. Maklum, teknologi & fitur yang diusungnya jauh lebih powerful dibanding board Arduino sebelumnya. Arduino Due termasuk sesuatu yang baru yang sedikit keluar dari jalur Arduino sebelumnya karena Due menggunakan prosesor dengan arsitektur ARM sedangkan sebelumnya menggunakan AVR.

Dengan digunakannya arsitektur ARM, maka Arduino Due jadi head-to-head dengan Raspberry Pi yang telah lebih dulu mengguncang dunia sebagai PC paling murah sedunia. Walau pun sebenarnya keduanya jelas memiliki target pengguna yang berbeda, dimana Arduino bermain di dunia microcontroller sedangkan Raspberry Pi bermain di microcomputer. Pada kenyataannya keduanya bisa digunakan untuk controller dan computer dengan trik khusus.

Menurut saya langkah Arduino Due ini sudah baik walau pun keluar dari pakem Arduino sebelumnya karena transisi AVR ke ARM ini difasilitasi dengan baik oleh tim Arduino (salut!!!). Karena bisa jadi dunia microcontroller memang membutuhkan tenaga dan kemampuan yang lebih besar dari yang telah ada sekarang ini. Contohnya adalah saat Google mengeluarkan ADK, Sparkfun dengan IOIO, atau Arduino dengan ADK. Semuanya menjadikan MCU (microcontroller unit) lebih mudah diakses dengan piranti lain, khususnya piranti dengan sistem operasi Android.

Tidak dipungkiri kalau itu semua membutuhkan tenaga yang besar yang lebih dari pada yang bisa didapat dari MCU model AVR. Dan ARM adalah salah satu solusi termurah. Bisa saja kita menggunakan prosesor x86 dari Intel atau AMD, tetapi itu seperti membasmi nyamuk dengan bom.

Di tengah semakin cepatnya perkembangan teknologi saat ini, dengan segenap kerendahan hati, saya sedang merayap mempelajari MCU dengan basis arsitektur AVR. Dimulai dengan keluarga ATtiny yang sederhana sampai ke ATmega yang menengah. Sedangkan board Raspberry Pi masih tergeletak tak terurus menunggu dioprek.

Terus terang saya merasa seakan sedang mengejar ketertinggalan saya. Dan saya agak menyesal karena saat kuliah elektro dulu sering bolos dan tidak memperhatikan atau mempelajari materi kuliah dengan sungguh-sungguh. Di lain pihak, jaman saya kuliah memang masih serba sulit, baik dari segi kurangnya literatur, kurangnya komunitas elektronika, terbatasnya koneksi internet/komunikasi, dan yang pasti karena kurangnya dana untuk membiayai eksperimen.

Syukurlah saat ini semua kendala itu sudah lenyap. Dan saya bersyukur masih bisa menikmati belajar itu semua dengan semangat yang masih menyala. Kendala saya saat ini hanyalah waktu, usia dan menurunnya kemampuan (*hiks*). Namun itu semua tetap tidak mengalahkan semangat saya.

Ini curhatku, mana curhatmu?

Meneruskan Rangkaian Jamdario

Ini adalah perjalanan panjang saya dalam mendesain dan membuat rangkaian Jamdario (Jam dan Radio). Sudah sebulan ini proses terus berlangsung dari desain sampai pembuatan prototype. Panjangnya proses ini karena saya harus menunggu beberapa bagian, yang pertama adalah pembelian modul radio dari Sparkfun, pemesanan PCB dan googling banyak hal seperti LDO (Low Drop Out Voltage), contoh pemrograman radio, dll.

Antara PCB pesanan dengan buatan sendiri
Antara PCB pesanan dengan buatan sendiri

Semuanya adalah proses yang sangat menarik dan menantang. Menuangkan desain ke prototype juga suatu tantangan yang berat. Karena selama ini saya membuat PCB sendiri yang ternyata tidak rapi (*hiks*). Untuk sebuah prototype bolehlah, nanti kalau mau produksi barulah dibuat yang baik. Untuk proyek Jamdario ini saya memesan PCB ke pihak luar. Hasilnya bagus & presisi. Nyoldernya juga enak. Gambar di atas menunjukkan PCB pesanan disandingkan PCB buatan saya sendiri yang tidak rapi, hehehe…

Perakitan prototype di PCB baru
Perakitan prototype di PCB baru

Perakitan di PCB baru juga lebih nyaman karena presisi. Pelapisan perak di jalur rangkaian juga memudahkan penyolderan. Setelah semua chip ditancap, Jamdario langsung menyala dengan baik.

Selanjutnya ngoprek modul radio Si4703
Selanjutnya ngoprek modul radio Si4703

Selanjutnya adalah ngoprek modul radio. Sebelumnya sudah nge-test modul ini dengan code dari Sparkfun dan telah berjalan baik. Tinggal mengintegrasikannya ke Jamdario.

LDO ke 3.3V
LDO ke 3.3V

Untuk mengintegrasikan modul radio ini ada beberapa hal yang perlu dilakukan, pertama adalah mengintegrasikan jalur power supply. Ternyata modul ini bekerja dengan tegangan 3.3V, sedangkan Jamdario seperti layaknya MCU Arduino bekerja dengan tegangan 5 Volt. Diperlukan LDO (low drop out voltage) untuk menurunkan tegangan dari 5 V ke 3.3V. Saya menggunakan LM1117-3.3V seperti yang direkomendasikan banyak desainer elektronika.

Integrasi berikutnya adalah jalur komunikasi dengan MCU (microcontroller unit). Komunikasi dilakukan via komunikasi I2C (2-wire). Ternyata butuh pin 1 lagi untuk reset dan saya belum mengakomodasinya di PCB. Terpaksa dibuat jalur pakai kabel, hehehe…

Integrasi selanjutnya tentu secara software sehingga bisa memanfaatkan tombol-tombol di Jamdario untuk pencarian gelombang dan pengaturan volume. Sangat menantang kan?

Sayangnya desain PCB saya tidak presisi
Sayangnya desain PCB saya tidak presisi

Sayangnya desain PCB saya tidak presisi dalam hal peletakan lubang baut. Tadinya saya mendesain 4 buah lubang untuk spacer yang berguna untuk memegang modul LCD 16×2. Ternyata sedikit bergeser sehingga tidak pas dengan lubang baut di LCD. Mestinya saya mencetak desainnya dulu dan kemudian mencocokkan lubangnya dengan LCD. Masalah ini bisa diatasi dengan membuat board khusus pemegang LCD yang berfungsi pula untuk peletakan tombol-tombol.

Oprekable
Oprekable

Desain prototype Jamdario ini sedikit unik dengan meletakkan LCD mengambang di atas beberapa komponen. Fungsinya tentu saja untuk memperkecil PCB. Untuk mengopreknya tentu diperlukan cara khusus, yaitu dengan memindahkan LCD ke breadboard dan membuat jumper untuk memfungsikannya. Setelah itu barulah kita bisa mengoprek Jamdario, khususnya untuk ngoprek software-nya.

Demikian progress prototype Jamdario yang ternyata memakan waktu lama. Dalam seminggu ke depan saya akan ngoprek software-nya.

Burning Bootloader

Salah satu kegiatan sebelum membuat rangkaian dengan chip ATmega adalah mem-burn (burning) bootloader ke chip ATmega. Bootloader ini berguna sehingga kita bisa menggunakan lingkungan pemrograman Arduino. Dengan IDE Arduino kita jadi lebih nyaman dalam memprogram chip dibandingkan jika dengan bahasa C atau Assembly.

Sedang antri nunggu giliran di-burn
Sedang antri nunggu giliran di-burn

Selain itu microcontroller jadi lebih fleksibel karena dukungan library Arduino yang begitu luas dan mudah dipahami. Dan saya pun mem-burn semua stok ATmega328P saya dengan bootloader Arduino. Cara burn bootloader ini bisa dilihat di: From Arduino to a Microcontroller on a Breadboard.

9 buah MCU siap digunakan
9 buah MCU siap digunakan

Setelah di-burn, chip siap digunakan untuk rangkaian embedded microcontroller atau pun hanya sebagai stok cadangan Arduino Uno.