Проблема подсчета количества импульсов с блока генератора

Ошибка счета встроенного генератора с программным сбросом

Вопросы от новичков
Ответить
Bupper
Рядовой
Сообщения: 25
Зарегистрирован: 16.09.2021{, 13:47}
Репутация: 0
Имя: Алексей

Проблема подсчета количества импульсов с блока генератора

#1

Сообщение Bupper » 14.01.2022{, 15:13}

Добрый день! Подскажите начинающему.
Задача такая: С матричной клавиатуры вводится цифра (одноразрядное число) в строку. Переменная R отслеживает нажатие. Стринг преобразуется в число.
Затем запускается генератор, счетчик_1 отсчитывает необходимое количество импульсов (по максимальному пределу равному введенному числу), блокирует работу генератора и сам себя обнуляет. Другой счетчик_2 считает количество сгенерированных импульсов. При нажатии следующей цифры на клавиатуре, строка перезаписывается, счетчик_2 сбрасывается переменной R и начинает отсчет новых импульсов. Результаты вывожу на дисплей по I2C. Вроде все просто.
Проблема: При такой схеме как на картинке, происходит недосчет на один импульс. Если убрать переменную R, которая сбрасывает счетчик_2 и заменить ее кнопкой с клавиатуры, например * , проблема уходит.
Подскажите, пожалуйста, в чем ошибка?
Может неверны временные интервалы?
pic1.gif
pic2.gif
pic2.gif (7.83 КБ) 887 просмотров
Последний раз редактировалось Bupper 14.01.2022{, 15:59}, всего редактировалось 1 раз.

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

Проблема подсчета количества импульсов с блока генератора

#2

Сообщение Naladchik » 14.01.2022{, 15:20}

Bupper писал(а):
14.01.2022{, 15:13}
Подскажите начинающему.
Подсказываю. Картинки это хорошо, но выкладывать проект полезнее. Вероятность получить дельный совет куда как выше.
Win10-64. FLProg Portable.
Изображение

aidar_i
Полковник
Сообщения: 3124
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 676
Откуда: Уфа
Имя: Айдар
Контактная информация:

Проблема подсчета количества импульсов с блока генератора

#3

Сообщение aidar_i » 14.01.2022{, 15:40}

Мы не видим как настроили счётчики. Зачем конвертация в стринг и обратно?
Используйте блок изменение числа. Сэкономите на одной переменной, стринг тем более тяжёлая переменная для мк
Проект приложите.

Bupper
Рядовой
Сообщения: 25
Зарегистрирован: 16.09.2021{, 13:47}
Репутация: 0
Имя: Алексей

Проблема подсчета количества импульсов с блока генератора

#4

Сообщение Bupper » 14.01.2022{, 15:44}

aidar_i писал(а):
14.01.2022{, 15:40}
Мы не видим как настроили счётчики. Зачем конвертация в стринг и обратно?
Используйте блок изменение числа.
Стринг мне понадобиться в дальнейшем. Я буду суммировать строки и потом получать многоразрядные числа.
Счетчик_1 - счет вверх до установленного предела. При достижении единица на выходе. Счетчик_2 - просто счет вверх
Вложения
test_help.flp
(1.53 МБ) 28 скачиваний
Последний раз редактировалось Bupper 14.01.2022{, 15:46}, всего редактировалось 1 раз.

aidar_i
Полковник
Сообщения: 3124
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 676
Откуда: Уфа
Имя: Айдар
Контактная информация:

Проблема подсчета количества импульсов с блока генератора

#5

Сообщение aidar_i » 14.01.2022{, 15:45}

Bupper писал(а):
14.01.2022{, 15:44}
Стринг мне понадобиться в дальнейшем.
Когда нужно , тогда и конвертируйте, не тащите через весь проект.

Bupper
Рядовой
Сообщения: 25
Зарегистрирован: 16.09.2021{, 13:47}
Репутация: 0
Имя: Алексей

Проблема подсчета количества импульсов с блока генератора

#6

Сообщение Bupper » 14.01.2022{, 15:48}

aidar_i писал(а):
14.01.2022{, 15:45}
Когда нужно , тогда и конвертируйте, не тащите через весь проект.
В принципе в условие запуска генератора можно поставить изменение числа, но проблема не уходит.

aidar_i
Полковник
Сообщения: 3124
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 676
Откуда: Уфа
Имя: Айдар
Контактная информация:

Проблема подсчета количества импульсов с блока генератора

#7

Сообщение aidar_i » 14.01.2022{, 15:51}

Bupper писал(а):
14.01.2022{, 15:48}
проблема не уходит.
Я не насчёт этой проблемы пока писал.
Я проект не смотрел ещё, может Naladchik около компа. Попробуйте добавить в счетчике 2 +1

Bupper
Рядовой
Сообщения: 25
Зарегистрирован: 16.09.2021{, 13:47}
Репутация: 0
Имя: Алексей

Проблема подсчета количества импульсов с блока генератора

#8

Сообщение Bupper » 14.01.2022{, 15:56}

