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

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


Юстас

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

@demos_1   я и == пробовал, у меня протеус бейсик не любит. Вешается сразу.
 

3 часа назад, Геннадий сказал:

Если обе кнопки (1 и 2) соединить последовательно и подключить к одному выводу порта, то "нажаты обе?" можно исключить.

Отличная идея, чтож я сразу не допёр)))
 

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

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

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

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

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

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

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

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

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

А в чем проблема с ОЗУ? Там же всего 4 команды - ld, st, lds, sts. Ну не считая работы со стеком. И отображения регистров на ОЗУ... Понятно почему проблемы :)

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

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

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

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

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

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

@Юстас  немного подкорректировал код на ассемблере (см. вложение), попробуйте сформировать импульс

p.s. все файлы добавить в проект, думаю разберётесь

pulse.7z

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

@COKPOWEHEU  как в ОЗУ перебирать адреса? Допустим у меня в ОЗУ распаложен массив знаков индикации, например:

1 = 0bxxxxxxxx по адресу 0х60

2 = 0bxxxxxxxx по адресу 0х61

и т.д.....

В полноценный 8бит порт,  у меня в прерывании постоянно сливается код из переменной. На порту висит семисегментник. Допустим PINC .0 , отвечает у меня за инкримент на +1 адрес в ОЗУ и у меня тут же в переменую скопируется данные из этой ячеки и вывалятся в порт с индикатором. Типа нажал на кнопку, высветилась 1, нажал ещё раз на тебе 2 и т.д...



 

@dm37 Просто огромное нечеловеческое спасибо за помощь)) Попробую разобраться....


 

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

@Юстас  пока остановитесь на формировании импульса, вы сразу за всё хватаетесь )))

доберёмся и до динамической индикации

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

Типа нажал на кнопку, высветилась 1, нажал ещё раз на тебе 2 и т.д..

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

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

Цитата

как в ОЗУ перебирать адреса?

Имеется что-то вроде ld temp, X+ ?

Цитата

пока остановитесь на формировании импульса, вы сразу за всё хватаетесь )))

Поддерживаю! Но пусть лучше сам составляет алгоритм, лучше подскажем чем давать готовые решения.

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

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

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

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

Но пусть лучше сам составляет алгоритм, лучше подскажем чем давать готовые решения.

с алгоритмом, думаю, надо помочь, а вот реализовывать самому

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

Как раз наоборот. Главное в программировании - умение составить алгоритм, а вовсе не знание синтаксиса какого-то языка.

Цитата

немного подкорректировал код на ассемблере (см. вложение), попробуйте сформировать импульс

мне кажется, у вас там слишком разделен код. Много исходных файлов, которые только затрудняют чтение.

Предлагаю в 3-й раз. ТС, у вас есть переменная с временем отсчета таймера (ее менять нельзя, она задается пользователем) и флаг старта. Поскольку таймер уже есть, используем его.

Опишите по-русски, как должна работать программа.

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

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

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

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

Много исходных файлов, которые только затрудняют чтение.

почему, разделяем по функционалу

1) инициализацию (Init) описали и забыли, зачем её тянуть за собой везде
2) в прерывании реализовали формирование импульса, потом динамическую индикацию, потом обработку клавиатуры (отдельный файл, сделали и забыли)
3) в основном теле программы реализовываем корректировку длительности импульса и формирование информации для вывода на индикатор, возможно сохранение в eeprom, может функционал будет дальше развиваться
4) ну и определения и макросы в отдельный файл

Код всё равно не маленький будет, в одном файле трудно всё искать

В 04.11.2016 в 23:51, dm37 сказал:

алгоритм работы словами:

в прерывании

если флаг на запуск установлен, то
проверяем счётчик (t_imp_count) на достижение нуля
если ноль, то выключаем соленоид и t_imp_count = t_imp и сбрасываем флаг, если нет
то включаем соленоид и t_imp_count = t_imp_count -1

если ничего не напутал )))

а алгоритм формирования импульса пока предложил такой, вот реализовываем...

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

