Направи си сам лъч от LED матрица. Адресируеми LED матрици

Понякога е необходимо да се свържат няколко седемсегментни индикатора или LED матрица към микроконтролера, докато динамичната индикация се използва за показване на информация. Същността на динамичната индикация е последователното показване на информация върху индикаторите. Диаграмата по-долу показва пример за свързване на няколко седемсегментни индикатора (например с общ катод) за реализиране на динамична индикация, като цяло, като се вземе предвид точката, се получават 8 сегмента, но по стария начин те са наречен така. Всички изводи (аноди) на сегментите със същото име са свързани заедно, за общо 8 линии, които са свързани към микроконтролера чрез резистори. Общият катод на всеки индикатор е свързан към микроконтролера чрез транзистор.


Алгоритъмът за индикация е следният: първо задаваме необходимите логически нива на линиите, в зависимост от това кои сегменти трябва да бъдат включени на първия индикатор (индикация отляво надясно), с високо логическо ниво за включване, ниско до изключете сегмента. След това прилагаме високо логическо ниво към основата на транзистора VT1, като по този начин общият катод на първия индикатор е свързан към общия проводник, в този момент тези сегменти светят, на анодите на които има логическа единица. След определено време (пауза) изключваме индикатора, като прилагаме ниско логическо ниво към основата на транзистора, след което отново променяме логическите нива на линиите в съответствие с изходната информация, предназначена за втория индикатор, и изпращаме сигнал за включване към транзистора VT2. Така, по ред в кръгов цикъл, ние превключваме всички индикатори, това е цялата динамична индикация.

За да получите стабилно изображение без трептене, превключването трябва да се извършва с висока скорост, за да се предотврати трептенето на светодиодите, честотата на опресняване трябва да бъде зададена от 70 Hz или повече, обикновено я настройвам на 100 Hz. За горната конструкция паузата се изчислява, както следва: за честота от 100 Hz периодът е 10 ms, има само 4 индикатора, съответно времето на светене на всеки индикатор е зададено на 10/4 = 2,5 ms. В един корпус има многоцифрени седемсегментни индикатори, в които едноименните сегменти са свързани вътре в самия корпус, разбира се, за да ги използвате, е необходимо да използвате динамична индикация.

За реализиране на динамична индикация е необходимо да се използват прекъсвания при препълване на един от таймерите. По-долу е кодът, използващ таймера TMR0:

;Внедряване на динамична индикация за 4 седемсегментни индикатора ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; swapf STATUS,W; clrf СТАТУС; 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 movlw .2 ;проверете съдържанието на регистърния лист 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 ;скочи до label exxit met4 movf datind4,W ;копиране на съдържанието на регистъра datind3 movwf PORTB ;в регистъра PORTB bsf ind4 ;включване на 4-тия индикатор; movlw .100 ;запис на 156 в регистъра на таймера TMR0 movwf TMR0 ; ; movwf СТАТУС; swapf W_TEMP,F; swapf W_TEMP,W; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Основна програма ................. movlw b"11010011" ; OPTION_REG, като по този начин се настройва вътрешното ; настройка на съотношението на предскалера 1:16 ; clrf 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 с дата2; movlw b"01101101"; movwf с дата3; movlwb"01011011"; movwf с дата4; ; . ................; .................; .................; ; край ; край на цялата програма;

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

;Въвеждане на динамична индикация за 4 седемсегментни индикатора

; Примерна тактова честота 4 MHz, машинен цикъл 1 µs

org 0000h ;стартира изпълнението на програмата на адрес 0000h

goto Start ;отидете на етикет Start

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

;Прекъсване на рутина

org 0004h ;стартиране на изпълнение на подпрограма на адрес 0004h

movwf W_TEMP ;запазване на стойностите на регистъра на ключовете

swapf STATUS,W;

movwf STATUS_TEMP;

bcf ind1 ;изключване на първия индикатор

bcf ind2 ;изключване на втория индикатор

bcf ind3 ;изключване на 3-тия индикатор

bcf ind4 ;изключване на 4-тия индикатор

incf shet,F ;увеличение на регистрационния лист

movlw .5; проверете съдържанието на регистрационния лист

xorwf shet,W; равно на 5

btfss СТАТУС,Z;

goto met1 ;номерът в регистрационния лист не е равен на 5

movlw .1 ; номерът в регистъра на листа е 5: запишете номер 1

movwf shet; за регистриране на shet

met1 movlw .1; проверка на съдържанието на shet регистър

xorwf shet,W; равно на число 1

btfss СТАТУС,Z;

goto met2 ;номерът в регистъра shet не е равен на 1: преминава към met2

movf datind1,W; номерът в регистъра на листа е 1: копие

movwf PORTB; съдържанието на регистъра datind1 към регистъра PORTB

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

goto exxit ;отидете на етикет exxit

met2 movlw .2; проверка на съдържанието на shet регистър

xorwf shet,W; равно на число 2

btfss СТАТУС,Z;

goto met3 ;номерът в регистъра shet не е равен на 2: преминаване към met3

movf datind2,W; номерът в регистъра на листа е 2: копие

movwf PORTB; съдържанието на регистър datind2 към регистър PORTB

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

goto exxit ;отидете на етикет exxit

met3 movlw .3; проверка на съдържанието на shet регистър

xorwf shet,W; равно на число 3

btfss СТАТУС,Z;

goto met4 ;номерът в shet регистър не е равен на 3: преминете към met4

movf datind3,W; номерът в регистъра на листа е 3: копие

movwf PORTB; съдържанието на регистър datind3 към регистър PORTB

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

goto exxit ;отидете на етикет exxit

met4 movf datind4,W; копиране на съдържанието на регистъра datind3

movwf PORTB ;към PORTB регистър

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

изход bcf INTCON,T0IF ;нулиране на TMR0 флаг за прекъсване при препълване

movlw .100 ;запис на номер 156 в регистъра на таймера TMR0

