Решил я сделать светодиодную матрицу на MCP23017 и Arduino Pro Mini. Схема:
Код (тестовый, написанный в Ардуино ИДЕ):
Спойлер
Код: Выделить всё
#include <Wire.h>
#include "Adafruit_MCP23017.h"
Adafruit_MCP23017 mcp;
int i = 0;
byte A = 0;
byte B = 0;
uint16_t Data;
const byte bitmap[] PROGMEM = {
0x00,0x0E,0x06,0x0A,0x10,0x20,0x00,0x00
};
void setup() {
mcp.begin(); // use default address 0
mcp.pinMode(0, OUTPUT);
mcp.pinMode(1, OUTPUT);
mcp.pinMode(2, OUTPUT);
mcp.pinMode(3, OUTPUT);
mcp.pinMode(4, OUTPUT);
mcp.pinMode(5, OUTPUT);
mcp.pinMode(6, OUTPUT);
mcp.pinMode(7, OUTPUT);
mcp.pinMode(8, OUTPUT);
mcp.pinMode(9, OUTPUT);
mcp.pinMode(10, OUTPUT);
mcp.pinMode(11, OUTPUT);
mcp.pinMode(12, OUTPUT);
mcp.pinMode(13, OUTPUT);
mcp.pinMode(14, OUTPUT);
mcp.pinMode(15, OUTPUT);
}
void loop() {
A = 1 << i;
A=~A;
B = pgm_read_byte(&bitmap[i]);
Data = A << 8 | B;
mcp.writeGPIOAB(Data);
i++;
if (i>7) i = 0;
delay(1);
}А что получилось:
"Изображение" как-бы наплывает на пиксели, находящиеся справа. То есть в любом месте можно зажечь светодиод и справа от него так же будет светится еще один светодиод только на много тусклее. И чем выше частота обновления, тем выше яркость этих "двойников". Может кто знает с чем это может быть связано?
P.S. Может есть готовая библиотека для светодиодных матриц на MCP23017?
Добавлено after 18 minutes 50 seconds:
Я сделал предположение что обновление портов A и B MCP23017 делает не одновременно, а с небольшой задержкой. По этому решил сделать некоторое "обнуление" портов:
void loop() {
A = 1 << i;
A=~A;
B = pgm_read_byte(&bitmap);
Data = A << 8 | B;
mcp.writeGPIOAB(0b1111111100000000);
mcp.writeGPIOAB(Data);
i++;
if (i>7) i = 0;
delay(1);
}
Лишние светодиоды перестали гореть, но частота обновления понизилась и яркость упала. Может есть какое-то другое решение данной проблемы?
