大好きArduino

Arduino総合情報サイト

analogWriteResolution

2016/06/09

Arduino Due専用関数で、analogWrite()の分解能を指定します。
デフォルトは8ビット(0~255)で、従来のArduinoボードと互換性があります。

Dueは8ビットのPWM(他のボードと同じ)を12ピンと、12ビットのDAコンバータを2ピン持っているため、この関数で12ビットを指定すると、DACの分解能をフル活用する12ビット(0~4095)の出力が得られ、PWMを使うときも符合が反転することがありません。

bits: analogWrite()関数が使用する値の分解能をbit単位で指定します。
1から32までの間で指定し、ハードウエアの能力を超える分解能を設定すると出力値は切り捨てられ、ハードウエアの能力より小さい分解能を設定すると出力値にゼロが詰められます。

analogWriteResolution()はハードウエアの能力を超える分解能を設定すると、余分なビットが切り捨てられます。
たとえば、12ビットDACを持つDueに対してanalogWriteResolution(16)を実行してからanalogWrite()を行う場合は、パラメータの上位12ビットのみが有効となり下位の4ビットは捨てられます。
ハードウエアの能力よりも小さい値を設定した場合は足りないビットがゼロで充填されます。
たとえば、Dueに対してanalogWriteResolution(8)を実行すると12ビットを必要とするanalogWrite()の実行時に4ビット分のゼロが8ビットのデータに付加されます。

●Example from Arduino Web Site

void setup(){
  // open a serial connection
  Serial.begin(9600); 
  // make our digital pin an output
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
}

void loop(){
  // read the input on A0 and map it to a PWM pin
  // with an attached LED
  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));

  // change the PWM resolution to 12 bits
  // the full 12 bit resolution is only supported
  // on the 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));

  // change the PWM resolution to 4 bits
  analogWriteResolution(4);
  analogWrite(13, map(sensorVal, 0, 1023, 0, 127));
  Serial.print(", 4-bit PWM value : ");
  Serial.println(map(sensorVal, 0, 1023, 0, 127));

  delay(5);
}

Arduino 原文ページ

-リファレンス