swapf STATUS_TEMP,W; възстановяване на съдържанието на ключови регистри

swapf W_TEMP,F;

swapf W_TEMP,W;

retfie ;изход от процедурата за прекъсване

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

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

Старт ................. ;първоначална настройка на регистрите

................. ;със специално предназначение

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

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";

movlwb"01011011";

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

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

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

край ; край на цялата програма

В основната програма първо настроихме таймер с помощта на регистъра OPTION_REG, по-рано говорих за използването на таймери за . След това изчистваме листовия регистър, предназначен за въвеждане на брой от 1 до 4, за всеки индикатор. Този регистър се увеличава в рутинната услуга за прекъсване и се коригира там (ще брои от 1 до 4), така че това изчистване се извършва веднъж след включване. Въз основа на този регистър ще определим кой показател да включим и ще издадем данни, съответстващи на него. Следващата стъпка е да изчистите регистрите за съхранение на информация, четирите регистъра datain1,2,3,4, съответстващи на четирите индикатора. Изчистването е еквивалентно на изключване на индикаторите, тъй като в рутинната услуга за прекъсване съдържанието на тези регистри се прехвърля в регистъра PORTB, към който са свързани индикаторните аноди. Това е необходимо, за да не се показва боклук на индикаторите след активиране на прекъсванията, по принцип това не може да се направи, ако правилната информация се записва веднага за изход. След това нулирайте флага за прекъсване при препълване на таймера, активирайте прекъсванията при препълване на TMR0 и накрая активирайте глобалните прекъсвания.

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

За извеждане на числа е по-добре да използвате генератор на знаци под формата на таблица с данни. Например, за да се покаже числото 3456 на индикаторите, то трябва да бъде разделено на цифри, докато е по-добре да използвате отделни регистри за съхраняване на броя на цифрите (от 0 до 9), след което да пуснете тези регистри през генератора на знаци, като по този начин получаване на правилните байтове (заредени в регистрите на данни и) за запалване на съответните сегменти.

Ще приемем честотата на тактовия генератор 4 MHz, машинният цикъл е 1 μs. Нека честотата на опресняване на всеки индикатор е 100 Hz (период T = 10 ms), съответно необходимото времезакъснение е 10/4 = 2,5 ms. Коефициентът на прескалер за TMR0 е настроен на 1:16, докато максималното възможно забавяне е 256x16 = 4096 µs и се нуждаем от пауза от 2,5 ms. Нека изчислим числото, което да запишем в TMR0: 256-((256x2.5)/4.096) = 256-156.25 = 99.75. След закръгляване получаваме числото 100.

По-долу можете да изтеглите модел за програмата Proteus, фърмуер и изходен код с внедряване на динамична индикация на 4-цифрен индикатор с общ катод с помощта на микроконтролера PIC16F628A. Например на индикатора се показват числата 0000; 0001; 0002; 13,52; 9764.

Сега помислете за свързване на матрица с резолюция 8x8 пиксела (LED). Структурата на матрицата обикновено се разглежда по отношение на редове и колони. На снимката по-долу във всяка колона са свързани катодите на всички светодиоди, а във всеки ред анодите. Стрингове (8 линии, LED аноди) са свързани чрез резистори към микроконтролера. Всяка колона (LED катоди) е свързана към микроконтролера чрез 8 транзистора. Алгоритъмът за индикация е същият, първо задаваме необходимите логически нива на редовете, в съответствие с които светодиодите трябва да светят в колоната, след което свързваме първата колона (индикация отляво надясно). След известна пауза изключваме колоната и променяме логическите нива на редовете, за да покажем втората колона, след което свързваме втората колона. И така последователно преместете всички колони. По-долу е показана схема за свързване на матрицата към микроконтролера.


Общо за свързване на такава матрица са необходими 16 пина на микроконтролера, което е доста, следователно, за да се намалят контролните линии, е по-добре да се използват серийни регистри за смяна.

Най-често срещаният сериен регистър е микросхемата 74HC595, която съдържа регистър за изместване за зареждане на данни и регистър за задържане, чрез който данните се прехвърлят към изходните линии. Зареждането на данни в него е просто, задайте логическата 0 на входа на часовника SH_CP, след това задайте необходимото логическо ниво на входа на данните DS, след което превключваме входа на часовника на 1, като същевременно запазваме стойността на нивото (на входа DS) вътре в регистъра за смяна. В същото време данните се изместват с един бит. Нулирайте отново изхода SH_CP на 0, задайте необходимото ниво на входа DS и повишете SH_CP на 1. След като регистърът за смяна е напълно зареден (8 бита), задайте изхода ST_CP на 1, в този момент данните се прехвърлят към регистър за съхранение и се подава към изходните линии Q0 ... Q7, след което нулираме изхода на ST_CP. По време на последователно зареждане данните се изместват от Q0 към Q7. Pin Q7' е свързан към последния бит на регистъра за смяна, този щифт може да бъде свързан към входа на втората микросхема, така че можете да заредите данни в две или повече микросхеми наведнъж. Пинът OE превключва изходните линии в трето състояние (високо съпротивление), когато към него се приложи логическа 1. Пинът MR е проектиран да нулира регистъра за преместване, тоест задаване на ниски логически нива на изходите на тригерите на регистъра , което е еквивалентно на зареждане на осем нули. По-долу е дадена диаграма за зареждане на данни в микросхемата 74NS595, задавайки стойността 11010001 на изходните линии Q0 ... Q7, при условие че първоначално имаше нули:


Помислете за свързване на матрица 8 × 8 към микроконтролер PIC16F628A, като използвате два регистъра за смяна 74HC595, диаграмата е показана по-долу:


