Testimonials ( 32 )
(5,0/5)

Review By Sigit Yatmono,
Sigit Yatmono
Toko terpercaya utk belanja komponen dan part robotika
22-07-2024
Verified Purchase
Review By Ade,
Ade
pelayanan ramah
21-02-2024
Verified Purchase
Review By azkal,
azkal
masnya ramah sekali
21-02-2024
Verified Purchase

Produk baru

Berita DigiWare

Menambah Kecepatan Digital Output pada Intel Galileo Gen 2

Pada artikel sebelumnya sudah dijelaskan perihal kecepatan digital output pada Intel Galileo Gen 2. Tetapi apakah dengan kecepatan digital output sekitar 446kHz sudah cukup? Apakah memungkinkan untuk menambah kecepatan digital output dari Intel Galileo Gen 2? Ya, beberapa pertanyaan tersebut akan dibahas secara singkat pada artikel kali ini.

Perlengkapan :

  1. Intel Galileo Gen 2.
  2. Kabel micro-USB.
  3. Notebook / PC.
  4. Arduino IDE ver 1.6.0 (arduino-1.6.0+Intel).

Informasi :

  1. Pengukuran kecepatan I/O tidak menggunakan Osiloskop.
  2. Pengukuran kecepatan I/O menggunakan fungsi micros() di Arduino IDE.
  3. Hasil pengukuran tidak terlalu akurat jika dibanding dengan menggunakan Osiloskop.
  4. Informasi kecepatan I/O ditampilkan melalui antarmuka Serial UART (micro-USB) dengan bantuan Serial Monitor di Arduino IDE.

Fitur Macro khusus pada Intel Galileo Gen 2

Intel Galileo Gen dan Intel Galileo Gen 2 menawarkan fitur baru agar dapat menambah kecepatan pada digital output, yaitu GPIO_FAST_IOx (x merupakan nomor pin) yang berfungsi untuk mendefinisikan pin dan macro fastGpioDigitalWrite() yang berfungsi untuk menuliskan logikan High atau Low pada pin yang sudah didefinisikan. Dengan menggunakan 2 kombinasi macro tersebut, kecepatan digital output dari Intel Galileo Gen 2 akan menjadi 652kHz - 684kHz.

Apabila dengan kecepatan frekuensi 652kHz masih dirasa kurang, maka Intel Galileo Gen 2 menawarkan macro yang lain, yaitu fastGpioDigitalRegWriteUnsafe(). Penggunaan macro ini mampu memaksimalkan kecepatan digital output pada Intel Galileo Gen 2 sampai pada frekuensi 2,94Mhz.

Apakah informasi tersebut sesuai dengan kenyataan? mari kita buktikan...

Langkah-langkah percobaan

  1. Penggunaan macro fastGpioDigitalWrite().
    1. Buka Arduino IDE, buat file baru dan pilih jenis board Intel Galileo Gen 2 serta tentukan nilai ComPort.
    2. Ketikan kode program berikut ini di Arduino IDE :

      		int pin = 2; //inisialisasi pin untuk IO2
      
      		void setup() {
      		  pinMode(pin, OUTPUT);  //mode OUTPUT_FAST pada IO2
      		  Serial.begin(9600);   //aktifkan serial melalui microUSB
      		  
      		  delay(3000);                //tunda 3detik
      
      		  unsigned long jeda,waktu;    //inisialisasi variabel
      		  jeda = micros();          //ambil waktu dari awal (boot)
      		  for (int i=0;i<=1000;i++){
      			fastGpioDigitalWrite(GPIO_FAST_IO2, HIGH);
      			fastGpioDigitalWrite(GPIO_FAST_IO2, LOW);
      		  }
      		  waktu = micros()-jeda;//ambil waktu dikurangi waktu jeda
      		  Serial.print("Waktu untuk 1000x (High-LOW) : ");
      		  Serial.print(waktu);
      		  Serial.println(" mikrodetik");
      		  Serial.print("Waktu untuk 1x pulsa High Low = ");
      		  Serial.print((float)waktu/1000);
      		  Serial.print(" mikrodetik");
      		}
      
      		void loop() {
      		  // put your main code here, to run repeatedly:
      		}
      		
    3. Kemudian Upload kode program tersebut dan segera buka Serial Monitor di Arduino IDE setelah proses Upload selesai.
    4. Berdasarkan informasi yang didapatkan bahwa waktu yang diperlukan oleh Intel Galelio Gen 2 untuk mengeluarkan logika High-Low sekitar 1,52 mikrodetik. Apabila dikonversi ke dalam satuan frekuensi :

    5. Jika dibandingkan dengan artikel sebelumnya, apabila pada pin 2 diakses dengan menggunakan digitalWrite(), maka frekuensi yang dihasilkan sekitar 446,428kHz. Sedangkan jika pin 2 diakses dengan bantuan macro fastGpioDigitalWrite() maka kecepatan digital output akan bertambah menjadi 657,894kHz.
  2. Penggunaan macro fastGpioDigitalRegWriteUnsafe().
    1. Buka file baru pada Arduino IDE, dan ketikan kode program berikut ini :

      		int pin = 2; //inisialisasi pin untuk IO2
      		unsigned long latchValue;
      
      		void setup() {
      		  pinMode(pin, OUTPUT);  //mode OUTPUT_FAST pada IO2
      		  latchValue = fastGpioDigitalRegSnapshot(GPIO_FAST_IO2);
      		  
      		  Serial.begin(9600);   //aktifkan serial melalui microUSB
      		  
      		  delay(3000);                //tunda 3detik
      
      		  unsigned long jeda,waktu;    //inisialisasi variabel
      		  jeda = micros();          //ambil waktu dari awal (boot)
      		  for (int i=0;i<=1000;i++){
      			latchValue ^= GPIO_FAST_IO2;
      			fastGpioDigitalRegWriteUnsafe (GPIO_FAST_IO2, latchValue);
      			latchValue ^= GPIO_FAST_IO2;
      			fastGpioDigitalRegWriteUnsafe (GPIO_FAST_IO2, latchValue);
      		  }
      		  waktu = micros()-jeda;//ambil waktu dikurangi waktu jeda
      		  Serial.print("Waktu untuk 1000x (High-LOW) : ");
      		  Serial.print(waktu);
      		  Serial.println(" mikrodetik");
      		  Serial.print("Waktu untuk 1x pulsa High Low = ");
      		  Serial.print((float)waktu/1000,1);
      		  Serial.print(" mikrodetik");
      
      		}
      		void loop() {
      		  // put your main code here, to run repeatedly:
      		}
      		
    2. Kemudian Upload kode program tersebut dan segera buka Serial Monitor pada Arduino IDE setelah proses Upload selesai.
    3. Berdasarkan informasi yang didapatkan bahwa waktu yang diperlukan oleh Intel Galelio Gen 2 untuk mengeluarkan logika High-Low sekitar 0,4 mikrodetik. Apabila dikonversi ke dalam satuan frekuensi :

