Archive for the ‘Zero Due and MKR Family’ Category

Function analogWriteResolution() pada Arduino Programming Language

Wednesday, February 24th, 2021

Deskripsi

Fungsi ini digunakan untuk mengatur resolusi dari fungsi analogWrite() di mana pada kondisi standard adalah 8 bit (nilai dari 0 – 255).  Namun untuk beberapa Arduino Board ini ada beberapa perbedaan

Arduino Due:

  • Terdapat 12 pin dengan 8 bit PWM pada kondisi standardnya. Resolusi ini dapat diubah menjadi 12 bit
  • Terdapat 2 pin DAC (Digital to Analog Converter)

Dengan mengubah resolusi menjadi 12 maka pada saat digunakan fungsi analogWrite() akan terdapat nilai mulai dari 0 – 4095 pada DAC atau terdapat signal PWM yang lebih halus.

Arduino Zero:

  • Terdapat 10 pin dengan 8 bit PWM pada kondisi standardnya. Resolusi ini dapat diubah menjadi 12 bit
  • Terdapat 1 pin DAC (Digital to Analog Converter)

Dengan mengubah resolusi menjadi 10 maka pada saat digunakan fungsi analogWrite() akan terdapat nilai mulai dari 0 – 4095 pada DAC

MKR Family:

  • Terdapat 4 pin dengan 8 bit PWM pada kondisi standardnya. Resolusi ini dapat diubah menjadi 12 bit
  • Terdapat 1 pin DAC (Digital to Analog Converter)

Dengan mengubah resolusi menjadi 12 maka pada saat digunakan fungsi analogWrite() akan terdapat nilai mulai dari 0 – 4095 pada PWM. Pengaturan 10 bit pada DAC akan mengakibatkan DAC memiliki range 0 – 1023.

Syntax

AnalogWriteResolution(bits)

Parameters

bits: merupakan resolusi dalam bits untuk nilai yang digunakan pada fungsi analogWrite()

Returns

Tidak ada return

Contoh Program

void setup() {
  // buka koneksi serial 9600 bps
  Serial.begin(9600);
  // ubah digital pin berikut menjadi Output
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
}

void loop() {
  // baca input analog A0 dan dimap agar dapat digunakan 
  // untuk mengatur nilai PWM

  int sensorVal = analogRead(A0);
  Serial.print("Analog Read) : ");
  Serial.print(sensorVal);

  // the default PWM resolution
  analogWriteResolution(8);
  analogWrite(11, map(sensorVal, 0, 1023, 0, 255));
  Serial.print(" , 8-bit PWM value : ");
  Serial.print(map(sensorVal, 0, 1023, 0, 255));

  // Rubah PWM resolution ke 12 bits
  // resolusi 12 bit ini hanya berlaku pada Arduino Due

  analogWriteResolution(12);
  analogWrite(12, map(sensorVal, 0, 1023, 0, 4095));
  Serial.print(" , 12-bit PWM value : ");
  Serial.print(map(sensorVal, 0, 1023, 0, 4095));

  // Ubah resolusi PWM menjadi 4 bits
  analogWriteResolution(4);
  analogWrite(13, map(sensorVal, 0, 1023, 0, 15));
  Serial.print(", 4-bit PWM value : ");
  Serial.println(map(sensorVal, 0, 1023, 0, 15));

  delay(5);
}

Catatan dan Peringatan

Apabila anda mengatur fungsi analogWriteResolution() dengan nilai di luar kemampuan Arduino Board yang digunakan maka Arduino akan mengabaikan bit-bit ekstranya. Sebagai contoh pada fungsi analogWriteResolution(16) yang digunakan pada Arduino Due yang hanya memiliki 12 bit DAC, maka 4 bit ekstranya akan diabaikan.

Apabila anda mengatur fungsi analogWriteResolution() dengan nilai di bawah kemampuan Arduino Board maka bit-bit yang hilang akan diisi dengan nilai 0 atau logika 0. Contoh pada eksekusi fungsi analogWriteResolution(8) di DAC 12 bit, maka Arduino Board akan menambahkan 4 bit logika 0 agar tetap diperoleh 12 bit output.

Terjemahan dan edit dari https://www.arduino.cc/reference/en/language/functions/zero-due-mkr-family/analogwriteresolution/

DELTA ELECTRONIC

Paulus Andi Nalwan, ST

Function analogReadResolution() pada Arduino Programming Language

Wednesday, February 24th, 2021

Deskripsi

Merupakan fungsi tambahan yang hanya dimiliki pada Arduino Zero, Due, MKR Family, Nano 33 (BLE dan IoT) dan Potenta yang digunakan untuk mengatur jumlah bit resolusi yang dibaca oleh perintah analogRead(). Pada kondisi standard resolusi ada adalah 10 bit dan dapat diubah menjadi 12 bit untuk Arduino Zero, Due, MKR Family, Nano 33 (BLE dan IoT) dan 16 bit untuk Potenta.

Syntax

analogReadResolution(bits)

Parameters

bits: menyatakan resolusi dalam bit dari nilai yang dibaca pada saat fungsi analogRead() dijalankan

Returns

Tidak ada returns

Contoh Program

Program dibawah ini menampilkan nilai ADC dari berbagai resolusi yang berbeda

void setup() {
  // aktifkan serial port dengan baudrate 9600 bps
  Serial.begin(9600);
}

void loop() {
  // baca analog input A0 dengan resolusi standard yaitu 10 bit
  // kirim ke serial port
  analogReadResolution(10);
  Serial.print("ADC 10-bit (default) : ");
  Serial.print(analogRead(A0));

  // ubah resolusi menjadi 12 bit dan baca A0
  analogReadResolution(12);
  Serial.print(", 12-bit : ");
  Serial.print(analogRead(A0));

  // ubah resolusi menjadi 16 bit dan baca A0
  analogReadResolution(16);
  Serial.print(", 16-bit : ");
  Serial.print(analogRead(A0));

  // ubah resolusi menjadi 8 bit dan baca A0
  analogReadResolution(8);
  Serial.print(", 8-bit : ");
  Serial.println(analogRead(A0));

  // tunda 100mS
  delay(100);
}

Catatan dan Peringatan

Apabila resolusi diatur lebih tinggi dari kemampuan Arduino Board yang digunakan maka nilai yang diperoleh akan ditambah dengan bit-bit bernilai 0. Contoh apabila digunakan pada Arduino UNO dengan kemampuan 10 bit namun analogReadResolution(12) yang digunakan maka nilai maksimum yang akan diperoleh adalah 0b0011 1111 1111.

Apabila resolusi diatur lebih rendah dari kemampuan Arduino Board maka bit yang selebihnya akan diabaikan nilainya

Dengan menggunakan resolusi 16 bit akan membuat program yang anda buat akan kompatibel bila suatu saat digunakan pada Arduino Board yang memiliki resolusi lebih tinggi tanpa merubah isi program

Terjemahan dan edit dari https://www.arduino.cc/reference/en/language/functions/zero-due-mkr-family/analogreadresolution/

DELTA ELECTRONIC

Paulus Andi Nalwan, ST