Данните се зареждат в чипа DD2 (контрол на логическото ниво на редовете, LED аноди), след което се прехвърлят през щифта Q7 към DD3 (контрол на колона), съответно, първо зареждаме байта, за да активираме колоната, след това байта с логическите нива на редовете. Транзисторите превключващи матрични колони (LED катоди) са свързани към изходните линии на DD3. По-долу е програмният код за показване на изображение върху матрица:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Реализация на динамична индикация за матрица с резолюция 8x8 ;Честота на тактовия генератор например 4 MHz, машинен цикъл 1 µs org 0000h ;стартиране на изпълнение на програмата от адрес 0000h goto Start ;прескачане към надпис Start ;;;;;; ;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Прекъсване на рутина org 0004h ;стартиране на изпълнение на подпрограма от адрес 0004h movwf W_TEMP ;запазване на стойностите на регистъра на ключовете swapf STATUS,W ; clrf СТАТУС; movwf STATUS_TEMP; ; movwf FSR_osn ;към регистъра FSR_osn movf FSR_prer,W ;възстановяване на предварително записаната стойност movwf FSR ;на регистъра FSR от регистъра FSR_prer ;;;;;;;;;;;;;;;;;;;;;; ;;;;;; ;;;;;;;;;;;;;;;;;;;;;; ;заредете съдържанието на столб регистъра в чипа movf stolb,W ;копирайте съдържанието на столб регистъра 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, за броене movwf scetbit ;прехвърлени битове met1 btfsc var ,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 ;Регистърът на листа не е равен на 0: Преминете към изход от movlw data1 ;Регистърът на листа е равен на 0: Записване на адрес първи movwf FSR ;Регистър за съхраняване на информация в FSR регистър movlw .8 ;Записване на числото 8 в shet регистъра, за поддържане на movwf shet ;Броене на колони ; изход 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 ;изход от подпрограма за прекъсване;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Старт на главна програма ................ ;Първоначална настройка на регистри ................. ;Специално предназначение..... ............ 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-ва колона; е извършва се еднократно, след включване на захранването; 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 данни1;R пример за изход movwf FSR; movlw b"00000000"; movwf INDF; incf FSR,F ; movlw b"01111111"; movwf INDF; incf FSR,F ; movlwb"00001001"; movwf INDF; incf FSR,F ; movlwb"00011001"; movwf INDF; incf FSR,F ; movlwb"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; ; .................; .................; .................; ; край ; край на цялата програма;

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

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

; Примерна тактова честота 4 MHz, машинен цикъл 1 µs

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 ;left shift 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 ;декремент с регистър състояние лист

goto exxit ;shet регистър не е равен на 0: скок към exxit

movlw data1 ;shet регистър е 0: запишете адреса на първия

movwf FSR ;Регистрирайте се, за да съхранявате информация във FSR

movlw .8 ;запишете номер 8 в shet регистър, за справка

movwf лист;брои колони

movlw b"10000000" ;запишете двоично число 10000000 в

movwf stolb ;регистрирайте stolb, за да включите 1-вата колона

изход 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 ;изход от процедурата за прекъсване

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

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

Старт ................. ;първоначална настройка на регистрите

................. ;със специално предназначение

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

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 регистър (като брояч) и непряко адресиране, изчистването е еквивалентно на изключване на матрицата.

В процедурата за обработка на прекъсвания ние зареждаме съдържанието на регистъра stolb в чипа DD2 (първият път, когато влезете в манипулатора след активиране на прекъсванията, регистърът съдържа числото 10000000, както беше споменато по-горе). Зареждането започва от ниския бит на регистъра stolb, който се измества в посока от Q0 към Q7 (вътре в DD2 чипа), докато се зарежда, алгоритъмът за зареждане беше обсъден по-горе, така че мисля, че няма да е трудно да се разбере кодът . След това зареждаме съдържанието на регистъра INDF в DD2, това е един от регистрите за съхранение на информация, чийто адрес е във FSR (първият път, когато въведете манипулатора след активиране на прекъсвания, FSR съдържа адреса на първия регистър за съхранение на информация, наречен данни1). Зареждането започва от старшия бит на INDF регистъра. След зареждане на разглежданите 2 байта, часовник на изхода st_cp, като по този начин изтеглените данни се предават към изходните линии на микросхемите DD2, DD3. Така при първия вход към манипулатора се превключва първата колона на матрицата, в която светят светодиоди, на чиито аноди има високо логическо ниво, в съответствие със съдържанието на регистъра data1 ( първи регистър за съхранение на информация).

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

Следващият път, когато влезете в манипулатора, втората колона на матрицата ще бъде активирана и т.н. Когато листовият регистър се нулира (след превключване на 8-та колона), числото 8 се записва в него за следващия цикъл на превключване на колони, освен това се коригира стойността на регистъра stolb, адресът на първия регистър за съхранение на информация ( data1) се записва в регистъра на FSR.

Нека изчислим закъснението за таймера TMR0, тактовата честота е 4 MHz, машинният цикъл е 1 µs. За да избегнем мигането на светодиодите, нека приемем честотата на опресняване на всяка колона като 100Hz (период T=10ms), забавянето във времето е 10/8 = 1,25ms. Задаваме съотношението на предскалера TMR0 на 1:8, докато максималното възможно забавяне е 256x8 = 2048 µs. За пауза от 1,25 ms, таймерът трябва да брои (256x1,25) / 2,048 = 156,25 пъти, като закръгляме нагоре, получаваме 156 броя. Съответно е необходимо да запишете в таймера числото 256-156 = 100. Но това не е съвсем правилната стойност, тъй като отнема известно време за изпълнение на рутинната процедура за прекъсване, в този случай отнема около 190 µs, преизчислено, като се вземе отчитаме коефициента на предскалера, получаваме 190/8 = 23,75 или 24 точки. Правилната стойност за запис в TMR0 е: 100+24=124.

В основната програма записваме 8 регистъра за съхранение на информация, в съответствие с това, което искаме да изведем на матрицата. По-долу има диаграма, обясняваща извеждането на информация към матрицата за горния код.


