Untuk kepentingan pembahasan dalam artikel ini anggap saja sistem Arduino terdiri dari dua sub sistem utama. Yang pertama adalah Arduino IDE, yaitu software yang beroperasi di komputer. Menurut situs http://www.arduino.cc perangkat lunak ini mereka sebut sebagai Arduino Software.
The open-source Arduino environment makes it easy to write code and upload it to the i/o board. It runs on Windows, Mac OS X, and Linux. The environment is written in Java and based on Processing, avr-gcc, and other open source software.

Tugas dari “Arduino Software” adalah menghasilkan sebuah file berformat hex yang akan di-download pada papan arduino atau papan sistem mikrokontroler lainnya. Ini mirip dengan Microsoft Visual Studio, Eclipse IDE, atau Netbeans. Lebih mirip lagi adalah IDE semacam Code::Blocks, CodeLite atau Anjuta yang mempermudah untuk menghasilkan file program. Bedanya kesemua IDE tersebut menghasilkan program dari kode bahasa C (dengan GNU GCC) sedangkan Arduino Software (Arduino IDE) menghasilkan file hex dari baris kode yang dinamakan sketch.
A sketch is the name that Arduino uses for a program. It’s the unit of code that is uploaded to and run on an Arduino board.
Sub sistem yang kedua adalah hardware (perangkat keras) yaitu papan Arduino (Arduino Boards). Sampai saat tulisan ini dibuat yang paling umum dijual adalah varian baru yaitu Arduino Uno dan Arduino Mega 2560. Kesemua papan arduino itu memiliki perangkat lunak yang dinamakanbootloader.
When you upload a sketch, you’re using the Arduino bootloader, a small program that has been loaded on to the microcontroller on your board. It allows you to upload code without using any additional hardware. The bootloader is active for a few seconds when the board resets; then it starts whichever sketch was most recently uploaded to the microcontroller. The bootloader will blink the on-board (pin 13) LED when it starts (i.e. when the board resets).
Pada umumnya sketch yang dibuat di Arduino Software di-compile dengan perintah verify / Compile (Ctrl+R) lalu hasilnya di-download ke papan Arduino seperti Arduino Uno atau Arduino Mega 2560. Program hasil kompilasi itu lalau dijalankan oleh bootloader.
Tetapi ternyata hasil kompilasi dari Arduino Software dapat dipergunakan dan dijalankan tidak hanya pada papan arduino (Arduino Boards) atau turunannya yang kompatibel. Program hasil kompilasi itu dapat dijalankan di sistem mikrokontroller Atmel AVR yang sesuai bahkan tanpa menggunakan bootloader. Selain memperluas pilihan varian IC microcontroller AVR yang bisa dipergunakan hal ini juga berarti semakin besar program yang bisa kita muat di flash memori IC itu.
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. [sumber]
If you have an external programmer (e.g. an AVR-ISP, STK500, or parallel programmer), you can burn sketches to the Arduino board without using the bootloader. This allows you to use the full program space (flash) of the chip on the Arduino board. So with anATmega168, you’ll get 16 KB instead of 14 (on an ATmega8 you’ll get 8 KB instead of 7). It also avoids the bootloader delay when you power or reset your board. [sumber]
Kemudahan untuk mempergunakan berbagai macam varian microcontroller dalam tulisan ini mengikuti karya dari Mark Sproul. Beliau telah berbuat amal [  ] dengan melakukan pengujian dan kemudian mempublikasikan secara luas uji cobanya untuk mempergunakan Arduino IDE untuk memprogram berbagai uC IC AVR. Daftar hasil uji cobanya dapat dilihat di http://www.avr-developers.com/cputable.html. Untuk dapat memprogram berbagai IC AVR tanpa papan arduino kita perlu melakukan download file-file konfigurasi yang telah dimodifikasi oleh Mark Sproul.
Sep 29, 2010 Updated to version 0020 core
Based on Version 0020 core filesDownload this file (arduino-extras.zip) uncompress it and add it in the hardware folder.
On the Mac, this is /Applications/Arduino.app/Contents/Resources/Java/hardware
This file contains ALL of the defintions that are included in the “arduino” folder as well. So your BOARDS menu will have duplicates.This will give you access to just about EVERY ATmega that I can find that has been made into a comerically avaialable board.NOTE: Not all cpus support bootloaders.
File arduino-extras.zip berisi tiga direktori: bootloaders, cores dan firmwares dan dua file:boards.txt dan programmers.txt. Kesemuanya di-copy-kan ke direktori hardware arduino, misalnya:/home/sunu/arduino-0022/hardware/arduino/ atau misalnya direktori arduino utak-atik saya/home/sunu/arduino-0022hknix/hardware/arduino/. Kesemua direktori dan file yang baru itu akan menimpa yang lama, aman, kecuali anda telah melakukan modifikasi pada fileyang lama yang sayang kalau hilang .
Ada dua cara konfigurasi untuk melakukan pemrograman tanpa papan arduino. Yang pertama melakukan konfigurasi pada file preferences.txt untuk mengubah secara otomatis setting pada semua pengaturan papan. Cara yang kedua adalah dengan melakukan konfigurasi pada fileboards.txt, ini jika kita hendak melakukan setting yang berbeda untuk tiap papan.
Untuk file preferences dapat ditemukan di sistem sebagai berikut:
* /Users/<USERNAME>/Library/Arduino/preferences.txt (Mac)
* c:\Documents and Settings\<USERNAME>\Application Data\Arduino\preferences.txt (Windows)
* ~/.arduino/preferences.txt (Linux) Perlu diperhatikan bahwa direktori ~/.arduino/ adalah direktori tersembunyi pada sistem GNU/Linux anda. Jika menggunakan file explorer Nautilus untuk menampilkan semua direktori tersembunyi dapat menggunakan Ctrl+h.
Modifikasi pada file preferences.txt dilakukan dengan melakukan pengubahan pada baris konfigurasi yang tercantum
upload.using=bootloader
menjadi salah satu nama programmer yang telah dicantumkan dalam fileprogrammer.txt.
Change: upload.using from bootloader to the identifier of one of the programmers in hardware/programmers.txt (e.g. avrispmkii).
Misalnya saya menggunakan dua programmer, yaitu USBasp dan USBtinyISP yang saya cantumkan di dalam file programmer.txt.
usbasp.name=USBaspusbasp.protocol=USBaspusbtinyisp.name=USBtinyISP
usbtinyisp.protocol=usbtiny
Maka saya bisa mengubah baris yang tertulis sebagai upload.using=bootloader dalampreferences.txt menjadi upload.using=USBasp atau upload.using=USBtinyISP.
Saya sendiri lebih menyenangi cara yang kedua yaitu melakukan konfigurasi pada file boards.txt. Menurut saya cara ini lebih fleksibel, bahkan saya menjadi bisa untuk memiliki lebih dari satu konfigurasi untuk satu papan / boards / sistem. Misalnya saya memiliki dua konfigurasi untuk sistem/papan ATmega8, satu untuk internal clock 1 MHz dan satu lagi untuk  internal clock  8 Mhz.
File boards.txt pada sistem OS MS Windows dapat ditemukan di sub folder instalasinya misalnyaD:\arduino-0022\hardware\arduino\boards.txt. Pada sistem GNU/Linux dapat ditemukan di tempat instalasinya misalnya di /home/sunu/arduino-0022hknix/hardware/arduino/boards.txt.
Baris konfigurasi yang perlu diubah atau ditambahkan (jika belum ada) adalah baris yang tertulis sebagai: 
xxx.upload.using=nama_programmerxxx.upload.protocol=nama_programmer
Misalnya:
    USBtinyISP-ATtiny2313.upload.using=usbtiny
