analogWriteResolution()

Описание

analogWriteResolution() - это функция, расширяющая API для работы с аналоговыми величинами для Arduino Due.

analogWriteResolution() устанавливает размерность значений, передаваемых функции analogWrite(). С целью обратной совместимости с платами на базе AVR-микроконтроллеров эта размерность, по умолчанию, составляет 8 бит (диапазон значений 0-255) .

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

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

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


Синтаксис

analogWriteResolution(bits);


Параметры

  • bits: размерность (в битах) значений, передаваемых функции analogWrite(). Может быть в пределах от 1 до 32. Допускается задавать размерности, которые не соответствуют аппаратным возможностям вашей платы. В этом случае значение, передаваемое analogWrite() будет либо отсекаться (если размерность слишком велика), либо дополняться нулями (если слишком мала). См. примечание ниже.


Возвращаемые значения

Нет.


Примечание

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

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


Пример

void setup()
{
  // открываем последовательное соединение
  Serial.begin(9600); 
  // переводим цифровые выводы в режим "выход"
  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 : ");
  Serial.print(map(sensorVal, 0, 1023, 0 ,255));
 
  // изменяем размерность ШИМ на 12 бит
  // полная шкала в 12 бит поддерживается только
  // Arduino 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));
 
  // изменяем размерность ШИМ на 4 бита
  analogWriteResolution(4);
  analogWrite(13, map(sensorVal, 0, 1023, 0, 127));
  Serial.print(", 4-bit PWM value : ");
  Serial.println(map(sensorVal, 0, 1023, 0, 127));
 
  delay(5);
}


Смотрите также

Расскажи о нас

Сообщение

Если у Вас есть опыт в работе с Arduino и собственно есть время для творчества, мы приглашаем всех желающих стать авторами статей публикуемых на нашем портале. Это могут быть как уроки, так и рассказы о ваших экспериментах с Arduino. Описание различных датчиков и модулей. Советы и наставления начинающим. Пишите и размещайте свои статьи в соответсвующей ветке форума.

Последние комментарии