реклама на сайте
подробности

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> 74HC4094 в качестве расширителя порта, Кто-нибудь пробовал?
alux
сообщение Jun 7 2007, 18:03
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Привет. Необходимо сделать динамическое включение катодов 7-сегментного индикатора. Выводов контроллера как всегда не хватает. В качестве расширителя порта решил поставить преобразователь последовательной шины в параллельную 74HC4094. Т.е. по сути мне необходимо периодически (10мсек) на выходе 4094 сдвигать "1" для включения соответсвующего индикатора. Или другими словами последовательно загружать числа 1,2,4,8,16,32 и так по кругу. Вывод OE всегда притянут к питанию. Важно не допустить одновременного включения нескольких катодов. Правильно ли я делаю :

1) SI=1, CLK=1, SI=0, CLK=0 . Повторить n раз (n =1,2,4,8,16,32)
2) STROB=1;
3) STROB=0;

Сильно греется КРЕН. Померял ток потребления схемы - около 130 мА. Схема - это микроконтроллер (Мега48) с двумя светодиодными индикаторами, управляемые динамически. Видимо, проблема связана с неправильным формированием сигналов на 74HC4094.

Прикладываю даташит. Кстати, у разных производителей по-разному осуществляется загрузка данных: либо по наростающему фронту на CLK, либо по спадающему... Странно.

Сообщение отредактировал alux - Jun 7 2007, 18:19
Прикрепленные файлы
Прикрепленный файл  74HC4094N_PHLPS.pdf ( 72.54 килобайт ) Кол-во скачиваний: 94
 
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 7 2007, 19:34
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Народ обычно использует 74HC595 и TPIC6C595. При наличии контроллера нолик там гонять по кругу или единичку совершенно без разницы. Только следут учитывать, что у TPIC6C595 открытые стоки на выходах.
P.S. они обе замечательно каскадируются.
Go to the top of the page
 
+Quote Post
AVL
сообщение Jun 7 2007, 20:09
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020



Микросхема 74HC4094 для Вашей задачи подходит не лучшим образом. Для этой задачи нужен счетчик с дешифратором (одна микросхема). Вам будет достаточно управлять 2-мя входами этой микросхемы: счетный вход и вход сброса, при этом активность единственного выхода в каждый момент времени гарантирована независимо от логики работы программы мк.

Если же микросхема 74HC4094:
Цитата(alux @ Jun 7 2007, 22:03) *
1) SI=1, CLK=1, SI=0, CLK=0 . Повторить n раз (n =1,2,4,8,16,32)
2) STROB=1;
3) STROB=0;

Из Ваших слов не понятно, что вы повторяете и как, и похоже, что все равно не правильно.
Должно быть так (если по кругу).

CLK=0, STR=0
1) SI=0
2) {CLK=1, CLK=0} повторить 7 раз
3) SI=1, CLK=1, CLK=0
4) STR=1, STR=0 => станет активным выход QP0
5) SI=0, CLK=1, CLK=0
6) STR=1, STR=0 => станет активным выход QP1
7) SI=0, CLK=1, CLK=0
8) STR=1, STR=0 => станет активным выход QP2
9) SI=0, CLK=1, CLK=0
10) STR=1, STR=0 => станет активным выход QP3
11) SI=0, CLK=1, CLK=0
12) STR=1, STR=0 => станет активным выход QP4
13) SI=0, CLK=1, CLK=0
14) STR=1, STR=0 => станет активным выход QP5
15) SI=0
16) {CLK=1, CLK=0} повторить 2 раза
17) переход на п.3

Цитата(alux @ Jun 7 2007, 22:03) *
Сильно греется КРЕН. Померял ток потребления схемы - около 130 мА. Схема - это микроконтроллер (Мега48) с двумя светодиодными индикаторами, управляемые динамически. Видимо, проблема связана с неправильным формированием сигналов на 74HC4094.

Неплохо бы схему принципиальную тоже приложить.
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 7 2007, 20:43
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(rezident @ Jun 7 2007, 22:34) *
Народ обычно использует 74HC595, TPIC6C595.

Вопрос был о 74HC4094. Просто она уже запаяна в схему. А менять на что-либо другое буду только если не будет других вариантов. Так в чем же проблема?

Цитата(AVL @ Jun 7 2007, 23:09) *
Неплохо бы схему принципиальную тоже приложить.

