Промінь своїми руками із світлодіодної матриці. Адресні світлодіодні матриці

Іноді потрібно підключити до мікроконтролера кілька семисегментних індикаторів або світлодіодну матрицю, для відображення інформації використовується динамічна індикація. Суть динамічної індикації полягає у послідовному виведенні інформації на індикатори. Нижче на схемі представлений приклад з'єднання кількох семисегментних індикаторів (для прикладу із загальним катодом) для реалізації динамічної індикації, взагалі з урахуванням точки виходить 8 сегментів, але по-старому їх називають саме так. Всі висновки (аноди) однойменних сегментів з'єднують разом, разом 8 ліній які через резистори підключають до мікроконтролера. Загальний катод кожного індикатора підключають до мікроконтролера через транзистор.


Алгоритм індикації наступний: спочатку встановлюємо на лініях необхідні логічні рівні в залежності від того, які сегменти треба включити на першому індикаторі (індикація зліва направо), при цьому високий логічний рівень для включення, низький для вимикання сегмента. Далі подаємо високий логічний рівень на базу транзистора VT1, тим самим загальний катод першого індикатора підключається до загального дроту, в цей момент загоряються сегменти, на анодах яких є логічна одиниця. Через певний час (пауза) індикатор відключаємо, подавши низький логічний рівень на базу транзистора, потім знову змінюємо логічні рівні на лініях відповідно до інформації, що призначена для другого індикатора, і подаємо сигнал включення на транзистор VT2. Таким чином, по порядку у круговому циклі комутуємо всі індикатори, от і вся динамічна індикація.

Для отримання цілісного зображення без мерехтіння, перемикання необхідно виконувати з великою швидкістю, для виключення мерехтіння світлодіодів частоту оновлення необхідно встановлювати від 70 Гц і більше, я зазвичай встановлюю 100 Гц. Для вищерозглянутої конструкції пауза розраховується так: для частоти 100 Гц період дорівнює 10 мс, всього 4 індикатори, відповідно час світіння кожного індикатора встановлюємо на рівні 10/4=2,5 мс. Існують багаторозрядні семисегментні індикатори в одному корпусі, в яких однойменні сегменти з'єднані всередині корпусу, природно для їх використання необхідно застосовувати динамічну індикацію.

Для реалізації динамічної індикації необхідно скористатися перериваннями щодо переповнення одного з таймерів. Нижче наведено код з використанням таймера TMR0:

;Реалізація динамічної індикації для 4-х семисегментних індикаторів ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; swapf STATUS,W; clrf STATUS; movwf STATUS_TEMP; ; bcf ind1 ;вимикання 1-го індикатора bcf ind2 ;вимикання 2-го індикатора bcf ind3 ;вимикання 3-го індикатора bcf ind4 ;вимикання 4-го індикатора; incf shet,F ;інкремент регістру shet movlw .5 ;перевірка вмісту регістру shet xorwf shet,W ;на рівність числу 5 btfss STATUS,Z ; goto met1; число в регістрі shet не дорівнює 5 movlw .1; число в регістрі shet дорівнює 5: запис числа 1 movwf shet; в регістр shet; met1 movlw .1 ;перевірка вмісту регістру shet xorwf shet,W ;на рівність числу 1 btfss STATUS,Z ; goto met2; число в регістрі shet не дорівнює 1: перехід на met2 movf datind1,W; число в регістрі shet дорівнює 1: копіювання movwf PORTB; вмісту регістру datind1 в регістр PORTB bsf ind1; включення 1-го індикатора met2. вмісту регістру shet xorwf shet,W; на рівність числу 2 btfss STATUS,Z; goto met3 ;число в регістрі shet не дорівнює 2: перехід на met3 movf datind2,W ;число в регістрі shet дорівнює 2: копіювання movwf PORTB ;вміст регістру datind2 в регістр PORTB bsf ind2 ;включення 2-го індикатора goto exxit met3 movlw .3 ;перевірка вмісту регістру shet xorwf shet,W ;на рівність числу 3 btfss STATUS,Z ; goto met4 ;число в регістрі shet не дорівнює 3: перехід на met4 movf datind3,W ;число в регістрі shet дорівнює 3: копіювання movwf PORTB ;вміст регістру datind3 в регістр PORTB bsf ind3 ;включення 3-го індикатора goto exxit met4 movf datind4,W ;копіювання вмісту регістру datind3 movwf PORTB ;в регістр PORTB bsf ind4 ;включення 4-го індикатора; movlw .100; запис числа 156 в регістр таймера TMR0 movwf TMR0; ; movwf STATUS; swapf W_TEMP,F; swapf W_TEMP,W; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Основна програма ................. movlw b"11010011" ;OPTION_REG, цим встановлюємо внутрішній ;встановлюємо коефіцієнт предделителя 1:16 ; clrf shet ;обнулення регістру shet, перед запуском;переривань по переповненню TMR0, виконується; clrf datind1 ;очищення регістрів виведення інформації на clrf datind2 ;індикатори, рівнозначно виключенню clrf datind3 ;індикаторів, так як індикатори із загальним clrf datind4 ;катодом; bcf INTCON,T0IF ;скидання прапора переривання по переповненню TMR0 bsf INTCON,T0IE ;дозвіл переривань по переповненню TMR0 bsf INTCON,GIE ;дозвіл глобальних переривань; movlw b"00000110"; приклад виведення числа 13,52 movwf datind1; movlw b"11001111"; movwf datind2; movlw b"01101101"; movwf datind3; movlw b"01011011"; movwf datind4; ; . ................; .................; .................; ; end ;кінець всієї програми;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Реалізація динамічної індикації для 4-х семисегментних індикаторів

Частота тактового генератора для прикладу 4 МГц, машинний цикл 1 мкс

org 0000h ;почати виконання програми з адреси 0000h

goto Start ;перехід на мітку Start

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Підпрограма обробки переривань

org 0004h ;почати виконання підпрограми з адреси 0004h

movwf W_TEMP; збереження значень ключових регістрів

swapf STATUS,W;

movwf STATUS_TEMP;

bcf ind1 ;вимкнення 1-го індикатора

bcf ind2 ;вимикання 2-го індикатора

bcf ind3 ;вимкнення 3-го індикатора

bcf ind4 ;вимкнення 4-го індикатора

incf shet,F; інкремент регістру shet

movlw .5 ;перевірка вмісту регістру shet

xorwf shet,W ;на рівність числу 5

btfss STATUS,Z;

goto met1 ;число в регістрі shet не дорівнює 5

movlw .1; число в регістрі shet дорівнює 5: запис числа 1

movwf shet; в регістр shet

met1 movlw .1 ;перевірка вмісту регістру shet

xorwf shet,W ;на рівність числу 1

btfss STATUS,Z;

goto met2 ;число в регістрі shet не дорівнює 1: перехід на met2

movf datind1,W ;число в регістрі shet одно 1: копіювання

movwf PORTB ;вміст регістру datind1 в регістр PORTB

bsf ind1 ;включення 1-го індикатора

goto exxit ;перехід на мітку exxit

met2 movlw .2 ;перевірка вмісту регістру shet

xorwf shet,W ;на рівність числу 2

btfss STATUS,Z;

goto met3; число в регістрі shet не дорівнює 2: перехід на met3

movf datind2,W ;число в регістрі shet дорівнює 2: копіювання

movwf PORTB ;вміст регістру datind2 в регістр PORTB

bsf ind2 ;включення 2-го індикатора

goto exxit ;перехід на мітку exxit

met3 movlw .3 ;перевірка вмісту регістру shet

xorwf shet,W ;на рівність числу 3

btfss STATUS,Z;

goto met4; число в регістрі shet не дорівнює 3: перехід на met4

movf datind3,W ;число в регістрі shet дорівнює 3: копіювання

movwf PORTB ;вміст регістру datind3 в регістр PORTB

bsf ind3 ;включення 3-го індикатора

goto exxit ;перехід на мітку exxit

