Max7219+8x8матрица(1588bs)+uno. светятся все сегменты.

Тема в разделе "Arduino & Shields", создана пользователем Delphin911, 25 окт 2021.

  1. Delphin911

    Delphin911 Нерд

    Всем привет! Есть идея собрать часики с датчиками на ESP8266 с 16x2 матриц 8х8, управляемых MAX7219. В планах распаять все самому и корпус сделать. Но до этого далеко. Проблема началась с индикатора. На макетку поставил MAX7219 и подключил один индикатор.(схема включения прилагается)
    Библиотеки тестил разные. MD_MAXPanel, LedControl, еще пару каких-то других. Но всегда светятся все сегменты. Пробовал примеры из библиотек (MD_MAXPanel_Test), с LedControl в инете много примеров.
    SPI подключал по разному. И к контактам по умолчанию и к произвольным. Свой скетч написал, чтобы один сегмент зажигать, все равно горят все. Но правда иногда какая-то осмысленная деятельность видно. Светодиоды рядами притухают немного, но не гаснут полностью.Но не всегда. Сейчас никак не реагирует.
    Код (C++):
    //-------------Библиотеки
    #include <MD_MAXPanel.h>

    //-------------Константы
    const MD_MAX72XX::moduleType_t HARDWARE_TYPE = MD_MAX72XX::FC16_HW;
    const uint8_t X_DEVICES = 1;
    const uint8_t Y_DEVICES = 1;
    const uint8_t CLK_PIN = 13;   // or SCK
    const uint8_t DATA_PIN = 11;  // or MOSI
    const uint8_t CS_PIN = 9;    // or SS

    //-------------Создание объектов
    //MD_MAXPanel mp = MD_MAXPanel(HARDWARE_TYPE, CS_PIN, X_DEVICES, Y_DEVICES);
    MD_MAXPanel mx = MD_MAXPanel(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, X_DEVICES, Y_DEVICES);

    void setup() {
      Serial.begin(115200);
      mx.begin();

    }

    void loop() {
    mx.clear();
    mx.setPoint(1, 1, true);
    Serial.print(mx.getXMax());
    Serial.print("------------");
    Serial.println(mx.getYMax());
    }
     
    Схему подключения прозвонил уже несколько раз. Микросхемы 2 штуки, работают одинаково. Матрицы тоже разные тестил. Не понимаю в чем причина!
    Сейчас попробую вместо UNO ESP8266 использовать. Может с SPI в UNO что не так.
    HELP!
     

    Вложения:

  2. b707

    b707 Гуру

    при ваших настройках эта библиотека не использует SPI
    У вас в коде сплошная каша, в одной строке используете SPI, в другой нет...
    Так никогда не заработает. читайте документацию
     
    Последнее редактирование: 25 окт 2021
  3. Delphin911

    Delphin911 Нерд

    А вот так?
    Код (C++):
    //-------------Библиотеки
    #include <MD_MAXPanel.h>

    //-------------Константы
    const MD_MAX72XX::moduleType_t HARDWARE_TYPE = MD_MAX72XX::FC16_HW;
    const uint8_t X_DEVICES = 1;
    const uint8_t Y_DEVICES = 1;
    const uint8_t CS_PIN = 10;    // or SS

    //-------------Создание объектов
    MD_MAXPanel mp = MD_MAXPanel(HARDWARE_TYPE, CS_PIN, X_DEVICES, Y_DEVICES);

    void setup() {
      Serial.begin(115200);
      mp.begin();

    }

    void loop() {
    mp.clear();
    mp.setPoint(1, 1, true);
    Serial.print(mp.getXMax());
    Serial.print("------------");
    Serial.println(mp.getYMax());
    }
    Я честно говоря не гуру в коде ардуино. Но вроде все по делу.
    Указываем библиотеку (она использует библиотеку MD_MAX72xx, в которой и идет активация SPI), указываем тип модуля, указываем сколько матриц по горизонтали и вертикали, указываем пин CS, создаем объект mp, в блоке setup стартуем порт и mp, ну и зажигаем сегмент 1, 1.
    Да это ладно, тут моя писанина конечно, может чего и не так. Но я открываю пример из библиотеки MD_MAXPanel под именем MD_MAXPanel_Test (там прогоняются разные эффекты). Думаю там все правильно написано, раз пример в библиотеке. Так вот после компиляции у меня так же горят все сегменты. Исходник общедоступен вместе с библиотекой.
     
  4. b707

    b707 Гуру

    строчки
    Код (C++):
    mp.clear();
    mp.setPoint(1, 1, true);
    попробуйте перенести в сетап
     
  5. Delphin911

    Delphin911 Нерд

    То же самое. Все светятся.
    Попробовал на ESP8266 собрать. Такая же фигня. Блин, неужели же обе микросхемы дохлые!? У меня есть еще 16 штук в корпусах SOP24. Но их уже как-то распаивать надо, а у меня как назло ни одной макетки для этого!
     
    Последнее редактирование: 25 окт 2021
  6. b707

    b707 Гуру

    честно говоря, на 99% уверен, что микросхемы рабочие.
    Ошибка либо в схеме, либо в коде, либо и там и там
     
  7. Delphin911

    Delphin911 Нерд

    Код думаю можно исключить, т.к. беру пример от библиотеки.
    Наверное в схеме. Но как это понять? Ту схему, что я приложил, везде используют. Datasheet на MAX7219 тоже одинаковый везде. Цоколевку матриц всю тестером проверил\прозвонил. Вот и сижу голову ломаю. Завтра буду SOP Распаивать проводками.
     
  8. parovoZZ

    parovoZZ Гуру

    здесь поможет логический анализатор.
     
  9. Delphin911

    Delphin911 Нерд

    А можно поподробнее. Что за логический анализатор? Что им проверять? Ну точнее что и где должно быть?
     
  10. Delphin911

    Delphin911 Нерд

    Всю схему разобрал. На микросхеме оставил только землю (4,9), Vcc(19), резюк с 18 на Vcc 10k, ну и DIN на D11 ардуинки, CLK на D13 и CS на D10. Ну и сделал, чтобы горел только 1 сегмент. Соединил 9 матрицы, 2 микросхемы и 13 матрицы, 22 микросхемы. Думал может там какие наводки от шлейфа.
    Код оставил такой:
    Код (C++):
    //-------------Библиотеки
    #include <MD_MAXPanel.h>

    //-------------Константы
    const MD_MAX72XX::moduleType_t HARDWARE_TYPE = MD_MAX72XX::FC16_HW;
    const uint8_t X_DEVICES = 1;
    const uint8_t Y_DEVICES = 1;
    //const uint8_t CLK_PIN = 13;  // or SCK
    //const uint8_t DATA_PIN = 11;  // or MOSI
    const uint8_t CS_PIN = 10;    // or SS

    //-------------Создание объектов
    MD_MAXPanel mp = MD_MAXPanel(HARDWARE_TYPE, CS_PIN, X_DEVICES, Y_DEVICES);

    void setup() {
      mp.begin();
    }

    void loop() {
    mp.clear();
    }
    Т.е. все должно быть погашено. Но он сссу....а горит!
    Уже не знаю что делать. Начал разводить в EasyEDA плату под 1 индикатор с микросхемой в SOP корпусе.

    Попробовал тестовые примеры от библиотек. Активность видна. Там скажем есть тест на уменьшение, увеличение яркости, видно что меняется яркость. При других тестах тоже яркость меняется, но не гаснет до конца, а должен ведь.
     
    Последнее редактирование: 26 окт 2021
  11. Delphin911

    Delphin911 Нерд

    Разобрался. Строки со столбцами поменял и заработало. Видно у матриц разная бывает полярность по столбцам и по строкам.
    Ну как заработало? Осмысленная информация на экране. Но надо как-то библиотеку дорабатывать или искать другую, под такую полярность.
     
    Ariadna-on-Line нравится это.
  12. Delphin911

    Delphin911 Нерд

    Народ, так кто-нибудь подскажет как быть? Я вот уже переконнектил строки с рядами по-новой. В первой попытке я просто менял строки с рядами и у меня нулевой сегмент оказался справа вверху. Теперь я менял 1 строку на 8 ряд, 2-7 и т.д. Расположение сегментов теперь правильное. Во всяком случае цикл
    Код (C++):

    //-------------Библиотеки
    #include <MD_MAXPanel.h>

    //-------------Константы
    const MD_MAX72XX::moduleType_t HARDWARE_TYPE = MD_MAX72XX::FC16_HW;
    const uint8_t X_DEVICES = 1;
    const uint8_t Y_DEVICES = 1;
    //const uint8_t CLK_PIN = 13;  // or SCK
    //const uint8_t DATA_PIN = 11;  // or MOSI
    const uint8_t CS_PIN = 10;    // or SS

    //-------------Создание объектов
    MD_MAXPanel mp = MD_MAXPanel(HARDWARE_TYPE, CS_PIN, X_DEVICES, Y_DEVICES);
    void setup() {
      mp.begin();
    }

    void loop() {
    poporyadku();
    }

    void poporyadku(){
      for (int i = 0; i < 8; i++){
        for (int j = 0; j < 8; j++){
          mp.clear();
          mp.setPoint(i, j, true);
          delay(1000);
        }
      }
    }
    проходит матрицу как положено. Но вот текст выводится зеркально.
    Нет, не как положено. Должно по иреку вверх подняся при х=0, а получается наоборот y=0 всех х проходит, потом y=1 и т.д. Да, аппаратно наверное это не решишь.
     
  13. b707

    b707 Гуру

    переназначить сегменты в программе не предлагать? - другого пути не вижу
     
  14. Delphin911

    Delphin911 Нерд

    А как это сделать? Там ведь в программе сегменты нигде не упоминаются. Они жестко привязаны к драйверу MAX7219.
    Я уже грешным делом подумывал переписать библиотеку, в плане везде X и Y местами поменять. Если же возможно переназначить сегменты, подскажите как это сделать?
     
  15. Delphin911

    Delphin911 Нерд

    в общем надо переписывать библиотеку. Если при подключении поменять строки со столбцами и подключать в обратном порядке, т.е. вместо col1 на дисплее подключать row8, col2-row7 и т.д. В итоге мы получаем замещение координат. Вместо Х получается Y и наоборот. Как я написал выше, в простом случае перебора по порядку сегментов все работает. Неудобство этой библиотеки в том, что написание текста уже идет внутри нее. Т.е. либо плюнуть на текст внутри библиотеки и сделать только отрисовку сегментов, а текст уже рисовать из скетча прорисовывая буквы и цифры посегментно, либо переписывать ВСЁ внутри библиотеки. Я писал уже скетч для светодиодных матриц 16х16. Там используется библиотека FastLED.h. Там как раз отработана только прорисовка точек, строк и столбцов, а отрисовка текста идет извне.
     
  16. SergeiL

    SergeiL Оракул Модератор

    Так а что в вашей матрице отличается от приведённой в схеме, в первом посте?
    Что то я не сталкивался с сообщениями о подобном "неправильном" поведении этой связки.

    Не скажу про все, но в библиотеке Max72xxPanel.h есть функция:
    Код (C++):
        /*
         * Define if and how the displays are rotated. The first display
         * (0) is the one closest to the Arduino. rotation can be:
         *   0: no rotation
         *   1: 90 degrees clockwise
         *   2: 180 degrees
         *   3: 90 degrees counter clockwise
         */

        void setRotation(byte display, byte rotation);
     
     
  17. Delphin911

    Delphin911 Нерд

    Вот смотрите. На схеме матрица 1588AS, а у меня 1588BS. Полярность разная. Таким образом приходится наоборот подключать и функция setRotation тут не поможет. Как я говороил я попробовал переписать библиотеку. Точнее это громко сказано. В функции setPoint переставил в библиотеке координаты и как минимум статичный текст выводит нормально, по координатам перебирает правильно. С бегущей строкой пока не разобрался. Но я брал функции не от этой библиртеки (работы с текстом), а от своей старой разработки для матрицы 16х16 и библиотеки FastLED.h.
     

    Вложения:

    • 8x8_1588.jpg
      8x8_1588.jpg
      Размер файла:
      81,7 КБ
      Просмотров:
      104
  18. Delphin911

    Delphin911 Нерд

    Народ, я конечно прилагаю все усилия как-то переписать библиотеки, но у меня явно не хватает знаний прогрммирования. Но я вот решил найти на Алиэкспресс матрицы, под которые написаны библиотеки и задал в поиске 1588AS. Да, конечно они там есть. Но если задавать без букв поиск, то больше выдает матриц именно BS, но почему-то все библиотеки для AS. Неужели нет библиотек под BS?
     
  19. b707

    b707 Гуру

    да не нужна тут отдельная библиотека. Во-первых. почти уверен, что в библиотеке есть эти настройки - вы их просто не видите. Поискал проекты в гугле с такими матрицами - везде написано. что можно брать хоть AS матрицы, хоть BS
    Но даже если нет - поменять местами в коде X Y и отзеркалить по горизонтали - это пять строк от силы. И делать это надо внутри библиотеки, конечно. чтобы потом все надписи выводились штатно.
    Я такое проходил для матричных линеек - где такие матрицы собраны по 4 вместе
     
  20. Delphin911

    Delphin911 Нерд

    В самой библиотеке только с AS работает. Если подключить как в примере библиотеки, то светодиоды всегда горят. Ну так можно инвероторы везде поставить, но это извращение. У меня 16 матриц, по 16 инверторов на каждую. Раньше были микросхемки ЛН1, там по 6 инверторов в одной микросхеме, т.е. 43 микросхемы получаются. Но это так, беседа на отвлеченные темы, может сейчас есть и микросхемы с большем числом инверторов и меньшего размера.
    Чтобы оно хоть как-то заработало, надо подключать DIG контакты микросхемы на ROW матрицы и SEG микросхемы на COL матрицы. Но тут сразу X меняется с Y. При чем если подключать DIG0-ROW1,DIG1-ROW2 и т.д. и SEGDP-COL1, SEGA-COL2, то координаты 0,0 получаются в правом верхнем углу первой матрицы, а 0,8 в правом верхнем углу второй матрицы. Чтобы просто менять X на Y надо подключать перекрест DIG0-ROW8,DIG1-ROW7 и т.д. и SEGП-COL1, SEGF-COL2. Тут, если в функции которая зажигает точку в библиотеке поменять X с Y, то вроде работает простой скажем перебор, ну пройти по X от начала до конца по Y=0, потом Y=1 и т.д. Но вот отрисовка текста не получается у меня пока. При чем родные функции вообще белеберду выдают. Я взял принцип из проекта по работе с матрицами 16х16 многоцветными. Не помню как библиотека для них называется, я на 4 таких матрицах уже делал часы с датчиками температуры и т.д. Они у меня сейчас дома работают. Но там таблище такое большое. Вот я для дачи решил сделать с маленьким табло, но нарвался на BS матрицы. И ведь я заранее искал библиотеку и примеры, так там никто не сказал, что они разной полярности бывают, а на Али как раз BS матриц больше, при чем значительно. Даже когда я ищу именно AS, половина результатов BS выдается. И вот я купил 16 штук таких и 16 микросхем.
     
    Последнее редактирование: 24 ноя 2021