Прикладываю схему. Спасибо за ответ. Сейчас попробую. Временно программно отключил индикацию , но 7805 все равно греется (палец не удержать), хотя ток составляет 35мА ?! В холостом режиме (когда от откренки все отсоединено), не греется. Странно однако %-()

Сообщение отредактировал alux - Jun 7 2007, 20:47
Прикрепленные файлы
Прикрепленный файл  Schema.pdf ( 29.79 килобайт ) Кол-во скачиваний: 193
 
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 7 2007, 21:14
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Похожую схему только без аналоговых входов (индикация:две строки по четыре 7-сегментных индикатора+4 отдельных светодиода, вдобавок 9-и кнопочная клавиатура+RS485) с год назад делал. Применил как раз 74HC595 - 3 шт., т.к. на каждую строку нужна была своя динамическая индикация (по одному регистру), а третий регистр для управления совмещенными анодами индикаторов строк и 4-мя светодиодами. Индикация у МК всего три вывода отняла. Для вашего же случая TPIC6C595 сам бог велел - от 8 транзисторов по пути избавитесь. smile.gif
Насчет большого потребления.
У меня вызывает сомнение цепь питания AVCC. ИМХО там по схеме не хватает тантала или электролита после дросселя впараллель керамике 0,1мкФ. Такой Г-образный фильтр в виде дросселя с керамикой нехило "звенеть" может.
Кроме того в базах транзисторов, которые управляют обмотками реле, вы забыли резисторы Б-Э. КТ3102 ведь не "цифровые" транзисторы. В транзисторы управление катодами индикаторов почему-то поставили, а тут нет.
Кстати, а что питается по цепи 3,3В? Или для чего там 78L33 стоит? 7805, которая якобы сильно греется, вообще не показана. Возле нее, непосредственно возле выводов OUT и GND, конденсатор номиналом не менее 1мкФ стоит? Если нет, то она опять же возбуждаться может, а саморазогрев при этом у нее не слабый!
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 7 2007, 21:22
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(AVL @ Jun 7 2007, 23:09) *
Должно быть так (если по кругу).

CLK=0, STR=0
1) SI=0
2) {CLK=1, CLK=0} повторить 7 раз
3) SI=1, CLK=1, CLK=0
4) STR=1, STR=0 => станет активным выход QP0
5) SI=0, CLK=1, CLK=0
6) STR=1, STR=0 => станет активным выход QP1
7) SI=0, CLK=1, CLK=0
8) STR=1, STR=0 => станет активным выход QP2
9) SI=0, CLK=1, CLK=0
10) STR=1, STR=0 => станет активным выход QP3
11) SI=0, CLK=1, CLK=0
12) STR=1, STR=0 => станет активным выход QP4
13) SI=0, CLK=1, CLK=0
14) STR=1, STR=0 => станет активным выход QP5
15) SI=0
16) {CLK=1, CLK=0} повторить 2 раза
17) переход на п.3


Не понял с п.17. Чтобы включить следующее знакоместо (QP1="1", все остальные="0"), при следующем вызове начинать с п.3 ?
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 7 2007, 21:29
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Может совет несколько неуместный, но зачем вам заниматься учетом сдвигов в самом регистре? У вас же МК для управления имеется. Сдвигайте и XOR-те байт как хотите программно в самом МК, а в регистр записывайте этот байт каждый раз целиком. Все будет детерменировано и никакого геморроя - всего один цикл записи 8-ми бит (установить бит данных, сформировать сдвиговый импульс - и так 8 раз) плюс формирование строба записи по окончании цикла.
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 8 2007, 07:01
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(rezident @ Jun 8 2007, 00:29) *
Сдвигайте и XOR-те байт как хотите программно в самом МК, а в регистр записывайте этот байт каждый раз целиком. Все будет детерменировано и никакого геморроя - всего один цикл записи 8-ми бит (установить бит данных, сформировать сдвиговый импульс - и так 8 раз) плюс формирование строба записи по окончании цикла.

Я так и делал. Только загружаемые значения беру из таблицы:

__interrupt void TC0_COMPA_ISR(void)
{..........
digit(++znak);
...........
}
/////////////////////////
void digit(unsigned char number)
{
unsigned char table[]={0,1,2,4,8,16,32};

for(unsigned char i=0; i < *(table+number); i++)
{
PORTC |= (1<<SI);
PORTC |= (1<<CLK);
PORTC &= ~(1<<SI);
PORTC &= ~(1<<CLK); //загрузить число n=0,1,2,4,8,16,32 раз
}
PORTD |= (1<<STR);
PORTD &= ~(1<<STR); //строб
}

