analogWriteResolution()

[Arduino DUE のみ]

説明

analogWriteResolution() はArduino Dueのための拡張Analog APIです.

analogWriteResolution() では,analogWrite() 関数の分解能を設定することができます.デフォルトでは,他のAVRベースのボードとの下位互換性のために8ビットになっています.(戻り値は0~255)

Dueには以下のハードウェア能力があります.

  • AVRベースのボードでは,12個のピンは分解能がデフォルトで8ビットのPWMとなっていますが,これらは12ビットに変更することが可能です.

  • 12ビットのD/A変換 (Digital-to-Analog Converter).

分解能を12ビットに設定することによって,analogWrite() を最大の分解能(0~4095)で利用できるほか,ロールオーバーなしに,PWMシグナルを設定することができます.(ロールオーバー:例として,分解能を10bitに設定している時に,1024以上の数値を入力した場合には,余りの値は0からカウントされます.このことをロールオーバーと呼びます.)

構文

analogWriteResolution(bits)

パラメータ

bits: analogWrite() 関数で使用する分解能(ビット単位). 1から32の間で設定することができます. ハードウェア能力以上の分解能を選択した場合は, analogWrite() からの値は切り詰められたものになり,ハードウェア能力以下の場合は,0で埋め合わされます.以下の「注意」の項目で詳細を確認してください.

戻り値

なし

コード例

Explain Code

void setup(){
  // シリアル接続を開始する
  Serial.begin(9600);
  // ピンを出力に設定する
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
}

void loop(){
  // A0からのアナログ入力を読み取り,PWMピン(LED)へmap関数を使用する
  int sensorVal = analogRead(A0);
  Serial.print("Analog Read) : ");
  Serial.print(sensorVal);

  // 標準のPWM分解能
  analogWriteResolution(8);
  analogWrite(11, map(sensorVal, 0, 1023, 0 ,255));
  Serial.print(" , 8-bit PWM value : ");
  Serial.print(map(sensorVal, 0, 1023, 0 ,255));

  // PWM分解能を12ビットに変更
  // 12ビットの分解能は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));

  // PWM分解能を4ビットに変更
  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);
}

注意

 `analogWriteResolution()` の値をボードの能力以上に設定した場合,Arduinoは余分なビットを切り捨てます.例として,Dueの12ビットD/A変換ピンで `analogWriteResolution(16)` に設定した場合,最初の12ビットの値は `analogWrite()` で使用されますが,最後の4ビットは切り捨てられます.

もし, analogWriteResolution() の値をボードの能力以下に設定した場合,ハードウェアの必要としているサイズまで,欠けているビットが 0で埋め合わされます. 例として,Dueの12ビットD/A変換ピンで analogWriteResolution(8) に設定した場合, analogWrite() は12ビットが必要なため,8ビットの値に4ビット分の0が追加されます.

参照