Перейти к содержанию

Управление Матрицей С Помощью Max7219


art_maestro

Рекомендуемые сообщения

Здравствуйте.

Хочу связать платформу launchPad на базе MSP430G2553 , светодиодный драйвер MAX7219 и светодеодную матрицу 8*8.

Обратился за помощью к Гуглу, на что он мне ответил..

Нашел хороший пример реализации моей задачи, но только для ардуино, но не сомотря на это, я подумал, что должно получиться и на основе прилагаемой схемы на сайте

matrixschematic2.jpg

Скачал с сайта, библиотеку LedControl.h, подключил для начала к среде energia.

Подключил выводы к launchPad следующим образомra

SerialDataIn к MOSI

LOAD к CS

Clock к CSK

Прошил МК следующей программой

#include "LedControl.h" // need the library
LedControl lc=LedControl(P1_7,P1_5,P2_0,1);
void setup()
{
lc.shutdown(0,false);
lc.setIntensity(0,8);
lc.clearDisplay(0);
}
void loop()
{
for (int row=0; row<8; row++)
{
for (int col=0; col<8; col++)
{
lc.setLed(0,col,row,true);
delay(10);
lc.setLed(0,col,row,false);
delay(10);
}
}
}

Я добился только мигания матрицы, причем всех фонарей. Не могу понять, что я не так сделал. В голову приходила мысль, что данная библиотека по работе с матрицей не подходит МК MSP430, а только предназначена для ARDUINO, но на сколько моя мысль верна не могу сказать.

Если кто знает или если есть идеи как решить эту проблему, пожалуйста подскажите.

Спасибо

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

LedControl.h выложите пожалуйста. MSP430 имеет аппаратный spi? Управлять подобными драйверами от максим очень просто на самом деле.

UPD:

Для примера, просто по приколу

4272848ac1b8.png

Изменено пользователем IIIytNIK

Молодых и талантливых чрезвычайно много. Целеустремлённых и готовых довести дело до конца — гораздо меньше.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Да SPI есть.

Возможно я допустил ошибку при подключении. Хотя сейчас сравниваю, с чертежем. все нормально. Матрица пока вся светится и имгает.

Изменил подключение. Присоеденил выход MISO на МК ко входу DIN на MAX7219 -нечего не изменилось.

LedControl.zip

Изменено пользователем art_maestro
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Выход MISO(Master input, slave output) к DIN цеплять не надо. Подключите обратно MOSI.

Ардуиновские библиотеки можете не цеплять, они к msp430 все равно не подойдут. Можно их попробовать переписать, но проще написать новые.

Работать с SPI умеете? MAX7219 управляется путем записи в него через интерфейс SPI 16 битных слов (две пачки по 8 бит). Первые 4 бита ничего не значат, следующие 4 бита адрес нужного регистра, и последние 8 бит необходимая информация. Список адресов регистров и нужной информации находятся в даташите. Начало\конец записи осуществляется дерганьем вывода LOAD(CS)

Я не знаю как будет выглядеть код для MSP430, но на AVR с аппаратным spi это будет выглядеть так:

К примеру мне нужно вывести драйвер из спящего режима в рабочее состояние. Для этого в регистр Shutdown я должен записать единицу. Смотрим по даташиту адрес: Shutdown Register Format (Address (Hex) = 0xXC) Большой X перед С означает что там может быть что угодно, так как это и есть те самые ничего не значащие 4 бита.

Пишем код:

LOAD = 0; //начинаем передачу, вывод LOAD опускаем в ноль

spi(0x0C); //Шлем первые 8 бит - адрес регистра

spi(0x01); //Шлем следующие 8 бит - единица

LOAD = 1; //Заканчиваем передачу, вывод LOAD поднимаем. Данные после этого запишутся в регистр

И так далее со всеми остальными регистрами.

В AVR аппаратный spi сделан так, что может слать только пачками по 8 бит. Для некторых микросхем это недопустимо (например нужно посылать 12 бит) и поэтому приходится писать программную реализаию spi. Но это немного другая история.

Могу еще подсказать, что перед выводом индикации с драйвера его необходимо подготовить и настроить. Для этого необходимо:

1)Вывести драйвер в рабочее состояние из спящего режима (Записать 0x01 в регистр 0x0C, выше это показал)

2)Установить предел динамической индикации (Записать 0x07 в регистр 0x0B для индикации восьми разрядов)

3)Установить яркость сегментов (Записать 0x0F в регистр 0x0A для максимальной яркости)

4)Установить режим декодирования информации (Записать 0xFF в регистр 0x09 для режима перевода двоичного кода в семисегментым режим, или записать 0x00 в регистр 0x09 для отключения декодирования и управления сегментами вручную. Так нужно будет сделать в вашем случае для управления матрицей)

Много букв, много слов, многое по началу не понятно, но если вы научитесь работать с spi, то подниметесь на уровень выше в освоении МК. Похожим образом управляются множество других микросхем, наичная от простых цифровых потенциометров и внешних АЦП, заканчивая драйверами TFT панелей.

Молодых и талантливых чрезвычайно много. Целеустремлённых и готовых довести дело до конца — гораздо меньше.

Ссылка на комментарий
Поделиться на другие сайты

Спасибо за хорошую подсказку. Насчет библиотеки я догадывался.

С SPI можно сказать не знаком, Читал только за CS, CLK, MOSI и MISO.

Еще раз огромное спасибо

Ссылка на комментарий
Поделиться на другие сайты

Следуя Вашим советам, получилось следующее. Матрица начала ярко гореть и не мерцать как было раньше.

В ДатаЩит нашел описание адресов и значений. Но я не могу все равно понять, как управлять отдельной лампочкой, вернее ногой драйвера. Смотрю на таблицу 2 в ДатаЩите. Я не могу понять, что нужно записать и в какой регистр.

Вот сейчас у меня светиться матрица, как мне погасить один любой светодиод, что и куда я должен записать. Писал адрес: 0xD1 значение 0х00, но я так понял, что управлять ногой Д1 нельзя таким образом.

Спасибо огромное.

Датащит ниже.

MAX7219-MAX7221.pdf

Изменено пользователем art_maestro
Ссылка на комментарий
Поделиться на другие сайты

Спасибо за ссылку. Не могли бы Вы написать простой пример, как например на матрице отключить хотя бы один светодиод. Я не могу это понять, скачал русскую версию датаЩита.

Ссылка на комментарий
Поделиться на другие сайты

Для загрузки данных в микросхему используется последовательный пакет длиной 16 бит. Младшие 8 бит являются информационными, следующие 4 задают номер регистра микросхемы, старшие 4 не используются. Первым передается старший бит

Т.е, чтобы зажечь или погасить светодиод, нужно сначала записать в регистры управления нужные параметры.

Режим декодирования, Интенсивность свечения, Использование индикаторов, Включить MAX7219 , Выключить ТЕСТ.

Затем в регистры Индикатор 0 -- Индикатор 7 записать информацию, которая выведется на индикаторы.

На страничке по ссылке есть ссылка на работа с драйвером индикаторов MAX7219

Там описана последовательность загрузки команд и данных.

Микросхема в режиме динамической индикации выводит данные на дисплей. Сначала на индикатор 0, потом на индикатор 1 и так по кругу

на все 8 индикаторов. Если вы запишете в регистр Индикатор 0 например 11110000, то четыре светодиода будут светиться,

четыре нет.

Изменено пользователем croc19
Ссылка на комментарий
Поделиться на другие сайты

Нет. Я не могу в датащите понять, куда нужно отправлять, чтобы управлять отдельным светодиодом на матрице. Вот например, Таблица 2 в ДатаЩите. HEX-code - я так понимаю, что это область памяти в которую нужно отправить ряд бит. Например, Digital 0 - последовательность бит 0001 а куда именно не могу понять. Написано в HEX-code 0xX1. Что я должен указать за место большого Х.

Ссылка на комментарий
Поделиться на другие сайты

Ничего не нужно указывать. Отправляйте 0x01

Молодых и талантливых чрезвычайно много. Целеустремлённых и готовых довести дело до конца — гораздо меньше.

Ссылка на комментарий
Поделиться на другие сайты

Каждая команда или данные состоят из 2 байт. Старший байт отпраляется первым. Он обозначает регистр.

Вместо Х ставьте ноль. Младший байт обозначает команду или данные.

Итак. посылаете сначала адрес регистра, следом данные.

Х1=01=11=21 и т.д. Не важно, что вместо Х, но ставьте лучше ноль, т.е. адрес регистра 01.

Это адрес первых восьми светодиодов подключенных к DIG0 . следом посылаете

информационный байт, каждый бит которого --- это один из этих восьми светодиодов.

Ссылка на комментарий
Поделиться на другие сайты

Все равно матрица не реагирует. Только горят все светодиоды и все.

Продемонстрирую весь код:

digitalPotWrite(0x0C,0x01); //вывести драйвер из спящего режима
digitalPotWrite(0x0B,0x07); // уст. предела динамической индикации
digitalPotWrite(0x0F,0x0A); // уст. яркость сегментов
digitalPotWrite(0x00,0x09); //установить режим декодирования
digitalPotWrite(0x01,0x11110000); //управление светодиодами

digitalPotWrite - функция в которую передаю две переменных. Первая - адрес, вторая - значение.

Ее код ниже

int digitalPotWrite(int address, int value) {
 //LOAD переводим в 0
 digitalWrite(slaveSelectPin,LOW);
 // Отправляем адрес и значение
 SPI.transfer(address);
 SPI.transfer(value);
 //LOAD переводим в 1
 digitalWrite(slaveSelectPin,HIGH);
}

Может я что-то не так делаю

Ссылка на комментарий
Поделиться на другие сайты

Попробуй добавить выключение тестового режима .

Возможно при включении он включается и все светится.

Я в СИ не силен. Но думаю, что сигналы в схеме правильно разведены.

И CLK правильно работает.

Изменено пользователем croc19
Ссылка на комментарий
Поделиться на другие сайты

digitalPotWrite(0x01,0x11110000); //управление светодиодами

может так???

digitalPotWrite(0x01,0xF0); //управление светодиодами

или

digitalPotWrite(0x01,0b11110000); //управление светодиодами

Ссылка на комментарий
Поделиться на другие сайты

Изменил предыдущее сообщение. ДОБАВИТЬ выключение режима теста.

В тестовом режиме все включено. Возможно при включении схемы он включается.

Ссылка на комментарий
Поделиться на другие сайты

digitalPotWrite(0x0F,0x0A); // уст. яркость сегментов ------ здесь ты включаешь тестовый режим, т.е. в регистр 0F записываешь 0А

digitalPotWrite(0x00,0x09); //установить режим декодирования ----- здесь в регистр нет операции записываешь 09

Поменяй аргументы местами.

И на всякий случай добавь digitalPotWrite(0x0F,0x00) выключить тест дисплея.

Ссылка на комментарий
Поделиться на другие сайты

Вот и я подумал про SPI. Если не завелось, то нужно всю программу глянуть.

Хотя с СИ у меня хреново. И я не пользовался SPI, запуская драйвер.

Изменено пользователем croc19
Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...

LedControl.h выложите пожалуйста. MSP430 имеет аппаратный spi? Управлять подобными драйверами от максим очень просто на самом деле.

UPD:

Для примера, просто по приколу

4272848ac1b8.png

Бросил я launchPad, взял arduino. Cкопипастил код на одном из сайтов, скомпилировал его, перевел в HEX и загрузил в proteus. Та же самая ерунда, матрица светится. Вижу (через proteus) как по проводникам подается напряжение , все вроде правильно, но матрица не как не реагирует, просто светиться.

Я немного изменил схему, согласно тому,как описывал ее автор сайта:

Atmega 328 MAX7219

19 -> 1

17 -> 13

16 -> 12

Кстати, брал Демо пример, который входит в состав с библиотекой LedControl.h - тоже само. матрица светиться и все. по проводникам видно, что сигналы передаются по другому.

Изменено пользователем art_maestro
Ссылка на комментарий
Поделиться на другие сайты

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

post-165315-0-23237900-1364308565_thumb.jpg

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Да, сначала был написан бутлодер для тини 24. Там нет выделенной памяти под бутлодер и заморочек с областями откуда можно записывать и перезаписывать флеш из программы, там все просто! Также там нет УАРТА, пришлось написать. Ну и самое главное: перезаписывай любые страницы флеш из любого места! В тини 24 под бутлодер ушло 48% памяти. В проекте технологи выделили слишком мало физического места под схему. Потом развел плату, оказалось, что места не так уж и мало. Потом выяснилось, что пинов впритык, и если будет дальнейшее расширение, их может не хватить. И после долгих (ну очень долгих) изысканий (цена, доступность, размеры) остановился на 88 (очень низкая цена, корпус чуть больше чем у 24, датчик температуры, а это важно, но не критически). Да, и сейчас все программируют на С и др. языках высокого уровня, что занимает очень (ну очень) много места, и чипы с небольшой памятью остаются не востребованы, и как следствие низкий спрос, и низкая цена!!! И при тупом переносе программы перезаписи страниц флеш программа не заработала... Ну и пошли изыскания, и я набрел на ВАШ проект, самый полный и законченный на то время. Нужно было выяснить чип который был у меня битый или я что-то упустил при программировании? (в бутлодерах я новичек) Недостаток 88 на сегодня, то что из пользовательской памяти нельзя перепрограммировать флеш, хотя страница стирается.   По поводу ВАШЕЙ программы: выяснилось, что при включенном фьюзе WDT в конфигурации, соединение не устанавливается, а в хелпе это не отражено. В некоторых ситуациях соединение можно восстановить лишь отключив / включив питание, сброс через ножку ресет не помагает. Будем копать дальше,... и глубже....!   Иногда при "установить соединение" выдается сообщение, "соединение не установлено", а на осциллографе виден ответ с чипа?
    • Сейчас по входу стоит керамика 0,1 мкФ + электролит 220 мкФ, иголок вроде нет, ну во всяком случае старичек С1-93 их не показывает.
    • Платы материнки и УВ пока в брак.  - Семён Семёныч... (с) Вы ничего не забыли, сэр? Как вы собрались регулировать УВ по уровню выходного сигнала??? Решение уже есть, пока в процессе.
    • Ну в идеале каптоновым скотчем как вам сказали,но можно обмотать чем угодно лижбе диалектриком было и хотябы немного высокотемпературное,я бы термо усадку взял,поидеи хорошо пойдет  Ещё видел где трансформатор медно алюминиевой жилой был на ампер 10 если не больше на вид аж,и там алюминиевая обмотка сечением пол сантиметра была замотана в бумагу пропитанную в воске,слоем миллиметр примерно эта изоляция была 
    • Всем привет. Собрал мх50, запустился с первого раза, когда делал замеры, соскочил щуп, спалил выходники и пред, заменил, все ок. Питание тор 250 ватт 30х2 выход, после выпрямителя 44В 20000мкф в плечо  увеличил входные емкости на оконечниках, добавил шунтирующую пленку  плата софт старта присутсвует цепь буше взял из ОМ2.7 ТП выставил 100мА добавлена термозащита на каждый канал( но как оказалось, с таким корпусом хрен перегреешь) АС kef q150 dac Aiyima a5 max получилось снять 81 ватт с канала при 8ом нагрузке (на фото самое точное измерение на левом мультиметре) без сигнала если прислонится к ас еле уловимое шипение  при наличии сигнала все ок, играет отлично, мне очень понравилось. в планах ОМ2.7
    • Уже 52 скачивания. Значит актуальна.
    • Получается либо таймер работает наполовину и идет передача, либо таймер работает как надо, но передача не идет(
  • Похожий контент

×
×
  • Создать...