Полная версия этой страницы:
Сброс счетчиков в CPLD
nick17
Oct 11 2010, 06:10
Есть проект, уже работающий, НО... проблема заключается в следующем:
При включении, счетчики принимают произвольные значения, обычно от 12 до 15, устройство не работает, пока не выведешь кнопками в диапазон 0-10(рабочий). Внутри все входы сбросов счетчиков, соединены вместе и посажены на землю.
Как избавится от такого эффекта, можно ли решить проблему без применения внешней схемы сброса на рассыпухе?
Цитата(nick17 @ Oct 11 2010, 00:10)

можно ли решить проблему без применения внешней схемы сброса на рассыпухе?
сделать самосинхронную схему
DmitryR
Oct 11 2010, 06:15
Добавить схему, которая будет сбрасывать счетчик при значении на выходе, превышающим 10.
Александр77
Oct 11 2010, 06:40
Если есть внешнее тактирование и свободные ресурсы, то поставить компаратор на превышение и формировать импульс сброса.
PS. А разве у Вас не бывает состояний до 12, точнее от 1 до 11? Если бывают, то они разве не мешают?
rv3dll(lex)
Oct 11 2010, 07:07
резистор конденсатор и диод
и вообще штатно счётчик до каких считает?
nick17
Oct 11 2010, 07:16
два счетчика считают до 9 и сбрасываются при 10-ом нажатии, а один до 10 и сбрасывается при 11-ом соответственно.
Судя по вашим ответам, я понимаю нужно сделать так:
ставим AND, на один вход заводим тактовые импульсы от генератора, на другой от компаратора(сравнивает с пороговым числом, после которого сбрасывать), выход AND на схему сброса счетчика.
rv3dll(lex)
Oct 11 2010, 07:30
ничего подобного. просто разрабатываем схему так, чтобы после первого импульса все состояния кроме рабочих превращались в единицу.
Maverick
Oct 11 2010, 07:51
Цитата(nick17 @ Oct 11 2010, 09:10)

Есть проект, уже работающий, НО... проблема заключается в следующем:
При включении, счетчики принимают произвольные значения, обычно от 12 до 15, устройство не работает, пока не выведешь кнопками в диапазон 0-10(рабочий). Внутри все входы сбросов счетчиков, соединены вместе и посажены на землю.
Как избавится от такого эффекта, можно ли решить проблему без применения внешней схемы сброса на рассыпухе?
схему или описание на HDL в студию
Какая ПЛИС, конкретнее?
Можно сделать:
1. Внешний сброс. Совсем несложно. Имеется почти в каждом микроконтроллере и др., полезная штука. Завести на свои счетчики и т.п.
2. Внутренний сброс. При включении в течение нескольких тактов сформировать сигнал сброса. Завести туда же.
3. Как сказал des00 - "самосинхронную схему". Обнаруживать нерабочее состояние (схемами сравнения - компараторами) счетчиков и т.п. и вырабатывать сигнал сброса. Завести туда же.
Последнее лучше предыдущих тем, что при любых сбоях (по питанию) восстанавливает работоспособность схемы. Лично я сделал бы второй вариант (а еще лучше вместе с первым).
Цитата(nick17 @ Oct 11 2010, 09:10)

Есть проект, уже работающий, НО... проблема заключается в следующем:
При включении, счетчики принимают произвольные значения, обычно от 12 до 15, устройство не работает, пока не выведешь кнопками в диапазон 0-10(рабочий). Внутри все входы сбросов счетчиков, соединены вместе и посажены на землю.
Как избавится от такого эффекта, можно ли решить проблему без применения внешней схемы сброса на рассыпухе?
Какой фирмы и семейства кристалл. Только тогда можно что то сказать.
rv3dll(lex)
Oct 11 2010, 08:17
Цитата(ViKo @ Oct 11 2010, 12:06)

3. Как сказал des00 - "самосинхронную схему". Обнаруживать нерабочее состояние (схемами сравнения - компараторами) счетчиков и т.п. и вырабатывать сигнал сброса. Завести туда же.
Последнее лучше предыдущих тем, что при любых сбоях (по питанию) восстанавливает работоспособность схемы. Лично я сделал бы второй вариант (а еще лучше вместе с первым).
зачем компаратор? счётчик он и так уже имеет диаграмму состояний. просто все нерабочие состояния считать нулевыми и при первомже после включения разрешённом импульсе перевести в единицу как будто уже импульс подсчитан.
ишо есть такая штука MAX809.
Maverick
Oct 11 2010, 08:31
Цитата(rv3dll(lex) @ Oct 11 2010, 11:17)

зачем компаратор? счётчик он и так уже имеет диаграмму состояний. просто все нерабочие состояния считать нулевыми и при первомже после включения разрешённом импульсе перевести в единицу как будто уже импульс подсчитан.
ишо есть такая штука MAX809.
тогда почему не сделать простую схему которая б производила сброс счетчика при включении?
rv3dll(lex)
Oct 11 2010, 08:33
Цитата(Maverick @ Oct 11 2010, 12:31)

тогда почему не сделать простую схему которая б производила сброс при включении?
она не бесплатная.
Maverick
Oct 11 2010, 08:35
Цитата(rv3dll(lex) @ Oct 11 2010, 11:33)

она не бесплатная.
Вы это к чему?
Цитата(rv3dll(lex) @ Oct 11 2010, 11:17)

все нерабочие состояния считать нулевыми
Вот для этого и нужен компаратор (цифровой, схема сравнения). Если нерабочими должны быть коды больше или равные 12, нужно объединить по И разряды Q3 и Q2 счетчика, и завести результат на Reset.
Цитата(Maverick @ Oct 11 2010, 03:31)

тогда почему не сделать простую схему которая б производила сброс счетчика при включении?
потому как это CPLD, а не FPGA. Если есть немного ресурса, ИМХО я бы при любом нахождение схемы, не в том состоянии ставил бы ее куда надо принудительно.
rv3dll(lex)
Oct 11 2010, 09:49
Цитата(ViKo @ Oct 11 2010, 12:35)

Вот для этого и нужен компаратор (цифровой, схема сравнения). Если нерабочими должны быть коды больше или равные 12, нужно объединить по И разряды Q3 и Q2 счетчика, и завести результат на Reset.
ладно напишу по буквам
обобщённо синхронный счётчик это автомат состояний у которого состояния перебираются последовательно.
синхронный автомат состояний для счёта до 10 в общем случае представляет собой 4 триггера и 4 комбинационных логических схемы, входы которых 4 выхода триггеров а выходы - входы триггеров D T JK в зависимости на какой базе сделан триггер. и этот компаратор там уже есть и ничего объединять и городить не нужно. нужно просто правильно описать автомат состояний!
Цитата(rv3dll(lex) @ Oct 11 2010, 12:49)

нужно просто правильно описать автомат состояний!
С этим согласен. С CPLD не работал, похоже, там хватит входов в macrocell, чтобы сделать схему сравнения перед триггером.
Цитата(ViKo @ Oct 11 2010, 13:07)

С этим согласен. С CPLD не работал, похоже, там хватит входов в macrocell, чтобы сделать схему сравнения перед триггером.
Так триггера CPLD по включению питания (Альтера) в 0 устанавливаются.
Откуда в схемной реализации состояния, отличные от нуля по включению питания.
Цитата(sazh @ Oct 11 2010, 13:42)

Так триггера CPLD по включению питания (Альтера) в 0 устанавливаются.
Откуда в схемной реализации состояния, отличные от нуля по включению питания.
Может, там дребезг контактов на кнопках?
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.