Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прерывания по переполнению таймера в atmega128, Проблема с работой прерывани 
:(
    Опции темы
Балабол
  Дата 7.4.2009, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 27.4.2008

Репутация: нет
Всего: нет



Ситуация, на мой взгляд, требует обсуждения. В качестве исполнения лабораторных работ мне потребовалось написать программы в которых требуется прерывание по переполнению таймера. Ознакомился с этими материалами, нашел описание прерываний по переполнению как ISR(TIMERx_OVF_vect) и позаимствовал свои же прерывания по переполнению, исполненные на ассемблере в 16-разрядных регистрах, переписав и х с ассемблера на C. В результате получилось, что на контроллерах ничего не работает, а во время отладки в прерывание по переполнению можно попасть только тогда, когда перед бесконечным циклом принудительно во время инициализации параметров вбита макроконструкция

Код

cli(); // макрос запрета прерывания
  // инициализация нужных мне параметров
sei(); //разрешиние прерываний

Тогда в отладчике если переставить таймер счетчик вручную на 0xffff происходит переход в состояние прерывание. Пример придумать не сложно, на данном этапе я на стадии переписывания таймеров в компараторы, но исходник скину с другого компа.
PM MAIL   Вверх
Mazzi
Дата 7.4.2009, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



Если я правильно понял, у тебя контроллер не входит в прерывание по переполнению таймера?

Попробуй
1) проверь запущен ли таймер
2) разрешено ли прерывание по переполнению этого таймера
3) посмотри какой выбран источник импульсов для таймера
4) разрешены ли общие прерывания
5) не перезагружается ли таймер новым значением до того, как переполнится

добавь в код прерывания зажигание светодиодика, так ты узнаешь происходит ли оно.

Если вопрос не решён, пиши. 

Можешь выложить код.


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
UniBomb
Дата 7.4.2009, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 97



При старте программы флаг I регистра SREG сброшен, т.е. запрещены все прерывания. Посему таймер и не срабатывает. Посему заготовка программы должна выглядеть по типу такого:

Код

#include <avr/io.h>

int main()
{
 //инициализация мк
 //инициализация используемых переменных
 sei();
 for(;;)
  {
  }
}

PM MAIL ICQ Skype   Вверх
Балабол
Дата 8.4.2009, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 27.4.2008

Репутация: нет
Всего: нет



Кот запустил. Зачем-то потребовалось активировать бит перехода в регистре TIFR. Но это я говорю о случае использования компараторов. 
Mazzi, Насчет пунктов 1,2 и 4 я все проверил ещё до первого поста в тему. Предделитель у меня стоит на 5, таймер синхронный, то есть источником таковых импульсов должен быть процессор в режиме 4 Мгц.  Насчет пункта 5 дебаггер ничего не вскрыл. Возможно, но как проверить? 
PM MAIL   Вверх
Mazzi
Дата 9.4.2009, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



Покажи код.


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
fresh2
Дата 13.5.2009, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 13.5.2009

Репутация: нет
Всего: нет



Господа, есть ли у кого примеры использования прерывания по переполнению таймера в atmega128 (на С)? smile 
PM MAIL   Вверх
ОВиталий
Дата 13.5.2009, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



это для atMeaga 8, но думаю и 128 подойдет:

Код



ISR(TIMER1_OVF_vect)
{
    PORTC=255;
    _delay_ms(1000);
    PORTC=0;
}

int main()
{
    DDRC=255;
    TIMSK=_BV(TOIE1);   // маска таймера. устанавливается бит разрешающий прерывания по переполнению. 
    TCCR1B=0b11;
    sei();
    for(;;){
        asm("nop");
        }

return 0;
}




Это сообщение отредактировал(а) ОВиталий - 13.5.2009, 22:22
PM MAIL   Вверх
cardinal
Дата 13.5.2009, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 8
Всего: 99



Код

ISR(TIMER1_OVF_vect)
{
      PORTC=255;
      _delay_ms(1000);
      PORTC=0;
}

int main()
{
      DDRC=255;
      TIMSK=_BV(TOIE1);   // маска таймера. устанавливается бит разрешающий прерывания по переполнению. 
      TCCR1B=0b11;
      sei();

      for(;;)
      {
         asm("nop");
      }

   return 0;
}


ОВиталий, форматируйте пожалуйста нормально свой код, чтобы его было проще воспринимать.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
fresh2
Дата 14.5.2009, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 13.5.2009

Репутация: нет
Всего: нет



О спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0488 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.