Да, если ничего не смогу придумать, добавлю просто +1.
Может счетчик_2 сбрасывается с задержкой на такт, поэтому и пропускает 1 импульс генератора. Непонятно.
Naladchik,
Проект приложил

aidar_i
Полковник
Сообщения: 3124
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 676
Откуда: Уфа
Имя: Айдар
Контактная информация:

Проблема подсчета количества импульсов с блока генератора

#9

Сообщение aidar_i » 14.01.2022{, 18:37}

Попробуйте так
СпойлерПоказать
Работа клавиатурой.png
Вообщем у Вас в переменную записывается -1, а должна 0. Собака где то здесь мне кажется зарыта.

Bupper
Рядовой
Сообщения: 25
Зарегистрирован: 16.09.2021{, 13:47}
Репутация: 0
Имя: Алексей

Проблема подсчета количества импульсов с блока генератора

#10

Сообщение Bupper » 17.01.2022{, 10:08}

aidar_i, Да, спасибо! Тут была ошибка. Явно был -1. Однако проблема недосчета все равно остается.
Т.е. ошибка именно в способе сброса счетчика_2. Я генерирую сигнал R по нажатию клавиши на клавиатуре. Если сигнал R заменить на кнопку *, например, и сбрасывать счетчик вручную, ошибки нет. Т.е. общая логика верна.
Прикладываю корректный проект.
Вложения
test_help.flp
(934.3 КБ) 21 скачивание

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

Проблема подсчета количества импульсов с блока генератора

#11

Сообщение Naladchik » 17.01.2022{, 11:17}

Bupper писал(а):
14.01.2022{, 15:56}
Naladchik, Проект приложил
Извиняйте хлопцы, я пока пас.
Win10-64. FLProg Portable.
Изображение

aidar_i
Полковник
Сообщения: 3124
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 676
Откуда: Уфа
Имя: Айдар
Контактная информация:

Проблема подсчета количества импульсов с блока генератора

#12

Сообщение aidar_i » 17.01.2022{, 14:15}

Bupper писал(а):
17.01.2022{, 10:08}
Однако проблема недосчета все равно остается.
В проекте я написал комментарии, что исправить
test_help (1).flp
(958.69 КБ) 35 скачиваний
В комментарии немного неправильно написал, читать : не счётчик запускается через 10мс, а второй импульс запускается через 60 мс как сработал R , а счётчик единицу, которая была после первого импульса, сбрасывает на ноль после сработки R через 40 мс, уменьшая счёт на единицу.

Bupper
Рядовой
Сообщения: 25
Зарегистрирован: 16.09.2021{, 13:47}
Репутация: 0
Имя: Алексей

Проблема подсчета количества импульсов с блока генератора

#13

Сообщение Bupper » 18.01.2022{, 13:24}

aidar_i, спасибо вам что тратите свое время! В принципе, все что вы написали в комментариях понятно. Явная проблема с временем срабатывания сброса. Однако проблема остается. Вот что я перепробывал:
Первый вариант: R выносим в начало платы. Убираем задержку на R. Добавляем задержку перед генератором. Результат: При первом счете перебор на единицу. При последующих счетах все нормально. Число 1 с клавиатуры не считает (счет = 0).
Второй вариант: R выносим в начало платы . Убираем задержку на R, перед генератором задержки нет. Результат: счет на единицу меньше.
Третий вариант: R выносим в начало платы . Задержка перед R, перед генератором задержки нет. Результат: счет на единицу меньше.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Проблема подсчета количества импульсов с блока генератора

#14

Сообщение Dryundel » 18.01.2022{, 14:11}

Bupper, Вы слишком запутываете логику. Ну хорошо, при имеющейся схеме, путем ухищрений, добъетесь таки нужного количества импульсов от конкретной кнопки. Так встанет другая проблема. Что произойдёт если нажать следующую кнопку, когда импульсы ещё не закончились?
В добавок преобразования в стринг и обратно. Это тяжёлые операции, которые загрузят процессор.
В дальнейшем Вы вроде хотите собирать цифры в число.
Вы бы описали свою задумку. Какой планируется получить результат? В чем идея?
Может тогда проще будет Вам помочь.

Bupper
Рядовой
Сообщения: 25
Зарегистрирован: 16.09.2021{, 13:47}
Репутация: 0
Имя: Алексей

Проблема подсчета количества импульсов с блока генератора

#15

Сообщение Bupper » 19.01.2022{, 11:38}

Dryundel, Да, вы правы. Будет проблема, что при быстром нажатии на следующую кнопку на клавиатуре счет собьется. Постараюсь подобрать необходимую частоту генератора. Сейчас стоит такт в 10мс, в принципе нормально, считает быстро.
Логика схемы работает нормально, просто добавил +1 к счету. Меня устраивает. Лишние преобразования в стринг уберу.
Это пока часть проекта. Основная задача сейчас: организовать ввод 6ти разрядного числа с клавиатуры и отображение на семисегментных индикаторах (выполненных в виде отдельных микросхем), которые управляются драйверами CD4026. Эти компоненты есть в наличии и приходится работать с ними. Драйверы управляются тактовыми сигналами по одной ножке. С ардуино будет использовано 6 пинов на выход. Соответственно на каждый драйвер мне необходимо подавать количество импульсов равное нажатой цифре на клавиатуре, плюс организовать поразрядное смещение.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Проблема подсчета количества импульсов с блока генератора

