analogWriteResolution()

Last revision:2025/05/10

名称

analogWriteResolution()

説明

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

書式

DACとPWM出力の性能を最大限に活用するには、以下の関数を使う。

analogWriteResolution(bits)

引数

この関数は以下の引数を受け付ける。

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

戻り値

なし。

コード例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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
  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, 15));
  Serial.print(", 4-bit PWM value : ");
  Serial.println(map(sensorVal, 0, 1023, 0, 15));

  delay(5);
}

注意

ボードの能力

  • 8ビットのPWM分解能があるボードは、PWMのデューティ比を256段階で設定できる。
  • 10ビットのPWM分解能があるボードは、PWMのデューティ比を1024段階で設定できる。
  • 12ビットのPWM分解能があるボードは、PWMのデューティ比を4096段階で設定できる。
  • 16ビットのPWM分解能があるボードは、PWMのデューティ比を65536段階で設定できる。

他の考慮事項

analogWriteResolution()で、ボードの能力よりも大きい値を設定した場合、分解能を超えた部分を無視する。。

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

参照

訳者註

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

1
2
3
4
5
6
7
8
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の分解能が入ります。

オリジナルのページ

https://docs.arduino.cc/language-reference/en/functions/analog-io/analogWriteResolution/

実装の解析

まだ解析していません。

最終更新日

August 16, 2026

inserted by FC2 system