Arduino:Справочник языка Arduino/Функции/Аналоговый ввод/вывод/analogWriteResolution()

Материал из Онлайн справочника
Перейти к навигации Перейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Функция analogWriteResolution()[1]

Эта функция — расширение Analog API для Arduino Due и Zero.

Она задает разрешение для функции analogWrite(). По умолчанию у нее стоит 8 бит (значения в диапазоне 0-255) — для обратной совместимости с платами на базе AVR.

Arduino Due имеет следующие аппаратные возможности:

  • 12 контактов, по умолчанию работающих с 8-битной ШИМ (как платы на базе AVR). Впрочем, его можно поменять на 12-битное разрешение.
  • 2 контакта, работающих с 12-битным АЦП (аналогово-цифровым преобразованием).

Таким образом, выставив analogWriteResolution() на «12», в функции analogWrite() можно будет использовать значения в диапазоне от 0 до 4095 (тем самым имея возможность работать с полным АЦП-разрешением), а также задавать ШИМ-сигнал без переполнения.

Arduino Zero имеет следующие аппаратные возможности:

  • 10 контактов, по умолчанию работающих с 8-битной ШИМ (как платы на базе AVR). Впрочем, его можно поменять на 12-битное разрешение.
  • 1 контакт, работающий с 10-битным АЦП (аналогово-цифровым преобразованием)

Таким образом, выставив analogWriteResolution() на «10», в функции analogWrite() можно будет использовать значения в диапазоне от 0 до 1023, тем самым получая возможность работать с полным АЦП-разрешением.

Синтаксис

analogWriteResolution(bits)

Параметры

bits  разрешение (в битах) значения, используемого в функции analogWrite(). Это значение может варьироваться от 1 до 32. Впрочем, если разрешение будет ниже или выше аппаратных возможностей платы, то значение, используемое в analogWriteResolution(), будет, соответственно, либо обрезано (если будет слишком большим), либо дополнено нулями (если будет слишком маленьким). Более подробно читайте в приложении ниже.

Что возвращает

Ничего.

Примечание

Если выставить в analogWriteResolution() значение, которое будет выше аппаратных возможностей платы, то Arduino просто урежет лишние биты. Допустим, у вас плата Due, и вы приписали 12-битному АЦП-контакту значение analogWriteResolution(16) — в этом случае первые 12 бит функции analogWrite() использованы будут, а «лишние» 4 бита будут урезаны.

Если выставить в analogWriteResolution() значение, которое будет ниже аппаратных возможностей платы, то для того, чтоб чтобы привести значение к соответствующему размеру, вместо недостающих битов будут добавлены нули.

Допустим, у вас плата Due, и вы приписали 12-битному АЦП-контакту значение analogWriteResolution(8) — в этом случае Arduino добавит к 8-битному значению, используемому в функции analogWrite(), еще 4 бита (с нулями), чтобы сделать его 12-битным.

Пример

 1 void setup(){
 2   // Запускаем последовательное соединение:
 3   Serial.begin(9600); 
 4   // переключаем цифровой контакт в режим OUTPUT:
 5   pinMode(11, OUTPUT);
 6   pinMode(12, OUTPUT);
 7   pinMode(13, OUTPUT);
 8 }
 9 
10 void loop(){
11   // Считываем входящие данные с A0 и подгоняем их к данным ШИМ-контакта,
12   // к которому подсоединен светодиод:
13   int sensorVal = analogRead(A0);
14   Serial.print("Analog Read) : ");  //  "Данные, считанные с аналогового контакта  : "
15   Serial.print(sensorVal);
16 
17   // ШИМ-разрешение по умолчанию:
18   analogWriteResolution(8);
19   analogWrite(11, map(sensorVal, 0, 1023, 0 ,255));
20   Serial.print(" , 8-bit PWM value : ");  //  " , 8-битное ШИМ-значение : "
21   Serial.print(map(sensorVal, 0, 1023, 0 ,255));
22 
23   // Меняем ШИМ-разрешение на 12 бит
24   // (полное 12-битное разрешение поддерживается только на Due):
25   analogWriteResolution(12);
26   analogWrite(12, map(sensorVal, 0, 1023, 0, 4095));
27   Serial.print(" , 12-bit PWM value : ");  //  " , 12-битное ШИМ-значение : "
28   Serial.print(map(sensorVal, 0, 1023, 0, 4095));
29 
30   // Меняем ШИМ-разрешение на 4 бита:
31   analogWriteResolution(4);
32   analogWrite(13, map(sensorVal, 0, 1023, 0, 127));
33   Serial.print(", 4-bit PWM value : ");  //  ", 4-битное ШИМ-значение : "
34   Serial.println(map(sensorVal, 0, 1023, 0, 127));
35 
36   delay(5);
37 }

См.также

Внешние ссылки