Menghapus EEPROM menggunakan program yang diupload ke memori Flash dan kemudian dijalankan
Menggunakan fasilitas serial programming melalui ISP (In System Programming) di ATmega328
Menggunakan fasilitas parallel programming / high voltage programming pada ATmega328
Menghapus EEPROM Dengan Upload Program
Teknik ini dijelaskan di tutorial EEPROM Clear di https://www.arduino.cc/en/Tutorial/EEPROMClear
Prinsip dasarnya adalah menggunakan fungsi EEPROM.write() untuk menulis angka 0 ke semua lokasi EEPROM.
Berikut ini contoh program untuk menghapus semua isi data di EEPROM.
/* * EEPROM Write * * Stores values read from analog input 0 into the EEPROM. * These values will stay in the EEPROM when the board is * turned off and may be retrieved later by another sketch. */
#include <EEPROM.h>
/** the current address in the EEPROM (i.e. which byte we're going to write to next) **/ int addr =0;
voidsetup(){ /** Empty setup. **/ }
voidloop(){ /*** Need to divide by 4 because analog inputs range from 0 to 1023 and each byte of the EEPROM can only hold a value from 0 to 255. ***/
int val =analogRead(0)/4;
/*** Write the value to the appropriate byte of the EEPROM. these values will remain there when the board is turned off. ***/
EEPROM.write(addr, val);
/*** Advance to the next address, when at the end restart at the beginning.
Rather than hard-coding the length, you should use the pre-provided length function. This will make your code portable to all AVR processors. ***/ addr = addr +1; if(addr == EEPROM.length()){ addr =0; }
/*** As the EEPROM sizes are powers of two, wrapping (preventing overflow) of an EEPROM address is also doable by a bitwise and of the length - 1.
++addr &= EEPROM.length() - 1; ***/
delay(100); }
Menghapus EEPROM Dengan ISP (In System Programming)
Pada metode ini, diperlukan antar muka khusus ke port ISP di ATmega328 pada Arduino UNO. Contoh antar muka yang populer adalah USBasp (https://www.fischl.de/usbasp/)
Perangkat lunak yang diperlukan ada beberapa macam, misalnya:
Program yang sudah diupload ke Arduino tidak dapat diedit lagi. Tepatnya: bisa diambil kalau Arduinonya belum dikunci, kodenya sudah tidak dalam bentuk awal. Kode dapat diedit, namun sulit sekali karena dalam bahasa assembly.
Arduino UNO R3
Program sketch Arduino menggunakan bahasa C++, dalam bentuk format teks program. Filenya menggunakan ekstensi *.INO. Ketika akan diupload ke Arduino, program tersebut diubah dulu oleh compiler dan linker menjadi file *.HEX . File *.HEX ini berisi kode-kode mesin yang akan diterjemahkan oleh prosesor di Arduino menjadi instruksi yang akan dikerjakan. Kode bahasa C++ tidak ada di dalam file HEX tersebut, sehingga kita tidak dapat lagi mengedit progam yang sudah diupload ke Arduino.
Arduino IDE dengan program Blink
Berikut ini adalah source code untuk membuat LED berkedip, sumbernya dari contoh di Arduino IDE (File -> Examples -> 01.Basics -> Blink.
Penjelasan tentang software tersebut dapat juga dibaca di artikel “Arduino Tutorial Blink“.
Pada potongan kode berikut ini , komentar pada kode dihilangkan sehingga hanya source code pentingnya saja yang ditampilkan.
void setup() { pinMode(LED_BUILTIN, OUTPUT); }
void loop() { digitalWrite(LED_BUILTIN, HIGH);level) delay(1000); // wait for a second digitalWrite(LED_BUILTIN, LOW); delay(1000); }
Software itu dicompile, menghasilkan binary dalam format HEX dengan nama “Blink.ino.hex”.
File “Blink.ino.hex” ini yang kemudian dimasukkan ke dalam prosesor di Arduino UNO, yaitu ATmega328. Format HEX ini adalah format teks ASCII , sedangkan untuk melihat wujud data ini dalam bentuk binary, mesti menggunakan software avr-objcopy, yang biasanya di Windows ada di “C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-objcopy”.
File HEX ini diubah dengan avr-objcopy menjadi format binary, dengan perintah sebagai berikut:
Isi file dilihat dengan utility HxD (), hasilnya sebagai berikut:
Kode biner program di Arduino
Dari kode biner tersebut nampak sudah tidak ada lagi teks source code yang aslinya. Sehingga teks asli source code tidak dapat lagi diedit berdasarkan program yang sudah diupload ke Arduino UNO.
Untuk melihat kerja dari program binary tersebut dapat menggunakan fitur disassembly, namun sangat sulit dibaca dibandingkan dengan source code aslinya.
Kode biner tersebut dapat dibaca dari prosesor ATmega328, namun syaratnya adalah fuse bit untuk membaca FLASH memory pada ATmega328 belum dikunci.
Kode program tersebut dapat diubah ke dalam bahasa assembly, dengan perintah berikut ini:
Berapakah daya terbesar (maksimum) yang dipakai oleh Arduino UNO? Jika menggunakan catu daya Power Jack, daya masuk maksimum adalah 16 watt. Jika menggunakan catu daya USB, daya masuk maksimum adalah 2,5 watt.
Pengertian daya untuk Arduino ini dapat diartikan bermacam-macam, di antaranya:
Daya maksimum yang dapat masuk ke board Arduino UNO tanpa merusaknya. Jika tidak ada batasan kerusakan, maka praktis tidak ada keterbatasan.
Daya maksimum yang diserap oleh prosesor di Arduino, yaitu ATmega328
Daya maksimum total yang dapat dikeluarkan dari semua pin-pin pada Arduino
Daya maksimum yang dapat dikeluarkan oleh 1 pin pada Arduino.
Daya Maksimum Masuk ke Arduino UNO
Daya yang dipakai oleh Arduino UNO tanpa merusaknya dibatasi oleh 2 hal: kemampuan catu daya / regulator, dan kemampuan arus pada prosesor ATmega328.
Rangkaian Catu Daya Arduino UNO
Arus catu daya dari PWRIN masuk melalui dioda D1 dengan tipe M7. Dioda ini memiliki arus maksimum 1 ampere, sesuai menurut spesifikasinya.
Regulator MC33269D-5.0 memiliki arus maksimum 800 mA, menurut spesifikasinya. Nama parameternya adalah “Current Limit”, dapat dilihat di screenshot berikut ini.
MC33269-Electrical Characteristics
Jika menggunakan power supply dari port USB, maka arus maksimumnya adalah 500 mA. Arus ini dibatasi oleh kemampuan sumber USB dan terutama oleh sekring 500 mA yang dipasang di jalur USBVCC. Skema input USB dapat dilihat pada gambar berikut. Sumber: [skematik Arduino UNO]
Sekring F1 (500 mA) pada jalur 5 volt USB
Daya Aktif Diserap ATmega328
Berikut ini grafik konsumsi daya pada prosesor ATmega328 yang dipakai di Arduino UNO, diambil dari datasheet ATmega328:
ATmega328P active supply current vs frequency
Dari grafik tersebut dapat diambil kesimpulan arus maksimum yang dipakai oleh ATmega328 pada frekuensi 16 MHz dengan tegangan 5 volt adalah mendekati 10 mA. Daya yang diserap ATmega328 = 5 volt x 10 mA = 50 mW.
Konsumsi board Arduino UNO bisa lebih besar, karena pada board Arduino UNO terdapat komponen lain yang juga memerlukan daya.
Daya Total dari semua pin ATmega328
Arus maksimum yang dapat dilewatkan di pin VCC pada ATmega328 adalah 200 mA, sehingga daya yang diberikan pin-pin adalah 200 mA x 5 volt = 1000 mW = 1 watt.
Sumber informasinya adalah datasheet ATmega328 di bagian 28.1 Absolute Maximum Ratings sebagai berikut:
ATmega328 absolute maximum rating
Daya Total dari 1 buah pin ATmega328
Arus maksimum pada 1 pin ATmega328 adalah 40 mA, sehingga daya maksimum = 40 mA x 5 volt = 200 mW.
Sumber informasinya adalah datasheet ATmega328 di bagian 28.1 Absolute Maximum Ratings yang sudah disebutkan di atas.
Kesimpulan
#1 Daya maksimum yang diserap board Arduino Nano sebagai berikut:
Sumber Tegangan
Tegangan
Arus catu daya maksimum
Daya masuk
Daya terbuang di regulator
Daya lewat ATmega328
Daya lewat pin 5V
Power Jack
7 volt
800 mA
5.6 watt
1,6 watt
1 watt
3 watt
Power Jack
12 volt
800 mA
9,6 volt
5,6 watt
1 watt
3 watt
Power Jack
20 volt
800 mA
16 watt
12 watt
1 watt
3 watt
USB
5 volt
500 mA
2,5 watt
0
1 watt
1,5 watt
#2 Daya maksimum diserap ATmega328 adalah 50 mW
#3 Daya total dari pin ATmega328 adalah 1 watt
#4 Daya total dari 1 buah pin ATmega328 adalah 200 mW
Cara menyalakan Arduino UNO adalah dengan menyambungkan catu daya (power supply) ke pin power pada Arduino UNO. Pada Arduino UNO ada beberapa pin power.
Berikut ini skema pin-pin pada Arduino UNO
Pin Arduino UNO
Pin power yang dapat dipakai adalah sebagai berikut:
Power Jack, umumnya menggunakan tegangan 7 volt sampai 12 volt. Dilengkapi dioda pengaman untuk melindungi polaritas terbalik.
USB Jack, menggunakan tegangan 5 volt dari komputer atau USB charger
pin VIN, umumnya menggunakan tegangan 7,5 volt sampai dengan 12 volt seperti power jack. Namun VIN ini tidak diamankan dengan dioda.
Uraian
Pemberian tegangan catu daya yang keliru dapat merusak Arduino UNO dapat merusak Arduino UNO. Pembahasan lengkapnya di artikel “Cara Merusak Arduino“. Berikut ini ringkasannya.
Rangkaian Catu Daya Arduino UNO
Regulator menggunakan IC MC33269D-5.0. Regulator ini memiliki tegangan drop 1,0 volt, sehingga tegangan minimum pada VIN adalah 5 volt + 1 volt + 0,7 volt (tegangan pada D1). Jadi Jack power memerlukan tegangan minimum 6,7 volt. Untuk amannya dapat menggunakan tegangan tegangan 7 volt.
Tegangan maksimum pada IC MC33269D-5.0 adalah 20 volt , disebut di bagian Maximum Ratings pada datasheet. Jadi tegangan power jack harus dibatasi di bawah 20 volt supaya tidak merusak regulator MC33260D-5.0. Untuk amannya pakai saja 12 volt supaya regulator tidak terlalu panas.
Pin VIN menggunakan regulator yang sama, namun tidak melalui dioda pengaman D1. Jadi kalau tegangan pada VIN terbalik, maka catu daya akan langsung rusak.
Persamaan dan perbedaan antara ATmega8535 dan Arduino UNO dapat diuraikan dengan membandingkan prosesor ATmega8353 dan prosesor ATmega328, karena Arduino UNO prosesor utamanya adalah ATmega328.
Berikut ini perbandingan ringkas antara keduanya.
Parameter
ATmega8535
ATmega328
Clock
16 MHz
16 MHz
Memori Flash
8 KB
32 KB
Memori SRAM
512 byte
2 KB
Memori EEPROM
512 byte
1 KB
Counter
2 buah 8 bit timer/counter 1 buah 16 bit timer/counter
2 buah 8 bit timer/counter 1 buah 16 bit timer/counter
ADC
8 kanal, 10 bit
8 kanal , 10 bit
I/O pin
32 pin
23 pin
Kemasan
40 pin PDIP 44 lead TQFP 44 pad QFN/MLF
TQFP 32 lead QFN/MLF 32 lead
Interupsi Eksternal
External interrupt
External interrupt Pin Change Interrupt (PCINT)
Perbedaan utama
Memori Arduino UNO lebih besar (Flash: 32 KB vs 8 KB, SRAM: 2 KB vs 512 byte, EEPROM 1 KB vs 512 byte)
Jumlah pin I/O Arduino UNO lebih sedikit (23 pin vs 40 pin)
Interupsi eksternal di Arduino UNO lebih banyak , ada PCINT, sedangkan di ATmega8535 tidak ada PCINT
Parameter penting yang sama:
Clock sama, jadi kecepatan sama
CPU / prosesor praktis sama, hanya berbeda periferalnya saja
Besarnya memori flash pada board Arduino Uno adalah sebesar 32 kilobyte (32768 byte)
Istilah ROM sebenarnya tidak tepat, karena memori ROM (Read Only Memory) adalah memory yang sudah diprogram di pabrik dan tidak dapat diubah oleh pengguna. Lebih detail dapat dibaca di artikel “Memori Pada Sistem Mikroprosesor“
Besar memori tersebut dapat dilihat di spesifikasi teknis (tech specs) dari situs Arduino (https://store.arduino.cc/usa/arduino-uno-rev3) , dengan screenshot sebagai berikut:
Spesifikasi Arduino UNO
Dari spesifikasi tersebut dapat dilihat bahwa memori pada Arduino UNO adalah sebagai berikut:
Flash Memory sebesar 32 KB (32768 byte)
SRAM (Static Random Access Memory) sebesar 2 KB (2048 byte)
EEPROM (Electrically Erasable Programmable Read Only Memory) sebesar 1 KB (1024 byte)
Kelebihan Arduino UNO dibandingkan PC adalah sebagai berikut:
Ukuran kecil, hanya 68.6 mm x 53.4 mm
Bobot lebih ringan, hanya 25 gram.
Keperluan daya kecil, tegangan 5 volt dengan arus maksimum 200 mA pada pin VCC, jadi konsumsi daya maksimum adalah 1 watt
Harga murah. Arduino UNO R3 asli harganya sekitar Rp 400 ribu , sedangkan Arduino UNO KW harganya Rp 50 ribu sampai Rp 70 ribu.
Antar muka digital dan analog mudah. Pin-pin pada Arduino UNO dapat dengan mudah difungsikan sebagai input dan output digital maupun analog. Sedangkan pada PC cukup sulit untuk menambahkan input output digital maupun analog.
Uraian
Berikut ini spesifikasi Arduino UNO R3 menurut situs https://store.arduino.cc/usa/arduino-uno-rev3
Spesifikasi Arduino UNO
Berikut ini batas maksimum arus dan tegangan pada ATmega328, diambil dari datasheet ATmega328.
Batas maksimum ATmega328
Berikut ini contoh harga Arduino UNO asli di toko online
Harga Arduino UNO asli
Berikut ini harga PC rakitan di toko online
Harga PC rakitan
Pada PC, untuk menambahkan kemampuan input / output digital dapat menggunakan modul FT2232HL yang disambungkan melalui port USB di PC/laptop.
FT2232HL Input output digital melalui USB
Input output analog pada PC lebih rumit lagi, karena mesti menggunakan “Data Acquisition Board” yang dihubungkan melalui USB. Pada PC sebenarnya ada input output analog melalui port speaker dan mikrofon, namun hanya cocok untuk sinyal audio, tidak cocok untuk misalnya membaca data dari sensor.
const adalah sebuah kata kunci pada bahasa pemrograman C++
Kata kunci const berasal dari kata ‘constant’, terjemahan dalam bahasa Indonesia adalah ‘konstan’, artinya tidak berubah.
Kata kunci const mengubah perilaku variabel menjadi hanya dapat dibaca (read only). Variabel tersebut dapat dipakai seperti variabel lain, hanya saja nilainya tidak dapat diubah. Jika ada kode yang mencoba untuk mengubah nilai variable tersebut, maka akan timbul pesan kesalahan pada compiler.
Sepintas penggunaan const mirip dengan #define. Perbedaan utamanya adalah bahwa penggunaan variabel dengan const akan mengikuti aturan variable scoping pada bahasa C++, jadi penggunaan variabel tersebut dapat dibatasi. Sedangkan #define tidak terbatas oleh scope, jadi berlaku di semua bagian kode.
Contoh Kode
Berikut ini adalah contoh penggunaan const. Variabel delay_value dipakai untuk menentukan jangka waktu delay.
const int delay_value=1000;
void setup() { pinMode(LED_BUILTIN, OUTPUT); }
void loop() { digitalWrite(LED_BUILTIN, HIGH); delay(delay_value); // wait for a second digitalWrite(LED_BUILTIN, LOW); delay(delay_value); // wait for a second }
Jika variable delay_value dicoba untuk diubah, maka akan muncul pedan kesalahan “assignment of read only variable ‘delay_value'” seperti di bawah ini.
Arduino dapat dipakai untuk mengembangkan filter digital bandpass.
Sebelum dilakukan pembuatan perlu dibuat dulu spesifikasi yang diinginkan, setelah itu baru dikaji apakah bisa atau tidak.
Informasi yang diperlukan adalah sebagai berikut:
sinyal input analog/digital? berapa volt?
sinyal output analog/digital? berapa volt?
bandpas dari berapa Hz sampai berapa Hz?
noise maksimum berapa dB?
perlu ADC & DAC berapa bit? -> ini dapat diturunkan dari noise yang diinginkan
Filter bandpass digital secara teoritis dapat dibuat di Arduino Nano/UNO, namun mesti diperhatikan bahwa komputasi di prosesorATmega328 terbatas, kalau spesifikasi rada tinggi mesti cari prosesor lain.
Analisis Kebutuhan / Requirement
Pada tahap ini dirumuskan latar belakang masalah , rumusan permasalah yang perlu diselesaikan, serta tujuan sistem.
Spesifikasi
Pada tahap ini ditentukan spesikasi teknis sistem.
Perancangan
Pada tahap ini dilakukan perancangan hardware dan software.
Diagram pengolahan sinyal digital
Simulasi
Setelah perancangan hardware dan software dibuat, perlu dilakukan simulasi untuk mengecek apakah rangkaian dan software yang dibuat berfungsi baik. Tahap simulasi filter secara umum dibahas di artikel Simulasi Pengolahan Sinyal Digital
Implementasi
Pada tahap ini dilakukan pembuatan hardware dan software.
Pada tahap prototype dapat dilakukan dengan breadboard, namun pada sistem yang lebih serius perlu sampai merancang kotak, tampilan dan tombol-tombol yang diperlukan.
Pengujian
Pada tahap ini dilakuan pengujian untuk melihat kesesuaian antara sifat sistem yang dicapai dengan spesifikasi yang diinginkan.
Validasi
Pada tahap ini dilakukan validasi, artinya membandingkan antara requirement dan apakah sistem dapat menyelesaikan masalah di requirement.
Library FreeRTOS ini dapat diinstall di Arduino IDE dari menu Tools -> Manage Libraries. Kemudian search dengan kata kunci FreeRTOS.
Proses instalasi library FreeRTOS
Sebagai contoh, berikut ini diagram alir (flowchart) sebuah program yang membuat LED berkedip dengan 3 buah loop. Masing-masing LED memiliki frekuensi yang berbeda.