Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помощь в первом проекте (Verilog).
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Stolbov
Друзья, добрый вечер!

Закончив буквально пару месяцев назад универ, я решил более подробно углубиться в изучение ПЛИС и языка Verilog.
Купив, на мой взгляд, подходящую для этого дела книгу и заказав китайскую плату с "Алихи", я сразу приступил к экспериментам,
и, "помигав" светодиодом, решил приступить к более сложным для своего уровня схемам. Проблема следующая:
я решил реализовать схему, которая при нажатии кнопки на плате выводит на семисегментный индикатор число, которое, при повторном нажатии
кнопки, увеличивается на единицу. Схема состоит из счётчика, выход которого подключён к дешифратору. Выходы дешифратора подключены к сегментам индиктора (нужный индикатор я "зажигаю" подачей на него сигнала clock). При нажатии кнопки на индикаторе появляется случайное число, и никакого увеличения на единицу не происходит. Скажите, пожалуйста, как можно исправить эту проблему? Заранее спасибо за ответы.
Flip-fl0p
Цитата(Stolbov @ Aug 5 2017, 21:02) *
Друзья, добрый вечер!

Закончив буквально пару месяцев назад универ, я решил более подробно углубиться в изучение ПЛИС и языка Verilog.
Купив, на мой взгляд, подходящую для этого дела книгу и заказав китайскую плату с "Алихи", я сразу приступил к экспериментам,
и, "помигав" светодиодом, решил приступить к более сложным для своего уровня схемам. Проблема следующая:
я решил реализовать схему, которая при нажатии кнопки на плате выводит на семисегментный индикатор число, которое, при повторном нажатии
кнопки, увеличивается на единицу. Схема состоит из счётчика, выход которого подключён к дешифратору. Выходы дешифратора подключены к сегментам индиктора (нужный индикатор я "зажигаю" подачей на него сигнала clock). При нажатии кнопки на индикаторе появляется случайное число, и никакого увеличения на единицу не происходит. Скажите, пожалуйста, как можно исправить эту проблему? Заранее спасибо за ответы.

Есть такое явление - дребезг контактов. Кнопку Вы нажали один раз, а из-за механических колебаний, возникающих при нажатии, кнопка сработала несколько раз.
Напишите модуль анти дребезга.
sonycman
Цитата(Stolbov @ Aug 5 2017, 22:02) *
Друзья, добрый вечер!

Доброго!

Да, как уже подсказали, нужен антидребезг.
Это либо простой фильтр с достаточным временным периодом (десяток-другой миллисекунд), либо просто считывание состояния кнопки с ещё большим периодом, к примеру - один раз в 100 миллисекунд.
iosifk
Цитата(Stolbov @ Aug 5 2017, 21:02) *
Скажите, пожалуйста, как можно исправить эту проблему? Заранее спасибо за ответы.

Могу рассказать как надо делать проекты... По скайпу...
Stolbov
Цитата(iosifk @ Aug 5 2017, 22:09) *
Могу рассказать как надо делать проекты... По скайпу...

Благодарю. Если у меня не получится исправить это самостоятельно, то я обязательно к Вам обращусь.
iosifk
Цитата(Stolbov @ Aug 5 2017, 22:11) *
Благодарю. Если у меня не получится исправить это самостоятельно, то я обязательно к Вам обращусь.

Желаю удачи. И учтите, что главная ошибка в этом - "я сразу приступил к экспериментам"... ПЛИС - это не микроконтроллер...
Огурцов
Цитата(Stolbov @ Aug 5 2017, 19:02) *
Скажите, пожалуйста, как можно исправить эту проблему?

припаяйте конденсатор параллельно кнопке и никого не слушайте
iosifk
Цитата(Огурцов @ Aug 5 2017, 22:35) *
припаяйте конденсатор параллельно кнопке и никого не слушайте

Уточняю... Одним то концом конечно к кнопке. А вот второй конец сложнее. Надо просверлить левый верхний угол микросхемы, примерно на 2 мм от края и туда запаять. Потом как положено протереть зеркальце заднего вида и пнуть колесо. И никого не слушать.
Corvus
Цитата(Огурцов @ Aug 5 2017, 22:35) *
и никого не слушайте


