DFRobot LCD shield

Catatan untuk penggunaan LCD shield.

Ada dua versi dari LCD shield dari DFRobot yaitu versi 1.0 dan versi 1.1. Gambar 1 adalah V1.0 dan Gambar 2 adalah versi V1.1.

 

Gambar 1. [sumber]

File:DFR0009LCD KeyPad Shield mapping.pngGambar 2. [sumber]

 

Pada beberapa bagian kedua versi papan ini memiliki kesaamaan.

Gambar 3. [sumber]

DFR0009-PIN2.pngGambar 4. [sumber]

Contoh kode 01 [sumber]:

/*************************************************************************************

  Mark Bramwell, July 2010

  This program will test the LCD panel and the buttons.When you push the button on the shield,
  the screen will show the corresponding one.
 
  Connection: Plug the LCD Keypad to the UNO(or other controllers)

**************************************************************************************/

#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);           // select the pins used on the LCD panel

// define some values used by the panel and buttons
int lcd_key     = 0;
int adc_key_in  = 0;

#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

int read_LCD_buttons(){               // read the buttons
    adc_key_in = analogRead(0);       // read the value from the sensor 

    // my buttons when read are centered at these valies: 0, 144, 329, 504, 741
    // we add approx 50 to those values and check to see if we are close
    // We make this the 1st option for speed reasons since it will be the most likely result

    if (adc_key_in > 1000) return btnNONE; 

    // For V1.1 us this threshold
    if (adc_key_in < 50)   return btnRIGHT;  
    if (adc_key_in < 250)  return btnUP; 
    if (adc_key_in < 450)  return btnDOWN; 
    if (adc_key_in < 650)  return btnLEFT; 
    if (adc_key_in < 850)  return btnSELECT;  

   // For V1.0 comment the other threshold and use the one below:
   /*
     if (adc_key_in < 50)   return btnRIGHT;  
     if (adc_key_in < 195)  return btnUP; 
     if (adc_key_in < 380)  return btnDOWN; 
     if (adc_key_in < 555)  return btnLEFT; 
     if (adc_key_in < 790)  return btnSELECT;   
   */

    return btnNONE;                // when all others fail, return this.
}

void setup(){
   lcd.begin(16, 2);               // start the library
   lcd.setCursor(0,0);             // set the LCD cursor   position 
   lcd.print("Push the buttons");  // print a simple message on the LCD
}
 
void loop(){
   lcd.setCursor(9,1);             // move cursor to second line "1" and 9 spaces over
   lcd.print(millis()/1000);       // display seconds elapsed since power-up

   lcd.setCursor(0,1);             // move to the begining of the second line
   lcd_key = read_LCD_buttons();   // read the buttons

   switch (lcd_key){               // depending on which button was pushed, we perform an action

       case btnRIGHT:{             //  push button "RIGHT" and show the word on the screen
            lcd.print("RIGHT ");
            break;
       }
       case btnLEFT:{
             lcd.print("LEFT   "); //  push button "LEFT" and show the word on the screen
             break;
       }    
       case btnUP:{
             lcd.print("UP    ");  //  push button "UP" and show the word on the screen
             break;
       }
       case btnDOWN:{
             lcd.print("DOWN  ");  //  push button "DOWN" and show the word on the screen
             break;
       }
       case btnSELECT:{
             lcd.print("SELECT");  //  push button "SELECT" and show the word on the screen
             break;
       }
       case btnNONE:{
             lcd.print("NONE  ");  //  No action  will show "None" on the screen
             break;
       }
   }
}

Contoh kode 02 [sumber]:

/*******************************************************

   Description:
   Reads an analog input on pin 1, prints the result to the LCD.
   This program takes the temperture sensor LM35 for example. 
  
   Connection:
   Plug the LCD Keypad to the UNO(or other controllers)
   Temperture sensor:
   S(blue) -- A1()  
     Note: A0 has been occupied.
   VCC(red) -- VCC
   GND(black) -- GND

********************************************************/

