Обсуждаем контроллеры компании Atmel.
Ответить

Нестабильность из-за задержек

Ср апр 14, 2021 03:23:35

Всем доброго! Подсобите страждущему, решившему на старости лет " запрыгнуть хоть на последнюю ступеньку последнего вагона " по части написания программ.
База: CVAVR 3,12 , ATMEGA8, Proteus8.
Задача в следующем: группа 4кнопки-4светодиода ( для краткости в дальнейшем 4кн-4сд) с зависимым включением, таких групп две, сами группы между собой независимы. С этим проблем нет. Но нужна ещё 9-ая кн-триггер и к ней 2 сд: нажали кн -- один сд загорелся и второй заморгал, нажали ещё раз -- оба сд потухли. С этим моргунчиком и проблема: когда он моргает, все 9 кн отзываются нестабильно из-за зедержек в его параметрах. Подскажите, как решить! Сведующему камраду,навернякя, просто. Для наглядности в архиве исходник и файлы для протеуса.
С уважением.
Вложения
help.zip
(52.4 KiB) Скачиваний: 150

Re: Нестабильность из-за задержек

Ср апр 14, 2021 05:52:39

У вас моргатель блокирует работу остальных. Сделайте его работу неблокируемой. Вот и всё.

Re: Нестабильность из-за задержек

Ср апр 14, 2021 07:30:05

сделайте прерывание по таймеру к примеру раз в 1мс, на опрос кнопок и моргание светиков заведите счетчики которые будут инкрементироваться в прерывании таймера, в главном цикле проверяйте эти счетчики и выполняйте нужный код когда они досчитали до нужного значения

так избавитесь от блокирующих ф-ций

Re: Нестабильность из-за задержек

Ср апр 14, 2021 10:15:40

Всё решается на раз с помощью автомата конечных состояний.

Re: Нестабильность из-за задержек

Чт апр 15, 2021 08:47:36

"Автомат работает так: раз, два, три - и вас нет!")

Re: Нестабильность из-за задержек

Чт апр 15, 2021 10:23:54

Всё решается на раз с помощью автомата конечных состояний.

Присоединяюсь. Конечные автоматы. ТС, напиши полностью ТЗ, покажу пример.
А пока предлагаю почитать цикл статей Татарчевского.

Re: Нестабильность из-за задержек

Чт апр 15, 2021 10:37:35

сделайте опрос кнопок по прерывани, как уже советовал Denis82, или по прерыванию счетчика - мигание светодиодов.

Re: Нестабильность из-за задержек

Чт апр 15, 2021 10:40:50

Вопрос начинающего. Если делать традиционными методами, ТС ничего не поймёт. Поэтому, единственное правильное решение, показать ТС-у, что такое псевдопараллельные процессы, программные таймеры и конечные автоматы. Все остальные методы в данный момент идут лесом. Сложно и бесконечная простыня из попыток скрестить ужа с ежом.

Re: Нестабильность из-за задержек

Чт апр 15, 2021 14:23:39

Demiurg, ТС просит помочь ему " запрыгнуть хоть на последнюю ступеньку последнего вагона ", а вы ему что предлагаете - на "высшую ступень бытия"?

Re: Нестабильность из-за задержек

Чт апр 15, 2021 14:36:18

А никто не заметил, что сам ТС вообще не участвует в теме ?
Задал глупый вопрос и смылся, забив на всё. А вы тут спорите ни о чём ...

Re: Нестабильность из-за задержек

Чт апр 15, 2021 14:36:59

Я предлагаю ему способ который более доступен для понимания. Автоматное программирование гораздо проще и в разы сокращает время на создание проектов. Предел есть. Но ТС-у до него далеко.

Re: Нестабильность из-за задержек

Чт апр 15, 2021 15:05:31

Demiurg, вы что - смеетесь? Вы бы еще FreeRTOS сюда замутили.
Что бы поморгать светодиодом или включить выключить в зависимости от состояния ножки порта нужно что перелопатить кучу книг и литературы?

Давайте так, вам как приготовить: простенький код (типа if else) или по сложнее (с использованием указателей) и что характерно код на одну страницу уместится?

Re: Нестабильность из-за задержек

Чт апр 15, 2021 15:10:04

Конечный автомат в простейшем случае строится с помощью оператора switch ... case.

Re: Нестабильность из-за задержек

Чт апр 15, 2021 15:19:17

"Dimon456". Конечный автомат отдельная сущность. Никакого сравнения с диспетчерами и ртос. Конечный автомат сам по себе и то и другое. Я знаю, что вы можете. По своему. ТС-у до этого гораздо дальше, чем на КА. Давайте прекратим бесполезный спор. А если вы хорошенько подумаете, то согласитесь со мной. Конечно, же при условии, что используете в своих проектах конечные автоматы. Если же нет, спор бесполезен и не продуктивен. Как вас, меня, так и ТС с остальными участниками этого форума.

Re: Нестабильность из-за задержек

Чт апр 15, 2021 15:56:59

Самое просто именно решение вопроса ТС в одной единственной части - сделать вместо delay'я, неблокируемую моргалку на таймере. Или от обратного - кнопки на прерывания повесить. А остальное уже всё-таки, включая КА - уже дальше начинается имхо.

Re: Нестабильность из-за задержек

Чт апр 15, 2021 16:45:23

Все таки настаиваю на КА. У меня уже скелет накидан в уме, как делать. Но хотел бы для уточнения ответа ТС. Будет чёткое ТЗ, программу можно накидать и отладить в течении пары тройки часов. С оконечной отладкой на железе. На отладочной плате. Вот что такое конечные автоматы. Чёткий читаемый алгоритм. Скорость создания проекта. Как пример, именно затруднительный момент для ТС-а. На это уже есть умственная заготовка. Я жду описание первой части.

Re: Нестабильность из-за задержек

Чт апр 15, 2021 16:49:19

Конечный автомат отдельная сущность. Никакого сравнения с диспетчерами

Колнечный автомат с диспетчером - это уже следующий уровень. Уже можно запилить события внутри состояния КА. Но для начала switch ... case /

Re: Нестабильность из-за задержек

Чт апр 15, 2021 16:57:50

Повторяю, конечные автоматы сами себе и диспетчеры и ртос. Поймите именно этот момент. Автомат может запускать сам себя, другие автоматы, вложенные автоматы.

Re: Нестабильность из-за задержек

Чт апр 15, 2021 17:17:49

Ваш конечный автомат - это просто заготовка, его еще готовить надо, или смотреть как другие готовят.
Вы просто раздуваете самый простой алгоритм, который занимает две-три строчки кода, не понятно во что - в большой огромный алгоритм с кучей переменных и составляющих. Возникает один вопрос - для чего?

Re: Нестабильность из-за задержек

Чт апр 15, 2021 17:36:56

Вы не правы по всем пунктам. Нужно быстро сляпать рабочий проект. Мы не искусством занимаемся. Не самолюбованием. А смотрите как я красиво написал. Или смотрите, как я сэкономил пару байтов. Есть задача, её нужно быстро решить. Требования к проекту. Псевдопараллельность. Модульность. Несколько таймеров (мы то понимаем, что это программные таймеры). Быстрая сборка, компоновка кубиков. Скорость создания проекта. Конечные автоматы на данном проекте соответствуют всем пунктам. Спор закончен.
Ответить