#16

Сообщение Dryundel » 19.01.2022{, 13:02}

Bupper писал(а):
14.01.2022{, 15:13}
Соответственно на каждый драйвер мне необходимо подавать количество импульсов равное нажатой цифре на клавиатуре, плюс организовать поразрядное смещение.
А Вы не ищете лёгких путей. :)
Зачем подавать на каждый индикатор импульсы отдельно. Эти драйверы соединяются в шлейф и сами поразрядно смещаются. Работают на весьма высокой частоте. Почему бы не подавать импульс каждый такт программы точнее каждые два такта, а не использовать генератор?
А для поразрядного смещения подавать на вход первого драйвера на 10 импульсов больше чем значение кнопки, начиная со второго нажатия после сброса. Ну как вариант.

Bupper
Рядовой
Сообщения: 25
Зарегистрирован: 16.09.2021{, 13:47}
Репутация: 0
Имя: Алексей

Проблема подсчета количества импульсов с блока генератора

#17

Сообщение Bupper » 19.01.2022{, 14:36}

Да, я про такое думал. Если правильно Вас понял, то тогда для смещения второго разряда надо подать в 10 раз больше импульсов, для третьего разряда в 100 раз импульсов больше, для шестого - в 1000000 раз больше, так? При тактовой частоте ардуино 8Мгц (16/2 если на каждые 2 такта программы подавать), только пересчет на шестой разряд одной цифры займет 1/8 с, а если цифра 9 то более 1 с. Сюда надо еще добавить счеты на последующие разряды и еще работа внутренней программы. Что-то долго.
У меня "параллельная" передача данных, всяко быстрее чем последовательно.
Может я неправильно понял как Вы предлагаете?

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Проблема подсчета количества импульсов с блока генератора

#18

Сообщение Dryundel » 19.01.2022{, 14:44}

Bupper писал(а):
19.01.2022{, 14:36}
Если правильно Вас понял, то тогда для смещения второго разряда надо подать в 10 раз больше импульсов, для третьего разряда в 100 раз...
Совсем не правильно.
Разберитесь с этой микросхемой и как она в шлейф подключается.
Надо подавать для кнопки 7 например 7+10 =17 импульсов и тае всегда независимо от регистра, кроме первой цифры.

Отправлено спустя 3 минуты 41 секунду:
Dryundel писал(а):
19.01.2022{, 14:44}
При тактовой частоте ардуино 8Мгц (16/2 если на каждые 2 такта программы подавать),
Частота процессора и частота цикла программы это совсем разные вещи. Вам ни за что не удастся сделать нормальный проект с циклом меньше 1 мс. А это всего 500 импульсов в секунду.

Bupper
Рядовой
Сообщения: 25
Зарегистрирован: 16.09.2021{, 13:47}
Репутация: 0
Имя: Алексей

Проблема подсчета количества импульсов с блока генератора

#19

Сообщение Bupper » 19.01.2022{, 15:55}

Что-то я как то не могу понять. Вроде в шлейф CD4026 подключаются последовательно по переполнению, как обычные счетчики. При переходе счета с 9 на 0 генерируется сигнал на выходе переноса, и поступает на последующий разряд.
Есть вариант: задействовать 2 пин CD4026 ClockInhibit - не реагирует на входные импульсы и держит ранее выставленную цифру. Но тогда и перенос работать не будет.
У меня заполнение индикаторов будет справа налево. Т.е. если число 37, то сперва на крайнем правом индикаторе 3, затем 3 переходит на второй индикатор справа, а 7 появляется на крайней справа. Для шести индикаторов получим 000037.
Можете хоть немного намекнуть, как вы подразумеваете подключение CD4026 в шлейф? При этом передача импульсов только на первый драйвер?
PS. С частотой процессора это я так, для примера)
PS2. Я все таки не уточнил ранее, извиняюсь, что мне обязательно надо, чтобы введенное с клавиатуры число отображалась следующим образом:
000345
а не
345000.
Разница получается большая, так как первый разряд в первом случае должен постоянно менять свое значение, сначала 3, потом 4, потом 5.
Последний раз редактировалось Bupper 19.01.2022{, 16:15}, всего редактировалось 1 раз.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Проблема подсчета количества импульсов с блока генератора

#20

Сообщение Dryundel » 19.01.2022{, 16:05}

Bupper писал(а):
19.01.2022{, 15:55}
Можете хоть немного намекнуть, как вы подразумеваете подключение CD4026 в шлейф? При этом передача импульсов только на первый драйвер?
ВидосикиПоказать



Ответить

Вернуться в «Начинающим»