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ビットのデータに付加されます。

【例】

いろいろなアナログ出力分解能を試します。

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);
}



[目次へ戻る]

Creative Commons Attribution-ShareAlike 3.0 License.
このドキュメントはArduino Teamにより執筆され、Takumi Funadaが翻訳し、一部加筆修正したものです
ご意見はtf at musashinodenpa.comまでお送りください [Arduino wiki]