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-битным.

Пример

void setup(){
  // Запускаем последовательное соединение:
  Serial.begin(9600); 
  // переключаем цифровой контакт в режим OUTPUT:
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
}

void loop(){
  // Считываем входящие данные с A0 и подгоняем их к данным ШИМ-контакта,
  // к которому подсоединен светодиод:
  int sensorVal = analogRead(A0);
  Serial.print("Analog Read) : ");  //  "Данные, считанные с аналогового контакта  : "
  Serial.print(sensorVal);

  // ШИМ-разрешение по умолчанию:
  analogWriteResolution(8);
  analogWrite(11, map(sensorVal, 0, 1023, 0 ,255));
  Serial.print(" , 8-bit PWM value : ");  //  " , 8-битное ШИМ-значение : "
  Serial.print(map(sensorVal, 0, 1023, 0 ,255));

  // Меняем ШИМ-разрешение на 12 бит
  // (полное 12-битное разрешение поддерживается только на Due):
  analogWriteResolution(12);
  analogWrite(12, map(sensorVal, 0, 1023, 0, 4095));
  Serial.print(" , 12-bit PWM value : ");  //  " , 12-битное ШИМ-значение : "
  Serial.print(map(sensorVal, 0, 1023, 0, 4095));

  // Меняем ШИМ-разрешение на 4 бита:
  analogWriteResolution(4);
  analogWrite(13, map(sensorVal, 0, 1023, 0, 127));
  Serial.print(", 4-bit PWM value : ");  //  ", 4-битное ШИМ-значение : "
  Serial.println(map(sensorVal, 0, 1023, 0, 127));

  delay(5);
}

См.также

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