А зачем ещё один флаг? Достаточно выставить длительность импульса в t_imp_count.

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

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

Да, вариант Григория реализовать еще проще.

Цитата

почему, разделяем по функционалу

Потому что это НЕ разделение по функционалу. Логично было бы вынести в отдельный модуль все что связано с индикацией (инициализация, работа, деинициализация), клавиатура (инициализация, работа, деинициализация) и т.д. Другое дело, что эти куски настолько маленькие что выносить их в отдельные файлы не имеет особого смысла.

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

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

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

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

Опишите по-русски, как должна работать программа.

Дано:

1: (кнопка "1" отвечает за запуск соленоида, длительность импульса устанавливает оператор кнопками "2" и "3")

2: (кнопка "2" отвечает за инкремент переменной отвечающую за длительность импульса)

3: (кнопка "3" отвечает за декремент переменной отвечающую за длительность импульса)

4: (также 4-ёх значный семисегментный индикатор отвечает за визуализацию длительности импульса)

5: (наш интервал времени для импульса ограничен 200 мс)

 

Сам процес такой:

1: Кнопками 2 и 3 устанавливаем нужную длительность импульса для соленоида. Если цифра превышает максимально заданный параметр (в нашем варианте это 200 мс), то инкремент дальше не пойдёт, так и останется 200. Тоже самое и  с декрементом. Цифры не могут стать меньше нуля.

2: Индикатор параллельно нам отображает наши манипуляции с этими кнопками.

3: Если надоело играть с кнопками 2 и 3 и нас устраивает длительность импульса, то...

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

5: В аппарате стоит возвратная пружина и после срабатывания соленоида, она автоматом возвращает шток в исходное положение.

 

 

Алгоритм:

1: Если кнопка 1 нажата, то...

2: на соленоид подаётся высокое DC-напряжение на время интервала, заданного импульсом.

3: Если интервал был равен 0 то соленоид даже не чихнёт)

4: Далее соленоид находится в режиме ожидания следующего нажатия кнопки 1.

 

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

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

также 4-ёх значный семисегментный индикатор

А было, вроде, три сегмента? Аппетиты растут?

И я бы пересмотрел дискретность установки длительности, 100 раз жать на кнопку очень утомительно. 

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

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

@Григорий Т. Если кнопку держать, то цифры будут бежать быстрее. Хм опять я что-то упустил,,, Да в предыдущей плате стоял 4 значный индикатор((( 

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

Я имел в виду не ТЗ а ваше решение алгоритма по приведенному мной, а лучше, Григорием (вместо отдельного флага - установка переменной обратного отсчета) ТЗ.

Ну и UI возможно, стоит изменить. Например, кнопка 2 отвечает за изменяемый разряд числа, а кнопка 3 - за его увеличение. Можно добавить кнопку уменьшения разряда.

Но это подождет - сначала выдача импульса.

Ах да, 4-значный индикатор для 8-битной переменной многовато

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

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

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

Все мои алгоритмы пока не увенчались успехом. Попробовал на бейсике написать для ускорения процесса, ну чуток сдвинулся с мёртвой точки. Как заработает более по человечески, так перенесу алгоритм на ассемблер.


 

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

Так сначала текстом опишите что пытаетесь сделать. Там пара действий всего.

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

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

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

@COKPOWEHEU У меня уже всё смешалось, люди.... кони.... Может сначала антидребезг организовать? Нажал кнопку, поднялся флаг что кнопка была нажата. В прерывании проверили флаг ап, а флаг поднят. Сразу говорим всем кнопкам:- хоть усри... что делайте, а 50 мс я даже не отреагирую на вас. Короче запустили отсчёт 50мс, по 1 мс в каждом прерывании, а между этим херачим динамическую индикацию в основном цикле. Параллельно контролим флаг окончания отсчёта. Как только 50мс прошло, поднимаем флаг окончания отсчёта антидребезга. И даём импульс на соленоид. Ну и всё заново. Не знаю, правильно ли я осмыслил данный алгоритм....

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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