Библиотека MAX7219, которая может компенсировать плохо спроектированную/неправильно подключенную панель 8x32?

У меня есть этот пример кода:

#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>


#define MAX_DEVICES 4
#define CLK_PIN   11
#define DATA_PIN  12
#define CS_PIN    10

MD_Parola P = MD_Parola(DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);

void setup(void) {
  P.begin();
  P.print("PPPPPPPP");
}

void loop(void) {
}

И вот как загорается дисплей:

Я предполагаю, что код отображает текст неправильно, потому что производитель дисплея подключил отдельные дисплеи 8x8 «не так, как ожидает любая библиотека» (т. е. красным я обозначил адреса столбцов для моего дисплея, а зеленым — то, какими они должны быть, чтобы эта библиотека правильно отображала текст).

У меня два вопроса:

  1. Существует ли хорошая графическая библиотека Arduino, которая позволила бы мне программно исправить проблему адресации, характерную для моего дисплея?
  2. Поскольку в будущем я планирую сделать дисплей 16x64 из 4 таких, то есть ли библиотека, способная сделать это (т.е. иметь вертикальный размер шрифта 12-16 пикселей)?

, 👍-1

Обсуждение

Ни одно программное обеспечение не будет работать должным образом, если не работает оборудование., @Ignacio Vazquez-Abrams

@IgnacioVazquez-Abrams Я представляю, что если бы была графическая библиотека, которая позволяла бы мне визуализировать пиксели в буфере памяти, а не напрямую на оборудовании, то я мог бы компенсировать этот аппаратный баг, используя библиотеку LedControl и вызывая что-то вроде setColumn((7-addr&0x7)+addr&252,value). Так есть ли библиотека, которая позволяет визуализировать пиксели в буфере памяти?, @user389238

[Это](https://www.gammon.com.au/forum/?id=11516) может помочь. Трудно сказать, плохое ли у вас оборудование или плохая библиотека., @Nick Gammon


2 ответа


1

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

Посмотрите на библиотеку, она, скорее всего, сопоставляет входной буфер с сегментной/точечно-матричной информацией. Поиграйтесь с этим.

Автор сделал 99% работы за вас. Вам нужно просто закончить последний 1%.

,

Вы имеете в виду изменить код в самой библиотеке? Это несколько накладывает на меня бремя обслуживания, чтобы поделиться форком пропатченной библиотеки Parola с моим кодом, пока я не передам эти изменения Parola в восходящем направлении, а нисходящий поток (т. е. Arduino Web IDE) не подхватит их. Поэтому я бы предпочел использовать библиотеку, которая может справиться с этой проблемой из коробки, если таковая имеется., @user389238

Решение очень простое: поменять местами биты. Поэтому вам просто нужно написать функцию, которая меняет местами бит 7 <-> бит 0, бит 6 <-> бит 1, бит 5 <-> бит 2, бит 4 <-> бит 3. Это очень просто сделать., @dannyf


0

У меня была та же проблема. Это проблема конструкции оборудования. Вероятно, поэтому эти вещи были такими дешевыми на EBAY.

Эти штуки смещают по одному биту за раз по змеевидной схеме. Они были неправильно подключены. Их нужно было подключить так, чтобы отображать биты

1-8 in col 1, 
9-16 in col 2,
17-24 in col 3,
25-32 in col 4,
33-40 in col 5,
41-48 in col 6,
49-56 in col 7,
57-64 in col 8.

однако они были запрограммированы на

1-8 in col 8, 
9-16 in col 7,
17-24 in col 6,
25-32 in col 5,
33-40 in col 4,
41-48 in col 3,
49-56 in col 2,
57-64 in col 1.

Это можно исправить программно с небольшими проблемами. Чипы, которые они использовали, по сути, являются сдвиговыми регистрами. Но у них нет возможности очищать экран. Вы могли бы использовать некоторые трюки с таймингом, чтобы нарисовать весь дисплей, затем сделать паузу, а затем нарисовать весь дисплей снова. Это единственный способ, которым, как я вижу, можно добиться движения. Вы бы почувствовали быстрое размытие движения между каждым движением. Как правило, нежелательно.

Ни одно программное обеспечение не будет работать должным образом, если не работает оборудование. – Игнасио Васкес-Абрамс 3 декабря 2017 г. в 20:26

,