Перейти к содержанию

Помогите с инкрементом в операторе ветвления


Юстас

Рекомендуемые сообщения

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

30 минут назад, Юстас сказал:

Если соленоид сработает сам по себе, то капец пальцам оператора и мне тоже))

А вот здесь, только на МК надеяться не стоит. Нужна многоуровневая система защиты. Оптическая, ёмкостная и т.д. И все независимо должны иметь возможность обесточить соленоид.

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

вы с кнопками можете сейчас зависнуть (это будет непростой код), то что я предлагаю сделать сначала - проще. Да и вдруг длительности импульса в 200 млсек не хватит придётся использовать не байт для хранения, а два байта - придётся всё переделывать

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

2 минуты назад, Юстас сказал:

гореть мне опять на костре инквизиции когда покажу код)))

Да ладно... Здесь все пытаются, как могут, вам помочь. Вы тут за один день узнаете больше, чем по книжкам за месяц.

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

Скрытый текст

;***********************************************
;ОСНОВНОЙ ЦИКЛ**********************************
;***********************************************
CIKLE:
in REG_PINC, PINC       ; прочтём PINC
rcall KNOPKI            ; проверим состояние кнопок
tst FLAG_KEY1           ; проверяем флаги состояния кнопок
brne ANTIDREBEZG        ; заюзаем антидребезг если кнопки нажаты
tst FLAG_KEY2           ; и т.д.
brne ANTIDREBEZG        ;
tst FLAG_KEY3
brne ANTIDREBEZG 
rjmp CIKLE

;***********************************************
;*******ПРЕРЫВАНИЕ ПО ВЕКТОРУ TIMER0_OVF********
;***********************************************
TIMER0_OVF:
ldi flag, 1
reti

;***********************************************
;******ПРОГРАММА ПРОВЕРКИ СОСТОЯНИЯ КНОПОК******
;***********************************************
KNOPKI:
cpi REG_PINC, 0b00000011 ; сравним 
breq ON_FLAG1            ; если равно, то поднимем флаг
cpi REG_PINC, 0b00000100 ; сравним 
breq ON_FLAG2            ; если равно, то поднимем флаг
cpi REG_PINC, 0b00001000 ; сравним 
breq ON_FLAG3            ; если равно, то поднимем флаг
ret

;***********************************************
;*************ФЛАГИ СОСТОЯНИЯ КНОПОК************
;***********************************************
ON_FLAG1:
ldi FLAG_KEY1, 1     ; поднимем флаг
ret
ON_FLAG2:
ldi FLAG_KEY2, 1     ; поднимем флаг
ret
ON_FLAG3:
ldi FLAG_KEY3, 1     ; поднимем флаг
ret

;***********************************************
;************ПРОГРАММА АНТИДРЕБЕЗГА*************
;***********************************************
ANTIDREBEZG:
rjmp CIKLE


 

Спички подать?))))
 

3 минуты назад, dm37 сказал:

автор не указал условие запуска соленоида :(

Нажаты одновремено (примерно) две кнопки, блин тут тоже загвоздка.... хотяяя должно прокатить по коду.
 

Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, Юстас сказал:

Нажаты одновремено (примерно) две кнопки, блин тут тоже загвоздка.... хотяяя должно прокатить по коду.

если так, то обработка кнопок должна быть железобетонной

Ссылка на комментарий
Поделиться на другие сайты

3 минуты назад, dm37 сказал:

если так, то обработка кнопок должна быть железобетонной

Это не поможет. Ошибку оператора это не устранит. Я выше указал, защита должна быть многоуровневой и независимой.

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, Григорий Т. сказал:

Это не поможет. Ошибку оператора это не устранит. Я выше указал, защита должна быть многоуровневой и независимой.

это пускай решает разработчик, мы не знаем его возможности в этом плане. Как вариант вместо (дополнительно) кнопки завести датчик

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

А как вам вариант завести по байту на каждую кнопку и по таймеру циклически их сдвигать? Тогда нажатой будет считаться кнопка со значением 0xFF а отпущенной - 0x00. Это сработает если время нажатия не менее 256 мсек и отсекает дребезг.
 

TIM1_OVF_vect:
  save_SREG
  sbis PINC,0
    ldi btn1,0x00  ;если кнопка откущена - сбрасываем в 0 (следующей командой увеличится до 1, но это не страшно)
  inc btn1 ;увеличиваем счетчик времени нажатия
    brne DONT_FIX_BTN1 ;если переполнения не было - все ок
  ldi btn1,0xFF ;а если было - принудительно выставляем максимальное время (можно еще поднять где-нибудь флаг)
DONT_FIX_BTN1:
...
  load_SREG
reti

Вот более простой вариант сразу для всех кнопок одного порта. Менее помехозащищенный, но и менее затратный

TIM0_OVF_vect:
  save_SREG
  dec timer
    brne TIMER_CONT
  ldi timer, 200 ;модуль счета программного таймера 200 мс
  in bnts, PINC ;потом он сохраняет "снимок" PINC со всеми нажатыми кнопками в переменную
  andi btns, ~(1<<BTN_1 | 1<<BTN_2 | 1<<BTN_3) ;и убивает ненужные биты
TIMER_CONT:
  load_SREG
reti

 

Изменено пользователем COKPOWEHEU
Исправил код, добавил комментарии

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, Геннадий сказал:

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

Как же жить теперь с этим?)) 
 

Ссылка на комментарий
Поделиться на другие сайты

без чётких отсчётов времени при анализе нажатия кнопки ничего не получиться, а их можно добиться только считая количество вхождений в прерывание (например 1 млсек).

Ссылка на комментарий
Поделиться на другие сайты

9 минут назад, COKPOWEHEU сказал:

А как вам вариант завести по байту на каждую кнопку и по таймеру циклически их сдвигать? Тогда нажатой будет считаться кнопка со значением 0xFF а отпущенной - 0x00. Это сработает если время нажатия не менее 256 мсек и отсекает дребезг.

только не 256 млсек, а 8 млсек, при таймерек 1 млсек (странно, в тексте "циклический сдвиг", а в коде "inc")

вариантов много, можно и так, но главное по таймеру (в прерывании). Можно конечно ставить в прерывании только флаг, а кнопки сканировать в основном теле программы. Но тогда придётся контролировать время выполнения основного кода программы, чтобы оно не превысило время таймера, иначе задержки поплывут

Изменено пользователем dm37
Ссылка на комментарий
Поделиться на другие сайты

@dm37, спасибо, уже сам заметил и пофиксил.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...