met4 movf datind4,W ;копіювання вмісту регістру datind3

movwf PORTB; в регістр PORTB

bsf ind4 ;включення 4-го індикатора

exxit bcf INTCON,T0IF ;скидання прапора переривання по переповненню TMR0

movlw .100 ;запис числа 156 в регістр таймера TMR0

swapf STATUS_TEMP,W ;відновлення вмісту ключових регістрів

swapf W_TEMP,F;

swapf W_TEMP,W;

retfie ;вихід з підпрограми переривання

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Основна програма

Start ................. ;первинне налаштування регістрів

................. ;спеціального призначення

.................

bsf STATUS,RP0 ;запис двійкового числа 11010011 в регістр

movlw b"11010011" ;OPTION_REG, тим самим встановлюємо внутрішній

movwf OPTION_REG ;джерело тактового сигналу для TMR0

bcf STATUS,RP0 ;включаємо розподільник перед TMR0

;встановлюємо коефіцієнт ділителя 1:16

clrf shet ;обнулення регістру shet, перед запуском

;переривань по переповненню TMR0, виконується

;одноразово, після включення живлення

clrf datind1 ;очищення регістрів виведення інформації на

clrf datind2 ;індикатори, рівнозначно вимкненню

clrf datind3 ;індикаторів, так як індикатори із загальним

clrf datind4 ;катодом

bcf INTCON,T0IF ;скидання прапора переривання по переповненню TMR0

bsf INTCON,T0IE ;дозвіл переривань по переповненню TMR0

bsf INTCON,GIE ;дозвіл глобальних переривань

movlw b"00000110"; приклад виведення числа 13,52

movlw b"11001111";

movlw b"01101101";

movlw b"01011011";

................. ;

................. ;

................. ;

end ;кінець всієї програми

В основній програмі спочатку налаштовуємо таймер за допомогою регістру OPTION_REG, раніше я розповідав про використання таймерів для . Очищаємо регістр shet, призначений для введення рахунку від 1 до 4, для кожного індикатора. Цей регістр інкрементується в підпрограмі обробки переривань і там же коригується (він рахуватиме від 1 до 4), тому дане очищення виконується одноразово після включення живлення. За цим регістром визначатимемо, який індикатор включатиме і видаватиме дані відповідні йому. Наступним кроком буде очищення регістрів зберігання інформації, чотири регістри dataind1,2,3,4 відповідні чотирма індикаторами. Очищення рівнозначне вимкненню індикаторів, так як у підпрограмі обробки переривань, вміст цих регістрів передається в регістр PORTB, якого підключені аноди індикаторів. Це необхідно для того, щоб на індикаторах не висвічувалося всяке сміття після дозволу переривань, в принципі цього можна і не робити, якщо відразу записувати правильну інформацію для виведення. Далі скидаємо прапор переривання по переповненню таймера, дозволяємо переривання по переповненню TMR0, і, нарешті, дозволяємо глобальні переривання.

У підпрограмі обробки переривань, перш за все вимикаємо всі індикатори (подавши низькі логічні рівні на бази транзисторів), тому що невідомо який із них включений. Виробляємо інкремент регістру shet, з перевіркою на рівність числу 5, за наявності такого збігу записуємо в регістр число 1, тому що необхідно вести рахунок від 1 до 4. Далі перевіряємо, яке саме число лежить у регістрі shet, за яким завантажуємо в PORTB дані з регістрів зберігання інформації (dataind) для відповідного індикатора та включаємо його. Після чого скидаємо прапор переривання по переповненню TMR0, записуємо число 100 у таймер (нижче наведено розрахунок цього значення), для тимчасової затримки та виходимо з обробника переривань. При першому перериванні включається перший індикатор, у другому перериванні другий і так кругового циклу. В основній програмі залишається лише завантажувати дані в регістри зберігання інформації для кожного індикатора. У підпрограмі переривань не забуваємо зберігати та відновлювати значення ключових регістрів, про це я писав у статті про .

Для виведення чисел краще використовувати генератор у вигляді таблиці даних. Наприклад, щоб вивести число 3456 на індикатори, його необхідно розбити на розряди, при цьому краще використовувати окремі регістри для зберігання чисел розрядів (від 0 до 9), далі прогнати ці регістри через знакогенератор, отримавши цим правильні байти (завантажуються в регістри dataind) для запалення відповідних сегментів.

Частоту тактового генератора приймаємо за 4 МГц, машинний цикл 1 мкс. Частота оновлення кожного індикатора нехай складе 100 Гц (період T=10 мс), відповідно, необхідна тимчасова затримка дорівнює 10/4 = 2,5 мс. Коефіцієнт розподільника для TMR0 встановлюємо рівним 1:16, при цьому максимально можлива затримка дорівнює 256х16 = 4096 мкс, а нам потрібна пауза 2,5 мс. Розрахуємо число для запису в TMR0: 256-((256х2,5)/4,096) = 256-156,25 = 99,75. Після заокруглення отримаємо число 100.

Нижче можна завантажити модель для програми Proteus, прошивку та вихідник з реалізацією динамічної індикації на 4-х розрядний індикатор із загальним катодом із застосуванням мікроконтролера PIC16F628A. Наприклад, на індикатор виводяться числа 0000; 0001; 0002; 13,52; 9764.

Тепер розглянемо підключення матриці з роздільною здатністю 8х8 точок (світлодіодів). Структуру матриці зазвичай розглядають як рядків і стовпців. На малюнку нижче у кожному стовпці з'єднані катоди всіх світлодіодів, а кожному рядку аноди. Рядки (8 ліній, аноди світлодіодів) через резистори підключають до мікроконтролера. Кожен стовпець (катоди світлодіодів) підключають до мікроконтролера через 8 транзисторів. Алгоритм індикації такий самий, спочатку встановлюємо необхідні логічні рівні на рядках, відповідно до того, які світлодіоди повинні горіти в стовпці, далі підключаємо перший стовпець (індикація зліва направо). Через певну паузу вимикаємо стовпець і змінюємо логічні рівні на рядках для відображення другого стовпця, далі підключаємо другий стовпець. І так по черзі комутуємо усі стовпці. Нижче представлена ​​схема підключення матриці до мікроконтролера.


Усього для підключення такої матриці потрібно 16 висновків мікроконтролера, що дуже багато, тому для скорочення керуючих ліній краще використовувати послідовні зсувні регістри.

Найпоширенішим послідовним регістром є мікросхема 74НС595, яка містить зсувний регістр для завантаження даних, і регістр зберігання через який дані передаються на вихідні лінії. Завантажувати дані в нього просто, встановлюємо логічний 0 на вході тактування SH_CP, далі встановлюємо логічний рівень на вході даних DS, після чого перемикаємо вхід тактування в 1, при цьому відбувається збереження значення рівня (на вході DS) всередині зсувного регістру. Одночасно із цим відбувається зсув даних на один розряд. Знову скидаємо виведення SH_CP в 0, встановлюємо необхідний рівень на вході DS і піднімаємо SH_CP в 1. Після повного завантаження зсувного регістру (8 біт), встановлюємо в 1 виведення ST_CP, в цей момент дані передаються в регістр зберігання і надходять на вихідні лінії Q0. Q7, після чого скидаємо виведення ST_CP. Під час послідовного завантаження дані зсуваються від Q0 до Q7. Висновок Q7' підключений до останнього розряду зсувного регістру, цей висновок можна підключити на вхід другої мікросхеми, таким чином можна завантажувати дані відразу дві і більше мікросхеми. Висновок OE перемикає вихідні лінії в третій (високоомний) стан, при подачі на нього логічного 1. Висновок MR призначений для скидання зсувного регістру, тобто встановлення низьких логічних рівнів на виходах тригерів регістру, що еквівалентно завантаженню восьми нулів. Нижче представлена ​​діаграма завантаження даних у мікросхему 74НС595, встановлення значення 11010001 на вихідних лініях Q0…Q7, за умови, що спочатку там були нулі:


Розглянемо підключення матриці 8×8 до мікроконтролера PIC16F628A за допомогою двох зсувних регістрів 74HC595, схема представлена ​​нижче:


Дані завантажуються в мікросхему DD2 (управління логічними рівнями на рядках, аноди світлодіодів) потім через виведення Q7' передаються в DD3 (управління стовпцями), спочатку завантажуємо байт для включення стовпця, потім байт з логічними рівнями на рядках. До вихідних ліній DD3 підключені транзистори комутують стовпці матриці (катоди світлодіодів). Нижче наведено код програми для виведення зображення на матрицю:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Реалізація динамічної індикації для матриці з роздільною здатністю 8х8 ;Частота тактового генератора для прикладу 4 МГц, машинний цикл 1 мкс org 0000h ;почати виконання програми з адреси 0000h goto Start ;перехід на мітку Start;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Підпрограма обробки переривань org 0004h ;почати виконання підпрограми з адреси 0004h movwf W_TEMP ;збереження значень ключових регістрів swapf STATUS,W ; clrf STATUS; movwf STATUS_TEMP; ; movwf FSR_osn ;у регістр FSR_osn movf FSR_prer,W ;відновлення раніше збереженого значення movwf FSR ;реєстру FSR з регістру FSR_prer ;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;; ;завантаження вмісту регістру stolb в мікросхему movf stolb,W ;копіювання вмісту регістру stolb movwf var ;у регістр var met2 btfsc var,0 ;встановлюємо висновок ds відповідно до btfss var,0 ; bcf ds; bcf sh_cp; rrf var,F ;зсув регістру var вправо, для підготовки;наступного біта goto met2 ;scetbit не дорівнює нулю: перехід на мітку met2 ;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;; ;завантаження вмісту регістру INDF в мікросхему;74HC595 (послідовний зсувний регістр) movf INDF,W ;копіювання вмісту регістра INDF movwf var ;в регістр var movlw .8 ;запис числа 8 в регістр scetbit, для відліку varc t ,7; встановлюємо виведення ds відповідно до bsf ds; значенням 7-го біта регістра var btfss var,7; bcf ds; bsf sh_cp ;тактуємо виведення sh_cp, для защіпки даних bcf sh_cp ; rlf var, F; зсув регістру var вліво, для підготовки; наступного біта decfsz scetbit, F; декремент з умовою регістра scetbit goto met1; scetbit не дорівнює нулю: перехід на мітку met1; bsf st_cp ;тактуємо виведення st_cp, передачі завантажених bcf st_cp ;байтів на вихідні лінії мікросхем 74HC595 ; bcf STATUS,C ;скидання біта C регістру статус перед зсувом rrf stolb,F ;зсув ліворуч регістру stolb ; incf FSR,F ;інкремент регістру FSR, підготовка наступного;реєстру для відправки даних на 74HC595 decfsz shet,F ;декремент з умовою регістра shet goto exxit ;реєстр shet не дорівнює 0: перехід на exxit movlw data1 ;реєстр першого movwf FSR ;реєстру зберігання інформації в регістр FSR movlw .8 ;запис числа 8 в регістр shet, для ведення movwf shet ;рахунки стовпців ; exxit bcf INTCON,T0IF ;скидання прапора переривання по переповненню TMR0 movlw . 124; запис числа 124 в регістр таймера TMR0 movwf TMR0; ; movf FSR,W ;збереження поточного значення регістру FSR movwf FSR_prer ;у регістр FSR_prer movf FSR_osn ,W ;відновлення раніше збереженого значення movwf FSR ;реєстру FSR з регістру FSR_osn ; swapf STATUS_TEMP,W ;відновлення вмісту ключових регістрів movwf STATUS ; swapf W_TEMP,F; swapf W_TEMP,W; ; retfie ;вихід з підпрограми переривання;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Основна програма Start ................. ;первинне налаштування регістрів................. ;спеціального призначення..... ............ bsf STATUS,RP0 ;запис двійкового числа 11010011 в регістр movlw b"11010010" ;OPTION_REG, тим самим встановлюємо внутрішній movwf OPTION_REG ;джерело тактового сигналу для TMR0 bcf STATUS,RP0 ;включ перед TMR0; встановлюємо коефіцієнт предделителя 1:8; movlw .8 ;запис числа 8 в регістр shet, перед запуском movwf shet ;переривань з переповнення TMR0, виконується;одноразово, після включення живлення movlw b"10000000" ;запис двійкового числа 10000000 в movwf stolb; стовпця; виконується одноразово, після включення харчування; movlw data1 ;запис адреси першого регістру (реєстри зберігання movwf FSR_prer ;інформації) в регістр FSR_prer, виконується;одноразово, після включення живлення; movlw .8 ;очищення 8-ми регістрів виведення інформації на movwf tmp ;матрицю, рівнозначно вимкненню movlw data1 ;матриці movwf FSR ; met3 clrf INDF; incf FSR,F; decfsz tmp,F; goto met3; ; bcf INTCON,T0IF ;скидання прапора переривання по переповненню TMR0 bsf INTCON,T0IE ;дозвіл переривань по переповненню TMR0 bsf INTCON,GIE ;дозвіл глобальних переривань; m1 movlw data1; приклад виведення літери R movwf FSR; movlw b"00000000"; movwf INDF; incf FSR,F; movlw b"01111111"; movwf INDF; incf FSR,F; movlw b"00001001"; movwf INDF; incf FSR,F; movlw b"00011001"; movwf INDF; incf FSR,F; movlw b"00101001"; movwf INDF; incf FSR,F; movlw b"01000110"; movwf INDF; incf FSR,F; movlw b"00000000"; movwf INDF; incf FSR,F; movlw b"00000000"; movwf INDF; ; .................; .................; .................; ; end ;кінець всієї програми;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Реалізація динамічної індикації для матриці з роздільною здатністю 8х8

Частота тактового генератора для прикладу 4 МГц, машинний цикл 1 мкс

org 0000h ;почати виконання програми з адреси 0000h

goto Start ;перехід на мітку Start

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Підпрограма обробки переривань

org 0004h ;почати виконання підпрограми з адреси 0004h

movwf W_TEMP; збереження значень ключових регістрів

swapf STATUS,W;

movwf STATUS_TEMP;

movf FSR,W ;збереження поточного значення регістру FSR

movwf FSR_osn; в регістр FSR_osn

movf FSR_prer,W ;відновлення раніше збереженого значення

movwf FSR ;реєстру FSR з регістру FSR_prer

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;74HC595 (послідовний зсувний регістр)

movf stolb,W ;копіювання вмісту регістру stolb

movwf var ;в регістр var

movlw .8 ;запис числа 8 в регістр scetbit, для відліку

movwf scetbit ;переданих бітів

met2 btfsc var,0 ;встановлюємо виведення ds відповідно до

bsf ds ;значенням 7-го біта регістра var

bsf sh_cp ;тактуємо виведення sh_cp, для защіпки даних

rrf var,F ;зсув регістру var вправо, для підготовки

; наступного біта

decfsz scetbit,F; декремент з умовою регістру scetbit

goto met2; scetbit не дорівнює нулю: перехід на мітку met2

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;74HC595 (послідовний зсувний регістр)

movf INDF,W ;копіювання вмісту регістру INDF

movwf var ;в регістр var

movlw .8 ;запис числа 8 в регістр scetbit, для відліку

movwf scetbit ;переданих бітів

met1 btfsc var,7 ;встановлюємо виведення ds відповідно до

bsf ds ;значенням 7-го біта регістра var

bsf sh_cp ;тактуємо виведення sh_cp, для защіпки даних

rlf var,F ;зсув регістру var вліво, для підготовки

; наступного біта

decfsz scetbit,F; декремент з умовою регістру scetbit

goto met1; scetbit не дорівнює нулю: перехід на мітку met1

bsf st_cp ;тактуємо висновок st_cp, передачі завантажених

