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

Материал из ВикиСправочника
Перейти к: навигация, поиск

{{#setlogo:ArduinoCommunityLogo.png}}

Перевод: Максим Кузьмин (Cubewriter)
Перевел 1784 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Функция 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. }

См.также

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

  1. analogWriteResolution()