USBtinyISP-ATtiny2313.upload.protocol=usbtiny
USBtinyISP-ATtiny2313.upload.protocol=usbtiny
atau
    arduino_attiny2313.upload.using=usbasp
arduino_attiny2313.upload.protocol=usbasp
arduino_attiny2313.upload.protocol=usbasp
Berikut ini adalah konfigurasi yang saya buat untuk keperluan sistem saya, dapat dimodifikasi sesuai keperluan:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291  | ##############################################################USBtinyISP-ATtiny2313.name=USBtinyISP ATtiny2313 8 MHZ internalUSBtinyISP-ATtiny2313.upload.using=usbtinyUSBtinyISP-ATtiny2313.upload.protocol=usbtinyUSBtinyISP-ATtiny2313.upload.maximum_size=2048USBtinyISP-ATtiny2313.upload.speed=19200USBtinyISP-ATtiny2313.bootloader.low_fuses=0x64USBtinyISP-ATtiny2313.bootloader.high_fuses=0xdfUSBtinyISP-ATtiny2313.bootloader.path=attiny45USBtinyISP-ATtiny2313.bootloader.file=ATmegaBOOT.hexUSBtinyISP-ATtiny2313.bootloader.unlock_bits=0x3FUSBtinyISP-ATtiny2313.bootloader.lock_bits=0x0FUSBtinyISP-ATtiny2313.build.mcu=attiny2313USBtinyISP-ATtiny2313.build.f_cpu=8000000LUSBtinyISP-ATtiny2313.build.core=arduino##############################################################arduino_attiny2313.name=USBasp ATtiny2313 8 MHZ internalarduino_attiny2313.upload.using=usbasparduino_attiny2313.upload.protocol=usbasparduino_attiny2313.upload.maximum_size=2048arduino_attiny2313.upload.speed=19200arduino_attiny2313.bootloader.low_fuses=0x64arduino_attiny2313.bootloader.high_fuses=0xdfarduino_attiny2313.bootloader.path=attiny45arduino_attiny2313.bootloader.file=ATmegaBOOT.hexarduino_attiny2313.bootloader.unlock_bits=0x3Farduino_attiny2313.bootloader.lock_bits=0x0Farduino_attiny2313.build.mcu=attiny2313arduino_attiny2313.build.f_cpu=8000000Larduino_attiny2313.build.core=arduino##############################################################atmega8usbasp1mhz.name=ATmega8 tanpa bootloader 1 MHz (USBasp)atmega8usbasp1mhz.upload.using=usbaspatmega8usbasp1mhz.upload.protocol=usbaspatmega8usbasp1mhz.upload.maximum_size=8192atmega8usbasp1mhz.upload.speed=19200atmega8usbasp1mhz.build.mcu=atmega8atmega8usbasp1mhz.build.f_cpu=1000000Latmega8usbasp1mhz.build.core=arduino##############################################################atmega8usbasp8mhz.name=ATmega8 tanpa bootloader 8 MHz (USBasp)atmega8usbasp8mhz.upload.using=usbaspatmega8usbasp8mhz.upload.protocol=usbaspatmega8usbasp8mhz.upload.maximum_size=8192atmega8usbasp8mhz.upload.speed=19200#catatan -U lfuse:w:0xE4#catatan -U hfuse:w:0xD9atmega8usbasp8mhz.build.mcu=atmega8atmega8usbasp8mhz.build.f_cpu=8000000Latmega8usbasp8mhz.build.core=arduino##############################################################atmega8.name=Arduino NG or older w/ ATmega8atmega8.upload.protocol=stk500atmega8.upload.maximum_size=7168atmega8.upload.speed=19200atmega8.bootloader.low_fuses=0xdfatmega8.bootloader.high_fuses=0xcaatmega8.bootloader.path=atmega8atmega8.bootloader.file=ATmegaBOOT.hexatmega8.bootloader.unlock_bits=0x3Fatmega8.bootloader.lock_bits=0x0Fatmega8.build.mcu=atmega8atmega8.build.f_cpu=16000000Latmega8.build.core=arduino##############################################################atmega16_1Mhz_dalam.name=Atmega16 1 MHz internalatmega16_1Mhz_dalam.upload.using=usbaspatmega16_1Mhz_dalam.upload.protocol=usbaspatmega16_1Mhz_dalam.upload.maximum_size=16384atmega16_1Mhz_dalam.upload.speed=57600#catatan -U lfuse:w:0xE1#catatan -U hfuse:w:0x99atmega16_1Mhz_dalam.build.mcu=atmega16atmega16_1Mhz_dalam.build.f_cpu=1000000Latmega16_1Mhz_dalam.build.core=arduino##############################################################arduino_atmega16.name=Arduino-Atmega16arduino_atmega16.upload.protocol=stk500v2arduino_atmega16.upload.maximum_size=14336arduino_atmega16.upload.speed=57600arduino_atmega16.bootloader.low_fuses=0xE4arduino_atmega16.bootloader.high_fuses=0x98arduino_atmega16.bootloader.extended_fuses=0xFFarduino_atmega16.bootloader.path=atmegaarduino_atmega16.bootloader.file=ATmegaBOOT_168_atmega16.hexarduino_atmega16.bootloader.unlock_bits=0x3Farduino_atmega16.bootloader.lock_bits=0x0Farduino_atmega16.build.mcu=atmega16arduino_atmega16.build.f_cpu=8000000Larduino_atmega16.build.core=arduino##############################################################atmega32_no_boot_1MHz.name=ATmega32 1 MHz internalatmega32_no_boot_1MHz.upload.using=usbaspatmega32_no_boot_1MHz.upload.protocol=usbaspatmega32_no_boot_1MHz.upload.maximum_size=32768atmega32_no_boot_1MHz.upload.speed=57600#catatan -U lfuse:w:0xE1#catatan -U hfuse:w:0x99atmega32_no_boot_1MHz.build.mcu=atmega32atmega32_no_boot_1MHz.build.f_cpu=1000000Latmega32_no_boot_1MHz.build.core=arduino##############################################################atmega32_no_boot_8MHz.name=ATmega32 8 MHz internalatmega32_no_boot_8MHz.upload.using=usbaspatmega32_no_boot_8MHz.upload.protocol=usbaspatmega32_no_boot_8MHz.upload.maximum_size=28672atmega32_no_boot_8MHz.upload.speed=57600#catatan -U lfuse:w:0xE4#catatan -U hfuse:w:0x99atmega32_no_boot_8MHz.build.mcu=atmega32atmega32_no_boot_8MHz.build.f_cpu=8000000Latmega32_no_boot_8MHz.build.core=arduino##############################################################arduino_penguino_avr.name=Arduino-Penguino AVRarduino_penguino_avr.upload.protocol=stk500v2arduino_penguino_avr.upload.maximum_size=28672arduino_penguino_avr.upload.speed=57600arduino_penguino_avr.bootloader.low_fuses=0xFFarduino_penguino_avr.bootloader.high_fuses=0xDAarduino_penguino_avr.bootloader.extended_fuses=0x05arduino_penguino_avr.bootloader.path=atmegaarduino_penguino_avr.bootloader.file=stk500boot_v2_penguino.hexarduino_penguino_avr.bootloader.unlock_bits=0x3Farduino_penguino_avr.bootloader.lock_bits=0x0Farduino_penguino_avr.build.mcu=atmega32arduino_penguino_avr.build.f_cpu=16000000Larduino_penguino_avr.build.core=arduino##############################################################uno.name=Arduino Unouno.upload.protocol=stk500uno.upload.maximum_size=32256uno.upload.speed=115200uno.bootloader.low_fuses=0xffuno.bootloader.high_fuses=0xdeuno.bootloader.extended_fuses=0x05uno.bootloader.path=optibootuno.bootloader.file=optiboot_atmega328.hexuno.bootloader.unlock_bits=0x3Funo.bootloader.lock_bits=0x0Funo.build.mcu=atmega328puno.build.f_cpu=16000000Luno.build.core=arduino##############################################################mega2560.name=Arduino Mega 2560mega2560.upload.protocol=stk500v2mega2560.upload.maximum_size=258048mega2560.upload.speed=115200mega2560.bootloader.low_fuses=0xFFmega2560.bootloader.high_fuses=0xD8mega2560.bootloader.extended_fuses=0xFDmega2560.bootloader.path=stk500v2mega2560.bootloader.file=stk500boot_v2_mega2560.hexmega2560.bootloader.unlock_bits=0x3Fmega2560.bootloader.lock_bits=0x0Fmega2560.build.mcu=atmega2560mega2560.build.f_cpu=16000000Lmega2560.build.core=arduino##############################################################arduino_atmega8515.name=Arduino-ATmega8515arduino_atmega8515.upload.using=usbtinyisparduino_atmega8515.upload.protocol=stk500arduino_atmega8515.upload.maximum_size=8192arduino_atmega8515.upload.speed=19200arduino_atmega8515.bootloader.low_fuses=0xdfarduino_atmega8515.bootloader.high_fuses=0xcaarduino_atmega8515.bootloader.path=atmegaarduino_atmega8515.bootloader.file=ATmegaBOOT.hexarduino_atmega8515.bootloader.unlock_bits=0x3Farduino_atmega8515.bootloader.lock_bits=0x0Farduino_atmega8515.build.mcu=atmega8515arduino_atmega8515.build.f_cpu=16000000Larduino_atmega8515.build.core=arduino##############################################################arduino_atmega8535.name=Arduino-Test-Atmega8535arduino_atmega8535.upload.protocol=stk500v2arduino_atmega8535.upload.maximum_size=7168arduino_atmega8535.upload.speed=38400arduino_atmega8535.bootloader.low_fuses=0xECarduino_atmega8535.bootloader.high_fuses=0x18arduino_atmega8535.bootloader.extended_fuses=0xFDarduino_atmega8535.bootloader.path=atmegaarduino_atmega8535.bootloader.file=stk500boot_v2_notdefined.hexarduino_atmega8535.bootloader.unlock_bits=0x3Farduino_atmega8535.bootloader.lock_bits=0x0Farduino_atmega8535.build.mcu=atmega8535arduino_atmega8535.build.f_cpu=16000000Larduino_atmega8535.build.core=arduino##############################################################atmega328.name=Arduino Duemilanove or Nano w/ ATmega328atmega328.upload.protocol=stk500atmega328.upload.maximum_size=30720atmega328.upload.speed=57600atmega328.bootloader.low_fuses=0xFFatmega328.bootloader.high_fuses=0xDAatmega328.bootloader.extended_fuses=0x05atmega328.bootloader.path=atmegaatmega328.bootloader.file=ATmegaBOOT_168_atmega328.hexatmega328.bootloader.unlock_bits=0x3Fatmega328.bootloader.lock_bits=0x0Fatmega328.build.mcu=atmega328patmega328.build.f_cpu=16000000Latmega328.build.core=arduino##############################################################diecimila.name=Arduino Diecimila, Duemilanove, or Nano w/ ATmega168diecimila.upload.protocol=stk500diecimila.upload.maximum_size=14336diecimila.upload.speed=19200diecimila.bootloader.low_fuses=0xffdiecimila.bootloader.high_fuses=0xdddiecimila.bootloader.extended_fuses=0x00diecimila.bootloader.path=atmegadiecimila.bootloader.file=ATmegaBOOT_168_diecimila.hexdiecimila.bootloader.unlock_bits=0x3Fdiecimila.bootloader.lock_bits=0x0Fdiecimila.build.mcu=atmega168diecimila.build.f_cpu=16000000Ldiecimila.build.core=arduino############################################################## | 
Saya melakukan modifikasi pada file boards.txt agar tampilan daftar pilihannya tidak terlalu panjang dan berisi penuh konfigurasi yang hampir tidak pernah saya pergunakan. Jika suatu hari nanti perlu ditambah atau dimodifikasi ulang toh caranya sangat gampang. 

File boards.txt maupun file programmers.txt yang berada di folder/direktori yang sama telah sayaupload di sini. File programmers.txt perlu dimodifikasi jika anda ingin membakar/download bootloader dengan papan selain turunan papan arduino. Misalnya jika ingin menggunakan programmer USBasp atau USBtinyISP.





Demikianlah, selamat mencoba. Silahkan melihat ke semua link (tautan) di tulisan di atas dan daftar referensi berikut:
Sumber: pikirsa.wordpress.com
