analogWriteResolution()

名称

analogWriteResolution()

説明

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

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

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

  • AVRベースのボードと同じように、8ビットPWMを出力可能な12ピン。これれは、12ビットの分解能に変更できる。
  • 12ビットのDAC(デジタル・アナログ変換器)を持つ2ピン

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

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

  • AVRベースのボードと同じように、8ビットPWMを出力可能な10ピン。これれは、12ビットの分解能に変更できる。
  • 10ビットのDAC(デジタル・アナログ変換器)を持つ1ピン。

分解能を10に設定することで、analogWrite()に与える値を0から1023に設定することができる。

MKRファミリーは以下のハードウェア能力を持つ。

  • AVRベースのボードと同じように、8ビットPWMを出力可能な4ピン。これれは、12ビットの分解能に変更できる。
  • 10ビットのDAC(デジタル・アナログ変換器)を持つ1ピン。

書式

void analogWriteResolution(int res);

引数

resanalogWrite()で設定する値の分解能(ビット)を設定する。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
37
38
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, 15));
  Serial.print(", 4-bit PWM value : ");
  Serial.println(map(sensorVal, 0, 1023, 0, 15));

  delay(5);
}

注意

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

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

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

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

参照

言語 analogWrite()

言語 analogRead()

言語 map()

利用例 Description of the analog input pins

訳者註

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

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://www.arduino.cc/reference/en/language/functions/zero-due-mkr-family/analogwriteresolution/

Last Revision: 2019/02/21

実装の解析

まだ解析していません。

最終更新日

January 4, 2024

inserted by FC2 system