bcf st_cp ;байтів на вихідні лінії мікросхем 74HC595

bcf STATUS,C ;скидання біта C регістру статус перед зсувом

rrf stolb,F ;зсув вліво регістру stolb

incf FSR,F ;інкремент регістру FSR, підготовка наступного

;реєстру для відправки даних на 74HC595

decfsz shet,F; декремент з умовою регістру shet

goto exxit; регістр shet не дорівнює 0: перехід на exxit

movlw data1 ;реєстр shet дорівнює 0: запис адреси першого

movwf FSR ;реєстру зберігання інформації в регістр FSR

movlw .8 ;запис числа 8 в регістр shet, для ведення

movwf shet ;рахунки стовпців

movlw b"10000000" ;запис двійкового числа 10000000 в

movwf stolb; регістр stolb, для включення 1-го стовпця

exxit bcf INTCON,T0IF ;скидання прапора переривання по переповненню TMR0

movlw .124 ;запис числа 124 в регістр таймера TMR0

movf FSR,W ;збереження поточного значення регістру FSR

movwf FSR_prer ;у регістр FSR_prer

movf FSR_osn ,W ;відновлення раніше збереженого значення

movwf FSR ;реєстру FSR з регістру FSR_osn

swapf STATUS_TEMP,W ;відновлення вмісту ключових регістрів

swapf W_TEMP,F;

swapf W_TEMP,W;

retfie ;вихід з підпрограми переривання

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Основна програма

Start ................. ;первинне налаштування регістрів

................. ;спеціального призначення

.................

bsf STATUS,RP0 ;запис двійкового числа 11010011 в регістр

movlw b"11010010" ;OPTION_REG, тим самим встановлюємо внутрішній

movwf OPTION_REG ;джерело тактового сигналу для TMR0

bcf STATUS,RP0 ;включаємо розподільник перед TMR0

;встановлюємо коефіцієнт предделителя 1:8

movlw .8 ;запис числа 8 в регістр shet, перед запуском

movwf shet ;переривань по переповненню TMR0, виконується

;одноразово, після включення живлення

movlw b"10000000" ;запис двійкового числа 10000000 в

movwf stolb; регістр stolb, для включення 1-го стовпця

Інформація з логічними рівнями для рядків кожного стовпця, зберігається в 8 регістрах зберігання інформації, звернення до яких виконується через . Адреса першого регістру присвоєно назву data1. Крім початкового запису регістрів shet і stolb, необхідно записати в регістр FSR_prer адресу першого регістру зберігання інформації (регістр – data1, запис у FSR_prer виконується одноразово, далі коригується в обробнику), лише після цього дозволяти переривання з переповнення TMR0.

Перед дозволом переривань, бажано очистити регістри зберігання інформації, дана операція проводиться за допомогою додаткового регістру tmp (як лічильник) і непрямої адресації, очищення рівнозначне вимкненню матриці.

У підпрограмі обробки переривань завантажуємо в мікросхему DD2 вміст регістру stolb (при першому вході в обробник після дозволу переривань, регістрі лежить число 10000000, як було сказано вище). Завантаження починається з молодшого біта регістру stolb, який зсувається в напрямку від Q0 до Q7 (всередині мікросхеми DD2) у міру завантаження, алгоритм завантаження був розглянутий вище, так що думаю, розібратися в коді не важко. Далі завантажуємо в DD2 вміст регістру INDF, це один з регістрів зберігання інформації, адреса якого знаходиться у FSR (при першому вході в обробник після дозволу переривань FSR лежить адреса першого регістра зберігання інформації з назвою data1). Завантаження починається зі старшого біта регістру INDF. Після завантаження розглянутих 2-х байтів тактуємо виведення st_cp, тим самим завантажені дані передаються на вихідні лінії мікросхем DD2, DD3. Таким чином, при першому вході в обробник комутується перший стовпець матриці, в якому загоряються світлодіоди, на анодах яких є високий логічний рівень, відповідно до вмісту регістра data1 (перший регістр зберігання інформації).

Далі зсуваємо регістр stolb праворуч на один біт, для того щоб підготувати до комутації другий стовпець матриці при наступному вході в обробник переривань. Перед зсувом необхідно очистити прапор C регістру STATUS, тому що зсув відбувається через цей прапор, і його стан не відомий на момент зсуву. Після зсуву інкрементуємо регістр FSR, готуючи наступний регістр зберігання інформації (після регістру data1) з логічними рівнями рядків для другого стовпця. Далі декрементуємо з умовою регістр shet, і якщо він не дорівнює нулю, скидаємо прапор переривання по переповненню TMR0, робимо запис числа в таймер і виходимо з обробника переривань.

При наступному вході в обробник увімкнеться другий стовпець матриці і так далі. При обнуленні регістра shet (після комутації 8-го стовпця), в нього записується число 8 для чергового циклу комутації стовпів, крім цього коригується значення регістру stolb, регістр FSR записується адресу першого регістра зберігання інформації (data1).

Здійснимо розрахунок тимчасової затримки для таймера TMR0, частота тактового генератора 4 МГц, машинний цикл 1 мкс. Щоб уникнути мерехтіння світлодіодів, приймемо частоту оновлення кожного стовпця 100Гц (період T=10 мс), тимчасова затримка дорівнює 10/8 = 1,25 мс. Коефіцієнт предделителя TMR0 встановимо рівним 1:8, у своїй максимально можлива затримка дорівнює 256х8 = 2048 мкс. Для паузи в 1,25 мс таймер повинен відрахувати (256х1,25)/2,048 = 156,25 разів, округляючи отримаємо 156 відліків. Відповідно до таймера необхідно записати число 256-156 = 100. Але це не зовсім правильне значення, так як на виконання підпрограми обробки переривань витрачається деякий час, в даному випадку на це йде близько 190 мкс, у перерахунку з урахуванням коефіцієнта ділителя отримуємо 190/8 = 23,75 чи 24 відліку. Правильне значення для запису TMR0 дорівнює: 100+24=124.

В основній програмі записуємо 8 регістрів зберігання інформації, відповідно до того, що хочемо вивести на матрицю. Нижче представлена ​​схема, що пояснює виведення інформації на матрицю для вищерозглянутого коду.


Крім зсувних регістрів існують спеціалізовані драйвера для виведення інформації на семисегментні індикатори та світлодіодні матриці, у цьому випадку динамічну індикацію реалізує сам драйвер, залишається тільки надсилати на нього дані для відображення. Один із таких популярних драйверів я розглянув у статті про .

Нижче за посиланням можна завантажити прошивку та вихідник для мікроконтролера PIC16F628A, з реалізацією динамічної індикації на матриці 8х8 із застосуванням двох зсувних регістрів 74HC595, схема підключення була розглянута вище. На матрицю по черзі виводяться літери R, L, цифра 46, смайлик і просто візерунок у вигляді хреста, ця анімація продемонстрована у відеоролику нижче.

з мітками, . Читати.

Складання рядка, що біжить, на базі світлодіодної матриці і Arduino - це нескладне завдання, яке можна виконати навіть в домашніх умовах. Щоб змусити літери переміщатися на світлодіодному табло, не потрібно бути програмістом і володіти поглибленими знаннями електроніки. У цій статті розберемо, як зібрати рядок з готових світлодіодних матриць і Arduino Nano.

Що потрібно?

Для реалізації ідеї буде потрібно трохи деталей:

  • два світлодіодні модулі, що складаються з чотирьох матриць 8 на 8 пікселів;
  • тримач для батарей типорозміру «Крона»;
  • батарейка на 9 вольт (CR-9V, ER-9V або їх аналоги);
  • двоконтактний перемикач;
  • сполучні дроти;
  • плата Arduino Nano;
  • термоклею.

Схема

На друкованій платі світлодіодного модуля, що використовується, розташовано 4 матриці розміром 8 на 8 пікселів. Кожне світлодіодне табло управляється інтегральною мікросхемою (ІМС) MAX7219. Дана ІМС є контролером управління led-дисплеями, матрицями із загальним катодом і дискретними світлодіодами в кількості до 64 шт.