#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);        // select the pins used on the LCD panel

unsigned long tepTimer ;    

void setup(){ 
    lcd.begin(16, 2);                       // start the library
}

void loop(){ 
    lcd.setCursor(0, 0);                   // set the LCD cursor   position 
    int val;                               // variable to store the value coming from the analog pin 
    double data;                           // variable to store the temperature value coming from the conversion formula
    val=analogRead(1);                     // read the analog in value:
    data = (double) val * (5/10.24);       // temperature conversion formula
    
    if(millis() - tepTimer > 500){         // output a temperature value per 500ms 
             tepTimer = millis();

             // print the results to the lcd
             lcd.print("T: ");               
             lcd.print(data);             
             lcd.print("C");              
     } 
}

Contoh kode 03 [sumber]:

/*
DFRobot LCD Shield for Arduino
Key Grab v0.2
Written by Glendon Klassen
gjklassen@gmail.com
http://www.sourceforge.net/users/ecefixer
http://ecefixer.tumblr.com

Displays the currently pressed key on the LCD screen.

Key Codes (in left-to-right order):

None   - 0
Select - 1
Left   - 2
Up     - 3
Down   - 4
Right  - 5

*/

#include <LiquidCrystal.h>
#include <DFR_Key.h>

//Pin assignments for DFRobot LCD Keypad Shield
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); 
//---------------------------------------------

DFR_Key keypad;

int localKey = 0;
String keyString = "";
                 
void setup() 
{ 
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Key Grab v0.2");
  delay(2500);
  
  /*
  OPTIONAL
  keypad.setRate(x);
  Sets the sample rate at once every x milliseconds.
  Default: 10ms
  */
  keypad.setRate(10);

}

void loop() 
{ 
  /*
  keypad.getKey();
  Grabs the current key.
  Returns a non-zero integer corresponding to the pressed key,
  OR
  Returns 0 for no keys pressed,
  OR
  Returns -1 (sample wait) when no key is available to be sampled.
  */
  localKey = keypad.getKey();
  
  if (localKey != SAMPLE_WAIT)
  {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Current Key:");
    lcd.setCursor(0, 1);
    lcd.print(localKey);
  }
}

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]

Mengenal PlatformIO

Pada kesempatan ini saya akan memuat catatan mengenai PlatformIO. Sebelumnya saya sudah membuat catatan penggunaan text editor maupun IDE seperti Energia, Codelite, Netbeans maupun Arduino IDE. Masing-masing IDE tentu memiliki keunggulan dan kekurangan dan masing-masing programer akan memilki kebutuhan dan selera yang berbeda-beda. Nah PlatformIO ini cukup unik, di satu sisi cukup lengkap dan mampu dipergunakan untuk mengerjakan kode untuk berbagai arsitektur mikrokontroler. Di sisi lain tampilannya menyerupai Sublime Text yang ringan dan sederhana.

pio001Gambar 1.

Di Gambar 1 dapat dilihat beberapa contoh default dan proyek yang dibuat manual. Yang sudah saya coba ada beberapa mikrokontroler, yang juga sudah pernah saya uji dengan IDE atau cara lain. Berikut beberapa arsitektur mikrokontroler yang sudah saya coba di PlatformIO (atau Atom);

Sebagai catatan untuk melakukan pemrograman pada STM8 (STM8S103F3); sekalipun PlatformIO tidak mendukung secara langsung toolchain STM8 tetapi editornya masih dapat dimanfaatkan dan mampu membantu keberhasilan pemrograman. Dapat dilihat pada Gambar 2.

pio002Gambar 2. [Klik gambar untuk memperbesar tampilan]

PlatformIO bukanlah text editor dalam pemahaman yang biasa dipergunakan. Pengungkapan yang lebih baik bisa diperoleh dari situs PlatformIO sendiri.

pio003Gambar 3. Apakah PlatformIO itu?

