PDA

Просмотр полной версии : Сбой в работе К555ТМ8



vvl
21.02.2010, 12:07
Здравствуйте, уважаемые друзья!
Позвольте задать вопрос. Я занимаюсь изготовлением учебного стенда и в схеме управления лампочками использую К555ТМ8 (4 синхронных D-триггера) для фиксации их состояния.

Готовая схема тестировалась следующим образом: на информационные входы триггеров подавалась младшая тетрада (D0 - D3) с параллельного порта, а на синхровход триггеров - бит D4 оттуда же. Управление портом, как вы понимаете, программное.

Проблема в следующем: любые комбинации из одного, двух и трёх включенных входов/выходов К555ТМ8 фиксирует нормально. Можно, например, подать 0x17 и загорятся "младшие" три лампочки, 0x18 и загорится только "старшая", или, наконец, 0x1E - горят три "старшие" (извините за столь подробное описание, мне кажется, что оно может быть необходимо для полного понимания). Но при подаче 0x1F (чтобы зажечь все сразу) состояния почему-то не фиксируются! Лампочки коротко мигают и остаются не включенными.

Теперь еще интересней (только не спешите обзываться :) ). Когда я прижимаю МС к панельке, проблема пропадает... но! Всё-таки, непонятно, в чем именно причина такого "поведения"? Отходит какой-нибудь контакт? Но ведь по отдельности биты фиксируются (включая тот же старший)! Приходит/исчезает помеха? Но почему эта помеха (или ее отсутствие) влияет только на ситуацию, когда выполняется попытка записать сразу все 4 бита?

Спасибо за внимание, с нетерпением жду ваших идей!

vadim_d
21.02.2010, 12:35
на информационные входы триггеров подавалась младшая тетрада (D0 - D3) с параллельного порта, а на синхровход триггеров - бит D4 оттуда же. Управление портом, как вы понимаете, программное.
Подозреваю, что у Вас одновременно ставятся биты данных и синхроимпульс (в одной команде вывода в порт). Первой командой выведите данные с нулевым стробом, второй - те же данные с единичным стробом. Снимать строб можно как угодно (скажем, при выводе новых данных с нулевым стробом).

21.02.2010, 17:14
Здравствуйте, уважаемые друзья!
Позвольте задать вопрос. Я занимаюсь изготовлением учебного стенда и в схеме управления лампочками использую К555ТМ8 (4 синхронных D-триггера) для фиксации их состояния.

Спасибо за внимание, с нетерпением жду ваших идей!

Не хочется искать описание этой миросхемы, поэтому, может то что скажу, будет невпопад, но все же. Посмотрите, чем переключаются триггера, фронтом импульса (спадом отрицательного), или спадом. В момент переключения сигналы на входах D не должны изменяться. Вообще, строб не должен совпадать по времени с информационным импульсом. Должно быть так - подаются сигналы на информационные входы, затем строб, затем строб снимается, после этого можно снять сигналы с информационных входов, они уже записаны.
Когда вы прижимаете панельку пальцем, возможно из-за дополнительной емкости меняются задержки. Это еще раз говорит о том, что у Вас непорядок с временами подачи сигналов. Возможно, Вы убираете сигнал, а на входе синхроимпульса, за счет емкости импульс еще остается, вот он и прописывает не то, что нужно. То есть еще раз: разгоните все по времени.

vvl
21.02.2010, 19:32
Подозреваю, что у Вас одновременно ставятся биты данных и синхроимпульс (в одной команде вывода в порт). Первой командой выведите данные с нулевым стробом, второй - те же данные с единичным стробом. Снимать строб можно как угодно (скажем, при выводе новых данных с нулевым стробом).

Уважаемый vadim_d, спасибо за грамотное замечание, но... проверял!!! Подавал отдельно данные и синхроимпульс в разной последовательности, скажем так, перебрал все варианты. В один момент оказалось (показалось), что работает такая последовательность


