работает на таймере 2, но не работает на таймере 1
- Войдите на сайт для отправки комментариев
Ср, 12/07/2017 - 22:08
Моя тема видимо по ошибке была удалена модератором, поэтому пишу заново:
Запустил 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);}
Никуда она не была удалена. Вы её в другом разделе запостили и потеряли. Я Вам там ответил, читайте.