Для выключения индикаторов (для гашения незначащих разрядов) вызвать digit(0);
Я хочу, чтобы было так:
1)Строб=0. Приэтом на выходе без изменений остается предыдущее значение.
2) загрузить в storage register (74HC4094) число (0,1,2,4,8,16,32).
3)сформировать строб. При этом на выход поступает значение из storage register.

Можно ли так сделать на этой микросхеме?

Цитата(rezident @ Jun 8 2007, 00:14) *
У меня вызывает сомнение цепь питания AVCC. ИМХО там по схеме не хватает тантала или электролита после дросселя впараллель керамике 0,1мкФ. Такой Г-образный фильтр в виде дросселя с керамикой нехило "звенеть" может.
Кроме того в базах транзисторов, которые управляют обмотками реле, вы забыли резисторы Б-Э. КТ3102 ведь не "цифровые" транзисторы. В транзисторы управление катодами индикаторов почему-то поставили, а тут нет.
Кстати, а что питается по цепи 3,3В? Или для чего там 78L33 стоит? 7805, которая якобы сильно греется, вообще не показана. Возле нее, непосредственно возле выводов OUT и GND, конденсатор номиналом не менее 1мкФ стоит? Если нет, то она опять же возбуждаться может, а саморазогрев при этом у нее не слабый!


Это часть схемы. Прошу прощения, на рисунке есть несоответствия. На плате параллельно керамике 0.1мкФ по питанию AVCC стоит танталовый 10мкФ. И в базовых цепях забыл указать(на плате стоят) резисторы 100кОм. А 7805 - на другом листе. Спаяна по стандартной схеме: ~9В->диодный мост->4700мкФ->7805->100мкФ. На входе и на выходе непосредственно на выводах 7805 подключены керамические 0.1мкФ. +3.3В нужны для других целей.
Go to the top of the page
 
+Quote Post
AVL
сообщение Jun 8 2007, 07:35
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020



Цитата(alux @ Jun 8 2007, 01:22) *
Не понял с п.17. Чтобы включить следующее знакоместо (QP1="1", все остальные="0"), при следующем вызове начинать с п.3 ?

Вы же по кругу хотите. Соответственно после активации QP5 должен быть активирован QP0. Следовательно из п.17 нужно перейти на пункт 3.

Цитата(alux @ Jun 8 2007, 00:43) *
... но 7805 все равно греется (палец не удержать), хотя ток составляет 35мА ?! В холостом режиме (когда от откренки все отсоединено), не греется. Странно однако %-()

Значит на вашей 7805 рассеивается большая мощность. Какое напряжение Вы подаете на вход 7805? Такое ощущение, что входное напряжение велико и вся разность падает на 7805, поэтому и греется и не важно, что ток всего 35мА. К примеру, если Вы подаете на вход 7805 15В, на выходе 7805 5В, то все 10В при токе 35мА, падающие на 7805, превращаются в тепло.

Цитата(rezident @ Jun 8 2007, 01:29) *
Может совет несколько неуместный, но зачем вам заниматься учетом сдвигов в самом регистре? У вас же МК для управления имеется. Сдвигайте и XOR-те байт как хотите программно в самом МК, а в регистр записывайте этот байт каждый раз целиком. Все будет детерменировано и никакого геморроя - всего один цикл записи 8-ми бит (установить бит данных, сформировать сдвиговый импульс - и так 8 раз) плюс формирование строба записи по окончании цикла.

В данном случае он в примерно в 8 раз теряет в производительности.

Цитата(alux @ Jun 8 2007, 11:01) *
for(unsigned char i=0; i < *(table+number); i++)
{
PORTC |= (1<<SI);
PORTC |= (1<<CLK);
PORTC &= ~(1<<SI);
PORTC &= ~(1<<CLK); //загрузить число n=0,1,2,4,8,16,32 раз
}
PORTD |= (1<<STR);
PORTD &= ~(1<<STR); //строб
}

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

Смотрите мой алгоритм. Его можно упростить (как описал rezident), но при этом потеряете в производительности. Если вопрос производительности не стоит, то, конечно, можно загружать каждый раз весь регистр. Но для данной задачи выглядит это криво.

