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

 
 
> Глюк с Мега8, Странно работает ТС1
Skif_A
сообщение Jul 4 2007, 17:57
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 10-07-06
Пользователь №: 18 713



Здравствуйте.
Начинаю изучать программирование АВР. Задача - сделать суточный таймер.
Написано два варианта программы. Оба работают на эмуляторе стабильно и на контроллере при условии что установлены малые промежутки времени либо малые значения предделителя таймера. На больших промежутках времени контроллер не выполняет необходимое действие. Всё время работает и не сбрасывается. Оба задействованых таймера считают. ТС2 в асинхронном режиме от кварца 32768 считает секундные импульсы, передаёт импульсы со своей ноги на входную ногу ТС1, который их подсчитывает. Контроллер на время простоя крутится в замкнутом цикле.
Всё перепроверено и, повторюсь, прекрасно работает если задавать время выполнения действия менее 15 мин. Или если ускорить процесс установкой маленького значения предделителя ТС2.

Подскажите в чём может быть загводка??? Почему работающий ТС1 не входит в прерывание по сравнению через 30 и более минут???
Во втором варианте программы не использовалось прерывание от сравнения, каждую секунду считывались показания ТС1 и сравнивались с установленными. Ситуация такая же - если установить 10-15 мин то работает, если более то нет....

Я в панике.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
defunct
сообщение Jul 4 2007, 21:01
Сообщение #2


кекс
******

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



Цитата(Skif_A @ Jul 4 2007, 20:57) *
Оба задействованых таймера считают. ТС2 в асинхронном режиме от кварца 32768 считает секундные импульсы, передаёт импульсы со своей ноги на входную ногу ТС1, который их подсчитывает.

Подскажите в чём может быть загводка??? Почему работающий ТС1 не входит в прерывание по сравнению через 30 и более минут???


Подскажите в чем загвоздка такой замысловатой схемы?
Почему нельзя просто установить количество секунд которое надо отмерять и в прерывании от TC2 отнимать по единичке, когда получится 0 - обработать событие...


Код
long  MyTimer = 3600; // 1 час

обработчик прерывания TC2:
{
     MyTimer -= 1;
     if (!MyTimer)
     {
          Свершилось...
     }
}
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jul 4 2007, 21:30
Сообщение #3


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(defunct @ Jul 5 2007, 01:01) *
Подскажите в чем загвоздка такой замысловатой схемы?
Почему нельзя просто установить количество секунд которое надо отмерять и в прерывании от TC2 отнимать по единичке, когда получится 0 - обработать событие...

Иногда лучше чтобы это все выполнялось в "железе" (хотя не уверен что это именно тот случай smile.gif)

Автар, смотри сюда:
AN AVR133
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 4 2007, 21:42
Сообщение #4


кекс
******

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



Цитата(singlskv @ Jul 5 2007, 00:30) *
(хотя не уверен что это именно тот случай smile.gif)

А я уверен, что это совсем не тот случай.
Тратить два таймера, на бог весть что и как бонус получить еще целый букет "подарков"
1. ограничение в 65535 секунд;
2. исключения в обработке;
3. неясную логику работы;
4. дополнительную внешнюю цепь.

Когда надо забить гвоздь, не надо изобретать велосипед, надо просто взять молоток и забить гвоздь.
Go to the top of the page
 
+Quote Post



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

 


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


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