Для комфортнішого сприйняття інформації, що виводиться на світлодіодне табло, рекомендується встановлювати кілька модулів. Для цього їх поєднують у послідовно включені групи, тобто вихід першого модуля (out) підключають до входу другого модуля (in). Ця збірка складається з двох модулів (16 матриць), довжини яких цілком вистачить для зручного прочитання цілих пропозицій.

Складання

Матричний модуль може мати штиркове з'єднання або контакти на платі як друкованих провідників. Від цього залежить спосіб їхнього з'єднання. У першому випадку для отримання надійного електричного контакту задіють джгут із проводків з конекторами, а в другому доведеться встановити та запаяти перемички.

Але спочатку необхідно об'єднати обидва модулі в єдине ціле за допомогою термоклею. Термопластичний клей не проводить електричного струму, а значить, його можна сміливо наносити на друковану плату. Клей наносять з торців обох плат, притискають та залишають на кілька хвилин. Після затвердіння вихідні контакти першого блоку підключають до вхідних контактів другого блоку за схемою:

  • VCC – VCC
  • GND – GND
  • D IN – D OUT
  • CS – CS
  • CLK – CLK

На звороті друкованої плати за допомогою термоклею прикріплюють Arduino Nano, відсік для батарейки та вимикач. Деталі мають у своєму розпорядженні таким чином, щоб можна було зручно ними користуватися.
На наступному етапі здійснюють підключення Arduino зі світлодіодним модулем, приєднуючи дроти на вхід першої матриці. Залежно від варіанту виконання модуля операцію виконують через роз'ємне з'єднання або шляхом паяння за наведеною схемою:

  • VCC - 5V
  • GND – GND
  • D IN – PIN 11
  • CS – PIN 10
  • CLK-PIN 13.

На заключній стадії збирання необхідно підключити живлення від батареї. Для цього мінусовий контакт (чорний провід) із відсіку для крони підключається на виведення GND Arduino. Плюсовий контакт (червоний провід) з'єднують з вимикачем, а потім з виведенням №30 Arduino, призначений для подачі напруги живлення від нерегульованого джерела. У тестовому режимі зроблений своїми руками рядок, що біжить, може бути запитаний через мікро USB від комп'ютера.
Переконавшись у надійності кріплень та якості електричних з'єднань, приступають до збирання корпусу. Його можна зробити з алюмінієвого чи пластикового профілю, оскільки елементи схеми не гріються. Колір, розміри, ступінь захисту та закріплення корпусу залежать від майбутнього призначення пристрою. У найпростішому випадку підійде захисний екран із будівельного пластикового кутового профілю з вирізом під вимикач.

Програмування рядка, що біжить

Рядок з Arduino і світлодіодних модулів під керуванням MAX7219, що біжить, практично готовий. Настав час перейти до програмної частини. На комп'ютері має бути інстальовано програмне забезпечення (ПЗ) для використовуваного Arduino та драйвер до нього. Далі необхідно завантажити дві бібліотеки та скетч (спеціальну програму, яка завантажуватиметься і виконуватиметься процесором Arduino). Установку бібліотек проводять при закритому IDE Arduino в папку «Documents – Arduino – Libraries». Потім завантажують і запускають скетч і перевіряють наявність бібліотек та коректність інших даних.

Налаштування скетчу:

  • "number of horizontal displays" вказують кількість рядків, у нашому випадку 1;
  • "number of vertical displays" вказують кількість матриць, у нашому випадку 8;
  • "string tape" вказують напис, що виводиться на дисплей;
  • "int wait" задають швидкість виведення в мілісекундах.

Після перевірки введених даних залишається клацнути мишкою кнопку «завантажити». Потім відключитися від ПЕОМ, вставити батарейку та зробити запуск пристрою.

На закінчення хочеться додати, що рядок, що біжить, своїми руками збирається досить швидко навіть без навичок роботи з Arduino. Тому боятися цієї хитромудрої плати не варто. Також варто відзначити, що зробити рядок, що біжить, можна довше, збільшивши кількість світлодіодних матриць.

Читайте також

В останні роки набули широкого поширення у зовнішній рекламі та різних інформаційних табло світлодіодні матриці. Досить яскраві, динамічні – вони чудово привертають увагу та не сліпнуть у сонячний день. Кожен із вас бачить їх на вулицях вашого міста щодня.
Звичайно ж, їхньому поширенню сприяла низька ціна (за рахунок китайських виробників) і простота складання екрану.

Але якщо спробувати застосувати подібні матриці у своїх пристроях на мікроконтролерах? Який інтерфейс обміну та логіка виведення у цих матриць?
Спробуймо з цим усім розібратися.

Китайці пропонують як самі матриці різних розмірів та з різною роздільною здатністю, так і контролери для виведення на них зображень з різними нескладними ефектами, а також всю необхідну фурнітуру, кабелі, рами.
Матриці зустрічаються як одноколірні (білі, жовті, червоні, зелені, сині), і 3-кольорові (RGB). Позначення моделі матриці виглядає зазвичай так Pxx або PHxx, де xx - число, що вказує на відстань між пікселями в міліметрах. У моєму випадку це P10. Крім того, матриці деяких типорозмірів бувають не лише прямокутними, а й квадратними.

Можливі варіанти типорозмірів матриць



Отже, маємо білу матрицю 32x16 пікселів з розмірами 320x160мм і, відповідно, міжпіксельною відстанню 10 мм. Давайте розглянемо її ближче.
Вид спереду:

Вам також здалося, що світлодіоди якісь овальні? Вам не здалося.


Над світлодіодами зроблений невеликий козирок, який не дає сонячному світлу засвічувати світлодіоди.

Вигляд спереду зі знятою маскою



Перевертаємо матрицю і бачимо плату:


На платі купка мікросхем логіки. Давайте розберемося, що це за мікросхеми:
1. 1 x SM74HC245D - буфер, що не інвертує.
2. 1 x SM74HC04 – 6-канальний інвертор
3. 1 x SM74HC138D – 8-бітний дешифратор
4. 4 x APM4953 - збирання з 2 P-канальних MOSFET
5. 16 x 74HC595D - зсувний регістр із засувкою
Два 16-пінові роз'єми - інтерфейсні, один з них вхідний (до нього підключається контролер екрану), а другий - вихідний (до нього підключається наступна матриця в ланцюжку). Стрілка на платі спрямована від вхідного роз'єму до вихідного.
Харчування подається на клеми у центрі плати. Напруга живлення – 5В, максимальний струм (коли включені всі світлодіодні матриці) – 2А (для білої матриці).

Вся викладена інформація, а також демонстрація роботи матриці у відео нижче. У ньому я з 13:04 по 15:00 говорю про залежність яскравості екрану від кількості матриць. Це через помилку в алгоритмі. Помилка виправлена, і тепер дані завантажуються до вимкнення екрана.

Також буду радий вас бачити на моєму youtube-каналі, де я ще багато всякої всячини підключаю до мікроконтролерів.

Усім дякую за увагу!

Час непомітно йде і здавалося б недавно куплена техніка вже виходить з ладу. Так, відпрацювавши свої 10 000 годин, наказали довго жити лампи мого монітора (AOC 2216Sa). Спочатку підсвічування почало включатися не з першого разу (після включення монітора підсвічування вимикалося через кілька секунд), що вирішувалося повторним включенням/вимкненням монітора, згодом монітор доводилося вимикати/вимикати вже 3 рази, потім 5, потім 10 і в якийсь момент він не міг увімкнути підсвічування вже незалежно від кількості спроб увімкнення. Витягнуті на світ божий лампи опинилися з почорнілими краями і законно вирушили в брухт. Спроба поставити лампи на заміну (були куплені нові лампи відповідного розміру) успіхом не увінчалася (кілька разів монітор зміг увімкнути підсвічування, але швидко знову пішов у режим увімкнувся-вимкнувся) і з'ясування причин у чому може бути проблема вже в електроніці монітора привели мене до думки про те, що простіше буде зібрати власне підсвічування монітора на світлодіодах, ніж ремонтувати наявну схему інвертора для CCFL ламп, тим більше в мережі вже траплялися статті, що показують принципову можливість такої заміни.

