Привет всем, форумчане!
Сразу скажу, вопроса в моём посте нет, возникшая проблема решена, просто хотелось поделиться интересным (на мой взгляд) опытом использования сдвиговых регистров 74HC595. Может кому пригодится эта информация, не даст уверовать в мистику...
Делаю сейчас простейший таймер на PIC16F684. К контроллеру подключен регистр 74HC595, на выходы которого подключены светодиоды с достаточно высокоомными (1 кОм) резисторами (такая величина выбрана для уменьшения потребляемого тока; питание схемы - один литиевый элемент). Питание на регистр подаётся через ключ на р-канальном ПТ, управляемый с контроллера - это сделано для уменьшения потребляемого тока, когда система находится в SLEEP-режиме (ибо регистр, как заявлено в даташите, в статическом режиме потребляет 80 мкА).
И вот с чем я столкнулся. Ну, во-первых, конструкция собрана в SMD исполнении, контроллер и регистр - в корпусах SOIC-16. Маркировка регистра - "74HC595", обозначения ключа - нет. Есть у меня ещё регистры в DIP-корпусах, маркировка - "74HC595N". Так вот с DIP-овскими регистрами проблем не возникало, управлялись они согласно даташиту. А SMD-шными возникли "мистические" странности.
Во-первых, активный уровень импульса защёлки у этих регистров - лог. 0; в остальное время на выводе защёлкивания должна быть лог. 1, иначе на выходе ничего не будет (светодиоды не горят). С этим я быстро разобрался; впрочем, в Инете в примерах работы с этим регистром описаны варианты как с "единичным" защёлкиванием, так и с "нулевым".
А вот во-вторых... Снимаю питание с регистра - а светодиоды продолжают себе перемигиваться (соорудил в программе "бегущий огонь" для проверки)... Думаю - быть может, неаккуратно запаял ключевой (подающий питание на регистр) ПТ, пробил статикой, мало ли. Сдул ПТ, включаю - светодиоды точно так же перемигиваются, хотя цепь питания регистра разорвана... Мистика? Ошибка из-за невнимательности исключена, разводка делалась в DipTrace, да и проверялась ещё дополнительно "вручную".
А оказалось, что питание регистр получал от контроллера по линии защёлкивания (как я уже писал, для данного регистра она должна быть всегда в 1, и только на момент защёлкивания данных её нужно переводить кратковременно в 0). Понятно, что на мощной нагрузке (например, горят несколько светодиодов с током 20 мА) эффект мог и не проявиться, но с маломощной (ток порядка 1,5 - 2 мА на светодиод) эта "мистика" хорошо заметна. Через некоторое время до меня дошло, почему так происходит: в структуре ИМС есть защитные диоды на входах, и при снятом с регистра питании напряжение с любого входа поступает (через "верхний" защитный диод) на цепи питания ИМС.
В общем, по всем трём "информационным" линиям (данные, строб данных, защёлка) я установил резисторы на 10 кОм. На функционал это никак не повлияло (тактовая 4 МГц, проблем с "затягиванием" фронтов нет), однако описанный эффект "паразитного" питания исчез (понятно, что токи текут всё равно, но они уже недостаточны для зажигания светодиодов; ключ питания теперь работает корректно). А в SLEEP-режиме контроллер будет уводить все три линии связи с регистром в 0, устраняя таким образом нежелательные выходные токи.
Сразу скажу, вопроса в моём посте нет, возникшая проблема решена, просто хотелось поделиться интересным (на мой взгляд) опытом использования сдвиговых регистров 74HC595. Может кому пригодится эта информация, не даст уверовать в мистику...
Делаю сейчас простейший таймер на PIC16F684. К контроллеру подключен регистр 74HC595, на выходы которого подключены светодиоды с достаточно высокоомными (1 кОм) резисторами (такая величина выбрана для уменьшения потребляемого тока; питание схемы - один литиевый элемент). Питание на регистр подаётся через ключ на р-канальном ПТ, управляемый с контроллера - это сделано для уменьшения потребляемого тока, когда система находится в SLEEP-режиме (ибо регистр, как заявлено в даташите, в статическом режиме потребляет 80 мкА).
И вот с чем я столкнулся. Ну, во-первых, конструкция собрана в SMD исполнении, контроллер и регистр - в корпусах SOIC-16. Маркировка регистра - "74HC595", обозначения ключа - нет. Есть у меня ещё регистры в DIP-корпусах, маркировка - "74HC595N". Так вот с DIP-овскими регистрами проблем не возникало, управлялись они согласно даташиту. А SMD-шными возникли "мистические" странности.
Во-первых, активный уровень импульса защёлки у этих регистров - лог. 0; в остальное время на выводе защёлкивания должна быть лог. 1, иначе на выходе ничего не будет (светодиоды не горят). С этим я быстро разобрался; впрочем, в Инете в примерах работы с этим регистром описаны варианты как с "единичным" защёлкиванием, так и с "нулевым".
А вот во-вторых... Снимаю питание с регистра - а светодиоды продолжают себе перемигиваться (соорудил в программе "бегущий огонь" для проверки)... Думаю - быть может, неаккуратно запаял ключевой (подающий питание на регистр) ПТ, пробил статикой, мало ли. Сдул ПТ, включаю - светодиоды точно так же перемигиваются, хотя цепь питания регистра разорвана... Мистика? Ошибка из-за невнимательности исключена, разводка делалась в DipTrace, да и проверялась ещё дополнительно "вручную".
А оказалось, что питание регистр получал от контроллера по линии защёлкивания (как я уже писал, для данного регистра она должна быть всегда в 1, и только на момент защёлкивания данных её нужно переводить кратковременно в 0). Понятно, что на мощной нагрузке (например, горят несколько светодиодов с током 20 мА) эффект мог и не проявиться, но с маломощной (ток порядка 1,5 - 2 мА на светодиод) эта "мистика" хорошо заметна. Через некоторое время до меня дошло, почему так происходит: в структуре ИМС есть защитные диоды на входах, и при снятом с регистра питании напряжение с любого входа поступает (через "верхний" защитный диод) на цепи питания ИМС.
В общем, по всем трём "информационным" линиям (данные, строб данных, защёлка) я установил резисторы на 10 кОм. На функционал это никак не повлияло (тактовая 4 МГц, проблем с "затягиванием" фронтов нет), однако описанный эффект "паразитного" питания исчез (понятно, что токи текут всё равно, но они уже недостаточны для зажигания светодиодов; ключ питания теперь работает корректно). А в SLEEP-режиме контроллер будет уводить все три линии связи с регистром в 0, устраняя таким образом нежелательные выходные токи.
