Views: 3114
LED панели на обычных регистрах типа 74HC595. Они выпускаются как монохромные так двух и полно цветные, особенность, что они предназначены для текстовой информации и имеют один уровень яркости. Общую яркость панелей легко регулировать, а вот если будет желание каждого пикселя, то тут надо извращаться. Для создания текстовых, бегущих строк это то что надо.
Мне попался в руки двухцветный модуль P10C4V12 (красные и зеленые светодиоды), с разрешением 16*35 RG.
Как они подключаются? По питанию проблем не будет, тут все просто, колодка, с детальным описание GND и VСС напряжение питания номинальное 5 вольт. Для подключения в комплекте идут комплекте два силовых проводов красного и черного цвета, а также интерфейсный шлейф.
Интерфейс подключения, представляет собой 16 пиновый соединитель, назначение выводов следующее:
Номер | Название | Назначение |
1 | OE | 0 – включено/ 1 – выключено (для всего модуля) |
2 | А | Вход дешифратора выбора строк |
3 | AT OK | |
4 | В | Вход дешифратора выбора строк |
5 | GND | |
6 | – | |
7 | GND | |
8 | CLK | Синхронизация байта |
9 | GND | |
10 | STB | Синхронизация блока данных |
11 | GND | |
12 | RED | Вход данных для красного цвета |
13 | GND | |
14 | GREEN | Вход данных для зеленого цвета |
15 | GND | |
16 | – |
Схема подключения к микроконтроллеру PIC24FJ64GA004 для тестирования двух модулей подключенных последовательно.
После подключения наступает самое интересное, это каким образом регистры выведены на светодиоды!!? После определенного периода секса с модулями было выяснено:
Электрическую схему я не разрисовывал, просто лень, главное понять принцип. Для работы модуля нужно лепить динамическую индикацию (как при работе с матрицами семисегментных индикаторов). Весь индикатор разбит скажем так на 4 ветки светодиодов + два цвета, это значит, что необходимо сделать развертку на 8 разрядов ( это применительно к семисегментным индикатором). На рисунке видно как китайцы за мудрили с подключением регистров, почему так я не понял, это видимо надо быть китайцем.
На рисунке мы видим, что имеются 4 (двухцветные линейки светодиодов), подключение регистров нарисовано стрелками, каждой группе дан условно номер. Надо понимать, что данные поступают например на 15 группу верхний ряд и по стрелкам проходят до нижней нулевой. Это если кому-то захочется создать свой алгоритм развертки. Какая особенность для переключения индикации строк нужно воспользоваться входами А и В, но самое главное в статике фокус не проходит, для того, чтобы получить индикацию, необходимо организовать постоянное переключение при загрузке каждой строки.
Сканы как выглядит работа библиотеки для управления индикацией на модуле:
ОЕ – используется для регулировки яркости дисплея. А и В видно как используется для включения работы индикации. CLK – это синхронизация, в каждой группе это 32 байта (у меня два модуля соединенных последовательно). STB – это импульс окончания загрузки данных в регистры и после него данные появляются на светодиодах (ну и типа мы их видим). RED и GREEN это соответственно сами данные которые надо отобразить в красном или зеленом цвете. Библиотека написана, чтобы можно было отобразить 4 комбинации цвета точки 0 – черный, 1 – красный, 2 – зеленый, 3 – желтый. Но Желтый на этом модуле на маленьком расстоянии смотрится не очень, а так всё работает.
Загрузка одной строки в модуль выглядит так:
Для загрузки всех светодиодов одного цвета надо 4 такие передачи (правда загрузку красного и зеленого цветов можно выполнять параллельно, но функция работы модуля, чтобы сделать индикацию гибкой этого не позволяет, поэтому тут будет описан вариант при необходимости загрузки двух цветов только в последовательном варианте). Для загрузки двух последовательно включенных модулей 16*64 будет выглядеть так:
Общий вид имеет вид.
Схемотехнику пришлось посмотреть, для управления индикацией строки китайцы применили обычные полевые транзисторы, а для разряда емкости светодиодов просто бросили резисторы, поэтому для работы с такой матрицей большую скорость не разгонишься. Хоть и регистры прекрасно работают с тактовой на мегагерцах, пришлось опустится на землю сделать обычный режим индикации, а иначе начинается видно (хоть и в темноте) подсветка параллельных строк светодиодов.
Во всех конструкциях я предпочитаю делать обновление дисплеев не ниже 100 Гц. если ниже, то это уже видно мерцание и раздражает глаза, как на телевизорах или дисплеях где частота обновления 50-60 Гц. Поэтому у меня на PIC24 (почему 24, просто он был под рукой) частота получилась 125 Гц, так просто делители настроились в таймерах при тактовой 32 МГц.
Период развертки, можно видеть по сигналу B:
Библиотека
Инициализация настройка, управление
void OpenSPI1(void); – инициализация интерфейса SPI передача данных в матрицу
void PWM_Init(void); – настройка Output Compare для работы в режиме ШИМ, регулировка общей яркости дисплея.
void indic (void); – функция динамической индикации, её помещаем в цикл прерывания таймера
/*Формирование временных интервалов*/ void __attribute__((__interrupt__, no_auto_psv)) _T2Interrupt(void) { //------------------------------------------------------------------------------ indic (); // развертка индикатора //------------------------------------------------------------------------------ if(sleep_mode && count_time_sleep<8000)count_time_sleep++; else { count_time_sleep=0; sleep_mode=0; // спяшим режимом } //------------------------------------------------------------------------------ count_time_arrow++; // таймер управления стрелкой //------------------------------------------------------------------------------ IFS0bits.T2IF = 0; // сбросить флаг }
Вариант настройки таймера для тактовой 32 Мгц
//------------------------------------------------------------------------------ /*настройка таймера*/ // 32000000/2/8 = 2000000 Гц T2CON = 0b1010000000010000; /* |||||||||||||||+------- Unimplemented: * ||||||||||||||+-------- TCS: 0 = Internal clock (FP) * |||||||||||||+--------- Unimplemented: * ||||||||||||+---------- T32: 0 = Timerx and Timery act as two 16-bit timers * ||||||||||++----------- TCKPS<1:0>: 01 = 1:8 * |||||||||+------------- TGATE:0 = Gated time accumulation is disabled * |||++++++-------------- Unimplemented: * ||+-------------------- TSIDL:1 = Discontinues module operation when device enters Idle mode * |+--------------------- Unimplemented: * +---------------------- TON: 1 = Starts 16-bit Timerx */ TMR2 = 0; // PR2 = 1000; // 5 000 Гц для индикации 10 ступеней яркости IFS0bits.T2IF = 0; // сбросить флаг IPC1bits.T2IP = 4; // приоритет 4 IEC0bits.T2IE = 1; // разрешить прерывание //------------------------------------------------------------------------------
void BrightnessControl(unsigned int brightness); – функция регулировка яркости значение 0-1000, для более менее получения плавности.
Рисование примитивов
void point (unsigned int X, unsigned int Y, unsigned int tip, unsigned int color); – функция рисования точки
где : X-Y координаторы точки, tip – тип прорисовки с цветом пикселя, color – 0-черный, 1-красный, 2-зеленый, 3- желтый.
void line ( int x0, int y0, int x1, int x1, int tip, int color); – функция рисования линии алгоритм Брезенхема
где : x0, y0 – начальные координаторы линии, x1-x1 – конечные точки линии, tip – тип прорисовки с цветом пикселя, color – 0-черный, 1-красный, 2-зеленый, 3- желтый.
void Circle( int cx, int cy , int radius, int tip, int color); – функция рисования окружности
где : cx, cy – координаторы центра, radius – радиус, tip – тип прорисовки с цветом пикселя, color – 0-черный, 1-красный, 2-зеленый, 3- желтый.
void rectangle ( int x0, int y0, int sh, int vs, int filling, int tip, int color); – функция рисования прямоугольника.
где : X-Y координаторы точки, x1-x1 – ширина и высота прямоугольника, tip – тип прорисовки с цветом пикселя, color – 0-черный, 1-красный, 2-зеленый, 3- желтый.
Эффекты
void FAIDER (unsigned int speed, unsigned int mode); // файдер – функция плвного гашения и увеличения яркости дисплея.
void delaym (unsigned int delay); // регулируемый делай, для фейдера
void HRANSKRIN (void); // хранитель экрана, если необходима такая функция
void svernut (void); // свернуть экран, типа сворачивания изображения, для очистки
void FastClean (void); // быстрая очистка
Тестовые функции
void Cursor (char Xp, char Yp);
void Symbol (unsigned char cod, int shi, int vis, unsigned char ots, unsigned int tip, unsigned int color); // прорисовка символа
void scrolling(const char *str, unsigned int window, unsigned int color); //бегущая строка
void StringCur(const char *str, int shi, int vis, unsigned int tip, unsigned int color); //вывод строки с положения курсора
void String (const char *str, unsigned int shi, unsigned int vis, int X, unsigned int Y, unsigned int tip, unsigned int color) ; // String – вывод на дисплей строк c любой точки дисплея
// преобразование и вывод чисел
void BinDec(long data, char zap, char nul, char mes, char ras, int shi, int vis, int color); // вывод на дисплей/режим
Библиотека “картинок”
Дополнительные функции для прорисовки картинок
void PIC_BinDec(long data, int x, int y, int mode, int tip, int color); // вывод на дисплей/режим
void PIC_Symbol (int chislo, int x, int y, int tip, int color); // для больших цифр
void pictureRLE (const char *mas, int Xs, int Ys, int tip, int color); // прорисовка примитивов
Файлы для загрузки
LED модуль P10C4V12 — графическая библиотека v.1.2 12.41 KB 215 downloads
LED модуль P10C4V12 — графическая библиотека v.1.2 ...LED модуль P10C4V12 — дополнение к графической библиотеки v.1.2 6.07 KB 155 downloads
LED модуль P10C4V12 — дополнение к графической библиотеки...Продолжение возможно…
Это может быть интересно
- DS18B20 – удаленный контроль температурыViews: 3042 Контроль температуры с использованием датчиков температуры DS18B20 и платы ILLISSI-4B-09-primum Проект позволяет подключать к плате ILLISSI-4B-09-primum до 16 датчиков температуры DS18B20, удаленных более 300 метров, и выводить информацию …
- Arduino LCD + STONE STVI056WT-01 + Strain gaugeViews: 461 Author li grey email: greyli1987@outlook.com The strain assessment instrument is used to assess the degree of corresponding muscle strain by obtaining the muscle surface action potential through silver …
- Индикатор температурыViews: 2673 Проект для начинающих, на демо плате BB-2T3D-01. Простой индикатор температуры. Проект никак не задумывался, просто на витрину магазин Ворон нужна была демонстрационная модель на макетной плате, чего нибудь работающего. Остановились на индикаторе …
- Простой цифровой регулятор мощностиViews: 6763 Простой регулятор мощности с цифровой индикацией. Этот проект создан как обучающий, для ознакомления с основами построения сетевых регуляторов мощности. Устройства подобного типа можно использовать для управления освещением, скоростью …
- Инфракрасный датчик движения, PIR-sensorViews: 3099 Домашняя автоматика предполагает наличие датчиков движения, которые способны контролировать движения человека. Самым простым и доступным устройством позволяющие контролировать изменения ИК-излучения, это ПИР-сенсоры. На текущий момент доступны не дорогие модели D203B, D204B, D205B. Все …
- Ultrasonic Level Meters – ULM –53LViews: 722 Измерение расстояния при помощи ультра звукового датчика ULM–53L–10. Диапазон измерения от 0,5 м до 10 м, полностью пластмассовый излучатель PVDF, механическое соединение фланцем из полиэтилена HDPE (исполнение “N”) Характеристики …
- Проект с использованием MCC часть 12-1Views: 955 В настоящее время без визуализации информации уже не интересно. Поэтому научимся выводить информацию на дисплей. Для это возьмет простенький OLED RET012864E/REX012864J я такой приобретал в фирме “Гамма-Украина”, описание можно …
- PIC18F25K42 – v. A001 – выявленные баги.Views: 615 Модуль I2C Не работает при использовании в стандартной конфигурации MCC. Требует особой нестандартной конфигурации и управления для нормальной работы. Обойти Обход проблемы возможен библиотека см статью. Модуль ADC2 На …
- WiFi ESP8266 – AT команды связанные с функцией TCP/IP (v.1.6.1)Views: 5061 AT команды связанные с функцией TCP/IP В этом разделе описаны команды которые позволяют устанавливать соединения между серверами и клиентами в сети. Приведено описание команд и примеры их выполнения. …
- Проект с использованием MCC часть 02Views: 2295 Когда мы запустили конфигуратор, самое главное понять, что с этим делать и как проверить, то что мы делаем работает или нет. Для начала настроим регистры конфигурации микроконтроллера и настроем …