реклама на сайте
подробности

 
 
> Таймер1 в Atmega8, Прерывания
kapitaneo
сообщение Feb 2 2010, 20:26
Сообщение #1





Группа: Участник
Сообщений: 8
Регистрация: 29-10-09
Пользователь №: 53 278



Здравствуйте. Помогите разобраться, что неправильно? Не получается получить прерывания по переполнению.
Пишу в codevision. Проверяю в протэусе. Программа прилагается.
Прикрепленные файлы
Прикрепленный файл  t1.txt ( 1.62 килобайт ) Кол-во скачиваний: 54
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Xenia
сообщение Feb 2 2010, 23:24
Сообщение #2


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



1) Уберите задержки из процедуры обработки прерывания, только придурки их там ставят smile.gif.
Изобразите что-нибудь по-проще, например:
Код
{
  TCNT1H = n1;   // Reinitialize Timer
  TCNT1L = n2;
  PORTC.3 ^= 1;  // Bit 0 inverse
}

Здесь операция XOR инвертирует младший бит C-порта. Т.е. после отработки прерывания этот бит будет заменяться на противоположный. Если на этом пине висит светодиод, то он будет моргать с частотой вдвое медленней, чем частота таймера (первый такт горит, второй не горит).

2) Разрешите прерывания! По умолчанию они запрещены:
TIFR = 0x4; // TOV1, только T1 используется
TIMSK = 0x4; // TOIE1

3) делитель поставьте, хотя бы для начала:
TCCR1B = 0x3; // делитель - 64
Потом убавите, а то слишком быстро мигать будет.
Go to the top of the page
 
+Quote Post
kapitaneo
сообщение Feb 3 2010, 16:44
Сообщение #3





Группа: Участник
Сообщений: 8
Регистрация: 29-10-09
Пользователь №: 53 278



Цитата(Xenia @ Feb 3 2010, 02:24) *
1) Уберите задержки из процедуры обработки прерывания
...
2) Разрешите прерывания! По умолчанию они запрещены:
...
3) делитель поставьте, хотя бы для начала:


Спасибо, но задача состоит немного в другом. Я на вход таймера PIND.5(Т1)
подаю импульсы и использую Т1 pin Rising Edge, тактируется от внешнего генератора, подключенного к выводу Т1, по нарастающему фронту поэтому TCCR1B=0x07. После отсчета 21 импульса (TCNT1=n1,n2) по переполнению должно идти прерывание. И вот следующий импульс делить на два импульса (для этого и задержки). Интересно вот, что нулевой таймер работает нормально, а первый, ГАДЮКА sad.gif, нет. А мне нужны они оба.
КАК ЗАПУСТИТЬ?

ЗАРАНЕЕ ВСЕМ СПАСИБО.

Сообщение отредактировал rezident - Feb 3 2010, 16:57
Причина редактирования: Излишнее цитирование.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 1st August 2025 - 17:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01377 секунд с 7
ELECTRONIX ©2004-2016