В допълнение към регистрите за смяна има специализирани драйвери за показване на информация на седемсегментни индикатори и LED матрици, в този случай самият драйвер реализира динамична индикация, остава само да изпрати данни към него за показване. Прегледах един от тези популярни драйвери в статия за.

Под връзката можете да изтеглите фърмуера и изходния код за микроконтролера PIC16F628A, с внедряването на динамична индикация на матрица 8x8 с помощта на два регистъра за смяна 74HC595, диаграмата на свързване беше обсъдена по-горе. Буквите R, L, числото 46, усмивка и просто шаблон под формата на кръст се показват последователно на матрицата, тази анимация е показана във видеото по-долу.

с етикети , . Прочети .

Сглобяването на шатра на базата на LED матрица и Arduino е проста задача, която може да се направи дори у дома. Не е необходимо да сте програмист и да имате задълбочени познания по електроника, за да накарате буквите да се движат върху LED дисплей. В тази статия ще анализираме как да сглобим течаща линия от готови LED матрици и Arduino Nano.

Какво ще се изисква?

За да реализирате идеята, имате нужда от много малко подробности:

  • два светодиодни модула, състоящи се от четири матрици от 8 на 8 пиксела;
  • държач за батерия със стандартен размер "Krona";
  • 9 волтова батерия (CR-9V, ER-9V или еквивалент);
  • двупинов ключ;
  • свързващи проводници;
  • Arduino Nano платка;
  • горещо лепило.

Схема

На печатната платка на използвания LED модул има 4 матрици с размери 8 на 8 пиксела. Всяка LED платка се управлява от интегрална схема (IC) MAX7219. Тази ИС е контролер за управление на led дисплеи, общи катодни матрици и дискретни светодиоди в количество до 64 бр.

За по-удобно възприемане на информацията, показвана на LED дисплея, се препоръчва инсталирането на няколко модула. За да направите това, те се комбинират в последователно свързани групи, т.е. изходът на първия модул (изход) е свързан към входа на втория модул (вход). Тази сборка се състои от два модула (16 матрици), чиято дължина е напълно достатъчна за удобно четене на цели изречения.

Сглобяване

Матричният модул може да има щифтова връзка или контакти на платката под формата на печатни проводници. Зависи как са свързани. В първия случай се използва сноп с конектори, за да се получи надежден електрически контакт, а във втория случай ще трябва да се монтират и запоят джъмпери.

Но първо трябва да комбинирате двата модула в едно цяло с помощта на горещо лепило. Термопластичното лепило не провежда електричество, което означава, че може безопасно да се нанася върху печатната платка. От краищата на двете дъски се нанася лепило, притиска се и се оставя за няколко минути. След втвърдяване изходните контакти на първия блок са свързани към входните контакти на втория блок съгласно схемата:

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

Прикрепете Arduino Nano, отделението за батерията и превключете към гърба на печатната платка с горещо лепило. Детайлите са подредени по такъв начин, че да могат да се използват удобно.
На следващия етап Arduino се свързва към LED модула чрез свързване на проводниците към входа на първата матрица. В зависимост от версията на модула, операцията се извършва чрез разглобяема връзка или чрез запояване съгласно схемата по-долу:

  • VCC-5V
  • GND-GND
  • D IN - ПИН 11
  • CS-ПИН 10
  • CLK - PIN 13.

На последния етап от монтажа е необходимо да свържете захранването на батерията. За да направите това, отрицателният контакт (черен проводник) от отделението на короната е свързан към GND щифта на Arduino. Положителният контакт (червен проводник) е свързан към превключвателя и след това към щифт #30 на Arduino, предназначен да подава напрежение от нерегулиран източник. В тестов режим тикерът „направи си сам“ може да се захранва чрез микро USB от компютър.
След като се уверят в надеждността на крепежните елементи и качеството на електрическите връзки, те започват да сглобяват кутията. Може да бъде изработен от алуминиев или пластмасов профил, тъй като елементите на веригата не се нагряват. Цветът, размерите, степента на защита и закрепването на корпуса зависят от бъдещата употреба на устройството. В най-простия случай е подходящ защитен екран, изработен от строителен пластмасов ъглов профил с изрез за превключвател.

Програмиране на тикери

Работната линия от Arduino и LED модули под управлението на MAX7219 е почти готова. Време е да преминем към финалната програмна част. Софтуерът (софтуерът) за използвания Arduino и драйверът за него трябва да са инсталирани на компютъра. След това трябва да изтеглите две библиотеки и скица (специална програма, която ще бъде заредена и изпълнена от процесора Arduino). Библиотеките се инсталират със затворена Arduino IDE в папката Documents - Arduino - Libraries. След това изтеглят и стартират скицата и проверяват за наличието на библиотеки и коректността на други данни.

Настройка на скица:

  • "брой хоризонтални дисплеи" показва броя на редовете, в нашия случай 1;
  • "брой вертикални дисплеи" показват броя на матриците, в нашия случай 8;
  • "лентова лента" обозначават надписа, изведен на дисплея;
  • "int wait" задава изходната скорост в милисекунди.

След като проверите въведените данни, остава да кликнете върху бутона "изтегляне". След това изключете от компютъра, поставете батерията и стартирайте устройството.

В заключение бих искал да добавя, че линията за бягане „направи си сам“ се сглобява доста бързо дори без умения за работа с Arduino. Следователно не трябва да се страхувате от тази сложна дъска. Също така си струва да се отбележи, че вървящата линия може да бъде удължена чрез увеличаване на броя на LED матриците.

Прочетете също

През последните години LED матриците навлязоха широко във външната реклама и различни информационни табла. Доста ярки, динамични - те перфектно привличат вниманието и не заслепяват в слънчев ден. Всеки от вас ги вижда всеки ден по улиците на своя град.
Разбира се, тяхното разпространение беше улеснено от ниската цена (поради китайските производители) и лекотата на сглобяване на екрана.

