|
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 9 2007, 00:03
|
Знающий
   
Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447

|
Прошу прощения, но есть еще одна проблема с индикацией. В статике все работает замечательно. Делаю так: display(1); digit(1); delay_ms(2000);
display(2); digit(2); delay_ms(2000);
display(1); digit(1); delay_ms(2000); и на индикаторе поочередно зажигаются 1,2,3 слева-на-право. А вот в динамике есть накладка. Вот кусок кода:
__flash unsigned char code7[]= {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
#pragma vector=TIMER0_COMPA_vect __interrupt void TC0_COMPA_ISR(void) { switch(znak) { case 0: hundred=1; ten=2; one=3;
display(hundred); digit(++znak); break;
case 1: display(ten); digit(++znak); break;
case 2: display(one); digit(++znak); znak=0; break; } ................... }
//////////////////////////////////////// /******************************************************** // Вывод значения на индикатор с преобразованием в 7-сегментный код void display(unsigned char num) { unsigned char temp;
num=*(code7+num);
temp = num; PORTB=(temp&0x3f);
temp = PORTD; temp &= 0x3f; num &= 0xc0; PORTD = (temp|num); }
//***************************************************************** //Включение знакоместа формированием "1" на выходе (74HC4094) 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) <<= 1; } PORTD |= (1<<STR); PORTD &= ~(1<<STR); }
При этом происходит наложение H+M, M+L, L+H. H,M,L-разряды индикатора. Проганял в симуляторе. Все пучком. В чем же дело?
Сообщение отредактировал alux - Jun 9 2007, 00:06
|
|
|
|
|
Jun 9 2007, 07:06
|
Местный
  
Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020

|
Цитата(alux @ Jun 9 2007, 04:03)  А вот в динамике есть накладка. При этом происходит наложение H+M, M+L, L+H. H,M,L-разряды индикатора. Проганял в симуляторе. Все пучком. В чем же дело? Как часто вызывается __interrupt void TC0_COMPA_ISR(void) ?
|
|
|
|
Сообщений в этой теме
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 Микросхема 74HC4094 для Вашей задачи подходит не л... Jun 7 2007, 20:09 alux Цитата(AVL @ Jun 7 2007, 23:09) Должно бы... Jun 7 2007, 21:22  AVL Цитата(alux @ Jun 8 2007, 01:22) Не понял... Jun 8 2007, 07:35   alux Цитата(AVL @ Jun 8 2007, 10:35) Значит на... Jun 8 2007, 08:18    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 Цитата(alux @ Jun 8 2007, 14:18) Трансфор... Jun 9 2007, 11:20 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   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
|
|
|