Проблема с PWM при управлении по таймеру
- Войдите на сайт для отправки комментариев
Здравствуйте!
В процессе работы над стробоскопом со специфическими функциями возникла проблема.
Я использовал вот этот код, он рабочий, получился отличный стробоскоп, диод мигает как надо все регулируется
https://softsolder.com/2013/01/03/arduino-snippets-led-stroboscopic-tachometer/
То есть работа с таймером таким образом:
analogWrite(PIN_STROBE,1); // let Arduino set up default Timer1 PWM
TCCR1B = 0; // turn off Timer1 for strobe setup
TCCR1A = 0x82; // clear OCR1A on match, Fast PWM, lower WGM1x = 14
ICR1 = FlashPdCt;
OCR1A = FlashLengthCt;
TCNT1 = FlashLengthCt - 1;
TCCR1B = 0x18 | TCCRxB_CS; // upper WGM1x = 14, Prescale 1:64, start Timer1
для изменения частоты строба - вот этот код:
noInterrupts();
TCCR1B &= 0xf8; // stop Timer1
ICR1 = FlashPdCt; // set new period
TCNT1 = FlashPdCt - 1; // force immediate update
TCCR1B |= TCCRxB_CS; // start Timer1
interrupts();
Проблема возникает когда мне необходимо выключить стробоскоп полностью, либо включить его для постоянного освещения. analogWrite не действует в данном случае, ШИМ модуляция на управляющем стробоскопом пине не прекращается. Выключить я вроде бы сумел TCCR1B = 0; включить обратно тоже - типа TCCR1B = 0x18 | TCCRxB_CS;
Это работает не знаю насколько это правильно. А вот включить диод на постоянное свечение, отключив PWM - не получилось. Подскажите какие есть пути решения этой проблемы?
О, спасибо большое!
Сейчас попробую!