работает на таймере 2, но не работает на таймере 1

Poste
Offline
Зарегистрирован: 12.07.2017

Моя тема видимо по ошибке была удалена модератором, поэтому пишу заново:

Запустил 16-битный таймер для формирования меандра частотой 500Гц на Atmega328P 16МГц. Аналогичная программа для 8-битного работает, а с 16-битным некорректно.  Помогите пожалуйста найти ошибку.

void startTC1(void);
void startTC2(void);
void setup(void)
  {  
  pinMode(10, OUTPUT); 
  int i; for(i=0; i<10; i++) {digitalWrite(10,HIGH); delay(1); digitalWrite(10,LOW);delay(1);}
  delay(500);
  noInterrupts();
  //startTC2();  // работает
  startTC1();    // работает неправильно
  interrupts();
  } 

void loop(void){} 

void startTC1(void)
  {
    TCCR1B=0;   
    TCNT1=0; 
    TCCR1A=(1<<WGM11);
    OCR1A=32000-1;   
    TIMSK1=(1<<OCIE1A); 
    OCR1B=16000-1; 
    TIMSK1|=(1<<OCIE1B);
    TCCR1B=B001;
    TIFR1&=0xff ; 
   }

ISR (TIMER1_COMPB_vect){ digitalWrite(10,HIGH); }
ISR (TIMER1_COMPA_vect){ digitalWrite(10,LOW);  }

void startTC2(void)
  {
    TCCR2B=0;   
    TCNT2=0; 
    TCCR2A=(1<<WGM21);
    OCR2A=250-1;  
    TIMSK2=(1<<OCIE2A); 
    OCR2B=125-1; 
    TIMSK2|=1<<OCIE1B;
    TCCR2B=B101;
    TIFR2&=0xff ; 
  }

ISR (TIMER2_COMPB_vect) {digitalWrite(10,HIGH);}
ISR (TIMER2_COMPA_vect) {digitalWrite(10,LOW);}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Никуда она не была удалена. Вы её в другом разделе запостили и потеряли. Я Вам там ответил, читайте.

Poste
Offline
Зарегистрирован: 12.07.2017

ЕвгенийП пишет:
Никуда она не была удалена. Вы её в другом разделе запостили и потеряли. Я Вам там ответил, читайте.
Спасибо и извините пожалуйста за дублирование темы.