Fitur macro fastGpioDigitalRegWriteUnsafe() tergolong tidak aman. Sesuai dengan unsur kata yang ada di namanya (fastGpioDigitalRegWriteUnsafe), fungsi ini langsung mengakses I/O tanpa memperdulikan apakah I/O tersebut sedang diakses atau tidak.

Perlu diperhatikan bahwa kode program yang telah ditunjukkan pada pembahasan sebelumnya hanya menggunakan pin 2 saja. Apabila ingin menggunakan pin yang lain harus memperhatikan terlebih dahulu koneksi dari masing-masing I/O.

Pada tabel dapat dilihat bahwa pada pin 7 dan pin 8 di Intel Galileo Gen 2 terhubung ke I/O Expander. Oleh karena itu pada pin 7 dan pin 8 tidak bisa menggunakan fitur macro fastGpioDigitalWrite() dan fastGpioDigitalRegWriteUnsafe().

Selain pin 7 dan pin 8 pada Intel Galileo Gen 2, terdapat juga informasi mengenai South Cluster dan North Cluster. South Cluster berarti Quark SoC akan mengakses I/O yang tergolong di bagian South Cluster melalui Memory-Maped I/O. Sedangkan North Cluster berarti Quark SoC akan mengakses I/O yang tergolong di bagian North Cluster melalui Port-Maped I/O.

Quark SoC akan lebih cepat mengakses I/O dengan cara Memory-Maped I/O dari pada Port-Maped I/O.

OK, mari kita buktikan lagi...

Langkah-langkah percobaan

  1. Pada percobaan yang terakhir (fastGpioDigitalRegWriteUnsafe()), ubah parameter dari pin 2 menjadi pin 4 dan GPIO_FAST_IO2 menjadi GPIO_FAST_IO4.
  2. Kemudian Upload kode program tersebut dan segera buka Serial Monitor yang ada di Arduino IDE setelah proses Upload selesai.
  3. Berdasarkan informasi tersebut, waktu yang diperlukan oleh Intel Galileo Gen 2 untuk mengeluarkan logika High-Low pada pin 4 sekitar 0,9 mikrodetik. Apabila dikonversi menjadi frekuensi menjadi berikut :

Pada pin 4 di Intel Galileo Gen 2, frekuensi yang dihasilkan sekitar 1,1MHz. Hal ini berbeda pada percobaan sebelumnya yang menggunakan pin 2 yang mampu menghasilkan frekuensi sekitar 2,5MHz. Hal ini terjadi karena adanya konfigurasi I/O dari Intel Galileo Gen 2, yaitu South Cluster dan North Cluster.

Setelah membaca arikel ini apakah teman-teman sudah memiliki ide untuk mengembangkan aplikasi berbasis Intel Galileo Gen 2?

Segera wujudkan ide kalian menjadi nyata dan terus berinovasi….!!!!!!!!!