outportb (0x378, 0x0F); // подали данные
delay (5);
outportb (0x378, 0x1F); // включили синхросигнал
delay (5);
outportb (0x378, 0x10); // выключили данные не снимая синхросигнала
delay (5);
outportb (0x378, 0x00); // выключили синхросигнал,

но на следующий день это уже не работало. :)
А вот стал прижимать микросхему пальцами - пошло. Стыдно мне, да и только (пайку тоже проверил).

vvl
21.02.2010, 19:36
Посмотрите, чем переключаются триггера, фронтом импульса (спадом отрицательного), или спадом.

Да-да, спасибо, там действительно управление передним фронтом.


В момент переключения сигналы на входах D не должны изменяться. Вообще, строб не должен совпадать по времени с информационным импульсом. Должно быть так - подаются сигналы на информационные входы, затем строб, затем строб снимается, после этого можно снять сигналы с информационных входов, они уже записаны.

Вот-вот-вот! (см. код выше)


Когда вы прижимаете панельку пальцем, возможно из-за дополнительной емкости меняются задержки. Это еще раз говорит о том, что у Вас непорядок с временами подачи сигналов.

Опачки! Это заставило меня задуматься... СПАСИБО вам и Вадиму!

ut1wpr
21.02.2010, 20:58
Подозреваю, что у Вас одновременно ставятся биты данных и синхроимпульс (в одной команде вывода в порт). Первой командой выведите данные с нулевым стробом, второй - те же данные с единичным стробом. Снимать строб можно как угодно (скажем, при выводе новых данных с нулевым стробом).

Уважаемый vadim_d, спасибо за грамотное замечание, но... проверял!!! Подавал отдельно данные и синхроимпульс в разной последовательности, скажем так, перебрал все варианты. В один момент оказалось (показалось), что работает такая последовательность


outportb (0x378, 0x0F); // подали данные
delay (5);
outportb (0x378, 0x1F); // включили синхросигнал
delay (5);
outportb (0x378, 0x10); // выключили данные не снимая синхросигнала
delay (5);
outportb (0x378, 0x00); // выключили синхросигнал,

но на следующий день это уже не работало. :)
А вот стал прижимать микросхему пальцами - пошло. Стыдно мне, да и только (пайку тоже проверил).


pdata = 0x0F; // Данные для помещения в порт
paddr = 0x378; // Адрес порта
outportb(paddr, 0x00); // Инициализация
outportb(paddr, (inportb(paddr) & 0xF0) | pdata); // Выводим данные в порт. Только младший нибл
outportb(paddr, inportb(paddr) | 0x10); // Формируем фронт строба
outportb(paddr, inportb(paddr) & 0xEF); // Формируем спад строба

Не надо задержек. Достаточно задержек при работе in-out. Время задержки распространения по ТМ8 намного короче, чем время обращения к порту компьютера.
А теперь еще один вопрос, может самый главный. Под какой ОС Вы пытаетесь этот фрагмент выполнить?
Подобные вольности с портами ввода-вывода могут еще пройти на W98. Да и то не всегда...
Если что-то посвежее - оставьте затею. Не пустит Вас система к порту так вот запросто...
ps Вдогонку.
Проверьте себя, придерживаетесь ли Вы простых требований при работе с LPT-портом компьютера:
- порт данных по многим источникам (часто подтверждённым:)) выполняется на элементах с ОК. Вам надо обязательно "подтянуть" со стороны ТМ8 все её входы к +5.
- среди трёх портов LPT (данные, команды и статус) есть один сигнал, так и называемый "Строб". Рекомендую его использовать. Программу это не усложнит, зато снимет много проблем. В инете в описаниях сигналов параллельного порта всё подробно.
- не забывать про "звон" проводов. Длина шлейфа не должна превышать разумных пределов (около 2 метров часто бывает достаточно). Лучше всего применять плоские шлейфы, в которых чередуются сигнальные и земляные провода.
Лично у меня эти три правила всегда выдерживаются неукоснительно. В противном случае будем иметь то, что имеем плюс головная боль, откуда это имеем :)

21.02.2010, 21:43
Подавал отдельно данные и синхроимпульс в разной последовательности, скажем так, перебрал все варианты. В один момент оказалось (показалось), что работает такая последовательность


outportb (0x378, 0x0F); // подали данные
delay (5);
outportb (0x378, 0x1F); // включили синхросигнал
delay (5);
outportb (0x378, 0x10); // выключили данные не снимая синхросигнала
delay (5);
outportb (0x378, 0x00); // выключили синхросигнал,

но на следующий день это уже не работало. :)
А вот стал прижимать микросхему пальцами - пошло. Стыдно мне, да и только (пайку тоже проверил).

Вот это меня и смущает. Выключили данные, выключили синхросигнал.... Это хорошо теоретически. А по шинам продолжают гулять затухающие импульсы. Не хотите менять программу, попробуйте строб задержать аппаратно, подайте его через резистор, после резистора конденсатор на землю (может станет еще хуже) . Резистор примерно 1 ком или меньше, конденсатор, чтобы постоянная времени была несколько мкс.
Но это все метод тыка.
Еще раз рекомендую посмотреть на даташит, особенно в части временных задержек.
Я понимаю, что выполняя программу, задержка и так есть, но она может быть недостаточной, учитывая скорости современных компьютеров.
Все же рекомендовал бы так. Выставляем данные, задержка, строб, задержка, снимаем данные и т.д. .

Tadas
21.02.2010, 21:53
...снимаем данные...
Что значит снимаем данные ? Пишем 0 ? 0 то же данные :)
Эта операция полностью лишняя.
А керамический конденсатор прямо на ножке питания ТМ8 на землю имеется ?

vadim_d
21.02.2010, 23:54
Вам надо обязательно "подтянуть" со стороны ТМ8 все её входы к +5.
- среди трёх портов LPT (данные, команды и статус) есть один сигнал, так и называемый "Строб". Рекомендую его использовать. Программу это не усложнит, зато снимет много проблем. В инете в описаниях сигналов параллельного порта всё подробно.
- не забывать про "звон" проводов.
Присоединяюсь :D Много лет назад делал на заказ читалку картриджей "Денди" и в уже готовой плате довешивал подтягивающий резистор на сигнал строба. Могу посоветовать сделать вывод в цикле и посмотреть сигналы осциллографом. В окрестности нарастающего фронта такта ТМ8 данные должны стоять стабильно, а сам тактовый сигнал не должен иметь никакого звона. Иногда полезно использовать вход внешней синхронизации, дабы развертка запускалась данными, при однолучевом осциллографе это единственный способ измерить временнЫе соотношения сигналов.

vvl
22.02.2010, 00:32
pdata = 0x0F; // Данные для помещения в порт
paddr = 0x378; // Адрес порта
outportb(paddr, 0x00); // Инициализация
outportb(paddr, (inportb(paddr) & 0xF0) | pdata); // Выводим данные в порт. Только младший нибл
outportb(paddr, inportb(paddr) | 0x10); // Формируем фронт строба
outportb(paddr, inportb(paddr) & 0xEF); // Формируем спад строба

Не надо задержек. Достаточно задержек при работе in-out.


Здравствуйте!
Спасибо за внимание к моей проблеме.
Ваш код, конечно, элегантен, хотя в моей ситуации я не вижу принципиальной разницы: менять ли состояния битовыми операциями или делать это напрямую, но хочу немного поспорить относительно задержек. Дело в том, что даже процессор Pentium I выполняет операции чтения/записи портов чрезвычайно быстро, поэтому авторы учебно-методических пособий рекомендуют при работе с портом LPT инициировать задержки. Например, так:



...
out dx, al ; тут как раз отправляется стробирующий сигнал
nop
nop
nop
...


(Гуржій, Коряк, Самсонов, Скляров. Архітектура, принципи функціонування та керування ресурсами IBM PC).


А теперь еще один вопрос, может самый главный. Под какой ОС Вы пытаетесь этот фрагмент выполнить?
Подобные вольности с портами ввода-вывода могут еще пройти на W98. Да и то не всегда...

Ну что вы, конечно, если бы проблема была в ОС, то у меня бы вообще ничего не вышло! Хотя я выполнял подобные действия и под XP (ставил программу-драйвер LPT, коих сейчас немало).
У меня для этих целей на работе стоит как раз старенький Pentium I, на котором загрузка Windows 95 в autoexec.bat прерывается Волковым коммандером. :) Вот под этим "DOS 7" (в Turbo C++ 3.0) мы и проводим необходимые эксперименты. Например, управляем шаговыми двигателями, используя те же К555ТМ8 (просто там не приходилось "включать" сразу все выходы, поэтому проблема и не возникала).


Вам надо обязательно "подтянуть" со стороны ТМ8 все её входы к +5.

А у этой МС всего-то 4 входа данных, 1 стробирующий и Reset. Последний само собой лежит на +5, потому что сброс там на низком уровне работает.
Другое дело, что у этих триггеров есть прямые и инверсные выходы. Инверсные у меня и вправду "висят" в воздухе. Полагаете, стоит через балласты на +5 ?


- среди трёх портов LPT (данные, команды и статус) есть один сигнал, так и называемый "Строб". Рекомендую его использовать.

Уффф... Я-то знаю сигналы LPT, но не планировал так серьезно использовать этот порт. :) Мне просто нужно было проверить триггеры, а вы, я думаю, согласитесь, что может быть проще LPT? Дальше эти триггеры будут вообще управляться микроконтроллером, но вот этот момент, что именно все четыре выхода сразу не хотят включаться меня остановил.


- не забывать про "звон" проводов. Длина шлейфа не должна превышать разумных пределов (около 2 метров часто бывает достаточно). Лучше всего применять плоские шлейфы, в которых чередуются сигнальные и земляные провода.

Да, да, на это грешил, провода двигал. Но у меня там от порта к плате 15 см кусочек шлейфа, хотя еще присмотрюсь, вдруг данные как-то строб наводят что ли, когда все 4 бита включаешь.

Огромное спасибо за советы! Завтра буду пробовать всё, что вы сказали!

vvl
22.02.2010, 00:36
А керамический конденсатор прямо на ножке питания ТМ8 на землю имеется ?

Питание от БП того же компьютера. Конденсатора нет. (спасибо за внимание)

vvl
22.02.2010, 00:41
похоже на просадку по питанию... если по отдельности биты зажигаются, а четыре вместе нет, значит в момент поджига что-то происходит... свет в комнате не пригасает?

Да, я бы в эту просадку поверил, если бы там у меня хотя бы лампочки на 6,3 вольта были подключены к триггерам. :) А там светодиоды и те через транзисторы (потому что планируется бОльшая нагрузка). Да и БП компьютерный, как вы знаете, на 5 вольтах держит весьма немалый ток. :)

Друзья, всем спасибо, я завтра как тот слон-живописец из басни Михалкова попробую всё, что вы посоветовали: "...и лёд, и мёд, и огород..." :)

22.02.2010, 00:54
...снимаем данные...
Что значит снимаем данные ? Пишем 0 ? 0 то же данные :)
Эта операция полностью лишняя.


Вот спасибо, теперь буду знать, что 0 тоже данные. Век живи, век учись....
И что значит лишняя операция? Правда автор назвал ее "выключаем данные". Наверное она ему нужна, только я ее предложил в другой последовательности.

Tadas
22.02.2010, 09:24
Наверное она ему нужна,
Автору может быть и нужна, для ТМ8 - безразлична.

Слава_UR5FKI
22.02.2010, 14:12
1. Еще один момент для проверки - посмотрите, включен ли вход сброса R (1 нога) через резистор на +5В ? Для 555-й серии на крайний случай можно и без резистора подключить к +5 .
Если "перст животворящий" влияет - то это может быть признак действия или наводок или емкости Вашего тела на этот неподключенный вход :)

2. Блокирующую емкость (между "землей" и +5) на микросхеме обязательно - Вам уже это описали. Да и подтягивающие резисторы на +5 по входам тоже. У Вас же сам макет от компьютера наверняка не в 10 см стоит и соединяется шлейфом (кабелем). Для таких подключений применяется делитель на каждом входе - и на информационных и на стробе. 2 резистора - где-то 560 Ом на +5 и 300 на землю. Середина этого делителя - на вход м\сх и на соединительный кабель. Этот делитель обеспечивает согласование сопротивления кабеля и нагрузки (м\сх). Сильно много слов написал, чтоб попонятней было, если Вы с этим не сталкивались.

3. К питанию Вашего макета относиться тяп-ляп нельзя. Как раз такие плавающие неисправности и получаются от пренебрежительного отношения к этому - "блок питания мощный, он вытянет". Вы-то питание подаете не по шине сечением 10 см2, а наверняка по тому-же соединительному кабелю, а его сечение - Вы сами видели какое :).
Считаем : ТМ8 - 18мА + 4х10мА - светодиоды = 58мА Это немало. Если кроме м\сх и светодиодов еще что-то стоит на макете - то став осциллографом на проводок +5В Вы увидите загадочную и красивую "импульсную" картинку, а не постоянный ток :) Так что "питайтесь" хорошо! :)

Успехов!

vvl
22.02.2010, 17:35
1. Еще один момент для проверки - посмотрите, включен ли вход сброса R (1 нога) через резистор на +5В ? Для 555-й серии на крайний случай можно и без резистора подключить к +5 .

Да, включен. Правда действительно без резистора.


2. Блокирующую емкость (между "землей" и +5) на микросхеме обязательно - Вам уже это описали. Да и подтягивающие резисторы на +5 по входам тоже.

Спасибо, думаю это сделаем.

22.02.2010, 17:54
Обратите также внимание на длительность строба.

RV3DLX
22.02.2010, 19:11
Я вообще не понимаю смысла открытия этой темы. Если соблюдать все временные соотношения импульсов рекомендуемые производителем этой микросхемы или ее аналогов, то все должно работать.
Юрий.

Флудер
22.02.2010, 20:11
не понимаю смысла открытия этой темы
Это ЦРУ зондирует профессионализм местных радиолюбителей ... Досье пополняет... 8) 8) 8)

Кстати, где мой пост? Билли где карта?



Флудер писал(а):
похоже на просадку по питанию... если по отдельности биты зажигаются, а четыре вместе нет, значит в момент поджига что-то происходит... свет в комнате не пригасает?


Да, я бы в эту просадку поверил, если бы там у меня хотя бы лампочки на 6,3 вольта были подключены к триггерам. А там светодиоды и те через транзисторы (потому что планируется бОльшая нагрузка). Да и БП компьютерный, как вы знаете, на 5 вольтах держит весьма немалый ток.

Shuare
22.02.2010, 20:52
Начать надо с главного - выкинуть 555 серию. Или 74LS или нашу 1533
В свое время наелись по уши. В макете ведет себя по одному, в печати - по другому. Разные заводы тоже по-разному. Самая наверно неудачная у нас содранная серия.

vvl
23.02.2010, 20:55
Я вообще не понимаю смысла открытия этой темы. Если соблюдать все временные соотношения импульсов рекомендуемые производителем этой микросхемы или ее аналогов, то все должно работать.
Юрий.

Ценное замечание. Извините за иронию.

