Например TDA7294

Форум РадиоКот • Просмотр темы - Timer0 и Atmel Studio 7 Atmega88a
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Сб дек 20, 2025 17:07:46

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Timer0 и Atmel Studio 7 Atmega88a
СообщениеДобавлено: Сб мар 26, 2022 12:04:04 
Прорезались зубы

Карма: -5
Рейтинг сообщений: -18
Зарегистрирован: Ср янв 11, 2012 11:55:51
Сообщений: 217
Рейтинг сообщения: 0
Приветствую всех. В очередной раз подниму тему с таймерами. Ибо либо лыжи не едут, либо я ни фига не понимаю.
TIMER0 код инициализации:
Код:
//   Таймер 0
   // TIMER 0 for interrupt frequency undefined Hz:
   cli(); // stop interrupts
   TCCR0A = 0; // set entire TCCR0A register to 0
   TCCR0B = 0; // same for TCCR0B
   TCNT0  = 0x83; // 0x83 to 16 mS B, 9C to 100 uS A
   // set compare match register for undefined Hz increments
   //OCR0A = 0x63; // to 100 uS A
   OCR0B = 0x53;   // 16 mS B
   TCCR0A |= (1 << WGM01);   // turn on CTC mode   
   TIMSK0 |= (1<<OCIE0B);   // enable timer compare interrupt OCIE0B to 16 mS (1 << OCIE0A)|(1<<OCIE0B)
   // Set CS02, CS01 and CS00 bits for 1 prescaler
   TCCR0B |= (1 << CS02) | (0 << CS01) | (1 << CS00); // CS02|CS00 1024 /16mS/, CS01 8 /100 uS

Выбран режим CTC, прерывание по совпадению OCIE0B (канал В), начальное значение TCNTO= 0x83, счетчик OCR0B = 0x53.
Прерывания:
Код:
ISR(TIMER0_COMPA_vect)
   {
      flag_SEND_BIT = _ON;
         //   100 uS      
   }

   ISR(TIMER0_COMPB_vect)
   {
      flag_BUTTON = _ON;
      TCNT0  = 0x83; // было ошибочно TCNT2, после исправления ничего не поменялось
   }

Прерывание не генерится и в симуляторе не идет счет TCNT0. В симуляторе постоянно висит флаг OCF0A и TOV0
Изображение
Если тот же таймер перестраиваю на прерывания по совпадению OCIE0A,
Код:
//   Таймер 0
   // TIMER 0 for interrupt frequency undefined Hz:
   cli(); // stop interrupts
   TCCR0A = 0; // set entire TCCR0A register to 0
   TCCR0B = 0; // same for TCCR0B
   TCNT0  = 0x83; // 0x83 to 16 mS B, 9C to 100 uS A
   // set compare match register for undefined Hz increments
   OCR0A = 0x63; // to 100 uS A
   //OCR0B = 0x53;   // 16 mS B
   TCCR0A |= (1 << WGM01);   // turn on CTC mode   
   TIMSK0 |= (1<<OCIE0A);   // enable timer compare interrupt OCIE0B to 16 mS (1 << OCIE0A)|(1<<OCIE0B)
   // Set CS02, CS01 and CS00 bits for 1 prescaler
   TCCR0B |= (1 << CS02) | (0 << CS01) | (1 << CS00); // CS02|CS00 1024 /16mS/, CS01 8 /100 uS

т.е. меняю две строчки кода, то прерывание есть и счет TCNT0 идет :shock:
Изображение При этом висит флаг OCF0B и TOV0.
глобальное разрешение прерываний sei в коде есть само-собой.
Ткните пальцем, где туплю :beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Timer0 и Atmel Studio 7 Atmega88a
СообщениеДобавлено: Сб мар 26, 2022 12:12:27 
Опытный кот
Аватар пользователя

Карма: -2
Рейтинг сообщений: -23
Зарегистрирован: Сб окт 22, 2016 17:33:32
Сообщений: 760
Откуда: кг
Рейтинг сообщения: 0
Изображение


Вложения:
1.png [26.83 KiB]
Скачиваний: 362
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Timer0 и Atmel Studio 7 Atmega88a
СообщениеДобавлено: Сб мар 26, 2022 13:02:45 
Прорезались зубы

Карма: -5
Рейтинг сообщений: -18
Зарегистрирован: Ср янв 11, 2012 11:55:51
Сообщений: 217
Рейтинг сообщения: 0
И как это объясняет отсутствие прерывания по каналу В?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Timer0 и Atmel Studio 7 Atmega88a
СообщениеДобавлено: Сб мар 26, 2022 13:54:32 
Опытный кот
Аватар пользователя

Карма: -2
Рейтинг сообщений: -23
Зарегистрирован: Сб окт 22, 2016 17:33:32
Сообщений: 760
Откуда: кг
Рейтинг сообщения: 0
А чему у вас равно значение регистра OCR0A в случае, когда прерывание по TIMER0_COMPB не вызывается?
Кроме того, TCNT0 считает от 0 до TOP, присваивание TCNT0 = 0x83 выглядит непонятно.
Здесь есть тема по таймерам AVR; можете поискать документацию на AVR на русском.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Timer0 и Atmel Studio 7 Atmega88a
СообщениеДобавлено: Сб мар 26, 2022 15:00:32 
Прорезались зубы

Карма: -5
Рейтинг сообщений: -18
Зарегистрирован: Ср янв 11, 2012 11:55:51
Сообщений: 217
Рейтинг сообщения: 0
Спасибо, дошло. Было достаточно ответа в стиле: у вас TCNT0 сбрасывается по достижении FF и не может досчитать до OCR0B.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Timer0 и Atmel Studio 7 Atmega88a
СообщениеДобавлено: Сб мар 26, 2022 15:02:30 
Опытный кот
Аватар пользователя

Карма: -2
Рейтинг сообщений: -23
Зарегистрирован: Сб окт 22, 2016 17:33:32
Сообщений: 760
Откуда: кг
Рейтинг сообщения: 0
TCNT0 сбрасывается по достижении FF

По достижению TOP.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 56


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y