Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Микросхемы МАХ7219


Автор: Dreamer_0x01 14.1.2006, 15:24
Работаю с микросхемами МАХ7219, это драйверы-контроллеры семимегментных (и не только) индикаторов.
С работой поодиночке проблем нет, но вот соединил их последовательно (Вход DOUT первой с входом DIN второй и т.д., CLK и LOAD объядинил вместе). И что-то странные вещи стали происходить с ними.

Есть у кого опыт по такому их включению?

Автор: PILOT 15.1.2006, 01:37
Соединил правильно, скорее всего в программе напутал.

СУВ.

Автор: Dreamer_0x01 15.1.2006, 15:21
Цитата(PILOT @ 15.1.2006, 01:37 Найти цитируемый пост)

Соединил правильно, скорее всего в программе напутал


Именно. Но вот уже дня два не найти. У меня почему-то данные из первой микросхемы иногда проходят во вторую.
Делаю, как написано в дата-шите.
Например, мне надо отправить данные во вторую микросхему. (А их у меня всего две пока что )
Тогда я делаю так:
1. Записываю нужный мне код последовательно во вход DIN, тактируя его восходящим фронтом CLK. Все сигналы держатся не мнее 1 мкс, так как работаю с процессором AT89C55WD с кварцем 11.059 МГц. Поэтому сразу же сигнал CLKвозвращаю в ноль, то есть в его исходное положение.
2. Во вход DIN запихиваю шестнадцать нулей, тактируя их все тем же CLK. Это соответствует записи в регистр "NoOperation".
3. На вход LOAD подаю восходящий вронт 0-1, после этого возвращаю его обратно в 0.

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

Я правильно понял Дата-шит?

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

Автор: Dreamer_0x01 15.1.2006, 15:48
Цитата(Dreamer_0x01 @ 15.1.2006, 15:21 Найти цитируемый пост)

Если же мне наоборот надо сделать так, чтобы код получила первая микросхема, то я сначала засылаю код "пустой операции", а затем - код операции для первой микросхемы.

Хм...Написал -то я правильно, а вот на деле послал то же самое, забыв сделать все наоборот.
Теперь все наконец-то ожило и работает.

PILOT
Все равно спасибо за поддержку.

Автор: PILOT 15.1.2006, 18:43
Ты должен загонять всегда 32 бита. Даже если тебе нужно изменять только 16-ть последних. Тогда все будет так как ты хочешь. В даташите есть описание подключения которое ты тут привел, так что по схеме проблем нет.
По команде ЛОАД данные в сдвиговом регистре перезаписыватся в регистры данных (т.е. актуализируются), до команды ЛОАД данные в сдвиговом регистре не учитываются. Сдвиг происходит по положительному фронту, значит дей2ствуешь так: выставляешь следующий записываемый бит на ноге DIN, дергаешь CS (период 200-300мкс). Загнал 32 бита: дергаешь ЛОАД. Все.

СУВ.

Автор: Dreamer_0x01 16.1.2006, 00:54
Цитата(PILOT @ 15.1.2006, 18:43 Найти цитируемый пост)

значит дей2ствуешь так: выставляешь следующий записываемый бит на ноге DIN, дергаешь CS

CLK наверное, а не CS?

Цитата(PILOT @ 15.1.2006, 18:43 Найти цитируемый пост)

период 200-300мкс

А это откуда такая задержка большая?
У меня вот уже и с 1 мск заработало.

Цитата(PILOT @ 15.1.2006, 18:43 Найти цитируемый пост)

Ты должен загонять всегда 32 бита.

Да это-то ясно с самого начала, я ж говорю, проблема была в том, что я их не в той последовательности заслал.

А вот про задержки допустимые все-таки интересно бы узнать. В даташите про это не нашел.

Кстати раз уж тема поднялась - а ты не знаешь аналогов подобных микросхем? А то уж больно стоят дорого, очень чувствительны к статике (приходится программно в кажом цикле ресетить и заново конфигурировать), и греются как не знамо что. Да, режимом декодирования я естественно не пользуюсь, он у них глючный очень, да и самому несложно проргаммно все дешефрировать, так что дешефрирование не обязательный параметр, самые важные - цена, потребление, количество управляемых сегментов и условия эксплуатации (в частности - температурные диапазоны).
smile

Автор: PILOT 16.1.2006, 12:30
Тогда твой выбор это восьмиразрядные регистры с последовательным входом и параллельным выходом 74HC164, соединяешь 4 последовательно. Только развертку придется самому делать.

СУВ.

Автор: Dreamer_0x01 17.1.2006, 15:57
Цитата(PILOT @ 16.1.2006, 12:30 Найти цитируемый пост)

Только развертку придется самому делать.

Может быть, для этого задействовать отдельный какой-нибудь совсем простенький контроллер тогда?

Автор: PILOT 17.1.2006, 18:29
Я думаю и основной контрлллер с этим справится.

СУВ.

Автор: Dreamer_0x01 18.1.2006, 18:19
Основному контроллеру и там есть чем заняться =)
А тут еще следить, чтобы хотя бы раз в 20 мс зажигались/выключались диоды, а у меня каждые 40 мс измерения идут, обработка которых занимает от 20 до 30 мс. Хочется оставить чуток драгоценного времени в резерве =) Да и не сложно это на отдельном контроллере сделать ведь... Единственное, найти чуток места на плате ;)

Автор: PILOT 18.1.2006, 18:53
Я думаю 200мкс ты выжмешь из основного цикла smile
Если есть возможность сделать что-то программно, то это нужно делать программно smile а не наворачивать бутерброд контроллеров, причем там где они не нужны smile Не такая сложная задача, раз в 30-50мс последовательно очень быстро загнать данные в регистр, который может работать на частоте 78МГц smile

СУВ.

Автор: Dreamer_0x01 18.1.2006, 20:11
да, но учитывая то, что необходимо будет самому воспроизводить развертку (все сразу сегменты ведь если зажигать, то получится очень большой ток в импульсе). Получается, что нужно будет действовать по следующему алгоритму - нужно будет последовательно зажигать каждый сегмент, при выключенных остальных, после этого зажигать следующий, и т.д. Причем весь этот цикл придется делать не реже, чем 20 мс, иначе будет откровенно заметно мерцание, кроме того, диоды имеют инерционность и нужно эксперементально подбирать длительность импульса, которая позволит добиться от диода достаточной интенсивности свечения...
Не знаю, может быть, в дальнейшем это и реально сделать, но для первых опытов все-таки стоит собрать макет с дополнительным контроллером, чтобы поэксперементировать с частотами развертки, длительностью импульсов и прочими тонкостями.
Ведь микросхема МАХ наверняка имеет в себе некое подобие либо контроллера, либо ПЛД...

Цитата(PILOT @ 18.1.2006, 18:53 Найти цитируемый пост)

Не такая сложная задача, раз в 30-50мс последовательно очень быстро загнать данные в регистр, который может работать на частоте 78МГц

При использовании контроллеров на 51 ядре, максимум, что я могу добиться, это 1 МГц.
А именно на таких контроллерах делается наша продукция. Знаю, это каменный век, но ничего с этим не поделаешь, нет времени переходить на новую базу.
Добавлено @ 20:20
хотя, это меня достаточно интересовало..Не мог бы ты мне сказать, какое время нужно удерживать ток через светодиод, чтобы он успел засветиться, прежде чем подавать ток на следующий диод?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)