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

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

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

Сообщение Bupper »

Добрый день! Подскажите начинающему.
Задача такая: С матричной клавиатуры вводится цифра (одноразрядное число) в строку. Переменная R отслеживает нажатие. Стринг преобразуется в число.
Затем запускается генератор, счетчик_1 отсчитывает необходимое количество импульсов (по максимальному пределу равному введенному числу), блокирует работу генератора и сам себя обнуляет. Другой счетчик_2 считает количество сгенерированных импульсов. При нажатии следующей цифры на клавиатуре, строка перезаписывается, счетчик_2 сбрасывается переменной R и начинает отсчет новых импульсов. Результаты вывожу на дисплей по I2C. Вроде все просто.
Проблема: При такой схеме как на картинке, происходит недосчет на один импульс. Если убрать переменную R, которая сбрасывает счетчик_2 и заменить ее кнопкой с клавиатуры, например * , проблема уходит.
Подскажите, пожалуйста, в чем ошибка?
Может неверны временные интервалы?
pic1.gif
pic2.gif
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Bupper 14 янв 2022, 15:59, всего редактировалось 1 раз.
Naladchik
Капитан
Сообщения: 908
Зарегистрирован: 04 окт 2015, 19:10
Откуда: Новосибирск
Имя: Павел
Благодарил (а): 20 раз
Поблагодарили: 22 раза

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

Сообщение Naladchik »

Bupper писал(а): 14 янв 2022, 15:13 Подскажите начинающему.
Подсказываю. Картинки это хорошо, но выкладывать проект полезнее. Вероятность получить дельный совет куда как выше.
Win10-64. FLProg Portable.
Изображение
aidar_i
Полковник
Сообщения: 3358
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 13 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

Мы не видим как настроили счётчики. Зачем конвертация в стринг и обратно?
Используйте блок изменение числа. Сэкономите на одной переменной, стринг тем более тяжёлая переменная для мк
Проект приложите.
Bupper
Рядовой
Сообщения: 25
Зарегистрирован: 16 сен 2021, 13:47
Имя: Алексей

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

Сообщение Bupper »

aidar_i писал(а): 14 янв 2022, 15:40 Мы не видим как настроили счётчики. Зачем конвертация в стринг и обратно?
Используйте блок изменение числа.
Стринг мне понадобиться в дальнейшем. Я буду суммировать строки и потом получать многоразрядные числа.
Счетчик_1 - счет вверх до установленного предела. При достижении единица на выходе. Счетчик_2 - просто счет вверх
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Bupper 14 янв 2022, 15:46, всего редактировалось 1 раз.
aidar_i
Полковник
Сообщения: 3358
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 13 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

Bupper писал(а): 14 янв 2022, 15:44 Стринг мне понадобиться в дальнейшем.
Когда нужно , тогда и конвертируйте, не тащите через весь проект.
Bupper
Рядовой
Сообщения: 25
Зарегистрирован: 16 сен 2021, 13:47
Имя: Алексей

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

Сообщение Bupper »

aidar_i писал(а): 14 янв 2022, 15:45 Когда нужно , тогда и конвертируйте, не тащите через весь проект.
В принципе в условие запуска генератора можно поставить изменение числа, но проблема не уходит.
aidar_i
Полковник
Сообщения: 3358
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 13 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

Bupper писал(а): 14 янв 2022, 15:48 проблема не уходит.
Я не насчёт этой проблемы пока писал.
Я проект не смотрел ещё, может Naladchik около компа. Попробуйте добавить в счетчике 2 +1
Bupper
Рядовой
Сообщения: 25
Зарегистрирован: 16 сен 2021, 13:47
Имя: Алексей

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

Сообщение Bupper »

Да, если ничего не смогу придумать, добавлю просто +1.
Может счетчик_2 сбрасывается с задержкой на такт, поэтому и пропускает 1 импульс генератора. Непонятно.
[ref]Naladchik[/ref],
Проект приложил
aidar_i
Полковник
Сообщения: 3358
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 13 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

Попробуйте так
[spoiler]
Работа клавиатурой.png
[/spoiler]
Вообщем у Вас в переменную записывается -1, а должна 0. Собака где то здесь мне кажется зарыта.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Bupper
Рядовой
Сообщения: 25
Зарегистрирован: 16 сен 2021, 13:47
Имя: Алексей

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

Сообщение Bupper »

aidar_i, Да, спасибо! Тут была ошибка. Явно был -1. Однако проблема недосчета все равно остается.
Т.е. ошибка именно в способе сброса счетчика_2. Я генерирую сигнал R по нажатию клавиши на клавиатуре. Если сигнал R заменить на кнопку *, например, и сбрасывать счетчик вручную, ошибки нет. Т.е. общая логика верна.
Прикладываю корректный проект.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Naladchik
Капитан
Сообщения: 908
Зарегистрирован: 04 окт 2015, 19:10
Откуда: Новосибирск
Имя: Павел
Благодарил (а): 20 раз
Поблагодарили: 22 раза

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

