digitalWrite(Fast) yang Lambat

Platform Wiring punya Arduino memang populer. Sederhana, murah, dan mudah dipahami jadi kunci penting. Mulai dari IDE (Integrated Development Environment), bahasa pemrograman, dan perangkat keras Mikrokontroler jadi satu PAHE (Paket Hemat hehehe). Untuk merealisasikan dari ide ke realita dengan cepat, platform ini dianjurkan. Tapi untuk masalah performa, perlu dipertimbangkan.

Tapi jangan kuatir,  secara umum  Arduino & Wiring cukup memadai untuk kebanyakan project. Mulai dari yang sederhana seperti menyalakan LED buat rumah semut, sampai soal robot pendeteksi halilintar.

Langsung saja ke soal digitalWrite yang populer. Dicoba pakai perangkat yang sama dan standar : Arduino Atmega2560. Kirim “parcel” signal HIGH dan LOW terus menerus ke pin23. Karena mata tidak bisa melihat, maka digunakan logic analyzer.

Di bawah, contoh program Wiring. Ditulis pakai IDE Arduino 1.8.3 :

     
const int pinX=23 ; 
void setup(){
     pinMode(pinX,OUTPUT); 
}
void loop() {
     digitalWrite(pinX, HIGH); 
     digitalWrite(pinX, LOW); 
}

Hasil digitalWrite :

avra1

Frekuensi yang dicapai 127kHZ.

Di bawah, contoh program standar. Ditulis di IDE Geany 1.3.1 dengan sedikit akal-akalan biar program bisa upload dan jalan di board Arduino Atmega2560 🙂

#include 
int main(void)
{
     DDRA=0xFF; //Set PORTA Output
while(1)
{
     PORTA &=~(1<<PA1); //PORTA pin23 = LOW
     PORTA |=(1<<PA1); //PORTA pin23 = HIGH
}

Hasil dari program standar ala AVR-GCC :

avrb1

Frekuensi yang dicapai 2,667 MHz.

Performa digitalWrite kalah jauh dibanding penulisan cara standar ala “ndeso” hehehe. Frekuensi yang dicapai digitalWrite hanya 1/20 dari cara standar. Angka 127kHZ dibanding 2,667 MHZ.

Tapi…. Ini hanya satu sisi saja. Platform Wiring punya banyak kelebihan dimana untuk “mempermudah” penggunaan tentu ada sisi yang dikorbankan, yaitu “performa”. Performa bukanlah segalanya dalam rancang bangun sistem. Pilihan tergantung situasi dan kembali ke preferensi pribadi.

Frekuensi yang dicapai mungkin sedikit berbeda dengan sistem Anda. Kompiler yang jalan di sistem Ms Windows dan  Linux bisa jadi kurang optimal di Mac misalnya. Arduino punya kompiler AVR-GCC bawaan sendiri. Sedang untuk cara standar saya menggunakan kompiler instal sendiri :). Percobaan di atas semua menggunakan Linux Slackware64 14.2 .

Peace !

Catatan :

Arduino punya library digitalWriteFast yang katanya bisa mencapai 3x kecepatan digitalWrite. Belum coba sih 🙂

Jika ingin tau jeroan dari digitalWrite seperti apa. Klik jeroan 🙂

Performa paling tinggi prediksi saya tetap dipegang bahasa assembler. Tapi ini bakalan mengorbankan waktu kencan yang Indah bersama pacar Anda hehehe.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Foto Google+

You are commenting using your Google+ account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s