Thursday, 26 February 2015

ARDUINO :: Cara menggunakan Arduino GUI di Board lain, selain ARDUINO Board


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.
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 files
Download this file (arduino-extras.zipuncompress 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: bootloaderscores 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=USBasp
usbtinyisp.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_programmer
xxx.upload.protocol=nama_programmer

Misalnya:
    USBtinyISP-ATtiny2313.upload.using=usbtiny
    USBtinyISP-ATtiny2313.upload.protocol=usbtiny
atau
    arduino_attiny2313.upload.using=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 internal
 
USBtinyISP-ATtiny2313.upload.using=usbtiny
USBtinyISP-ATtiny2313.upload.protocol=usbtiny
USBtinyISP-ATtiny2313.upload.maximum_size=2048
USBtinyISP-ATtiny2313.upload.speed=19200
 
USBtinyISP-ATtiny2313.bootloader.low_fuses=0x64
USBtinyISP-ATtiny2313.bootloader.high_fuses=0xdf
USBtinyISP-ATtiny2313.bootloader.path=attiny45
USBtinyISP-ATtiny2313.bootloader.file=ATmegaBOOT.hex
USBtinyISP-ATtiny2313.bootloader.unlock_bits=0x3F
USBtinyISP-ATtiny2313.bootloader.lock_bits=0x0F
 
USBtinyISP-ATtiny2313.build.mcu=attiny2313
USBtinyISP-ATtiny2313.build.f_cpu=8000000L
USBtinyISP-ATtiny2313.build.core=arduino
 
##############################################################
 
arduino_attiny2313.name=USBasp ATtiny2313 8 MHZ internal
 
arduino_attiny2313.upload.using=usbasp
arduino_attiny2313.upload.protocol=usbasp
arduino_attiny2313.upload.maximum_size=2048
arduino_attiny2313.upload.speed=19200
 
arduino_attiny2313.bootloader.low_fuses=0x64
arduino_attiny2313.bootloader.high_fuses=0xdf
arduino_attiny2313.bootloader.path=attiny45
arduino_attiny2313.bootloader.file=ATmegaBOOT.hex
arduino_attiny2313.bootloader.unlock_bits=0x3F
arduino_attiny2313.bootloader.lock_bits=0x0F
 
arduino_attiny2313.build.mcu=attiny2313
arduino_attiny2313.build.f_cpu=8000000L
arduino_attiny2313.build.core=arduino
 
##############################################################
 
atmega8usbasp1mhz.name=ATmega8 tanpa bootloader 1 MHz (USBasp)
 
atmega8usbasp1mhz.upload.using=usbasp
atmega8usbasp1mhz.upload.protocol=usbasp
atmega8usbasp1mhz.upload.maximum_size=8192
atmega8usbasp1mhz.upload.speed=19200
 
atmega8usbasp1mhz.build.mcu=atmega8
atmega8usbasp1mhz.build.f_cpu=1000000L
atmega8usbasp1mhz.build.core=arduino
 
##############################################################
 
atmega8usbasp8mhz.name=ATmega8 tanpa bootloader 8 MHz (USBasp)
 
atmega8usbasp8mhz.upload.using=usbasp
atmega8usbasp8mhz.upload.protocol=usbasp
atmega8usbasp8mhz.upload.maximum_size=8192
atmega8usbasp8mhz.upload.speed=19200
 
#catatan -U lfuse:w:0xE4
#catatan -U hfuse:w:0xD9
 
atmega8usbasp8mhz.build.mcu=atmega8
atmega8usbasp8mhz.build.f_cpu=8000000L
atmega8usbasp8mhz.build.core=arduino
 
##############################################################
 
atmega8.name=Arduino NG or older w/ ATmega8
 
atmega8.upload.protocol=stk500
atmega8.upload.maximum_size=7168
atmega8.upload.speed=19200
 
atmega8.bootloader.low_fuses=0xdf
atmega8.bootloader.high_fuses=0xca
atmega8.bootloader.path=atmega8
atmega8.bootloader.file=ATmegaBOOT.hex
atmega8.bootloader.unlock_bits=0x3F
atmega8.bootloader.lock_bits=0x0F
 
atmega8.build.mcu=atmega8
atmega8.build.f_cpu=16000000L
atmega8.build.core=arduino
 
##############################################################
 
atmega16_1Mhz_dalam.name=Atmega16 1 MHz internal
 
atmega16_1Mhz_dalam.upload.using=usbasp
atmega16_1Mhz_dalam.upload.protocol=usbasp
atmega16_1Mhz_dalam.upload.maximum_size=16384
atmega16_1Mhz_dalam.upload.speed=57600
 
#catatan -U lfuse:w:0xE1
#catatan -U hfuse:w:0x99
 
atmega16_1Mhz_dalam.build.mcu=atmega16
atmega16_1Mhz_dalam.build.f_cpu=1000000L
atmega16_1Mhz_dalam.build.core=arduino
 
##############################################################
 
arduino_atmega16.name=Arduino-Atmega16
 
arduino_atmega16.upload.protocol=stk500v2
arduino_atmega16.upload.maximum_size=14336
arduino_atmega16.upload.speed=57600
 
arduino_atmega16.bootloader.low_fuses=0xE4
arduino_atmega16.bootloader.high_fuses=0x98
arduino_atmega16.bootloader.extended_fuses=0xFF
arduino_atmega16.bootloader.path=atmega
arduino_atmega16.bootloader.file=ATmegaBOOT_168_atmega16.hex
arduino_atmega16.bootloader.unlock_bits=0x3F
arduino_atmega16.bootloader.lock_bits=0x0F
 
arduino_atmega16.build.mcu=atmega16
arduino_atmega16.build.f_cpu=8000000L
arduino_atmega16.build.core=arduino
 
##############################################################
 
atmega32_no_boot_1MHz.name=ATmega32 1 MHz internal
 
atmega32_no_boot_1MHz.upload.using=usbasp
atmega32_no_boot_1MHz.upload.protocol=usbasp
atmega32_no_boot_1MHz.upload.maximum_size=32768
atmega32_no_boot_1MHz.upload.speed=57600
 
#catatan -U lfuse:w:0xE1
#catatan -U hfuse:w:0x99
 
atmega32_no_boot_1MHz.build.mcu=atmega32
atmega32_no_boot_1MHz.build.f_cpu=1000000L
atmega32_no_boot_1MHz.build.core=arduino
 
##############################################################
 
atmega32_no_boot_8MHz.name=ATmega32 8 MHz internal
 
atmega32_no_boot_8MHz.upload.using=usbasp
atmega32_no_boot_8MHz.upload.protocol=usbasp
atmega32_no_boot_8MHz.upload.maximum_size=28672
atmega32_no_boot_8MHz.upload.speed=57600
 
#catatan -U lfuse:w:0xE4
#catatan -U hfuse:w:0x99
 
atmega32_no_boot_8MHz.build.mcu=atmega32
atmega32_no_boot_8MHz.build.f_cpu=8000000L
atmega32_no_boot_8MHz.build.core=arduino
 
##############################################################
arduino_penguino_avr.name=Arduino-Penguino AVR
 
arduino_penguino_avr.upload.protocol=stk500v2
arduino_penguino_avr.upload.maximum_size=28672
arduino_penguino_avr.upload.speed=57600
 
arduino_penguino_avr.bootloader.low_fuses=0xFF
arduino_penguino_avr.bootloader.high_fuses=0xDA
arduino_penguino_avr.bootloader.extended_fuses=0x05
arduino_penguino_avr.bootloader.path=atmega
arduino_penguino_avr.bootloader.file=stk500boot_v2_penguino.hex
arduino_penguino_avr.bootloader.unlock_bits=0x3F
arduino_penguino_avr.bootloader.lock_bits=0x0F
 
arduino_penguino_avr.build.mcu=atmega32
arduino_penguino_avr.build.f_cpu=16000000L
arduino_penguino_avr.build.core=arduino
 
##############################################################
 
uno.name=Arduino Uno
uno.upload.protocol=stk500
uno.upload.maximum_size=32256
uno.upload.speed=115200
uno.bootloader.low_fuses=0xff
uno.bootloader.high_fuses=0xde
uno.bootloader.extended_fuses=0x05
uno.bootloader.path=optiboot
uno.bootloader.file=optiboot_atmega328.hex
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
uno.build.mcu=atmega328p
uno.build.f_cpu=16000000L
uno.build.core=arduino
 
##############################################################
 
mega2560.name=Arduino Mega 2560
 
mega2560.upload.protocol=stk500v2
mega2560.upload.maximum_size=258048
mega2560.upload.speed=115200
 
mega2560.bootloader.low_fuses=0xFF
mega2560.bootloader.high_fuses=0xD8
mega2560.bootloader.extended_fuses=0xFD
mega2560.bootloader.path=stk500v2
mega2560.bootloader.file=stk500boot_v2_mega2560.hex
mega2560.bootloader.unlock_bits=0x3F
mega2560.bootloader.lock_bits=0x0F
 
mega2560.build.mcu=atmega2560
mega2560.build.f_cpu=16000000L
mega2560.build.core=arduino
 
##############################################################
arduino_atmega8515.name=Arduino-ATmega8515
 
arduino_atmega8515.upload.using=usbtinyisp
arduino_atmega8515.upload.protocol=stk500
arduino_atmega8515.upload.maximum_size=8192
arduino_atmega8515.upload.speed=19200
 
arduino_atmega8515.bootloader.low_fuses=0xdf
arduino_atmega8515.bootloader.high_fuses=0xca
arduino_atmega8515.bootloader.path=atmega
arduino_atmega8515.bootloader.file=ATmegaBOOT.hex
arduino_atmega8515.bootloader.unlock_bits=0x3F
arduino_atmega8515.bootloader.lock_bits=0x0F
 
arduino_atmega8515.build.mcu=atmega8515
arduino_atmega8515.build.f_cpu=16000000L
arduino_atmega8515.build.core=arduino
 
##############################################################
arduino_atmega8535.name=Arduino-Test-Atmega8535
 
arduino_atmega8535.upload.protocol=stk500v2
arduino_atmega8535.upload.maximum_size=7168
arduino_atmega8535.upload.speed=38400
 
arduino_atmega8535.bootloader.low_fuses=0xEC
arduino_atmega8535.bootloader.high_fuses=0x18
arduino_atmega8535.bootloader.extended_fuses=0xFD
arduino_atmega8535.bootloader.path=atmega
arduino_atmega8535.bootloader.file=stk500boot_v2_notdefined.hex
arduino_atmega8535.bootloader.unlock_bits=0x3F
arduino_atmega8535.bootloader.lock_bits=0x0F
 
arduino_atmega8535.build.mcu=atmega8535
arduino_atmega8535.build.f_cpu=16000000L
arduino_atmega8535.build.core=arduino
 
##############################################################
 
atmega328.name=Arduino Duemilanove or Nano w/ ATmega328
 
atmega328.upload.protocol=stk500
atmega328.upload.maximum_size=30720
atmega328.upload.speed=57600
 
atmega328.bootloader.low_fuses=0xFF
atmega328.bootloader.high_fuses=0xDA
atmega328.bootloader.extended_fuses=0x05
atmega328.bootloader.path=atmega
atmega328.bootloader.file=ATmegaBOOT_168_atmega328.hex
atmega328.bootloader.unlock_bits=0x3F
atmega328.bootloader.lock_bits=0x0F
 
atmega328.build.mcu=atmega328p
atmega328.build.f_cpu=16000000L
atmega328.build.core=arduino
 
##############################################################
 
diecimila.name=Arduino Diecimila, Duemilanove, or Nano w/ ATmega168
 
diecimila.upload.protocol=stk500
diecimila.upload.maximum_size=14336
diecimila.upload.speed=19200
 
diecimila.bootloader.low_fuses=0xff
diecimila.bootloader.high_fuses=0xdd
diecimila.bootloader.extended_fuses=0x00
diecimila.bootloader.path=atmega
diecimila.bootloader.file=ATmegaBOOT_168_diecimila.hex
diecimila.bootloader.unlock_bits=0x3F
diecimila.bootloader.lock_bits=0x0F
 
diecimila.build.mcu=atmega168
diecimila.build.f_cpu=16000000L
diecimila.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 siniFile 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

No comments:

Post a Comment