Сообщение Naladchik »

Bupper писал(а): 14 янв 2022, 15:56 Naladchik, Проект приложил
Извиняйте хлопцы, я пока пас.
Win10-64. FLProg Portable.
Изображение
aidar_i
Полковник
Сообщения: 3358
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 13 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

Bupper писал(а): 17 янв 2022, 10:08 Однако проблема недосчета все равно остается.
В проекте я написал комментарии, что исправить
test_help (1).flp
В комментарии немного неправильно написал, читать : не счётчик запускается через 10мс, а второй импульс запускается через 60 мс как сработал R , а счётчик единицу, которая была после первого импульса, сбрасывает на ноль после сработки R через 40 мс, уменьшая счёт на единицу.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Bupper
Рядовой
Сообщения: 25
Зарегистрирован: 16 сен 2021, 13:47
Имя: Алексей

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

Сообщение Bupper »

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

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

Сообщение Dryundel »

[ref]Bupper[/ref], Вы слишком запутываете логику. Ну хорошо, при имеющейся схеме, путем ухищрений, добъетесь таки нужного количества импульсов от конкретной кнопки. Так встанет другая проблема. Что произойдёт если нажать следующую кнопку, когда импульсы ещё не закончились?
В добавок преобразования в стринг и обратно. Это тяжёлые операции, которые загрузят процессор.
В дальнейшем Вы вроде хотите собирать цифры в число.
Вы бы описали свою задумку. Какой планируется получить результат? В чем идея?
Может тогда проще будет Вам помочь.
Bupper
Рядовой
Сообщения: 25
Зарегистрирован: 16 сен 2021, 13:47
Имя: Алексей

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

Сообщение Bupper »

[ref]Dryundel[/ref], Да, вы правы. Будет проблема, что при быстром нажатии на следующую кнопку на клавиатуре счет собьется. Постараюсь подобрать необходимую частоту генератора. Сейчас стоит такт в 10мс, в принципе нормально, считает быстро.
Логика схемы работает нормально, просто добавил +1 к счету. Меня устраивает. Лишние преобразования в стринг уберу.
Это пока часть проекта. Основная задача сейчас: организовать ввод 6ти разрядного числа с клавиатуры и отображение на семисегментных индикаторах (выполненных в виде отдельных микросхем), которые управляются драйверами CD4026. Эти компоненты есть в наличии и приходится работать с ними. Драйверы управляются тактовыми сигналами по одной ножке. С ардуино будет использовано 6 пинов на выход. Соответственно на каждый драйвер мне необходимо подавать количество импульсов равное нажатой цифре на клавиатуре, плюс организовать поразрядное смещение.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2423
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 2 раза
Поблагодарили: 30 раз

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

Сообщение Dryundel »

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

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

Сообщение Bupper »

Да, я про такое думал. Если правильно Вас понял, то тогда для смещения второго разряда надо подать в 10 раз больше импульсов, для третьего разряда в 100 раз импульсов больше, для шестого - в 1000000 раз больше, так? При тактовой частоте ардуино 8Мгц (16/2 если на каждые 2 такта программы подавать), только пересчет на шестой разряд одной цифры займет 1/8 с, а если цифра 9 то более 1 с. Сюда надо еще добавить счеты на последующие разряды и еще работа внутренней программы. Что-то долго.
У меня "параллельная" передача данных, всяко быстрее чем последовательно.
Может я неправильно понял как Вы предлагаете?
Аватара пользователя
Dryundel
Полковник
Сообщения: 2423
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 2 раза
Поблагодарили: 30 раз

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

Сообщение Dryundel »

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

Отправлено спустя 3 минуты 41 секунду:
Dryundel писал(а): 19 янв 2022, 14:44 При тактовой частоте ардуино 8Мгц (16/2 если на каждые 2 такта программы подавать),
Частота процессора и частота цикла программы это совсем разные вещи. Вам ни за что не удастся сделать нормальный проект с циклом меньше 1 мс. А это всего 500 импульсов в секунду.
Bupper
Рядовой
Сообщения: 25
Зарегистрирован: 16 сен 2021, 13:47
Имя: Алексей

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

Сообщение Bupper »

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

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

Сообщение Dryundel »

Bupper писал(а): 19 янв 2022, 15:55 Можете хоть немного намекнуть, как вы подразумеваете подключение CD4026 в шлейф? При этом передача импульсов только на первый драйвер?
[spoiler=Видосики]
https://www.youtube.com/watch?v=kvJp9cL3adc
https://www.youtube.com/watch?v=CmcJZcyq9qk
https://www.youtube.com/watch?v=gu4nltC_ZcU
[/spoiler]
Ответить

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя