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

Управление Матрицей С Помощью 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, но на сколько моя мысль верна не могу сказать.

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

Спасибо

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

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

UPD:

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

4272848ac1b8.png

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

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

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

Да SPI есть.

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

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

LedControl.zip

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 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 панелей.

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

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

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

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

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

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

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

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

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

В ДатаЩит нашел описание адресов и значений. Но я не могу все равно понять, как управлять отдельной лампочкой, вернее ногой драйвера. Смотрю на таблицу 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 пользователей онлайн

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