Но какво ще стане, ако се опитате да използвате такива матрици във вашите устройства на микроконтролери? Какъв е интерфейсът за обмен и изходната логика на тези матрици?
Нека се опитаме да разберем всичко.

Китайците предлагат както самите матрици с различни размери и с различни резолюции, така и контролери за показване на изображения върху тях с различни прости ефекти, както и всички необходими аксесоари, свързващи кабели, рамки.
Матриците се срещат като едноцветни (бяло, жълто, червено, зелено, синьо) и 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-пинови конектора са интерфейс, единият от тях е вход (към него е свързан екранният контролер), а вторият е изход (към него е свързана следващата матрица във веригата). Стрелката на платката е насочена от входния конектор към изхода.
Захранването се подава към клемите в центъра на платката. Захранващо напрежение - 5V, максимален ток (при включени всички LED матрици) - 2A (за бяла матрица).

Цялата горна информация, както и демонстрация на матрицата във видеото по-долу. В него от 13:04 до 15:00 говоря за зависимостта на яркостта на екрана от броя на матриците. Това се дължи на грешка в алгоритъма. Грешката е коригирана и сега данните се зареждат преди екранът да се изключи.

И аз ще се радвам да ви видя моят канал в youtube, където все още свързвам много неща към микроконтролери.

Благодаря на всички за вниманието!

Времето минава неусетно и изглежда, че наскоро закупеното оборудване вече не работи. И така, след като изработиха своите 10 000 часа, лампите на моя монитор (AOC 2216Sa) наредиха да живеят дълго време. Първоначално подсветката не се включи за първи път (след включване на монитора, подсветката се изключи след няколко секунди), което беше решено чрез повторно включване / изключване на монитора, с течение на времето мониторът трябваше да бъде включен изключване / изключване вече 3 пъти, след това 5, след това 10 и в един момент не можа да включи подсветката, независимо от броя на опитите да я включите. Изнесените на светло Божие лампи се оказаха с почернели ръбове и законно отидоха за скрап. Опитът за поставяне на лампи за смяна (купени са нови лампи с подходящ размер) беше неуспешен (мониторът успя да включи подсветката няколко пъти, но бързо се върна в режим на включване и изключване) и откриване на причините за това, което може да бъде проблемът вече в електрониката на монитора ме доведе до идеята за факта, че ще бъде по-лесно да сглобите своя собствена подсветка на монитора на светодиоди, отколкото да ремонтирате съществуващата инверторна верига за CCFL лампи, особено след като вече имаше статии в мрежата, показващи принципната възможност за такава замяна.

Разглобяваме монитора

Вече са написани много статии по темата за разглобяването на монитора, всички монитори са много сходни един с друг, така че накратко:
1. Развиваме стойката на захранването на монитора и единствения болт отдолу, който държи задната стена на кутията


2. В долната част на кутията има два слота между предната и задната част на кутията, в едната от които поставяме плоска отвертка и започваме да сваляме капака от ключалките по целия периметър на монитора (просто с леко завъртане на отвертката около оста й и повдигане на капака на кутията). Не е необходимо да прилагате прекомерни усилия, но е трудно да извадите кутията от ключалките само за първи път (по време на ремонта го отварях много пъти, така че ключалките започнаха да се отстраняват много по-лесно с течение на времето).
3. Имаме изглед на монтажа на вътрешната метална рамка пред корпуса:


Изваждаме платката с бутоните от ключалките, изваждаме (в моя случай) конектора на високоговорителя и, като разгънем двете ключалка отдолу, изваждаме вътрешния метален корпус.
4. Отляво можете да видите 4 проводника за свързване на подсветки. Изваждаме ги като леко притискаме, т.к. за да се предотврати изпадане, конекторът е направен под формата на малка щипка. Изваждаме и широк кабел, който отива към матрицата (в горната част на монитора), като притискаме конектора му отстрани (тъй като в конектора има странични ключалки, въпреки че това не е очевидно на пръв поглед към конектора):


5. Сега трябва да разглобите "сандвича", съдържащ самата матрица и подсветката:


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


И блокът с подсветка отделно:


Блокът с подсветка се разглобява по подобен начин, само че вместо метална рамка, подсветката се държи от пластмасова рамка, която едновременно позиционира плексигласа, използван за разсейване на светлината от подсветката. Повечето ключалки са отстрани и са подобни на тези, които държат металната рамка на матрицата (отворени чрез натискане с плоска отвертка), но отстрани има няколко ключалки, които се отварят „навътре“ (трябва да натиснете ги с отвертка, така че ключалките да влязат вътре в кутията).
Първоначално запомних позицията на всички части, които трябва да бъдат премахнати, но след това се оказа, че няма да е възможно да ги сглобя „неправилно“ и дори ако частите изглеждат абсолютно симетрични, разстоянията между ключалките от различни страни на металната рамка и фиксиращите издатини отстрани на пластмасовата рамка, държаща подсветката, няма да позволят да бъдат сглобени „неправилно“ ".
Това всъщност е всичко - разглобихме монитора.

LED ленти за осветление

Първоначално беше решено да се направи подсветката от LED лента с бели светодиоди 3528 - 120 светодиода на метър. Първото нещо, което се оказа, е, че ширината на лентата е 9 мм, а ширината на подсветките (и гнездото за лентата) е 7 мм (всъщност има подсветки от два стандарта - 9 мм и 7 мм). , но в моя случай бяха 7 мм). Ето защо, след изследване на лентата, беше решено да се отреже 1 мм от всеки ръб на лентата, т.к. това не докосна проводимите пътеки отпред на лентата (а отзад, по протежение на цялата лента, има два широки захранващи проводника, които няма да загубят свойствата си поради намаляване на свойствата си с 1 mm при фоново осветление дължина 475 мм, тъй като токът ще бъде малък). Речено, сторено:


По същия начин LED лентата се изрязва внимателно по цялата дължина (на снимката е показано какво се е случило преди и какво се е случило след изрязването).
Ще ни трябват две ленти от 475 мм лента (19 сегмента от 3 светодиода на лента).
Исках подсветката на монитора да работи по същия начин като обикновената (т.е. да се включва и изключва от контролера на монитора), но исках да регулирам яркостта „ръчно“, както на старите CRT монитори, т.к. това е често използвана функция и ми омръзна да се катеря в екранното меню всеки път, когато натисна няколко клавиша (в моя монитор клавишите надясно-наляво не регулират режимите на монитора, а силата на звука на вградените високоговорители , така че режимите всеки път трябваше да се променят през менюто). За това в мрежата беше намерено ръководство за моя монитор (за когото е полезно - приложено в края на статията) и + 12V, On, Dim и GND бяха намерени на страницата с Power Board според схемата , от който се интересуваме.


Включено - сигнал от контролната платка за включване на подсветката (+ 5V)
Dim - ШИМ контрол на яркостта на подсветката
+ 12V се оказа далеч от 12, но някъде около 16V без натоварване на подсветката и някъде около 13.67V с под товар
Също така беше решено да не се правят ШИМ настройки на яркостта на подсветката, а да се захранва подсветката с постоянен ток (в същото време проблемът се решава с факта, че за някои монитори ШИМ на подсветката не работи при много висока честота и някои очи се уморяват малко повече от това). В моя монитор честотата на "родния" ШИМ беше 240 Hz.
По-нататък на платката бяха открити контакти, към които се прилага сигналът за включване (маркиран в червено) и + 12V към инверторния блок (джъмперът, който трябва да бъде разпоен, за да се дезактивира инверторният блок, е маркиран със зелено). (снимката може да бъде увеличена, за да видите бележки):


Линейният регулатор LM2941 беше взет като основа на управляващата верига, главно защото при ток до 1A имаше отделен контролен щифт за включване / изключване, който трябваше да се използва за управление на включване / изключване на фоновото осветление със сигнала за включване от контролната платка на монитора. Вярно е, че в LM2941 този сигнал е обърнат (т.е. има напрежение на изхода, когато входът за включване / изключване е нулев потенциал), така че трябваше да сглобя инвертор на един транзистор, за да съответства на директния сигнал за включване от контролната платка и обърнат вход LM2941. Схемата не съдържа други ексцесии:


Изчисляването на изходното напрежение за LM2941 се извършва по формулата:

Vout = Vref * (R1+R2)/R1

Където Vref = 1,275 V, R1 във формулата съответства на R1 във веригата, а R2 във формулата съответства на двойка резистори RV1 + RV2 във веригата (въведени са два резистора за по-гладък контрол на яркостта и намаляване на обхвата на регулираните напрежения чрез променливия резистор RV1).
Като R1 взех 1 kOhm и изборът на R2 се извършва по формулата:

R2=R1*(Vout/Vref-1)

