analogWriteResolution() - это функция, расширяющая API для работы с аналоговыми величинами для Arduino Due.
analogWriteResolution() устанавливает размерность значений, передаваемых функции analogWrite(). С целью обратной совместимости с платами на базе AVR-микроконтроллеров эта размерность, по умолчанию, составляет 8 бит (диапазон значений 0-255) .
Due имеет следующие аппаратные возможности:
Изменив размерность на 12, можно использовать функцию analogWrite() со значениями в диапазоне от 0 до 4095. Это позволит не только задействовать всю шкалу ЦАП, но и задавать более точные значения ШИМ-сигнала.
analogWriteResolution(bits);
Нет.
Если размерность, указанная в функции 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. Описание различных датчиков и модулей. Советы и наставления начинающим. Пишите и размещайте свои статьи в соответсвующей ветке форума.