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

 
 
> Таймер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
defunct
сообщение Feb 6 2010, 00:00
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(kapitaneo @ Feb 3 2010, 18:44) *
а первый, ГАДЮКА sad.gif, нет.

это потому что
Код
if((PIND.3==0)&(PIND.0==1)&(PIND.1==1)&(PIND.2==1))

и то, что "CV мастер проекта" навставлял,
заслуживает отдельного места вот здесь
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 16:06
Рейтинг@Mail.ru


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