Вот-вот. Лучше сразу гуглите "fpga debounce push button".
Stolbov
Всем спасибо за ответы! В действительности я нашёл ответ на одном из зарубежных сайтов с примером простого кода на Verilog. Разобравшись в нём,
я его испытал и убедился, что дребезг успешно "гасится"! yeah.gif
ViKo
Конденсатор тоже поставьте. Всех слушайте. rolleyes.gif
Flip-fl0p
Цитата(Огурцов @ Aug 5 2017, 22:35) *
припаяйте конденсатор параллельно кнопке и никого не слушайте

И из-за больших начальных значений токов при разряде этого конденсатора, контакты кнопки в скором времени могут придти в негодность. Тогда надо ещё и сопротивление поставить. В CPLD где мало ячеек это имело бы смысл. В FPGA где ячеек очень и очень много, и редко когда FPGA забита на 100%, то почему бы не потратить несколько LEs на антидребезг ? Тем более если брать серьезные проекты, которые выпускаются многотысячными партиями, то там ещё и экономия будет, за счет того, что нет необходимости ставить лишние радиоэлементы, которые денег стоят.
sonycman
Так от конденсатора хуже не будет для FPGA, у которых нет триггеров шмидта на входах?
Кондёр сделает фронты более пологими, что может привести к многократному переключению на входе в момент перехода сигнала через пороговый уровень.
iosifk
Цитата(sonycman @ Aug 6 2017, 12:19) *
Так от конденсатора хуже не будет для FPGA, у которых нет триггеров шмидта на входах?
Кондёр сделает фронты более пологими, что может привести к многократному переключению на входе в момент перехода сигнала через пороговый уровень.

Конденсатор - это для игрунов...Или для подельщиков одной уникальной игрушки...
Ну неужели я буду изучать дребезг "с конденсатором", если простейший фильтр закрывает проблему навсегда и во всех проектах? А ресурсы под это как "капля в ведро"...
причем дальше становится абсолютно наплевать, пологие там фронты или нет. Задан параметр "время дребезга" и этого достаточно для проекта. Все остальное должно пересчитаться автоматически из тактовой...
ViKo
В дребезжащей кнопке будут микро-искры-дуги при каждом соединении-разъединении контакта. С конденсатором переключений будет меньше.
iosifk
Цитата(ViKo @ Aug 6 2017, 14:15) *
В дребезжащей кнопке будут микро-искры-дуги при каждом соединении-разъединении контакта. С конденсатором переключений будет меньше.

Если говорить об энергии, то при размыкании ток определится резистором. А при замыкании без конденсатора - тоже резистором. А вот с конденсатором ток чем определится? Внутренним сопротивлением конденсатора и подводящими проводами. И мне кажется, что ток в этом случае будет больше. А при экстраполяции к большому конденсатору - вообще сварочная дуга. Так где же выигрыш?
Огурцов
Цитата(Flip-fl0p @ Aug 6 2017, 08:50) *
выпускаются многотысячными партиями

это первые проекты, типа кнопка со светодиодом, многотысячными партиями ? купите, продам недорого


Цитата(iosifk @ Aug 6 2017, 09:30) *
Ну неужели я буду изучать дребезг "с конденсатором"

звучит минимум на докторскую

Цитата(iosifk @ Aug 6 2017, 09:30) *
Задан параметр "время дребезга" и этого достаточно для проекта. Все остальное должно пересчитаться автоматически из тактовой...

а rc можно посчитать один раз и никогда не пересчитывать независимо ни от тактовой, ни от чипа
короче, сабж!
iosifk
Цитата(Огурцов @ Aug 6 2017, 15:36) *
а rc можно посчитать один раз и никогда не пересчитывать независимо ни от тактовой, ни от чипа
короче, сабж!