ut1wpr
23.02.2010, 21:19
Я вообще не понимаю смысла открытия этой темы. Если соблюдать все временные соотношения импульсов рекомендуемые производителем этой микросхемы или ее аналогов, то все должно работать.
Юрий.

Ценное замечание. Извините за иронию.
Да не обижайтесь. Крутых тут много.
Попробуйте просто "зациклить" фрагмент программы и посмотреть осциллографом.
Если он, безусловно, имеется.. Всякое ж бывает. Но без него трудно. Одни предположения и никаких фактов :)
Отсюда и количество советчиков и вариантов глюков.

vvl
07.03.2010, 00:13
Дорогие друзья, всем огромное спасибо за внимание и помощь! Отдельная благодарность для Владимир_К и Слава_UR5FKI: установка конденсаторов между входами строба и землёй решила проблему в один миг!

vvl
17.03.2010, 20:35
Дорогие друзья, позвольте мне, пользуясь возможностью, попросить вас помочь мне в решении еще одного вопроса.

Итак, имеется следующая схема управления маломощным источником света, реализующая возможность его принудительного отключения и включения:

http://img213.imageshack.us/img213/4191/schemem.th.jpg (http://img213.imageshack.us/i/schemem.jpg/)

В этой схеме транзисторы управляются микроконтроллером. Я опускаю ограничивающие ток резисторы.

Необходимо обеспечить одну из следующих возможностей:

1. Проверки, горит ли лампочка. В том смысле, протекает ли через неё ток, не перегорела ли она.
2. Проверки, включена ли лампочка, то есть замкнут ли тумблер?

Фактически вопрос состоит в том, откуда в схеме было бы правильно сделать отвод на линию входного порта микроконтроллера, чтобы получать на нём "единицу" или "ноль" в зависимости от выполнения/не выполнения одного из описанных выше условий? При этом желательно вносить в изображённую часть схемы минимальные изменения (лучше вообще никаких).

Буду очень признателен за ваши идеи.

P. S. Извините за гигантскую схему :)

18.03.2010, 17:10
Дорогие друзья, позвольте мне, пользуясь возможностью, попросить вас помочь мне в решении еще одного вопроса.В разрыв провода около лампочки включаете обмотку самодельного герконового реле. Стандарного наверное такого нет в природе. Падение напряжения на обмотке должно быть поменьше, скажем 0,5 вольта, может и меньше. Дело в общем не в напряжении. Мотаете на герконе пробную обмотку, измеряете ток, при котором геркон сработает, определяете u=I*W, т.е. ток на количество витков. Зная ток через лампу, определяете нужное число витков W=u/Iл. Чем больше диаметр провода, тем меньше будет падение напряжения на обмотке.
Включаем первый транзистор. Сигнал есть. Лампа исправна, тумблер включен. Нет сигнала, включаем второй транзистор. Есть сигнал. Лампа исправна, тумблер выключен. Нет сигнала, проверяем лампу (не мешает проверить заодно и геркон :D .)
Еще вариант. Рядом с лампой устанавливаете фототранзистор, фотодиод, если конечно есть возможность защитить его от внешнего освещения. Менее надежно, таракан залезет погреться перекроет поток света...

vvl
19.03.2010, 22:10
Включаем первый транзистор. Сигнал есть. Лампа исправна, тумблер включен. Нет сигнала, включаем второй транзистор. Есть сигнал. Лампа исправна, тумблер выключен. Нет сигнала, проверяем лампу (не мешает проверить заодно и геркон :D

Уфф... А я надеялся, что обойдётся без реле... :(


Еще вариант. Рядом с лампой устанавливаете фототранзистор, фотодиод, если конечно есть возможность защитить его от внешнего освещения. Менее надежно, таракан залезет погреться перекроет поток света...

:) Была мысль! Только я шутил про ма-а-аленькую веб-камерку наблюдения (так как устройство вообще подключается к ПК).