Розбираємо монітор

На тему розбирання монітора вже написано чимало статей, всі монітори дуже схожі між собою, тому коротко:
1. Відкручуємо кріплення поставки монітора та єдиний болтик унизу, який притримує задню стінку корпусу


2. У низу корпусу є два пазики між передньою і задньою частиною корпусу, в один з яких засовуємо плоску викрутку і починаємо знімати кришку із засувок по всьому периметру монітора (просто акуратно провертаючи викрутку навколо своєї осі і піднімаючи цим кришку корпусу). Зайвих зусиль докладати не треба, але важко знімається з клямок корпус тільки вперше (за час ремонту я його відкривав багато разів, тому клямки стали зніматися з часом набагато легше).
3. Нам відкривається вид на монтаж внутрішньої металевої рами у передній частині корпусу:


Виймаємо із клямок плату з кнопками, виймаємо (в моєму випадку) роз'єм динаміків і відігнувши дві клямки внизу виймаємо внутрішній металевий корпус.
4. Зліва видніються 4 дроти підключення ламп підсвічування. Виймаємо їх трохи здавлюючи, т.к. для запобігання випаданню роз'єм зроблений у вигляді маленького прищіпки. Так само виймаємо широкий шлейф, що йде до матриці (вгорі монітора), здавлюючи його роз'єм з боків (т.к. в розніманні бічні засувки, хоча при першому погляді на роз'єм це і не очевидно):


5. Тепер необхідно розібрати «сендвіч», що містить саму матрицю і підсвічування:


По периметру знаходяться засувки, які відкриваються легким піддяганням тією ж плоскою викруткою. Спочатку знімається металева рама, що притримує матрицю, після чого можна відкрутити три дрібненькі болтики (звичайна хрестикова викрутка не підійде через їх мініатюрний розмір, знадобиться особливо дрібна) утримують плату управління матрицею і матрицю можна зняти (краще всього покласти монітор на тверду поверхню, наприклад стіл тканиною матрицею вниз, відкрутивши плату управління покласти її на стіл розгорнувши через торець монітора і просто почути корпус з підсвічуванням піднявши його вертикально вгору, а матриця так і залишиться лежати на столі.Її можна накрити чимось щоб не припадала пилом, а збирати точно в зворотному порядку - тобто накрити матрицю, що лежить на столі, зібраним корпусом з підсвічуванням, обернути через торець шлейф до плати управління і прикрутивши плату управління акуратно підняти блок у зібраному вигляді).
Виходить матриця окремо:


І блок з підсвічуванням окремо:


Блок з підсвічуванням розбирається аналогічно, тільки замість металевої рами підсвічування утримується пластмасовою рамкою, яка одночасно позиціонує оргскло, використовуване для розсіювання світла підсвічування. Більшість клямок знаходяться з боків і схожі на ті, що утримували металеву раму матриці (відкриваються піддяганням плоскою викруткою), але з боків є кілька клямок «всередину» (на них викруткою потрібно натиснути, щоб клямки пішли усередину корпусу).
Спочатку я запам'ятовував положення всіх частин, що знімаються, але потім з'ясувалося, що «неправильно» їх зібрати не вийде і навіть якщо деталі виглядають абсолютно симетричними відстані між засувками на різних сторонах металевої рами і фіксуючі виступи з боків пластикової рами, що утримує підсвічування. ».
Ось, власне, і всі - ми розібрали монітор.

Підсвічування світлодіодною стрічкою

Спочатку вирішено було робити підсвічування зі світлодіодної стрічки з білими світлодіодами 3528 – 120 світлодіодів на метр. Перше що виявилося – ширина стрічки 9 мм, а ширина ламп підсвічування (і посадкового місця під стрічку) – 7 мм (насправді бувають лампи підсвічування двох стандартів – 9 мм та 7 мм, але в моєму випадку були 7 мм). Тому після огляду стрічки було прийнято рішення обрізати по 1 мм з кожного краю стрічки, т.к. це не справа струмопровідних доріжок на лицьовій частині стрічки (а на зворотній вздовж усієї стрічки йдуть дві широкі жили живлення, які від зменшення на 1 мм своїх властивостей на довжині підсвічування 475 мм не втратять, тому що струм буде невеликий). Сказано зроблено:


Так само акуратно світлодіодна стрічка обрізається по всій довжині (на фотографії приклад того, що було до і що стало після обрізки).
Нам знадобиться дві смужки стрічки по 475 мм (19 сегментів по 3 світлодіоди у смужці).
Хотілося щоб підсвічування монітора працювало так само як і штатна (тобто включалася і вимикалася контролером монітора), а ось яскравість я хотів регулювати вручну, як на старих CRT моніторах, т.к. це часто використовується функція і лазити по екранному меню щоразу натискаючи кілька клавіш мені набридло (у моєму моніторі клавіші вправо-вліво регулюють не режими монітора, а гучність вбудованих динаміків, так що режими щоразу доводилося змінювати через меню). Для цього було знайдено в мережі мануал на мій монітор (кому знадобиться - додається в кінці статті) і на сторінці з Power Board за схемою знайдено +12V, On, Dim та GND які нас цікавлять.


On - сигнал із плати управління на включення підсвічування (+5V)
Dim - ШИМ управління яскравістю підсвічування
+12V виявилися далеко не 12, а десь 16V без навантаження підсвічуванням і десь 13.67V з під навантаженням
Так само було вирішено ніяких ШІМ регулювань яскравості підсвічування не робити, а запитувати підсвічування постійним струмом (заодно вирішується питання з тим, що у деяких моніторів ШІМ підсвічування працює на не дуже високій частоті і в деяких від цього трохи втомлюються очі). У моєму моніторі частота "рідного" ШІМ була 240 Гц.
Далі на платі були знайдені контакти, на які подається сигнал On (позначений червоним) і +12V на блок інвертора (перемичка яку необхідно випаяти щоб знеструмити блок інвертора позначена зеленим). (фото можна збільшити щоб побачити позначки):


Як основа схеми управління був взяти лінійний регулятор LM2941 в основному за те, що при струмі до 1А він мав окремий висновок управління On/Off, який передбачалося використовувати для управління включенням/вимкненням підсвічування сигналом On з плати управління монітора. Правда в LM2941 цей сигнал інвертований (тобто на виході є напруга, коли на вході On/Off - нульовий потенціал), так що довелося зібрати інвертор на одному транзисторі для узгодження прямого сигналу On з плати управління та інвертованого входу LM2941. Жодних інших надмірностей схема не містить:


Розрахунок вихідної напруги для LM2941 провадиться за формулою:

Vout = Vref * (R1+R2)/R1

Де Vref = 1.275V, R1 у формулі відповідає R1 на схемі, а R2 у формулі відповідає парі резисторів RV1+RV2 на схемі (введено два резистори для більш плавного регулювання яскравості та скорочення діапазону регульованих змінним резистором RV1 напруг).
Як R1 я взяв 1кОм, а підбір R2 здійснюється за формулою:

R2 = R1 * (Vout / Vref-1)

Максимальна необхідна нам напруга для стрічки - 13В (я взяв четь більше ніж номінальні 12В, щоб не втрачати в яскравості, а стрічка така легка перенапруга переживе). Тобто. максимальне значення R2 = 1000 * (13/1.275-1) = 9.91кОм. Мінімальна напруга у якому стрічка ще хоч якось світиться - близько 7 вольт, тобто. мінімальне значення R2 = 1000 * (7/1.275-1) = 4.49кОм. R2 у нас складається зі змінного резистора RV1 та багатооборотного підстроювального резистора RV2. Опір RV1 отримуємо 9.91кОм - 4.49кОм = 5.42кОм (вибираємо найближче значення RV1 - 5.1кОм), а RV2 виставляємо приблизно в 9.91-5.1 = 4.81кОм (насправді найкраще спочатку зібрати схему виході LM2941 виставити опір RV2 таким, щоб на виході була потрібна максимальна напруга (у нашому випадку близько 13В).

Монтаж світлодіодної стрічки

Оскільки після обрізання стрічки на 1 мм по торцях стрічки оголилися жили живлення, на корпус у місці де буде клеїтись стрічка я наклеїв ізоленту (на жаль не синю, а чорну). Поверх клеїться стрічка (добре прогрівати поверхню феном, тому що до теплої поверхні скотч клеїться набагато краще):


Далі монтуються задня плівка, оргскло та світлофільтри які лежали поверх оргскла. По краях я підпер стрічку шматочками пральної гумки (щоб краї на скотчі не відходили):


Після чого блок підсвічування збирається у зворотному порядку, встановлюється на місце матриця, дроти підсвічування виводяться назовні.
Схема збиралася на макетці (через простоту вирішив не розводити плату), кріпилася на болтиках через отвори в задній стінці металевого корпусу монітора:




Живлення та сигнал управління On заводилися з плати блоку живлення:


Розрахункова потужність, що виділяється на LM2941, розраховується за формулою:

Pd = (Vin-Vout) * Iout + Vin * Ignd

Для мого випадку становить Pd = (13.6-13) * 0.7 +13.6 * 0.006 = 0.5 Ватт тому було вирішено обійтися найменшим радіатором для LM2941 (посаджений через діелектричну прокладку тому що від землі він у LM2941 не ізольований).
Остаточне складання показало цілком собі працездатність конструкції:


З переваг:

  • Використовується стандартна світлодіодна стрічка
  • Проста плата управління
З недоліків:
  • Недостатня яскравість підсвічування при яскравому денному світлі (монітор стоїть навпроти вікна)
  • Світлодіоди у стрічці розташовані недостатньо часто, тому видно невеликі світлові конуси від кожного окремого світлодіода біля верхньої та нижньої кромок монітора.
  • Баланс білого трохи порушений і йде трохи в зелені відтінки (швидше за все вирішується регулювання балансу білого або самого монітора або відеокарти)
Цілком хороший, простий і бюджетний варіант ремонту підсвічування. Цілком комфортно дивитися фільми або використовувати монітор як кухонний телевізор, але для щоденної роботи напевно не підійде.

Регулювання яскравості за допомогою ШІМ

Для тих хаброжителів, які на відміну від мене не згадують з ностальгією аналогові ручки управління яскравістю та контрастністю на старих ЕПТ моніторах можна зробити управління від штатного ШІМ генерованого платою управління монітором без виведення будь-яких додаткових органів управління назовні (без свердління корпусу монітора). Для цього достатньо зібрати на двох транзисторах схему І-НЕ на вході On/Off регулятора та прибрати регулювання яскравості на виході (виставити вихідну напругу постійною 12-13В). Модифікована схема:


Опір підлаштування резистора RV2 для напруги 13В має бути в районі 9.9кОм (але краще виставити точно при включеному регуляторі)

Більш щільне LED підсвічування

Для вирішення проблеми недостатньої яскравості (а заодно і рівномірності) підсвічування було вирішено поставити більше світлодіодів та частіше. Оскільки виявилося що купувати світлодіоди поштучно дорожче ніж купити 1.5 метра стрічки і випаяти їх звідти був обраний більш економний варіант (випаювати світлодіоди зі стрічки).
Самі світлодіоди 3528 розмістилися на 4-х смужках 6 мм завширшки і 238 мм завдовжки по 3 світлодіоди послідовно в 15 паралельних складаннях на кожній із 4-х смужок (розведення плат для світлодіодів додається). Після припаювання світлодіодів і проводів виходить таке:




Смужки закладаються по дві вгорі та внизу проводами до краю монітора в стик у центрі:




Номінальна напруга на світлодіодах 3.5В (діапазон від 3.2 до 3.8 В), так що складання з 3-х послідовних світлодіодів має живитись напругою близько 10.5В. Отже, параметри регулятора потрібно перерахувати:


Максимальна необхідна нам напруга для стрічки – 10.5В. Тобто. максимальне значення R2 = 1000 * (10.5 / 1.275-1) = 7.23кОм. Мінімальна напруга при якому збирання зі світлодіодів ще хоч якось світиться – близько 4.5 вольт, тобто. мінімальне значення R2 = 1000 * (4.5 / 1.275-1) = 2.53кОм. R2 у нас складається зі змінного резистора RV1 та багатооборотного підстроювального резистора RV2. Опір RV1 отримуємо 7.23кОм - 2.53кОм = 4.7кОм, а RV2 виставляємо приблизно 7.23-4.7 = 2.53кОм і регулюємо в зібраній схемі для отримання 10.5В на виході LM2941 при максимальному опорі R1.
У півтора рази більше світлодіодів споживають 1.2А струму (номінально), тому розсіювана потужність на LM2941 дорівнюватиме Pd = (13.6-10.5)*1.2 +13.6*0.006 = 3.8 Ватт, що вже вимагає більш солідного радіатора для відведення тепла


Збираємо, підключаємо, отримуємо набагато краще:


Переваги:
  • Досить велика яскравість (можливо порівнянна, а можливо навіть перевершує яскравість старої CCTL підсвічування)
  • Відсутність світлових конусів по краях монітора від індивідуальних світлодіодів (світлодіоди розташовані досить часто і підсвічування рівномірне)
  • Досі проста та дешева плата управління
Недоліки:
  • Не вирішилося питання з балансом білого, що йде в зелені тони
  • LM2941 хоч і з великим радіатором, але гріється і гріє все всередині корпусу

Плата керування на основі Step-down регулятора

Для усунення проблеми нагрівання вирішено було зібрати регулятор яскравості на базі Step-down регулятора напруги (у моєму випадку було обрано LM2576 зі струмом до 3А). Він також має інвертований вхід управління On/Off, тому для узгодження присутній такий самий інвертор на одному транзисторі:


Котушка L1 впливає на ККД перетворювача і має бути 100-220 мкГ для струму в навантаженні близько 1.2-3А. Напруга на виході розраховується за формулою:

Vout = Vref * (1 + R2 / R1)

Де Vref = 1.23V. При заданому R1 можна отримати R2 за такою формулою:

R2 = R1 * (Vout / Vref-1)

У розрахунках R1 еквівалентно R4 у схемі, а R2 еквівалентно RV1+RV2 у схемі. У нашому випадку для регулювання напруги в діапазоні від 7.25В до 10.5В візьмемо R4 = 1.8кОм, змінний резистор RV1 = 4.7кОм а підстроювальний резистор RV2 на 10кОм з початковим наближенням в 8.8кОм (після збору на виході LM2576 за максимального опору RV1).
Для цього регулятор вирішив зробити плату (розміри значення не мали, тому що в моніторі достатньо місце для монтажу навіть габаритної плати):


Плата управління у зборі:


Після монтажу у моніторі:


Всі в зборі:


Після збирання начебто все працює:


Підсумковий варіант:


Переваги:

  • Достатня яскравість
  • Step-down регулятор не гріється та не гріє монітор
  • Ні ШИМ а значить нічого не моргає ні з якою частотою
  • Аналогове (ручне) регулювання яскравості
  • Немає обмежень на мінімальну яскравість (для тих, хто любить працювати ночами)
Недоліки:
  • Трохи зміщений баланс білого у бік зелених тонів (але не сильно)
  • При малій яскравості (дуже малій) видно нерівномірність у світінні світлодіодів різних збірок через розкид параметрів

Варіанти покращення:

  • Баланс білого регулюється як у налаштуваннях монітора, так і налаштуваннях майже будь-якої відеокарти
  • Можна спробувати поставити інші світлодіоди, які не помітно збиватимуть баланс білого.
  • Для виключення нерівномірного світіння світлодіодів при малій яскравості можна використовувати: а) ШІМ (регулювати яскравість за допомогою ШІМ завжди подаючи номінальну напругу) або б) з'єднати всі світлодіоди послідовно і живити їх регульованим джерелом струму (якщо з'єднати послідовно всі 180 світлодіодів, 20мА), тоді через всі світлодіоди повинен проходити один і той же струм, а на кожному падатиме свою напругу, яскравість регулюється зміною струму а не напруги.
  • Якщо хочеться зробити схему на основі ШІМ для LM2576, можна використовувати схему І-НЕ на вході On/Off цього Step-down регулятора (за аналогією з наведеною схемою для LM2941), але краще поставити димер в розрив мінусового дроту світлодіодів через logic-level mosfet

