Jump to content
Sign in to follow this  
art_maestro

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

Recommended Posts

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

Хочу связать платформу 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, но на сколько моя мысль верна не могу сказать.

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

Спасибо

Share this post


Link to post
Share on other sites

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

UPD:

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

4272848ac1b8.png

Edited by IIIytNIK

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

Share this post


Link to post
Share on other sites

Да SPI есть.

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

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

LedControl.zip

Edited by art_maestro

Share this post


Link to post
Share on other sites

Приглашаем на вебинар «Новинки и уникальные решения Molex. На что обратить внимание и почему»

15 апреля приглашаем на вебинар, который будет интересен разработчикам и инженерам-схемотехникам, интересующимся тенденциями рынка, новыми перспективными решениями для соединений «провод-провод», «провод-плата», «плата-плата». Для инженеров КИПиА и IT будут освещены уникальные решения Molex для «удлинения» интерфейсов HDMI, DisplayPort и USB даже в условиях сильного зашумления, а также семейство бесконтактных датчиков Contrinex. Помимо этого, будет уделено внимание дальнейшему развитию направления антенн, где Molex имеет ряд интересных и уникальных решений.

Подробнее

Выход 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 панелей.


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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites
                     

Выбираем преобразователь для портативных устройств

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

Читать статью

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

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

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

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

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

MAX7219-MAX7221.pdf

Edited by art_maestro

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

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

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

четыре нет.

Edited by croc19

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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


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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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);
}

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

Share this post


Link to post
Share on other sites

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

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

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

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

Edited by croc19

Share this post


Link to post
Share on other sites

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

может так???

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

или

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

Edited by croc19

Share this post


Link to post
Share on other sites

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

UPD:

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

4272848ac1b8.png

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

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

Atmega 328 MAX7219

19 -> 1

17 -> 13

16 -> 12

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

Edited by art_maestro

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Similar Content

    • By Alex_Chpook
      Всем привет. Хочу сделать светодиодную матрица с драйвером max7219 на Atmega324P. 
      При попытке смоделировать в Proteus вылазят ошибки:
      Собирал вроде всё правильно, текст в EEPROM загружен, но на матрицах выводится непонятно что и на всех одно и тоже. Может я что-то напутал, когда собирал((
      Подскажите пожалуйста кто знает))
      Проект со схемой Proteus и прошивку прикрепляю.
      И просто схема: 
       

      Строка c MAX7219.rar
    • By Мессинг
      Кто может сделать или переделать скетч часов с индикацией светодиодными матрицами 8х8 с драйверами max7219 (число матриц, переключаемое при прошивке в контроллер, 4х1 или 4х2) ?
      Основа- arduino nano + rtc-ds3231+4 кнопки управления. Должны индицировать статично Часы-Минуты-Секунды, и динамично- бегущей строкой Число-Месяц-Год-День недели, плюс 4 служебных сообщения(по одному, с циклом 4 в дня). Настройка-установка времени, содержимого сообщений, яркости индикации, скорости вывода бегущей строки...
      Наличие будильников приветствуется, но не обязательно.
    • By lllypyn
      Решил сделать светодиодное табло.
      Плата пришла распаянная, не могу понять, правильно ли я подключил табло.
      gpio 10(MOSI) --> DIN
      gpio 11(SCLK) --> CLK
      gpio 9(CE1) - LOAD
      Почему на плате он называется CE0(1) а не CS(SS)?
      Не знаю можно ли вставлять ссылки, удалите если нет, покупал тут - http://www.ebay.com/itm/4x-Blue-8x8-LED-matrix-Max7219-Seamless-Cascadable-Arduino-PIC-Rasberry-Pi-MJKZZ-/281055201039?pt=LH_DefaultDomain_0&hash=item417032070f
      Когда подключаю табло горит не все, а квадратами 3х3 между ними выключенные диоды. Если табло подключить по другому то не горит совсем. Это нормально?
      Может кто-нибудь поможет, целый день голову ломаю, спаял вроде нормально.
  • Сообщения

    • ==================================================================================================   Любовь - это когда отдаешь жене последнюю маску, чтобы она сходила в магазин тебе за пивом.   Мы закупили большую партию тестов, правда они на беременность, но других не было. (С) В.Кличко.
    • Короткое замыкание. 100.mp4
    • Даташит подскажет. На выходе на каждый затвор по два транзистора в микросхеме.
    • Для этого ракеты не нужны. Вводятся санкции, и даже отечественные Эльбрус делать не на чем. 
    • Я недавно сверхяркие синие светодиоды с обломанными выводами восстанавливал. Подточил сбоку надфилем, и припаял проводок. Вывод заподлицо с корпусом был обломан, только паять надо быстро, чтоб не перегреть кристалл.
    • Всем доброго здравия! Наткнулся на ютубе на сей видеоролик: https://youtu.be/MFLGgK2fUQ0  Кто что думает? Автор я так понимаю не сделал регулировку/ограничение по току. Т.е присутствует только регулировка напряжения и все. Назревает вопрос, если попробовать сделать также, что получится, кто пробовал? Имеется блок питания от пентиума 4, 250w на микросхеме K7500. +12 вольт как написано на корпусе выдаёт 13 ампер. Не выдаст ли он после такой переделки все эти 13 ампер на аккумулятор при зарядке, а то как то сыкотно? И будет ли по ходу зарядки стрелка амперметра опускаться до нуля? Благодарствую за любую информацию. 
    • Кто тебе такое сказал - сам придумал? Столицу с её народом сейчас может атаковать только конченный  идиот, или какой-нибудь 2,7..анутый бен-хрен-нах-ладен. Для потенциальных атакующих из числа "партнёров" в гипотетической войне гораздо важнее в первую очередь уничтожить производителей и ремонтников стратегических носителей и долгосрочную сырьевую базу. Ни того, ни другого в столице нет - там только эффективные менагеры остались, и элита, которая никому нахер не нужна... Так что столица с её народом после атаки через жопу(как многие воспринимают ДВ) в которой, кстати, находятся практически все стратегические запасы будущих поколений нашего народа, лишённая всех цимусов, сама на карачках к партнёрам приползёт.   
×
×
  • Create New...