PWM 2Khz con Timer1 en modo CTC, no lo consigo

Yo estoy moviendo el duty con un encoder si te sirve te subo el codigo

#include "avr/interrupt.h"; 
#include <EEPROM.h>
#include <stdio.h>

volatile int value;
volatile int lastEncoded = 0;
int A = 2;       //variable A a pin digital 2 (DT en modulo)
int B = 4;        //variable B a pin digital 4 (CLK en modulo)
int m =8;
int cont;
void setup()   
{  
  
    EEPROM.get(0, value); 
     OCR1A = value;
  pinMode(9,OUTPUT);              
  pinMode(A, INPUT);   // A como entrada
  pinMode(B, INPUT);    // B como entrada
  digitalWrite(A, HIGH);
  digitalWrite(B, HIGH);
  pinMode(m,INPUT_PULLUP);
 
 //Endable Interrupts for PCIE2 arduino Pins (D0-7) 
 PCICR |= (1<<PCIE2);
 //Setup pins 2,4
 PCMSK2 |= (1<<PCINT18);  
 PCMSK2 |= (1<<PCINT20);

 TCCR1A = _BV(COM1A1) | _BV(WGM11);
  TCCR1B = _BV(CS10) | _BV(WGM12) | _BV(WGM13) ;
  ICR1 = 250; 


   sei();
} 

void loop() 
{
  energia();
  duty();
  
} 

ISR (PCINT2_vect) {
 int MSB = digitalRead(A); 
  int LSB = digitalRead(B);
 
  int encoded = (MSB << 1) |LSB;
  int sum  = (lastEncoded << 2) | encoded; 
 
  if(sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011)
    value++;
   
  if(sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000)
    value--;
 
  lastEncoded = encoded; 
 
  if (value <= 0)
    value = 0;
  if (value >= 255)
    value = 255; 
  
  }
 

   void duty() {
 OCR1A = 255 - value;
 
}
void energia (){
if(digitalRead(m)==LOW){ 
cont++;
delay(1);
if (cont >5) {
 EEPROM.put(0,value);
delay(50);
cont = 0; 
}
}
}