Можно конечно и без параметров, но сидеть и ждать от симулятора подавления дребезга лень.
мне вполне хватает двух наборов параметров, один для дебага, второй для релиза. Достаточно сказать параметру в тестбенче, что это дебаг...
Просто мне так удобнее...
ViKo
Цитата(iosifk @ Aug 6 2017, 14:31) *
Если говорить об энергии, то при размыкании ток определится резистором. А при замыкании без конденсатора - тоже резистором. А вот с конденсатором ток чем определится? Внутренним сопротивлением конденсатора и подводящими проводами. И мне кажется, что ток в этом случае будет больше. А при экстраполяции к большому конденсатору - вообще сварочная дуга. Так где же выигрыш?

Можно и с конденсатора ток ограничить резистором.
Flip-fl0p
Цитата(Огурцов @ Aug 6 2017, 15:36) *
это первые проекты, типа кнопка со светодиодом, многотысячными партиями ? купите, продам недорого

Безусловно конденсатор и резистор решат проблему дребезга. Но:
1. Резистор с конденсатором надо ещё найти.
2. Надо найти место чтобы их припаять.
3. Их надо ещё припаять.
Спорить не буду, резистор с конденсатором решение проверенное и вполне рабочее. Но правильное ли ? Тем более человек только учится. Так пусть человек научится решать проблему дребезга путем схемы на HDL. А когда пойдут серьезные проекты человек будет уже выбирать наиболее рациональный способ подавления дребезга.
варп
Stolbov, "подавление дребезга" - реально важная задача... А использование конденсатора - это НАИХУДШИЙ вариант подавления дребезга... Скорее - это не решение проблемы вообще... Не верите - соберите простейшую схему со счётчиком, который будет считать импульсы с механической кнопки... Через пол-часа Вы убедитесь, что гарантированно дребезг подавить просто конденсатором невозможно....
Огурцов
Цитата(Flip-fl0p @ Aug 6 2017, 13:30) *
Спорить не буду, резистор с конденсатором решение проверенное и вполне рабочее. Но правильное ли ? Тем более человек только учится

решение с конденсатором неправильное, но вполне рабочее, тем более человек только учится
гораздо интереснее посмотреть на мигающий светодиод в реале, чем абстрактно пытаться представить какие-то процессы, происходящие в кнопке
в любом случае - это способ разбить задачу на части и решить маленькие части по очереди, а не свалив всё в кучу, решать систему уравнений с эн неизвестными
AVR
Цитата(Огурцов @ Aug 6 2017, 20:13) *
гораздо интереснее посмотреть на мигающий светодиод в реале, чем абстрактно пытаться представить какие-то процессы, происходящие в кнопке

Новичок вполне может быть укомплектован осциллом sm.gif
Хотя осцилл после универа, а что - есть дешевые.
ViKo
STM 32F411EDISCOVERY
Конденсатор на USER кнопке не запаян, но был предусмотрен.
Конденсатор на кнопке RESET стоит. Хотя, конденсатор здесь, скорее, для сброса по включению питания. Ну, это особая кнопка.
vladec
Это не конденсатор подавления дребезга, а цепь начального ресета. Реальное использование RC для подавления дребезга дело мало перспективное.
ViKo
Цитата(vladec @ Aug 7 2017, 11:19) *
Это не конденсатор подавления дребезга, а цепь начального ресета.

Я так и написал.
Цитата
Реальное использование RC для подавления дребезга дело мало перспективное.

Вместе с программной обработкой, конечно.
rudy_b
На самом деле, использование конденсатора с одним (или двумя - ограничение тока) резисторами в общем случае обязательно, но не для гашения дребезга (его проще подавить в цифре) а для фильтрации внешних высокочастотных помех, наведенных на высокоомный вход проца.

Никто не обращал внимание как глючит клава если рядом работает разрядник?
Corner
Цитата(rudy_b @ Aug 7 2017, 13:13) *
Никто не обращал внимание как глючит клава если рядом работает разрядник?

Клавиатура (Клава это женское имя) не глючит. Появляются ошибки в работе контролера/моста, куда она подключена. Вплоть, до выгорания последнего. Лично спалил один ОС/2 и пару USB.
По сабжу. Если кнопки снаружи используются, то конденсаторов мало. Нужны варисторы/сапрессоры - гасить разряд и R2D цепочка - ограничивать ток.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.