- Вложения
-
- main__.c
- (2.87 КБ) 443 скачивания
Таймер для водяного насоса на ATMEGA8
Добрый день! Для водяного насоса пытаюсь разработать таймер,на Atmega8, нужны 2 режима-циклический(нажали кнопку- 2минуты включен, 5минут выключен и так в цикле,выход из цикла-кнопкой или reset), ручной( нажали кнопку-мотор включился ,отключение-кнопкой или reset) , в баллоне хотел бы поставить датчик,если контакты замкнулись,чтобы отключался в циклическом режиме.Включаем питание, пока кнопки не нажаты ,ничего не происходит. Есть исходник под Codevision, там микроконтроллёр работает в циклическом режиме, нужно добавить управление кнопками и датчик.
- Реклама
А в чём, собснно, проблема ? Пример обработки кнопок. Датчик можно так-же обрабатывать, как и кнопку.нужно добавить управление кнопками и датчик
Обработчик от таймера сделайте не 1 сек, а меньше, туда и запихнёте обработку кнопок.
PS:Небольшое замечание по программе. С переменными счётчиков нельзя так манипулировать, доступ к ним должен быть атомарным, иначе - глюк обеспечен.
Что нужно изменить в программе для атомарного доступа?Аlex писал(а): С переменными счётчиков нельзя так манипулировать, доступ к ним должен быть атомарным, иначе - глюк обеспечен.
Как можно так сделать?Аlex писал(а):Обработчик от таймера сделайте не 1 сек, а меньше, туда и запихнёте обработку кнопок.
- Сообщения: 3459
- Зарегистрирован: Ср сен 27, 2006 16:18:57
Перед изменением переменной, которая участвует в прерывании, глобально запрещать прерывания.Andrey 100 писал(а):Что нужно изменить в программе для атомарного доступа?
Код: Выделить всё
#asm("cli") // запрещаем все прерывания прежде чем менять переменную...
load1_on_time = LOAD1_ON_TIME; // задаём время включения
#asm("sei") // разрешаем прерыванияСпасибо, Барсик, как мне совместить 2 режима, циклический и ручной режим( ручной в смысле просто включить нагрузку) , изменять статус, вначале статус выключено- нажали кнопку статус включен или статус авто. Можно ли использовать ещё 1 таймер для опроса кнопок?
- Реклама
Зачем ? У Вас уже есть периодичные прерывания. Настройте их, например, на 1 мс. , подобрав частоту тактирования и значение компаратора, и добавьте в обработчик пару счётчиков - для формирования 1 секунды и периода для кнопок.Можно ли использовать ещё 1 таймер для опроса кнопок?
Вы по моей ссылке проходили ? Там в примере реализован период в 1 мс. Только принцип другой - по переполнению таймера, а у Вас - по совпадению компаратора.
Да проходил, спасибо, Alex!Аlex писал(а):Вы по моей ссылке проходили ? Там в примере реализован период в 1 мс. Только принцип другой - по переполнению таймера, а у Вас - по совпадению компаратора.


