Описание
analogWriteResolution() - функция, расширяющая API для работы с аналоговыми величинами для Arduino Due.
Функция устанавливает размер (в битах) значения, передаваемых функции analogWrite(). Для обратной совместимости с платами на базе AVR-микроконтроллеров эта размерность, по умолчанию, составляет 8 бит (диапазон чисел 0-255).
Due имеет следующие аппаратные возможности:
- 12 контактов, по умолчанию принимающие 8-битные значения для вывода ШИМ-сигнала (как и на AVR-платах). Размерность может быть изменена на 12 бит.
- 2 контакта 12-разрядного ЦАП (цифро-аналогового преобразователя).
Изменив размерность на 12, можно использовать функцию analogWrite() со значениями в диапазоне от 0 до 4095. Это позволит не только задействовать всю шкалу ЦАП, но и задавать более точные значения ШИМ-сигнала.
Синтаксис
analogWriteResolution(bits);
Параметры
bits - размерность значения (в битах), передаваемых функции analogWrite(). Может быть в пределах от 1 до 32. Допускается задавать размерности, которые не соответствуют аппаратным возможностям вашей платы. В этом случае значение, передаваемое analogWrite() будет либо отсекаться (если размерность слишком велика), либо дополняться нулями (если слишком мала). См. примечание ниже.
Возвращаемые значения
Нет
Примечание
Если размерность, указанная в функции analogWriteResolution(), превышает возможности вашей платы, Arduino просто отбросит лишние биты. Например: после вызова 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);
}
Смотрите также:
Описание аналоговых входов
analogWrite()
analogRead()
map()
Справочник
Материалы взяты с официального сайта проекта Arduino и представлены по лицензии Creative Commons Attribution-ShareAlike 3.0 License.
Источник: http://arduino.cc/en/Reference/AnalogWriteResolution |