Страница 1 из 1

Таймер для водяного насоса на ATMEGA8

Добавлено: Ср дек 19, 2012 14:55:16
Andrey 100
Добрый день! Для водяного насоса пытаюсь разработать таймер,на Atmega8, нужны 2 режима-циклический(нажали кнопку- 2минуты включен, 5минут выключен и так в цикле,выход из цикла-кнопкой или reset), ручной( нажали кнопку-мотор включился ,отключение-кнопкой или reset) , в баллоне хотел бы поставить датчик,если контакты замкнулись,чтобы отключался в циклическом режиме.Включаем питание, пока кнопки не нажаты ,ничего не происходит. Есть исходник под Codevision, там микроконтроллёр работает в циклическом режиме, нужно добавить управление кнопками и датчик.

Re: Таймер для водяного насоса на ATMEGA8

Добавлено: Чт дек 20, 2012 08:39:38
Аlex
нужно добавить управление кнопками и датчик
А в чём, собснно, проблема ? Пример обработки кнопок. Датчик можно так-же обрабатывать, как и кнопку.
Обработчик от таймера сделайте не 1 сек, а меньше, туда и запихнёте обработку кнопок.

PS:Небольшое замечание по программе. С переменными счётчиков нельзя так манипулировать, доступ к ним должен быть атомарным, иначе - глюк обеспечен.

Re: Таймер для водяного насоса на ATMEGA8

Добавлено: Вс дек 23, 2012 07:30:58
Andrey 100
Аlex писал(а): С переменными счётчиков нельзя так манипулировать, доступ к ним должен быть атомарным, иначе - глюк обеспечен.
Что нужно изменить в программе для атомарного доступа?
Аlex писал(а):Обработчик от таймера сделайте не 1 сек, а меньше, туда и запихнёте обработку кнопок.
Как можно так сделать?

Re: Таймер для водяного насоса на ATMEGA8

Добавлено: Вс дек 23, 2012 13:35:45
Барсик
Andrey 100 писал(а):Что нужно изменить в программе для атомарного доступа?
Перед изменением переменной, которая участвует в прерывании, глобально запрещать прерывания.

Код: Выделить всё

#asm("cli") // запрещаем все прерывания прежде чем менять переменную...
load1_on_time = LOAD1_ON_TIME; // задаём время включения
#asm("sei") // разрешаем прерывания

Re: Таймер для водяного насоса на ATMEGA8

Добавлено: Пн дек 24, 2012 13:44:40
Andrey 100
Спасибо, Барсик, как мне совместить 2 режима, циклический и ручной режим( ручной в смысле просто включить нагрузку) , изменять статус, вначале статус выключено- нажали кнопку статус включен или статус авто. Можно ли использовать ещё 1 таймер для опроса кнопок?

Re: Таймер для водяного насоса на ATMEGA8

Добавлено: Пн дек 24, 2012 14:16:47
Аlex
Можно ли использовать ещё 1 таймер для опроса кнопок?
Зачем ? У Вас уже есть периодичные прерывания. Настройте их, например, на 1 мс. , подобрав частоту тактирования и значение компаратора, и добавьте в обработчик пару счётчиков - для формирования 1 секунды и периода для кнопок.
Вы по моей ссылке проходили ? Там в примере реализован период в 1 мс. Только принцип другой - по переполнению таймера, а у Вас - по совпадению компаратора.

Re: Таймер для водяного насоса на ATMEGA8

Добавлено: Пн дек 24, 2012 14:44:29
Andrey 100
Аlex писал(а):Вы по моей ссылке проходили ? Там в примере реализован период в 1 мс. Только принцип другой - по переполнению таймера, а у Вас - по совпадению компаратора.
Да проходил, спасибо, Alex!