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); }