Попробовал управление фазой двух каналов Таймер1 Атмега328.
Как я и думал, никаких проблем, все работает.
Картинки ниже с реального сигнала, Ардуино Нано 16 МГц на логический анализатор.
0 градусов

Сдвиг 45 гр

Сдвиг 135 гр

А вот более 180 - 215:

Код:
Частота сигнала задается прескалером и значением ICR1, в коде выше выставлено примерно 690 Гц,
Сдвиг канала B относительно А от 0 до 180 гр задается значением OCR1B = Phase; при OCR1A = 0;
Для сдвига более чем на 180 гр ставим OCR1B =0 и меняем OCR1A = 360- Phase;
Как я и думал, никаких проблем, все работает.
Картинки ниже с реального сигнала, Ардуино Нано 16 МГц на логический анализатор.
0 градусов

Сдвиг 45 гр

Сдвиг 135 гр

А вот более 180 - 215:

Код:
C++:
void setup() {
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
TCNT1 = 0;
ICR1 = 179; // = 16M / (64 * 360) = 694 Hz
TCCR1A = _BV(COM1A0) | _BV(COM1B0); // toogle CH_A and CH_B on match
TCCR1B = _BV(WGM12) | _BV(WGM13); // mode 12 => CTC with TOP=ICR1
TCCR1B |= _BV(CS11) | _BV(CS10); // 64 prescaler
OCR1A = 0;
OCR1B = 45; // phase shift 45 grade
}
Сдвиг канала B относительно А от 0 до 180 гр задается значением OCR1B = Phase; при OCR1A = 0;
Для сдвига более чем на 180 гр ставим OCR1B =0 и меняем OCR1A = 360- Phase;