Arduino duemilanove and arduino mega timer one pwm output diference

Hi, i am a beginer. I have read information about timers arduino due and mega, datasheret says that timer one in both is the same, but then i try to run that program, arduino due works corretly but arduino mega dont does pwm output, i changed pwm output from 9 to 11 for arduino mega, but still not have signal.. can anyone help me, is there a program foult, mabe it is librarry foult?

p;rogram code:

#include "TimerOne.h"          // using Timer1 library from http://www.arduino.cc/playground/Code/Timer1

#define SOL_AMPS_CHAN 1               
#define SOL_VOLTS_CHAN 0            
#define BAT_VOLTS_CHAN 2              
#define AVG_NUM 8                      
#define SOL_AMPS_SCALE 12           
#define SOL_VOLTS_SCALE 27           
#define BAT_VOLTS_SCALE 27            
#define PWM_PIN 11                  
#define PWM_ENABLE_PIN 8        
#define PWM_FULL 1023               
#define PWM_MAX 100                
#define PWM_MIN 60                
#define PWM_START 90              
#define PWM_INC 1                    
#define TRUE 1
#define FALSE 0
#define ON TRUE
#define OFF FALSE
#define TURN_ON_MOSFETS digitalWrite(PWM_ENABLE_PIN, HIGH)      
#define TURN_OFF_MOSFETS digitalWrite(PWM_ENABLE_PIN, LOW)      
#define ONE_SECOND 50000            
#define LOW_SOL_WATTS 500            
#define MIN_SOL_WATTS 100           
#define MIN_BAT_VOLTS 1000         
#define MAX_BAT_VOLTS 1410          
#define HIGH_BAT_VOLTS 1300         
#define OFF_NUM 9                  

int ledPin = 13;                  
int ledPin_jc2 = 5;                  
int ledPin_jc3 = 6;                
int digPin = 4;                    
int count = 0;
int pwm = 0;                       
int sol_amps;                   
int sol_volts;                     
int bat_volts;                  
int sol_watts;                       
int old_sol_watts = 0;              
unsigned int seconds = 0;         
unsigned int prev_seconds = 0;       
unsigned int interrupt_counter = 0;  
boolean led_on = TRUE;
int led_counter = 0;
int delta = PWM_INC;                  
  
enum charger_mode {off, on, bulk, bat_float} charger_state; 

void setup()                           
{
  pinMode(ledPin, OUTPUT);           
  pinMode(ledPin_jc2, OUTPUT);         
  pinMode(PWM_ENABLE_PIN, OUTPUT);   
  pinMode(PWM_PIN, OUTPUT);
  Timer1.initialize(20);              
  Timer1.pwm(PWM_PIN, 0);           
  TURN_ON_MOSFETS;               
  Timer1.attachInterrupt(callback);  
  Serial.begin(9600);              
  pwm = PWM_START;                   
  charger_state = on;                 
}

void callback()
{
  if (interrupt_counter++ > ONE_SECOND) {        
    interrupt_counter = 0;  
    seconds++;  
  
  }
}

int read_adc(int channel){
  int sum = 0;
  int temp;
  int i;
  
  for (i=0; i<AVG_NUM; i++) {            
    temp = analogRead(channel);      
    sum += temp;                      
    delayMicroseconds(50);           
  }
  return(sum / AVG_NUM);            
}

void set_pwm_duty(void) {
  if (pwm > PWM_MAX) {					
    pwm = PWM_MAX;		
  }
  else if (pwm < PWM_MIN) {			
    pwm = PWM_MIN;
  }
  if (pwm < PWM_MAX) {
    Timer1.pwm(PWM_PIN,(PWM_FULL * (long)pwm / 100), 20); // use Timer1 routine to set pwm duty cycle at 20uS period
    //Timer1.pwm(PWM_PIN,(PWM_FULL * (long)pwm / 100));
  }												
  else if (pwm == PWM_MAX) {			
    Timer1.pwm(PWM_PIN,(PWM_FULL - 1), 1000);      
    //Timer1.pwm(PWM_PIN,(PWM_FULL - 1));              
  }												
}													

void read_data(void) {
  
  sol_amps =  ((read_adc(SOL_AMPS_CHAN)  * SOL_AMPS_SCALE) + 5) / 10;  
  sol_volts = ((read_adc(SOL_VOLTS_CHAN) * SOL_VOLTS_SCALE) + 5) / 10;
  bat_volts = ((read_adc(BAT_VOLTS_CHAN) * BAT_VOLTS_SCALE) + 5) / 10;  
  sol_watts = (int)((((long)sol_amps * (long)sol_volts) + 50) / 100);      
}

void run_charger(void) {
  static int off_count = OFF_NUM;
  switch (charger_state) {
    case on:                                        
      if (sol_watts < MIN_SOL_WATTS) {            
        charger_state = off;                        
        off_count = OFF_NUM;                  
        TURN_OFF_MOSFETS; 
      }
      else if (bat_volts > MAX_BAT_VOLTS) {       
        charger_state = bat_float;                 
      }
      else if (sol_watts < LOW_SOL_WATTS) {      
        pwm = PWM_MAX;                          
        set_pwm_duty();			           
      }                                            
      else {                                          
        pwm = ((bat_volts * 10) / (sol_volts / 10)) + 5; 
        charger_state = bulk;                          
      }
      break;
    case bulk:
      if (sol_watts < MIN_SOL_WATTS) {            
        charger_state = off;                   
        off_count = OFF_NUM;                   
        TURN_OFF_MOSFETS; 
      }
      else if (bat_volts > MAX_BAT_VOLTS) {     
        charger_state = bat_float;            
      }
      else if (sol_watts < LOW_SOL_WATTS) {  
        charger_state = on;                    
        TURN_ON_MOSFETS;                
      }
      else {                           
        if (old_sol_watts >= sol_watts) {     
          delta = -delta;			
        }
        pwm += delta;                        
        old_sol_watts = sol_watts;           
        set_pwm_duty();			
      }
      break;
    case bat_float:
      if (sol_watts < MIN_SOL_WATTS) {        
        charger_state = off;                 
        off_count = OFF_NUM;              
        set_pwm_duty();					
        TURN_OFF_MOSFETS; 
      }
      else if (bat_volts > MAX_BAT_VOLTS) {   
        pwm -= 1;                             
        set_pwm_duty();					
      }
      else if (bat_volts < MAX_BAT_VOLTS) {    
        pwm += 1;                           
        set_pwm_duty();					
        if (pwm >= 100) {                   
          charger_state = bulk;              
        }
      }
      break;
    case off:                                  
      if (off_count > 0) {                
        off_count--;                       
      }                                    
      else if ((bat_volts > HIGH_BAT_VOLTS) && (bat_volts < MAX_BAT_VOLTS) && (sol_volts > bat_volts)) {
        charger_state = bat_float;              
        set_pwm_duty();		               			
        TURN_ON_MOSFETS; 
      }    
      else if ((bat_volts > MIN_BAT_VOLTS) && (bat_volts < MAX_BAT_VOLTS) && (sol_volts > bat_volts)) {
        pwm = PWM_START;                       
        set_pwm_duty();				
        charger_state = on;                    
        TURN_ON_MOSFETS; 
      }                                    
      break;
    default:
      TURN_OFF_MOSFETS; 
      break;
  }
}

void loop()                        
{
 read_data();                       
 run_charger();                    
}

also i have tried another arduino mega but still not working, i have oscoloscope, and have no signal using arduino mega , but with arduino due program works... maby timer one setings is wrong?