LED модуль 16х16 каскадное подключение
- Войдите на сайт для отправки комментариев
Чт, 06/08/2015 - 01:58
Здравствуйте, имеб два вот таких модуля подключеных каскадно:

Никак не могу выводить "изображения" используя 16х32 матрицу, вместо этого второй модуль дублирует первый
Печалька...
а как подключаешь? 1 модуль к ардуине, 2 к 1 модулю?
а как подключаешь? 1 модуль к ардуине, 2 к 1 модулю?
Да, второй подключаю к первому, а первый к ардуине, но все примеры что есть только дают дублирующую панель
Может быть там есть какой-то сигнал типа chip_select, module_enable, module_address ?
кинь ссылку на плату
http://dvrobot.ru/forum/blog/2/entry-138/
Вот ссылка с примером, но это для 1 платы
Вот как выходит, а нужно чтобы я мог использовать это как 16х32
код расчитан на 16х16. что ты увидишь на 16х32? а во вторых. там где out цепляешь к in второй платы?
я понимаю что код расчитан на 1 плату, но никак не могу адаптировать это для 2х плат
Да, идет так - arduino к In первой платы -> Out первой платы к In второй платы
Полная цоколёвка. https://bytedebugger.wordpress.com/2015/01/28/tutorial-how-to-use-dot-le...
Я думаю вам надо послать две разные картинки друг за другом.
Скорее всего клок просто модулей соединить и данные с выхода первого на вход второго.
с кодом разбираться надо. рисует от линиями. вопрос как ты будешь. сначала первый отрисовывать а потом второй
но скорее всего придется также только линия будет не 16 пикселей, а 32. у тебя должно быть 4 буфера по байту, если делать аналогично.
предварительно формируешь буфер. например так. зависит от того как ты будешь формировать изначальные данные. если как внизу то data должен быть в 2 раза больше с данными для 2 дисплея
Полная цоколёвка. https://bytedebugger.wordpress.com/2015/01/28/tutorial-how-to-use-dot-le...
Я думаю вам надо послать две разные картинки друг за другом.
Скорее всего клок просто модулей соединить и данные с выхода первого на вход второго.
Я тот пример уже вдоль и поперек испробовал, и массывы расширял и отправлял несколько раз и все тщетно
Решено! Спасибо больше! Вот мой текущий код измененный по твоим рекомендациям:
#include <Arduino.h> #define LEDARRAY_D 2 #define LEDARRAY_C 3 #define LEDARRAY_B 4 #define LEDARRAY_A 5 #define LEDARRAY_G 6 #define LEDARRAY_DI 7 #define LEDARRAY_CLK 8 #define LEDARRAY_LAT 9 //Плата подключены так: плата1 к ардуино, плата2 к плата1 unsigned char Display_Buffer[4]; const unsigned char Word1[1][64] = { 0xFF,0x80,0x80,0x9f,0x9f,0x9f,0x9f,0x80,0x80,0x9f,0x9f,0x9f,0x9f,0x80,0x80,0xFF,//Изображение плата 2 0xFF,0x01,0x01,0xff,0xff,0xff,0xff,0x03,0x03,0xff,0xff,0xff,0xff,0x01,0x01,0xFF,//Изображение плата 2 0x80,0x80,0x80,0x9f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//Изображение плата 1 0x01,0x01,0x01,0xff,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//Изображение плата 1 }; const unsigned char Init_Display[1][64] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; void setup() { pinMode(LEDARRAY_D, OUTPUT); pinMode(LEDARRAY_C, OUTPUT); pinMode(LEDARRAY_B, OUTPUT); pinMode(LEDARRAY_A, OUTPUT); pinMode(LEDARRAY_G, OUTPUT); pinMode(LEDARRAY_DI, OUTPUT); pinMode(LEDARRAY_CLK, OUTPUT); pinMode(LEDARRAY_LAT, OUTPUT); Display(Init_Display); } void loop() { Display(Word1); } void Display(const unsigned char dat[][64]) { unsigned char i; for( i = 0 ; i < 16 ; i++ ) { digitalWrite(LEDARRAY_G, HIGH); Display_Buffer[0] = dat[0][i]; Display_Buffer[1] = dat[0][i+16]; Display_Buffer[2] = dat[0][i+32]; Display_Buffer[3] = dat[0][i+48]; Send(Display_Buffer[1]); Send(Display_Buffer[0]); Send(Display_Buffer[3]); Send(Display_Buffer[2]); digitalWrite(LEDARRAY_LAT, HIGH); delayMicroseconds(1); digitalWrite(LEDARRAY_LAT, LOW); delayMicroseconds(1); Scan_Line(i); digitalWrite(LEDARRAY_G, LOW); delayMicroseconds(500); } } void Scan_Line( unsigned char m) { switch(m) { case 0: digitalWrite(LEDARRAY_D, LOW); digitalWrite(LEDARRAY_C, LOW); digitalWrite(LEDARRAY_B, LOW); digitalWrite(LEDARRAY_A, LOW); break; case 1: digitalWrite(LEDARRAY_D, LOW); digitalWrite(LEDARRAY_C, LOW); digitalWrite(LEDARRAY_B, LOW); digitalWrite(LEDARRAY_A, HIGH); break; case 2: digitalWrite(LEDARRAY_D, LOW); digitalWrite(LEDARRAY_C, LOW); digitalWrite(LEDARRAY_B, HIGH); digitalWrite(LEDARRAY_A, LOW); break; case 3: digitalWrite(LEDARRAY_D, LOW); digitalWrite(LEDARRAY_C, LOW); digitalWrite(LEDARRAY_B, HIGH); digitalWrite(LEDARRAY_A, HIGH); break; case 4: digitalWrite(LEDARRAY_D, LOW); digitalWrite(LEDARRAY_C, HIGH); digitalWrite(LEDARRAY_B, LOW); digitalWrite(LEDARRAY_A, LOW); break; case 5: digitalWrite(LEDARRAY_D, LOW); digitalWrite(LEDARRAY_C, HIGH); digitalWrite(LEDARRAY_B, LOW); digitalWrite(LEDARRAY_A, HIGH); break; case 6: digitalWrite(LEDARRAY_D, LOW); digitalWrite(LEDARRAY_C, HIGH); digitalWrite(LEDARRAY_B, HIGH); digitalWrite(LEDARRAY_A, LOW); break; case 7: digitalWrite(LEDARRAY_D, LOW); digitalWrite(LEDARRAY_C, HIGH); digitalWrite(LEDARRAY_B, HIGH); digitalWrite(LEDARRAY_A, HIGH); break; case 8: digitalWrite(LEDARRAY_D, HIGH); digitalWrite(LEDARRAY_C, LOW); digitalWrite(LEDARRAY_B, LOW); digitalWrite(LEDARRAY_A, LOW); break; case 9: digitalWrite(LEDARRAY_D, HIGH); digitalWrite(LEDARRAY_C, LOW); digitalWrite(LEDARRAY_B, LOW); digitalWrite(LEDARRAY_A, HIGH); break; case 10: digitalWrite(LEDARRAY_D, HIGH); digitalWrite(LEDARRAY_C, LOW); digitalWrite(LEDARRAY_B, HIGH); digitalWrite(LEDARRAY_A, LOW); break; case 11: digitalWrite(LEDARRAY_D, HIGH); digitalWrite(LEDARRAY_C, LOW); digitalWrite(LEDARRAY_B, HIGH); digitalWrite(LEDARRAY_A, HIGH); break; case 12: digitalWrite(LEDARRAY_D, HIGH); digitalWrite(LEDARRAY_C, HIGH); digitalWrite(LEDARRAY_B, LOW); digitalWrite(LEDARRAY_A, LOW); break; case 13: digitalWrite(LEDARRAY_D, HIGH); digitalWrite(LEDARRAY_C, HIGH); digitalWrite(LEDARRAY_B, LOW); digitalWrite(LEDARRAY_A, HIGH); break; case 14: digitalWrite(LEDARRAY_D, HIGH); digitalWrite(LEDARRAY_C, HIGH); digitalWrite(LEDARRAY_B, HIGH); digitalWrite(LEDARRAY_A, LOW); break; case 15: digitalWrite(LEDARRAY_D, HIGH); digitalWrite(LEDARRAY_C, HIGH); digitalWrite(LEDARRAY_B, HIGH); digitalWrite(LEDARRAY_A, HIGH); break; default : break; } } void Send( unsigned char dat) { unsigned char i; digitalWrite(LEDARRAY_CLK, LOW); delayMicroseconds(1); ; digitalWrite(LEDARRAY_LAT, LOW); delayMicroseconds(1); ; for( i = 0 ; i < 8 ; i++ ) { if( dat&0x01 ) { digitalWrite(LEDARRAY_DI, HIGH); } else { digitalWrite(LEDARRAY_DI, LOW); } delayMicroseconds(1); digitalWrite(LEDARRAY_CLK, HIGH); delayMicroseconds(1); digitalWrite(LEDARRAY_CLK, LOW); delayMicroseconds(1); dat >>= 1; } }Тут очень удобный модуль для работы такой платы:
https://bytedebugger.wordpress.com/2015/01/28/tutorial-how-to-use-dot-led-matrix-display-with-arduino/
Но он не адаптирован для каскадного подключения, попробую адаптировать его
пожалуйста. кидай фотку посмотреть что получилось
а вообще код можно переделать, сделать аккуратнее чтоли, не такой большой
особенно scan_line понравилась. ну так дубово написано))
да и это смешно)):
const unsigned char Init_Display[1][64] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, };сделать можно без этого массива очистки индикатора
да и данные хранить лучше во флеше, а то аперативки не хватит когда сделаешь их не одну-две-три
Переделал библиотеку под две матрицы
Ссылка на файл: https://onedrive.live.com/redir?resid=EC3CE45CCC96627E!106940&authkey=!AE4BdSfHA7CEtfY&ithint=file%2c7z
Оригинал уже скидывал выше, пример использования там же, только немного изменены функции
led->setScene(Scene,Scene); // теперь задаются 2 массива для каждой из матриц
led->setLedOn2(int x, int y); // добавлены функции для включения и выключения диода для второй матрицы
ну переделай ты scan
возьми листок и ручку. и запиши все что на выходах в зависимости от цифры и поймешь
0 0000
1 0001
...