очень маленький ШИМ, когда таймер показывает ноль

Я получаю слабый сигнал ШИМ, когда мой потенциометр установлен на ноль, а OCR2B всегда показывает ноль на последовательном мониторе. Мой светодиод имеет низкое прямое напряжение, но я все еще получаю немного ШИМ на контакте, когда я его проверяю. Я использую таймер 1, и он работает хорошо. У меня есть фото масштаба.

#include "RTClib.h"
RTC_DS3231 rtc;

#include <ResponsiveAnalogRead.h>
ResponsiveAnalogRead analog0(A0, true, .001);

unsigned int nowHour;

int analogOutPin3 = 3;
int sensorValueTimer2Pin3;

long z;

int analogOutPin9 = 9;
int analogOutPin10 = 10;

void setup() {
  Serial.begin(9600);
  //===============режим 5 пин 3,11==================//
  TCCR2A |= (1 << COM2A1);
  TCCR2A |= (1 << COM2B1);
  TCCR2A |= (1 << WGM21);
  TCCR2A |= (1 << WGM20);
  TCCR2B |= (1 << WGM22);
  TCCR2B |= (1 << CS22);
  OCR2A = 249;   // частота 1 кГц
  TCNT2 = 0;
  //====================режим 5 пин 3,11==============//

  pinMode(3, OUTPUT);

  rtc.adjust(DateTime(2014, 1, 21, 7, 0, 0));
}

void loop() {
  DateTime now = rtc.now();
  nowHour = now.hour();
  analogWrite(9, LOW);
  analogWrite(10, LOW);
  analog0.update();
  sensorValueTimer2Pin3 = ((analog0.getValue() * 249L) / 1024);
  if (nowHour >= 7 && nowHour <= 21) {
    z = sensorValueTimer2Pin3;
    OCR2B = z;
    Serial.println(OCR2B);
  }
}

, 👍1

Обсуждение

Моя ошибка, на самом деле это был не режим 5, это был быстрый ШИМ, я изменил его на правильную фазу, и это сработало, он выключился., @northershoveler

«У моего светодиода низкое прямое напряжение» — какое это имеет отношение к ШИМ? Надеюсь, вы используете резистор для светодиода., @Sim Son


1 ответ


2

Когда analogWrite записывает значение 0 или 255, он фактически отключает выход ШИМ и устанавливает выход на 0 или 1 соответственно (может быть, только на одно из них). Это потому, что имеется всего 256 значений, но как при полностью выключенном, так и при полностью включенном ШИМ вам потребуется 257 значений для его архивирования. Если вы используете прямой доступ к OCRx, вы должны сделать выбор, хотите ли вы, чтобы ШИМ был не полностью включен или не полностью отключен (путем установки полярности с помощью COM2Xx). )

Кстати, вы должны очистить TCCR2A/TCCR2B, так как все таймеры настроены ядром Arduino для запуска и подготовки к AnalogWrites...

,

Почти уверен, что в таблицах данных упоминается всплеск при попытке установить 0% или 100% ШИМ в режиме быстрой ШИМ. В соответствии с KIIV вы должны установить вывод на высокий или низкий уровень для любой крайности режима ШИМ., @Etzeitet