Максималното напрежение, от което се нуждаем за лентата, е 13V (взех няколко повече от номиналните 12V, за да не губя яркост и лентата ще оцелее при такова леко пренапрежение). Тези. максимална стойност R2 = 1000*(13/1.275-1) = 9.91kΩ. Минималното напрежение, при което лентата все още някак си свети, е около 7 волта, т.е. минимална стойност R2 = 1000*(7/1,275-1) = 4,49kΩ. Нашият R2 се състои от променлив резистор RV1 и многооборотен тример RV2. Получаваме съпротивлението RV1 9.91kOhm - 4.49kOhm = 5.42kOhm (избираме най-близката стойност на RV1 - 5.1kOhm) и задаваме RV2 на около 9.91-5.1 = 4.81kOhm (всъщност най-добре е първо да сглобим веригата, задайте максималното съпротивление на RV1 и измерете напрежението на изхода LM2941 задайте съпротивлението RV2 така, че изходът да има желаното максимално напрежение (в нашия случай около 13V).

Монтаж на LED лента

Тъй като след срязване на лентата с 1 мм, захранващите проводници бяха оголени в краищата на лентата, залепих електрическа лента върху кутията на мястото, където ще бъде залепена лентата (за съжаление не синя, а черна). Отгоре се залепва тиксо (добре е повърхността да се затопли със сешоар, защото тиксото залепва много по-добре върху топла повърхност):


След това се монтират задното фолио, плексигласът и светлинните филтри, които лежат върху плексигласа. По ръбовете подпрях лентата с парчета гумичка (така че краищата на лентата да не се отделят):


След това модулът за подсветка се сглобява в обратен ред, матрицата се монтира, кабелите за подсветка се извеждат.
Веригата беше сглобена на макет (заради простотата реших да не размножавам платката), тя беше завинтена през отворите в задната стена на металния корпус на монитора:




Захранването и управляващият сигнал са стартирани от захранващата платка:


Очакваната мощност, разпределена на LM2941, се изчислява по формулата:

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

За моя случай това е Pd = (13.6-13) * 0.7 + 13.6 * 0.006 = 0.5 вата, така че беше решено да се мине с най-малкия радиатор за LM2941 (засаден през диелектрично уплътнение, защото не е изолиран от земята в LM2941).
Окончателното сглобяване показа доста добро представяне на дизайна:


От предимствата:

  • Използва стандартна LED лента
  • Проста контролна платка
От недостатъците:
  • Недостатъчна яркост на подсветката при ярка дневна светлина (монитор пред прозорец)
  • Светодиодите в лентата не са разположени достатъчно често, за да показват малки конуси светлина от всеки отделен светодиод близо до горния и долния ръб на монитора
  • Балансът на бялото е малко отклонен и става леко зеленикав (най-вероятно се решава чрез регулиране на баланса на бялото или на самия монитор, или на видеокартата)
Доста добър, прост и бюджетен вариант за ремонт на подсветката. Доста удобно е да гледате филми или да използвате монитора като кухненски телевизор, но вероятно не е подходящ за ежедневна работа.

Контрол на яркостта с PWM

За тези хакери, които, за разлика от мен, не си спомнят с носталгия аналоговите контроли за яркост и контраст на стари CRT монитори, можете да управлявате от стандартната ШИМ, генерирана от контролната платка на монитора, без да премахвате никакви допълнителни контроли отвън (без да пробивате кутия за монитор). За да направите това, достатъчно е да сглобите верига И-НЕ на два транзистора на входа на контролера за включване / изключване и да премахнете контрола на яркостта на изхода (задайте изходното напрежение на постоянно 12-13V). Променена схема:


Съпротивлението на тримерния резистор RV2 за напрежение 13V трябва да бъде около 9,9kOhm (но е по-добре да го настроите точно когато регулаторът е включен)

По-плътна LED подсветка

За да се реши проблемът с недостатъчната яркост (и в същото време равномерност) на подсветката, беше решено да се инсталират повече светодиоди и по-често. Тъй като се оказа, че закупуването на светодиоди поотделно е по-скъпо от закупуването на 1,5 метра лента и запояването им оттам, беше избран по-икономичен вариант (запояване на светодиоди от лента).
Самите 3528 светодиода бяха поставени на 4 ленти с ширина 6 mm и дължина 238 mm, 3 светодиода последователно в 15 паралелни монтажа на всяка от 4-те ленти (окабеляването за светодиодите е приложено). След запояване на светодиодите и проводниците се получава следното:




Лентите се поставят две отгоре и отдолу с проводници към ръба на монитора в фуга в центъра:




Номиналното напрежение на светодиодите е 3,5 V (диапазон от 3,2 до 3,8 V), така че комплект от 3 светодиода в серия трябва да се захранва с около 10,5 V. Така че параметрите на контролера трябва да бъдат преизчислени:


Максималното напрежение, от което се нуждаем за лентата, е 10.5V. Тези. максимална стойност R2 = 1000*(10,5/1,275-1) = 7,23kΩ. Минималното напрежение, при което монтажът на светодиодите все още свети по някакъв начин, е около 4,5 волта, т.е. минимална стойност R2 = 1000*(4,5/1,275-1) = 2,53kΩ. Нашият R2 се състои от променлив резистор RV1 и многооборотен тример RV2. Получаваме съпротивлението RV1 7.23kOhm - 2.53kOhm = 4.7kOhm и настройваме RV2 на около 7.23-4.7 = 2.53kOhm и го регулираме в сглобената верига, за да получим 10.5V на изхода на LM2941 при максимално съпротивление RV1.
Един път и половина повече светодиоди консумират 1,2 A ток (номинално), така че разсейването на мощността на LM2941 ще бъде равно на Pd = (13,6-10,5) * 1,2 + 13,6 * 0,006 = 3,8 вата, което вече изисква по-солидна мощност радиатор за премахване на топлината:


Събираме, свързваме, ставаме много по-добри:


Предимства:
  • Достатъчно висока яркост (вероятно сравнима и вероятно дори превъзхождаща яркостта на старата CCTL подсветка)
  • Липса на светлинни конуси по краищата на монитора от отделни светодиоди (светодиодите са разположени доста често и подсветката е еднаква)
  • Все още проста и евтина контролна платка
недостатъци:
  • Проблемът с баланса на бялото, излизащ в зеленикави тонове, не беше решен по никакъв начин
  • LM2941 макар и с голям радиатор се нагрява и топли всичко вътре в корпуса

Контролен панел на базата на понижаващ регулатор

За да се елиминира проблемът с отоплението, беше решено да се сглоби димер на базата на понижаващ регулатор на напрежението (в моя случай LM2576 беше избран с ток до 3A). Той също така има инвертиран контролен вход за включване / изключване, така че същият инвертор на един транзистор присъства за съвпадение:


Намотка L1 влияе върху ефективността на преобразувателя и трябва да бъде 100-220 μH за ток на натоварване от около 1,2-3A. Изходното напрежение се изчислява по формулата:

Vout=Vref*(1+R2/R1)

Където Vref = 1.23V. Като се има предвид R1, можете да получите R2, като използвате формулата:

R2=R1*(Vout/Vref-1)

При изчисленията R1 е еквивалентен на R4 във веригата, а R2 е еквивалентен на RV1+RV2 във веригата. В нашия случай, за да регулираме напрежението в диапазона от 7.25V до 10.5V, вземаме R4 = 1.8kOhm, променлив резистор RV1 = 4.7kOhm и 10kOhm подстригващ резистор RV2 с първоначално приближение от 8.8kOhm (след сглобяване на веригата, най-добре е да зададете точната му стойност чрез измерване на напрежението на изхода на LM2576 при максимално съпротивление RV1).
За този контролер реших да направя платка (размерите нямаха значение, защото в монитора има достатъчно място за монтиране дори на голяма платка):


Сглобяване на контролния панел:


След монтиране в монитора:


Всички са тук:


След сглобяването всичко изглежда работи:


Краен вариант:


Предимства:

  • Достатъчна яркост
  • Понижаващият контролер не загрява и не загрява монитора
  • Без ШИМ, което означава, че нищо не мига на каквато и да е честота
  • Аналогов (ръчен) контрол на яркостта
  • Без ограничение за минимална яркост (за тези, които обичат да работят през нощта)
недостатъци:
  • Леко изместен баланс на бялото към зелени тонове (но не много)
  • При ниска яркост (много ниска) се вижда неравномерност в светенето на светодиоди от различни сглобки поради разпространението на параметрите

Опции за надграждане:

  • Балансът на бялото се регулира както в настройките на монитора, така и в настройките на почти всяка видеокарта
  • Можете да опитате да поставите други светодиоди, които няма да съборят осезаемо баланса на бялото
  • За да избегнете неравномерно осветяване на светодиодите при ниска яркост, можете да използвате: а) ШИМ (регулирайте яркостта с помощта на ШИМ, като винаги подавате номиналното напрежение) или б) свържете всички светодиоди последователно и ги захранвайте с регулируем източник на ток (ако имате свържете всичките 180 светодиода последователно, ще ви трябват 630V и 20mA), тогава един и същ ток трябва да премине през всички светодиоди и всеки ще има свой собствен спад на напрежението, яркостта се регулира чрез промяна на тока, а не на напрежението.
  • Ако искате да направите схема, базирана на ШИМ за LM2576, можете да използвате веригата NAND на входа за включване / изключване на този понижаващ регулатор (подобно на горната схема за LM2941), но е по-добре да поставите димер в празнината на отрицателния проводник на светодиодите през MOSFET на логическо ниво

