Помогите с таймером2 в CTC внутри Atmega8

Обсуждаем контроллеры компании Atmel.
Ответить
Qwq
Встал на лапы
Сообщения: 87
Зарегистрирован: Пт ноя 02, 2007 18:18:26

Сообщение Qwq »

начал пробовать - какая то фигня настроил в стс, в оср2 записал зачение, а таймер умудряется каким-то макаром улететь TIMER2_OVF_vect

Вот код :

Код: Выделить всё

#define F_CPU 8000000 //8 мгц

#include <avr/io.h>
#include <avr/interrupt.h>


#define Timer2IntON TIMSK|= (1<<OCIE2|1<<TOIE2);//set bits
#define Timer2IntOFF TIMSK&= ~(1<<OCIE2|1<<TOIE2);//clear bits

unsigned char Coffs[3]={0,};

void Timer2Setup(void)
{
  //запустит таймер2 на клоке1, по совпадению с 200 тогда период таймера будет равен 10^-5 = 25 микросекунд

Coffs[1] = 0;
Coffs[2] = 0;
  OCR2 = 199; //нужно 200 тиков, счет с 0

  TCCR2 = 0;
  TCCR2 |= ( 0 << WGM20 | 0 << COM21 | 0 << COM20 | 1 << WGM21 | 0 << CS22 | 0 << CS21 | 1 << CS20);
  /*
  //FOC2 = 0
  //WGM20 = 0 + WGM21 =1 |CTC mode
  //COM21 = 0  \
  //COM20  = 0 | port disconnected
  //WGM21 = 1
  //CS22 =0
  //CS21 =0
  //CS20=1 //CPU clock
  */
  //теперь разрешим от него прерывания
  Timer2IntON

}

ISR( TIMER2_OVF_vect )
{
	Coffs[1]++;
	//готово TODO: обработать эксепшен сюды я попасть не должен!
}
ISR( TIMER2_COMP_vect )
{
Coffs[2]++;
}

int main(void)
{
	    Timer2Setup(); //setup timer2 //считает отрезки по 25 микросекунд

	    sei();

		char a = 0;

	    while (1)
	    {
			
			if (a <250)
			{
				a++;
			}
		else {
			a = 0;
		}
			
		}
}
что я сделал не так?
Контактная информация:
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1663
Зарегистрирован: Вт апр 03, 2012 20:36:41
Откуда: Сочи

Сообщение Enigm »

Реклама
Qwq
Встал на лапы
Сообщения: 87
Зарегистрирован: Пт ноя 02, 2007 18:18:26

Сообщение Qwq »

Enigm писал(а):Вам в помощь http://trolsoft.ru/ru/calc#AvrTimer8
Посчитан то он правильно.
Гугление и эксперименты привели меня к выводу что overflow срабатывает в момент когда в счетном регистре возникает 0.соответственно ести у нас есть прерывание по совпадению то одновременно будет обрабатываться переполнение(сначала совпадение, потом переполнение).
Контактная информация:
Ответить

Вернуться в «AVR»