“Different microcontrollers normally have different developing tools . For instance Arduino rely on Arduino IDE. Few more advanced users set up different graphical interfaces like Eclipse for better project management. Sometimes it may be hard to keep up with different microcontrollers and tools. You probably thought that single unified development tool could be great. Well this is what PlatformIO open source ecosystem is for.

This is cross platform code builder and library manager with platforms like Arduino or MBED support. They took care of toolchains, debuggers, frameworks that work on most popular platforms like Windows, Mac and Linux. It supports more than 200 development boards along with more than 15 development platforms and 10 frameworks. So most of popular boards are covered. They’ve done hard work in organizing and managing hundreds of libraries that can be included in to your project. Also lots of examples allow you to start developing quickly. PlatformIO initially was developed with Command line philosophy. It’s been successfully used with other IDE’s like Eclipse or Visual Studio. Recently they’ve released a version with built in IDE based on Atom text editor”, – [Embedds].

 

PlatformIO dapat diintegrasikan ke dalam beberapa IDE di antaranya NetBeans, Codeblocks, dan Visual Studio. Meski begitu tampaknya yang terkenal adalah implementasinya ke dalam text editor Atom.io.

Atom is a text editor that’s modern, approachable, yet hackable to the core—a tool you can customize to do anything but also use productively without ever touching a config file.

Mungkin karena itu kadang-kadang PlatformIO dicampuradukkan dengan Atom. Keduanya jelas berbeda meski untuk banyak keperluan praktis merujuk pada hal yang sama. Perbedaan baru akan terlihat jika menemui kasus seperti contoh pada pemrograman STM8S103F3 di bagian atas tulisan ini. Untuk pemrograman contoh led berkedip itu, PlatformIO belum bisa mendukung platform maupun board sistem STM8. Karena itu yang bisa dimanfaatkan “hanya” text editor Atom saja. Tetapi dapat dilihat, dalam kondisi seperti itu pun terbukti masih bisa membantu menyelesaikan pemrograman dengan baik.

PlatformIO IDE yang dibangun berdasar text editor Atom dapat diunduh (download) di link ini. Saya sudah berhasil mencoba instalasi di sistem GNU/Linux, tetapi gagal mencoba di sistem tua saya, IBM Thinkpad T43 yang masih menggunakan Microsoft Windows XP SP3. PlatformIO mensyaratkan OS yang lebih baru dari XP.

Linux pengguna-laptop 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

 

Ada beberapa pengaturan yang perlu dilakukan agar manfaat yang bisa diberikan platform ini dapat dipergunakan secara maksimal. Salah satu pengaturan yang memerlukan perhatian adalah mengenai clang. Sekilas mengenai Clang dapat dipelajari di sini, begitu pula perbandingannya dengan GCC dapat dibaca di sini.

pio004Gambar 4

Ada dua paket yang perlu menjadi perhatian; autocomplete-clang dan clang-format package. Jika belum terinstalasi dengan baik maka keduanya sebaiknya diinstal terlebih dahulu. Paket yang pertama (autocomplete-clang) sangat membantu proses coding , fungsi dan cara kerjanya dapat lebih mudah dipahami melalui gambar gif berikut:

autocomplete-clangGambar 5. Fasilitas autocomplete [image credit: autocomplete-clang package]

pio006Gambar 6. Melihat paket clang di Settings.

Paket yang kedua (clang-format package) juga sangat membantu pengerjaan kode program. Tetapi berdasar apa yang saya alami, paket kedua ini memerlukan usaha yang lebih agar dapat mudah dipakai. Dari situs penyimpanan kode atom-clang-format:

Format your C/C++/Obj-C/Javascript files with clang-format from inside atom. Requires clang-format to be installed and on your systems path.

More info on clang-format can be found here: http://clang.llvm.org/docs/ClangFormat.html http://clang.llvm.org/docs/ClangTools.html

Pengaturan untuk clang-format disimpan di dalam file .clang-format (tanda titik menandakan bahwa file tersebut secara default tersembunyi di file manager). Untuk dapat melihat file itu di file manager, beri perintah dengan menekan kombinasi kunci di keyboard Ctrl+H. Di sistem saya file itu terletak di:

/home/rumahku/.atom/packages/clang-format/node_modules/clang-format/.clang-format

Yang cukup membuat repot, sejauh yang saya ketahui sampai saat ini, file tersebut perlu disalin manual ke setiap direktori proyek (project).

pio007Gambar 7.

Solusinya sebenarnya cukup mudah, tetapi perlu dilakukan. Salin (copy) file .clang-format ke home directory, untuk mesin saya ini menjadi

/home/rumahku/.clang-format

Adapun isi dari file .clang-format untuk konfigurasi yang saya kehendaki adalah sebagai berikut:

---
Language: Cpp
BasedOnStyle: LLVM
BreakBeforeBraces: GNU
ColumnLimit: 100

Dengan konfigurasi ini maka setiap file sumber untuk C atau CPP (C++) akan terformat ulang setiap kali diberikan perintah menyimpan kode di file. Pengguna bisa juga memberikan perintah untuk melakukan format secara manual melalui menu atau dengan shortcut: shift-cmd-K. Adapun isi dari konfigurasi bisa disimulasikan secara online di sini; https://clangformat.com/ .

Referensi tentang clang format <<klik untuk membuka>>

 

Pada Gambar 2, terlihat untuk platform yang tidak (belum) didukung oleh PlatformIO, maka hasil kompilasinya berada di direktori yang sama dengan file sumber. Pada mode ini yang dimanfaatkan adalah text editor Atom.  Tetapi untuk platform dan framework yang sudah didukung oleh PlatformIO peletakan hasil kompilasi dan build akan berbeda.

pio008Gambar 8.

Oleh PlatformIO hasil kompilasi akan diletakkan di direktori ./pioenvs . Sekedar sebagai contoh;

/tmp/atmelavr-native-blink-116720-6546-1qphcr7/.pioenvs/native_avr/

Sekalipun proses upload biasanya dapat dilangsungkan secara otomatis dengan bantuan PlatformIO, bisa jadi ada kebutuhan untuk melakukan operasi dengan command line di Terminal;

pio009Gambar 9.

pio010Gambar 10.

Mengenai perbedaan antara file elf dengan bin dapat dibaca di sini.

Untuk plaftorm dan framework yang sudah didukung oleh PlatformIO, proses upload dapat dilakukan oleh PlatformIO. Syaratnya pengguna memberi informasi yang cukup agar perintah pengunggahan tidak salah. Konfigurasi disimpan di file platformio.io yang disimpan di masing-masing root direktori proyek, contohnya:

/home/rumahku/platformioSTM32F103/platformio.ini

Misalnya untuk STM32 (mikrokontroler STM32F103C8T6) yang telah didukung oleh PlatformIO (melalui nucleo_f103rb) isi platformio.ini adalah:

#
# PlatformIO Project Configuration File
#
# Please make sure to read documentation with examples first
# http://docs.platformio.org/en/stable/projectconf.html
#
[env:nucleo_f103rb]
platform = ststm32
framework = mbed
board = nucleo_f103rb
upload_protocol = stlink

pio011Gambar 11.

Pada arsitektur STM32 jika yang dipakai adalah stlink maka perlu ditambahkan keterangan
  upload_protocol = stlink   di file platformio.ini . Diskusi mengenai kesalahan yang terjadi ada di sini dan acuan lengkap konfigurasi dapat dilihat di sini.

Gambar 12. Hasil proses uploading oleh PlatformIO

Satu hal lain yang menarik yang saya temui adalah tentang penggunaan framework mbed pada platform ststm32 (STM32). File sumber harus disimpan dengan ekstensi .cpp, jika disimpan dengan ekstensi .c maka akan manghasilkan kesalahan:

pio013Gambar 13. Kesalahan kompilasi dengan framework mbed.

Penjelasan mengenai kesalahan ini terdapat di sini:

mbed is c++-based framework. You should use *.cpp extension.

Please change file extension from *.c to .cpp.

 

pio014Gambar 14.

 

 

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