Можете да изтеглите от линка:

  • AOC2216Sa Сервизно ръководство
  • Листове с данни LM2941 и LM2576
  • Схеми на регулатор LM2941 в Proteus 7 и PDF формат
  • Оформление на платката за светодиоди във формат Sprint Layout 5.0
  • Диаграма и окабеляване на платката на регулатора на LM2576 в Proteus 7 и PDF формат

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

От описанието на страницата следва, че този източник на светлина:
- произведени по LED COB технология;
- захранващо напрежение 220 волта;
- консумирана мощност 30 вата;
- цветна температура 2500-3200K;
- материал на подложката (основата) алуминий;
- габаритни размери 40*60мм;

Докато пакетът пътуваше, изучавах теорията.
Какво представлява технологията LED COB?

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

Пакетът пристигна в жълт плик с мехурче вътре. Самата матрица е затворена в съразмерна найлонова торбичка.





Както можете да видите, наистина светодиодите са разположени близо един до друг, покрити с общ слой фосфор и защитени от маса, наподобяваща пластмасово лепило.
Бялото вещество около периметъра на матрицата и защитната верига на водача изглежда като гума или горещо лепило - не твърда, еластична маса. Това позволи да се премахне от най-изявените корпуси и да се определи, че единият от тях е диоден мост MB10S с максимално постоянно обратно напрежение от 1000 волта и максимален прав ток от 0,5 ампера.
Лист с данни:

Размерите отговарят на посочените в описанието.



Дебелината на субстрата е 1 мм, а теглото на матрицата е цели 8 грама.

От само себе си се разбира, че както при мощните светодиоди, матриците също се нуждаят от радиатор. Като такъв беше избран радиатор от процесора.


С помощта на самонарезни винтове, чрез термопаста KPT-8, матрицата беше фиксирана към радиатора.
В тази последователност от действия беше направена грешка - жицата трябваше да бъде запоена, преди матрицата да бъде прикрепена към радиатора - топлината от поялника отиде в радиатора. Резултатът от запояването се вижда на снимката. Жиците обаче бяха здраво закрепени и не започнах да свалям матрицата.


Първото включване направи незаличимо впечатление - да се каже „ярко“, да не се каже нищо. Дори и да се гледа от разстояние под лек ъгъл спрямо равнината на матрицата, "зайци" са осигурени. В сравнение с наличните 2800K енергоспестяващи лампи, светлината е бяла и има много.

Стая от 14 кв. метра осветен повече от добре.







След 20 минути температурата се покачи до 85 градуса. Освен това не тествах матрицата за сила, въпреки че контролните чипове могат да контролират тока през светодиодите със силно нагряване.

Допълнителни тестове бяха проведени с помощта на принудително охлаждане със стандартен охладител от този радиатор и платка за контрол на скоростта на вентилатора. Махнах последното от старото PC захранване.





Температурата не се повиши над 31,5 градуса за час и половина, а вентилаторът работеше на ниски обороти, без да ускорява.



След това платката за управление на скоростта на вентилатора беше изключена от дизайна, а захранването беше заменено с 9-волтово.

Увеличаването на напрежението в мрежата позволи да се гарантира, че декларираната консумация на енергия е вярна.



Както се очакваше, камерата реагира на трептенето на матрицата с честота 100 Hertz. Не съм заснел видео, но успях да заснема следното

Би било възможно да се преодолеят вълните чрез запояване на кондензатор към диодния мост. Това би довело до повишаване на напрежението до 220 * 1,41 = 310,2 волта и би било необходимо да се играе с ограничителните резистори BP5132H, но тъй като първоначално знаех, че този източник на светлина не е за жилищни помещения, не започнах тази битка.
Обхватът на матрицата е общо улично осветление, помощни помещения и т.н. и следователно пулсациите могат да бъдат пренебрегнати.
С помощта на LATR беше възможно да се установи (експериментът беше проведен на работа и не беше направена снимка, за да не се отговори на въпросите: „Защо?“), че долният праг, при който матрицата все още излъчва светлината е 130 волта. Не подадох повече от 250 волта, но в този случай маската на заварчика няма да пречи).
Поради факта, че този източник на светлина има висока мощност и, така да се каже, повишена плътност на светлината, дифузният екран пред матрицата изобщо няма да бъде излишен.

В резултат на това недостатъците включват:
- повишено разсейване на топлината (разходи за технология, но не и дизайн) и необходимост от използване на радиатор (за предпочитане активно охлаждане);
- доста висока цена.

Тези недостатъци обаче са повече от компенсирани от яркостта на тази матрица, възможността за осветяване на голяма площ и съответствието с декларираните характеристики.
Трептенето не може да се отдаде на отрицателни характеристики, тъй като областта на приложение на матрицата НЕ е ЖИЛИЩНОТО помещение.
Отделно искам да се обърна към привържениците на заповедта "Хейтъри на точка 18"). Приятели, моля ви да бъдете обективни при оценката на информацията, представена в рецензията, особено след като събирането, систематизирането и представянето й отне доста усилия и време.

Продуктът е предоставен за написване на ревю от магазина. Прегледът се публикува в съответствие с клауза 18 от Правилата на сайта.

Смятам да купя +44 Добави към любими Рецензията ми хареса +60 +111

Зареждане...
Горна част