За посиланням можна завантажити:

  • AOC2216Sa Service Manual
  • LM2941 і LM2576 dataheets
  • Схеми регулятора на LM2941 у форматі Proteus 7 та PDF
  • Розведення плати для світлодіодів у форматі Sprint Layout 5.0
  • Схема та розведення плати регулятора на LM2576 у форматі Proteus 7 та PDF

Світлодіоди все швидше займає своє місце серед джерел освітлення.
Низьке споживання електроенергії, яскравість дозволили світлодіодам витіснити традиційні лампи розжарювання та досить впевнено змагатися з енергозберігаючими.
Піддавшись загальної тенденції, вирішив власними руками помацати і на власні очі подивитися на світлодіодну матрицю, яка не потребує якихось окремих драйверів, а безпосередньо до мережі 220 вольт. Кому цікава ця тема, прошу під кат.
В результаті зупинив свій вибір на наступному екземплярі:

З опису на сторінці випливає, що це джерело світла:
- Виготовляється за технологією LED СОВ;
- напруга живлення 220 вольт;
- споживана потужність 30 ват;
- колірна температура 2500-3200К;
- матеріал підкладки (підстави) алюміній;
- габаритні розміри 40*60мм;

Поки їхала посилка, вивчив теорію.
Що таке технологія LED СОВ?

