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

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

  1. Delphin911

    Delphin911 Нерд

    Ну вроде разобрался я как располагать матрицы. В моем случае 2 в высоту х 8 в ширину, получается первая матрица крайняя правая нижняя, вторая крайняя правая верхняя, третья вторая с права нижняя, четвертая вторая справа верхняя и т.д.. В библиотеке пришлось Y прозеркалировать. Т.е. вместо Y=0 надо делать Y=7, вместо Y=1 - Y=6 и т.д. Ну во всяком случае техт выводится как надо. НО! Какая-то странность. Если течт короткий, то строка бежит не мерцает. Чем длиннее текст, тем сильнее начинает мерцать надпись, когда она все больше выводится на экран. За основу я взял стандартную функцию из библиотеки DrawText. Вот как у меня получилось:
    Код (C++):
    //-------------Библиотеки
    #include <MD_MAXPanel.h>
    #include "Font5x3.h"

    //-------------Константы
    const MD_MAX72XX::moduleType_t HARDWARE_TYPE = MD_MAX72XX::FC16_HW;
    const uint8_t X_DEVICES = 2;
    const uint8_t Y_DEVICES = 8;
    //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() {
      Serial.begin(115200);
      mp.begin();
      MATRIX_WIDTH = mp.getXMax();
      MATRIX_HEIGHT = mp.getYMax();
      mp.clear();
    }

    void loop() {
    int tspeed = 30;
    int tw = mp.getTextWidth("Abcdefg");
    tw = 0 - tw;
    char *frase = "Abcdefg";
    for (int i = MATRIX_HEIGHT; i >= tw; i--) {
    text(i, tspeed, frase);
    }
    }


    //Это собственно взято из примера по библиотеке
    void text(int i, int tsp, char *frase)
    {
      MD_MAX72XX::fontType_t *fontData;
      fontData = _5bite_rus;
      mp.setFont(fontData);
      mp.clear();
      mp.drawText(4, i, frase, MD_MAXPanel::ROT_90);
      delay(tsp);
    }
    Может подскажете почему такое может быть.
     
  2. b707

    b707 Гуру

    чем длиннее надпись, чем дольше занимает ее сдвиг
     
  3. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Не спроста же в аналоговом телевидении сперва передавали четные строки, а потом нечетные (или наоборот). Именно это радикально уменьшало мерцание без расширения полосы сигнала. Так что придумывайте что-то аналогичное.
     
  4. Рокки1945

    Рокки1945 Гуру

    тут поможет Паровозз с логическим анализатором!
     
  5. Delphin911

    Delphin911 Нерд

    Смысл понял, решение не понял. Как я уже писал у меня есть подобная поделка но на матрицах типа WS2821B 16x16. Там другая библиотека управляет и там мерцания нет. Но если вывод текста я оттуда взял, то вот бегущая строка никак не получается. Ну буду пытаться переработать.
     
  6. Delphin911

    Delphin911 Нерд

    Народ, так как эту черезстрочность осущесвить? Отрабатывать в один проход только четные скажем Х, а во второй проход только нечетные?
     
  7. b707

    b707 Гуру

    мерцании скорее всего из-за очень маленькой скорости вывода. Надо оптимизировать код по скорости
     
  8. Delphin911

    Delphin911 Нерд

    Так вопрос как? Я пока ничего там не наворачивал. Там одна функция, которая отрабатывает без задержек и отрисовывает текст со сдвигом на 1 пиксель каждое мгновение (или что там).