Arduinoリファレンス

Arduinoリファレンスの日本語訳のページです
garretlab
analogWriteResolution()

名称

analogWriteResolution()

説明

analogWriteResolution()は、Arduino Due向けのアナログAPIの拡張である。

analogWrite()で設定する値の大きさ(ビット単位)を設定する。デフォルト値は8ビット(0から255)である。これは、AVRベースのボードとの後方互換性のためである。

Dueは以下のハードウェア能力を持つ。

  • 8ビットPWMを出力可能な12ピン
  • 12ビットのDAC(デジタル・アナログ変換器)を持つ2ピン

分解能を12に設定することで、analogWrite()に与える値を0から4095に設定することができる。これにより、DACの完全な分解能を利用できるし、反転(rolling over)を起こさずにPWM信号を設定することができる。 [訳者註:いい訳があればぜひ教えてください]

書式

void analogWriteResolution(int res)

引数

res analogWrite()で設定する値の分解能(ビット)を設定する。1から32の値を設定することができる。ボードの能力以上の値や以下の値を設定した場合は、analogWrite()によって利用される値は切り捨てられたり、0パディングされたりする。詳細は、注意を参照。

戻り値

なし

注意

analogWriteResolution()で、ボードの能力よりも大きい値を設定した場合、分解能を超えた部分を0パディングした値を返却する。

例えば、Dueで12ビットDACピンに対してanalogWriteResolution(16)とすると、analogWrite()に渡された値の最初の12ビットが利用され、残りの4ビットは捨てられる。

analogWriteResolution()で、ボードの能力よりも小さい値を設定した場合、ハードウェアが要求するサイズにするために残りのビットは0パディングされる。

例えば、Dueで12ビットDACピンに対してanalogWriteResolution(8)とすると、analogWrite()に渡された8ビットの値を12ビットにするために、4ビット分は0パディングされる。

使用例

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

訳者註

ソースコードを読んだ範囲では、以下の処理により、値の変換が行われているようです。

static inline uint32_t mapResolution(uint32_t value, uint32_t from, uint32_t to) {
        if (from == to)
                return value;
        if (from > to)
                return value >> (from-to);
        else
                return value << (to-from);
}

上記で、valueはanalogWrite()で設定した値、fromにはanalogWriteResolution()で設定した値、toはDACの分解能です。

バージョン

Arduino 1.8.3

実装の解析

まだ解析していません。



メニューを表示するためにJavaScriptを有効にしてください。

inserted by FC2 system