|
74HC4094 в качестве расширителя порта, Кто-нибудь пробовал? |
|
|
|
Jun 7 2007, 18:03
|
Знающий
   
Группа: Свой
Сообщений: 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
|
|
|
|
|
 |
Ответов
|
Jun 7 2007, 20:09
|
Местный
  
Группа: Свой
Сообщений: 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. Неплохо бы схему принципиальную тоже приложить.
|
|
|
|
|
Jun 7 2007, 21:22
|
Знающий
   
Группа: Свой
Сообщений: 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 ?
|
|
|
|
|
Jun 8 2007, 07:35
|
Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jun 8 2007, 08:18
|
Знающий
   
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jun 9 2007, 11:20
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(alux @ Jun 8 2007, 14:18)  Трансформатор на выходе под нагрузкой дает 10,5В. На входной емкости 4700мкФ еще на пару вольт накидывается. По справочнику допустимое входное напряжение 7805 от 7 до 35В. Вы хотите сказать, что причина перегрева в том, что на входе стабилизатора напряжение 12В? Цитата(alux) number соответствует номеру знакоместа. Если включить одно знакоместо постоянно и засветить все сегменты ("8"), ток потребления составляет 104мА. 7805 греется :-/ Хотя по з-ну Ома: I=U/R = 5/220=23мА. Для 7 сегментов 23*7=161мА. Откуда такая разница? Допустимая рассеиваемая без радиатора мощность рассчитывается довольно просто. Достаточно пары страниц из datasheet L7805CV. Тепловое сопротивление корпуса TO-220 составляет 55 С/Вт. Максимальная рабочая температура кристалла L7805CV - 150 C. Следовательно при температуре окружающей среды 25С максимально допустимая рассеиваемая температура (150С-25С)/55С/Вт=2,27Вт. Считаем далее. Собственный ток потребления L7805 при 25С - 6мА (+0,5мА при изменении нагрузки до 1А.) При входном напряжении 12В и токе нагрузки 35 мА на м/с будет рассеиваться примерно (12В-5В)*(0,006А+0,035А)=0,29Вт. Что даст перегрев 0,29Вт*55С/Вт=15,95С. При температуре окружающей среды 25С температура м/с составит примерно 25C+15.95C= 41С, еще не горячо, но уже ощутимо  Если 35мА ток потребления устройства при погашенном индикаторе, то при всех засвеченных сегментах всех знакомест ток потребления будет около (5В-1,3В)/220Ом*7+0,035А=118мА. Тогда температура самого стабилизатора L7805 при температуре окр. воздуха 25С будет около (12В-5В)*(0,006А+0,118А)*55С/Вт+25С= 73С - уже можно обжечься!
|
|
|
|
Сообщений в этой теме
alux 74HC4094 в качестве расширителя порта Jun 7 2007, 18:03 rezident Народ обычно использует 74HC595 и TPIC6C595. При н... Jun 7 2007, 19:34 alux Цитата(rezident @ Jun 7 2007, 22:34) Наро... Jun 7 2007, 20:43    AVL Цитата(alux @ Jun 8 2007, 12:18) По справ... Jun 8 2007, 08:42     alux Цитата(AVL @ Jun 8 2007, 11:42) Возможно ... Jun 8 2007, 09:06      AVL Цитата(alux @ Jun 8 2007, 13:06) Радиатор... Jun 8 2007, 10:38 rezident Похожую схему только без аналоговых входов (индика... Jun 7 2007, 21:14 rezident Может совет несколько неуместный, но зачем вам зан... Jun 7 2007, 21:29 alux Цитата(rezident @ Jun 8 2007, 00:29) Сдви... Jun 8 2007, 07:01 alux Все, заработало! Вот окончательный код:
void ... Jun 8 2007, 13:07 AVL Цитата(alux @ Jun 8 2007, 17:07) Если вкл... Jun 8 2007, 13:28  alux Цитата(AVL @ Jun 8 2007, 16:28) Откуда Вы... Jun 8 2007, 14:02 almay ЦитатаЕсли включить одно знакоместо постоянно и за... Jun 8 2007, 13:30 alux Прошу прощения, но есть еще одна проблема с индика... Jun 9 2007, 00:03 AVL Цитата(alux @ Jun 9 2007, 04:03) А вот в ... Jun 9 2007, 07:06  alux Цитата(AVL @ Jun 9 2007, 10:06) Как часто... Jun 9 2007, 08:14   AVL Цитата(alux @ Jun 9 2007, 12:14) 10 мсек
... Jun 9 2007, 09:22    alux Цитата(AVL @ Jun 9 2007, 12:22) тогда вес... Jun 9 2007, 09:58     AVL Цитата(alux @ Jun 9 2007, 13:58) Приклады... Jun 9 2007, 10:48      alux Цитата(AVL @ Jun 9 2007, 13:48) Во первых... Jun 9 2007, 12:05       rezident Цитата(alux @ Jun 9 2007, 18:05) 1) поста... Jun 9 2007, 12:37        alux to rezident.
Я хочу вернуться к вопросу чрезмерно... Jun 14 2007, 07:28         AVL Цитата(alux @ Jun 14 2007, 11:28) to rezi... Jun 14 2007, 08:32         Сергей Борщ Цитата(alux @ Jun 14 2007, 10:28) Я хочу ... Jun 14 2007, 09:23         rezident Цитата(alux @ Jun 14 2007, 13:28) to rezi... Jun 14 2007, 12:01          alux Цитата(rezident @ Jun 14 2007, 15:01) Тол... Jun 14 2007, 16:58           Сергей Борщ Цитата(alux @ Jun 14 2007, 19:58) 7805 пи... Jun 14 2007, 19:26            alux Цитата(Сергей Борщ @ Jun 14 2007, 22:26) ... Jun 15 2007, 06:36       AVL Цитата(alux @ Jun 9 2007, 16:05) А зачем?... Jun 9 2007, 12:38        alux Цитата(AVL @ Jun 9 2007, 15:38) А причем ... Jun 9 2007, 13:16         AVL Цитата(alux @ Jun 9 2007, 17:16) Цитата и... Jun 9 2007, 13:33          rezident Цитата(AVL @ Jun 9 2007, 19:33) P.S. Напр... Jun 9 2007, 13:43           AVL Цитата(rezident @ Jun 9 2007, 17:43) Насч... Jun 9 2007, 14:44           alux Цитата(rezident @ Jun 9 2007, 16:43) Вот ... Jun 11 2007, 04:23       alux Цитата(alux @ Jun 9 2007, 15:05) А вот ту... Jun 9 2007, 13:02        AVL Цитата(alux @ Jun 9 2007, 17:02) Прошу пр... Jun 9 2007, 13:12         alux Цитата(AVL @ Jun 9 2007, 16:12) Предделит... Jun 9 2007, 14:22        AVL Цитата(alux @ Jun 9 2007, 17:02) И еще од... Jun 9 2007, 19:04         alux Цитата(AVL @ Jun 9 2007, 22:04) Для того,... Jun 9 2007, 19:17          AVL Цитата(alux @ Jun 9 2007, 23:17) Одно уто... Jun 9 2007, 19:29 rezident Цитата(alux)2)опорное напряжение (+2.5В) на TL431 ... Jun 9 2007, 15:11 alux Цитата(rezident @ Jun 9 2007, 18:11) Выво... Jun 9 2007, 15:58  rezident Цитата(alux @ Jun 9 2007, 21:58) А на сче... Jun 9 2007, 16:25   alux Цитата(rezident @ Jun 9 2007, 19:25) А во... Jun 9 2007, 18:26    rezident Цитата(alux @ Jun 10 2007, 00:26) Просто ... Jun 9 2007, 19:10     alux Цитата(rezident @ Jun 9 2007, 22:10) Каки... Jun 9 2007, 19:48      rezident Цитата(alux @ Jun 10 2007, 01:48) Неужели... Jun 9 2007, 21:18       alux Цитата(rezident @ Jun 10 2007, 00:18) А д... Jun 9 2007, 22:02 rezident ratiometric, это просто делитель напряжения питани... Jun 9 2007, 22:39 rezident Несмотря на то, что в вашем примере переменная Fla... Jun 11 2007, 17:56
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|