Сообщение отредактировал AVL - Jun 8 2007, 07:39
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 8 2007, 08:18
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(AVL @ Jun 8 2007, 10:35) *
Значит на вашей 7805 рассеивается большая мощность. Какое напряжение Вы подаете на вход 7805? Такое ощущение, что входное напряжение велико и вся разность падает на 7805, поэтому и греется и не важно, что ток всего 35мА.

Трансформатор на выходе под нагрузкой дает 10,5В. На входной емкости 4700мкФ еще на пару вольт накидывается. По справочнику допустимое входное напряжение 7805 от 7 до 35В. Вы хотите сказать, что причина перегрева в том, что на входе стабилизатора напряжение 12В?

Цитата(AVL @ Jun 8 2007, 10:35) *
Если вопрос производительности не стоит, то, конечно, можно загружать каждый раз весь регистр.

Да, мне так удобней. Кроме индикации мне необходимо по событию на выходы Q6, Q7 подать управляющие сигналы. Т.е. вызывать функцию digit(znak), в качестве аргумента является загружаемое значение (0,1,2,4,8,16,32 или др). Если я правильно понял, надо делать так? :

void digit(unsigned char number)
{
for (unsigned char i = 0; i < 8; i++)
{
if ((number & 1)) SI = 1;
else SI = 0;
CLK = 1;
CLK = 0;
number = number >> 1;
};
STR = 1;
STR = 0;
}
Мне сейчас необходимо определится: можно ли добится желаемого результата с этой микросхемой или покупать и менять на 74HC595?

Сообщение отредактировал alux - Jun 8 2007, 08:30
Go to the top of the page
 
+Quote Post
AVL
сообщение Jun 8 2007, 08:42
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020



Цитата(alux @ Jun 8 2007, 12:18) *
По справочнику допустимое входное напряжение 7805 от 7 до 35В. Вы хотите сказать, что причина перегрева в том, что на входе стабилизатора напряжение 12В?

Возможно из-за этого. Радиатор стоит какой-нибудь для отвода тепла? И дополнительно рекомендую снизить входное напряжение до 8-9 Вольт (при больших токах потребления этот момент уже существенен).

Цитата(alux @ Jun 8 2007, 12:18) *
Да, мне так удобней. Кроме индикации мне необходимо по событию на выходы Q6, Q7 подать управляющие сигналы. Т.е. вызывать функцию digit(znak), в качестве аргумента является загружаемое значение (0,1,2,4,8,16,32 или др). Если я правильно понял, надо делать так? :

void digit(unsigned char number)
{
for (unsigned char i = 0; i < 8; i++)
{
if ((number & 1)) SI = 1;
else SI = 0;
CLK = 1;
CLK = 0;
number = number >> 1;
};
STR = 1;
STR = 0;
}

Да, Вы правильно поняли.

Цитата(alux @ Jun 8 2007, 12:18) *
Мне сейчас необходимо определится: можно ли добится желаемого результата с этой микросхемой или покупать и менять на 74HC595?

конечно можно. Единственное в микросхеме 74HC4094 нет входа сброса. Чревато это тем, что пока Вы не загрузите в регистр корректное значение (все 8 бит), на выходе 74HC4094 при включении питания будет мусор, что приведет к активации нескольких индикаторов сразу. Возможно для Вас это не критично (но Вы указывали, что нельзя, чтобы активизировалось больше, чем один выход).

Сообщение отредактировал AVL - Jun 8 2007, 08:46
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 8 2007, 09:06
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(AVL @ Jun 8 2007, 11:42) *
Возможно из-за этого. Радиатор стоит какой-нибудь для отвода тепла? И дополнительно рекомендую снизить входное напряжение до 8-9 Вольт (при больших токах потребления этот момент уже существенен).

Радиатора нет. По идее 7805 (TO-220) может работать без радиатора до 0,5А.

Цитата(AVL @ Jun 8 2007, 11:42) *
Единственное в микросхеме 74HC4094 нет входа сброса. Чревато это тем, что пока Вы не загрузите в регистр корректное значение (все 8 бит), на выходе 74HC4094 при включении питания будет мусор, что приведет к активации нескольких индикаторов сразу.

Если эта проблема проявляется только при включении питания, то это не проблема. Только я не до конца уяснил один момент. Во время загрузки значения при OE=1 каждый входной бит будет сразу отображаться на выходе до сигнала строб?