Приблизно до 2009 року у світлодіодної продукції був лише один напрямок розвитку – збільшення потужності світлодіода або Power LED. Удосконалення даної технології дозволило досягти потужності одного світлодіода на рівні 10 Вт.
Як виявилося подальше нарощування потужності немає сенсу з огляду на високу вартість виробництва окремого потужного світлодіода. Важливу роль пошуках іншого шляху розвитку так само послужило те, що світлодіод є точковим джерелом світла і домогтися засвітки великої площі поверхні за допомогою потужних світлодіодів виявилося не просто і недешево. Для отримання більш-менш прийнятних результатів потрібно застосування оптичних систем для того, щоб зробити світло розсіяним.
Наступним кроком було застосування для створення прийнятних джерел розсіяного світла SMD світлодіодів – на одну плату припаювалася велика кількість світлодіодів. Недоліками є загальна трудомісткість процесу – виробництво окремих світлодіодів (кожен на своїй керамічній підкладці + персональний шар люмінофора тощо). Крім того, недоліками методу була невисока надійність окремих світлодіодів та необхідність ремонту при виході хоча б одного з них з ладу.
У результаті, до інженерам прийшла думка про необхідність виробництва світлодіодів без персональних атрибутів та розміщення їх на одній платі на невеликій відстані один від одного під загальним шаром люмінофора, тобто. технологія LED СОВ. Зрештою це дозволило знизити вартість джерела світла загалом у разі виходу з експлуатації окремих світлодіодів змінювати весь модуль (матрицю).

Приїхала посилка в жовтому конверті з пухирцем усередині. Сама матриця вкладена у пропорційний пластиковий пакет.





Як бачимо, дійсно світлодіоди розташовані близько один до одного, покриті загальним шаром люмінофора та захищені масою, що нагадує пластичний клей.
Біла субстанція по периметру матриці і драйвера, що захищає схему, схожа на гуму або термоклей - не тверда, пружна маса. Це дозволило зняти її з найбільш видатних корпусів та визначити, що один з них діодний міст MB10S з максимальною постійною зворотною напругою 1000 вольт і максимальним прямим струмом 0,5 ампер.
Даташит:

Розміри відповідають наведеним в описі.



Товщина підкладки 1 мм та вага матриці аж 8 грам.

Зрозуміло, що, як і для потужних світлодіодів, матрицям так само необхідний радіатор. Як такий був обраний радіатор від процесора.


Саморізами через термопасту КПТ -8 матриця була закріплена на радіаторі.
У цій послідовності процесів була припущена помилка - провід слід було припаювати до кріплення матриці до радіатора - тепло від паяльника йшло в тепловідведення. Результат паяння видно на фото. Проте дроти трималися надійно, і знімати матрицю не став.


Перше включення справило незабутнє враження - сказати "яскраво", нічого не сказати. Навіть якщо дивитися з відстані під невеликим кутом до площини матриці зайці забезпечені. Порівняно з наявними енергозберігаючими лампами температурою 2800К світло біле і його багато.

Кімната площею 14 кв. метрів висвітлюється більш ніж добре.







Після 20 хвилин температура піднялася до 85 градусів. Далі випробувати на міцність матрицю не став, хоча чіпи управління можуть контролювати струм через світлодіоди при сильному нагріванні.

Далі тести проводилися з використанням примусового охолодження штатним кулером від даного радіатора та платою контролю частоти обертання вентилятора. Останню зняв із старого блоку живлення ПК.





Температура протягом півтори години не піднімалася більше 31,5 градуса, а вентилятор працював на малих обертах, не розганяючись.



Після чого плата контролю частоти обертання вентилятора була виключена з конструкції, а блок живлення замінено на 9-вольтовий.

Збільшення напруги в мережі дозволило переконатися, що заявлена ​​споживана потужність відповідає дійсності.



Очікувано фотоапарат реагував на мерехтіння матриці частотою 100 герц. Відео не знімав, але зміг зафіксувати наступне

Можна було б поборотися з пульсаціями, припаяючи до діодного мосту конденсатор. Це викликало б підвищення напруги до 220 * 1,41 = 310,2 вольта і потрібно було б грати з обмежуючими резисторами BP5132H, але оскільки спочатку усвідомлював, що даний джерело світла не для житлових приміщень, то затівати цю боротьбу не став .
Сфера застосування матриці – загальне освітлення вулиці, підсобних приміщень тощо, і, отже, пульсації можна знехтувати.
За допомогою ЛАТР вдалося встановити (експеримент проводився на роботі і фото не робив, щоб не відповідати на запитання: «Навіщо?»), що нижній поріг, при якому матриця ще випромінює світло, 130 з невеликим вольт. Більше 250 вольт не подавав, але в тому випадку не завадить маска зварювальника.
У зв'язку з тим, що дане джерело світла має високу потужність і, якщо так можна висловитися, підвищену щільність світла, то зовсім не зайвим буде розсіюючий екран перед матрицею.

Зрештою, до мінусів можна віднести:
- підвищене тепловиділення (витрати технології, але не конструкції) та необхідність застосування тепловідведення (переважно активного охолодження);
- Досить високу вартість.

Однак ці мінуси з лишком перекриваються яскравістю даної матриці, здатністю висвітлювати велику площу, відповідністю заявленим характеристикам.
Мерехтіння не можу віднести до негативних рис так, як область застосування матриці НЕ житлові приміщення.
Окремо хочу звернутися до адептів ордена "Ненависників пункту 18"). Друзі, прошу бути об'єктивними в оцінці викладеної в огляді інформації, тим більше, що для її збору, систематизації та викладу довелося витратити чимало зусиль та часу.

Товар наданий для написання огляду магазином. Огляд опубліковано відповідно до п.18 Правил сайту.

Планую купити +44 Додати в обране Огляд сподобався +60 +111

Завантаження...
Top