Кстати, какая нагрузочная способность 74hc4094? В моем даташите(Philips)указаны только временные характеристики. Судя из аналогичного других фирм, указан параметр DC Output Source Sink Current Per Output Pin +/-25mA, DC VCC or Ground Current +/-50mA. Т.е. в статике можно включать одновременно не более 5 нагрузок током 10мА?

Сообщение отредактировал alux - Jun 8 2007, 09:14
Go to the top of the page
 
+Quote Post
AVL
сообщение Jun 8 2007, 10:38
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020



Цитата(alux @ Jun 8 2007, 13:06) *
Радиатора нет. По идее 7805 (TO-220) может работать без радиатора до 0,5А.

Я же говорю Вам, проблема не в макс.нагр.токе и не в макс.вх.напряжении, с которыми может работать 7805. Проблема в рассеиваемой мощности. Если Вы подадите на вход 7805 35В и при этом ток в цепи будет 0.5А, то стабилизатор сгорит ярким пламенем smile.gif Вам нужно посмотреть, на какую макс.рассеиваемую мощность расчитан этот стабилизатор без применения радиатора и на какую он расчитан с применением радиатора. И сделать выводы после этого ставить или нет радиатор и какой он должен быть конфигурации.

Цитата(alux @ Jun 8 2007, 13:06) *
Если эта проблема проявляется только при включении питания, то это не проблема. Только я не до конца уяснил один момент. Во время загрузки значения при OE=1 каждый входной бит будет сразу отображаться на выходе до сигнала строб?

обновление информации (которую Вы задвинули во входной регистр) на выходе микросхемы произойдет только после установки STR=1.

Цитата(alux @ Jun 8 2007, 13:06) *
Кстати, какая нагрузочная способность 74hc4094? В моем даташите(Philips)указаны только временные характеристики.

У меня Ваш даташит smile.gif
на первой странице даташита написано:
For a complete data sheet, please also download:
· The IC06 74HC/HCT/HCU/HCMOS Logic Family Specifications
· The IC06 74HC/HCT/HCU/HCMOS Logic Package Information
· The IC06 74HC/HCT/HCU/HCMOS Logic Package Outlines

Цитата(alux @ Jun 8 2007, 13:06) *
Судя из аналогичного других фирм, указан параметр DC Output Source Sink Current Per Output Pin +/-25mA, DC VCC or Ground Current +/-50mA. Т.е. в статике можно включать одновременно не более 5 нагрузок током 10мА?

да, если эти параметры указаны как макс.допустимые величины. Еще нужно проверять, чтобы не была превышена макс.рассеиваемая мощность.
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 8 2007, 13:07
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Все, заработало! Вот окончательный код:

void digit(unsigned char number)
{
unsigned char table[]={0,1,2,4,8,16,32};

for (unsigned char i = 0; i < 8; i++)
{
if ((*(table+number) & 128)) PORTC |= (1<<SI);
else PORTC &= ~(1<<SI);
PORTC |= (1<<CLK);
PORTC &= ~(1<<CLK);
*(table+number) = *(table+number) << 1;
}
PORTD |= (1<<STR);
PORTD &= ~(1<<STR);
}

number соответствует номеру знакоместа. Если включить одно знакоместо постоянно и засветить все сегменты ("8"), ток потребления составляет 104мА. 7805 греется :-/ Хотя по з-ну Ома: I=U/R = 5/220=23мА. Для 7 сегментов 23*7=161мА. Откуда такая разница?

Кстати, если кому интересно, нашел одну ссылку на подобную тему:
http://homepages.which.net/~paul.hills/Sof...ftRegister.html

Сообщение отредактировал alux - Jun 8 2007, 13:12
Go to the top of the page
 
+Quote Post
AVL
сообщение Jun 8 2007, 13:28
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020



Цитата(alux @ Jun 8 2007, 17:07) *
Если включить одно знакоместо постоянно и засветить все сегменты ("8"), ток потребления составляет 104мА. 7805 греется :-/ Хотя по з-ну Ома: I=U/R = 5/220=23мА. Для 7 сегментов 23*7=161мА. Откуда такая разница?

Откуда Вы это берете? на резисторах R25...R32 не по 5В же падает, а намного меньше.
Go to the top of the page
 
+Quote Post

4 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th June 2025 - 05:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01472 секунд с 7
ELECTRONIX ©2004-2016