Do-it-yourself beam from an LED matrix. Addressable LED Matrices

Sometimes it is required to connect several seven-segment indicators or an LED matrix to the microcontroller, while dynamic indication is used to display information. The essence of dynamic indication is the successive display of information on the indicators. The diagram below shows an example of connecting several seven-segment indicators (for example, with a common cathode) to implement a dynamic indication, in general, taking into account the point, 8 segments are obtained, but in the old fashioned way they are called that way. All conclusions (anodes) of the segments of the same name are connected together, for a total of 8 lines that are connected to the microcontroller through resistors. The common cathode of each indicator is connected to the microcontroller through a transistor.


The indication algorithm is as follows: first, we set the required logical levels on the lines, depending on which segments must be turned on on the first indicator (indication from left to right), with a high logical level to turn on, low to turn off the segment. Next, we apply a high logic level to the base of the transistor VT1, thereby the common cathode of the first indicator is connected to the common wire, at this moment those segments light up, on the anodes of which there is a logical unit. Through certain time(pause) turn off the indicator by applying a low logic level to the base of the transistor, then again change the logic levels on the lines in accordance with the output information intended for the second indicator, and apply a turn-on signal to the transistor VT2. Thus, in order in a circular cycle, we switch all the indicators, that's the whole dynamic indication.

To get a solid image without flickering, switching must be done at a high speed, to prevent flickering of the LEDs, the refresh rate must be set from 70 Hz or more, I usually set it to 100 Hz. For the above construction, the pause is calculated as follows: for a frequency of 100 Hz, the period is 10 ms, there are only 4 indicators, respectively, the glow time of each indicator is set at 10/4 = 2.5 ms. There are multi-digit seven-segment indicators in one housing, in which the segments of the same name are connected inside the housing itself, of course, to use them, it is necessary to use dynamic indication.

To implement dynamic indication, it is necessary to use interrupts on overflow of one of the timers. Below is the code using the TMR0 timer:

;Implementation of dynamic indication for 4 seven-segment indicators ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; swapf STATUS,W ; clrf STATUS ; movwf STATUS_TEMP ; ; bcf ind1 ;turn off the 1st indicator bcf ind2 ;turn off the 2nd indicator bcf ind3 ;turn off the 3rd indicator bcf ind4 ;turn off the 4th indicator; incf shet,F ;increment register shet movlw .5 ;check register contents shet xorwf shet,W ;check if it is equal to 5 btfss STATUS,Z ; goto met1 ;number in shet register is not equal to 5 movlw .1 ;number in shet register is 5: write number 1 movwf shet ;into shet register ; met1 movlw .1 ; check register contents shet xorwf shet,W ; equal to number 1 btfss STATUS,Z ; goto met2 ;number in shet register is not equal to 1: jump to met2 movf datind1,W ;number in shet register is equal to 1: copy movwf PORTB ;contents of datind1 register to PORTB register bsf ind1 ;turn on the 1st indicator met2 movlw .2 ;check contents of register shet xorwf shet,W ; equal to 2 btfss STATUS,Z ; goto met3 ;number in shet register not equal to 2: jump to met3 movf datind2,W ;number in shet register is 2: copy movwf PORTB ;contents of datind2 register to PORTB register bsf ind2 ;turn on 2nd indicator goto exxit ;jump to label exxit met3 movlw .3 ; check register contents shet xorwf shet,W ; equal to 3 btfss STATUS,Z ; goto met4 ;number in shet register not equal to 3: jump to met4 movf datind3,W ;number in shet register is 3: copy movwf PORTB ;contents of datind3 register to PORTB register bsf ind3 ;turn on 3rd indicator goto exxit ;jump to label exxit met4 movf datind4,W ;copy the contents of the datind3 register movwf PORTB ;to the PORTB register bsf ind4 ;turn on the 4th indicator; movlw .100 ;write 156 to timer register TMR0 movwf TMR0 ; ; movwf STATUS ; swapf W_TEMP,F ; swapf W_TEMP,W ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Main program ................. movlw b"11010011" ; OPTION_REG, thereby setting the internal ; setting the prescaler ratio 1:16 ; clrf shet ; reset register shet, before starting; interrupts on overflow TMR0, performed; clrf datind1 ;clearing registers for outputting information to clrf datind2 ;indicators, it is equivalent to turning off clrf datind3 ;indicators, as indicators with a common clrf datind4 ;cathode; bcf INTCON,T0IF ; clear TMR0 overflow interrupt flag bsf INTCON,T0IE ; enable TMR0 overflow interrupts bsf INTCON,GIE ; enable global interrupts; movlw b"00000110" ; 13.52 output example movwf datind1 ; movlw b"11001111" ; movwf dated2 ; movlw b"01101101" ; movwf dated3 ; movlwb"01011011" ; movwf dated4 ; ; . ................; .................; .................; ; end ; end of the whole program;

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

;Implementation of dynamic indication for 4 seven-segment indicators

;Example clock frequency 4 MHz, machine cycle 1 µs

org 0000h ;start program execution at address 0000h

goto Start ;go to label Start

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

;Interrupt routine

org 0004h ;start subroutine execution at address 0004h

movwf W_TEMP ;save key register values

swapf STATUS,W ;

movwf STATUS_TEMP ;

bcf ind1 ;turn off the 1st indicator

bcf ind2 ;turn off the 2nd indicator

bcf ind3 ;turn off the 3rd indicator

bcf ind4 ;turn off the 4th indicator

incf shet,F ;increment register shet

movlw .5 ; check the contents of register shet

xorwf shet,W ; equal to 5

btfss STATUS,Z ;

goto met1 ;number in register shet is not equal to 5

movlw .1 ;number in shet register is 5: write number 1

movwf shet ;to register shet

met1 movlw .1 ; check contents of shet register

xorwf shet,W ; equal to number 1

btfss STATUS,Z ;

goto met2 ;number in shet register not equal to 1: jump to met2

movf datind1,W ;number in shet register is 1: copy

movwf PORTB ; contents of datind1 register to PORTB register

bsf ind1 ;turn on the 1st indicator

goto exxit ;go to label exxit

met2 movlw .2 ; check contents of shet register

xorwf shet,W ; equal to number 2

btfss STATUS,Z ;

goto met3 ;number in shet register not equal to 2: jump to met3

movf datind2,W ;number in shet register is 2: copy

movwf PORTB ; contents of datind2 register to PORTB register

bsf ind2 ;turn on the 2nd indicator

goto exxit ;go to label exxit

met3 movlw .3 ; check contents of shet register

xorwf shet,W ; equal to number 3

btfss STATUS,Z ;

goto met4 ;number in shet register not equal to 3: jump to met4

movf datind3,W ;number in shet register is 3: copy

movwf PORTB ; contents of datind3 register to PORTB register

bsf ind3 ;turn on the 3rd indicator

goto exxit ;go to label exxit

met4 movf datind4,W ; copy contents of datind3 register

movwf PORTB ;to PORTB register

bsf ind4 ;turn on the 4th indicator

exxit bcf INTCON,T0IF ;reset TMR0 overflow interrupt flag

movlw .100 ;write number 156 to timer register TMR0

swapf STATUS_TEMP,W ; restore contents of key registers

swapf W_TEMP,F ;

swapf W_TEMP,W ;

retfie ;exit interrupt routine

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

;Main program

Start ................. ; initial setup registers

................. ;special purpose

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

bsf STATUS,RP0 ;write binary number 11010011 to register

movlw b"11010011" ;OPTION_REG, thereby setting the internal

movwf OPTION_REG ; clock source for TMR0

bcf STATUS,RP0 ;enable prescaler before TMR0

;Set the prescaler ratio to 1:16

clrf shet ; reset the shet register before starting

;overflow interrupt TMR0, performed

;once after power on

clrf datind1 ; clear registers for outputting information to

clrf datind2 ;indicators, equivalent to off

clrf datind3 ;indicators, since indicators with a common

clrf datind4 ;cathode

bcf INTCON,T0IF ;reset TMR0 overflow interrupt flag

bsf INTCON,T0IE ;enable TMR0 overflow interrupts

bsf INTCON,GIE ; enable global interrupts

movlw b"00000110" ; 13.52 output example

movlw b"11001111" ;

movlw b"01101101" ;

movlwb"01011011" ;

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

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

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

end ; end of the whole program

In the main program, we first set up a timer using the OPTION_REG register, earlier I talked about using timers for . Next, we clear the shet register, intended for entering a count from 1 to 4, for each indicator. This register is incremented in the interrupt service routine and adjusted there (it will count from 1 to 4), so this clearing is performed once after power-up. Based on this register, we will determine which indicator to include and issue data corresponding to it. The next step is to clear the information storage registers, the four dataind1,2,3,4 registers corresponding to the four indicators. Clearing is equivalent to turning off the indicators, since in the interrupt service routine, the contents of these registers are transferred to the PORTB register, to which the indicator anodes are connected. This is necessary so that any garbage is not displayed on the indicators after interrupts are enabled, in principle this can not be done if you immediately write correct information for output. Next, reset the timer overflow interrupt flag, enable TMR0 overflow interrupts, and finally enable global interrupts.

In the interrupt routine, we first turn off all the indicators (by applying low logic levels to the bases of the transistors), because it is not known which one is on. We increment the shet register, checking for equality to the number 5, if there is such a match, write the number 1 to the register, since it is necessary to count from 1 to 4. Next, we check which number is in the shet register, by which we load data from PORTB into PORTB information storage registers (dataind) for the corresponding indicator and turn it on. After that, we reset the TMR0 overflow interrupt flag, write the number 100 into the timer (the calculation of this value is given below), for a time delay, and exit the interrupt handler. At the first interruption, the first indicator turns on, at the second interruption, the second one, and so on in a circular cycle. In the main program, it remains only to load data into the information storage registers for each indicator. In the interrupt subroutine, do not forget to save and restore the values ​​​​of key registers, I wrote about this in an article about.

To output numbers, it is better to use a character generator in the form of a data table. For example, to display the number 3456 on the indicators, it must be divided into digits, while it is better to use separate registers to store the numbers of digits (from 0 to 9), then run these registers through the character generator, thereby obtaining the correct bytes (loaded into the dataind registers) to ignite the respective segments.

We will take the frequency of the clock generator as 4 MHz, the machine cycle is 1 μs. Let the refresh rate of each indicator be 100 Hz (period T = 10 ms), respectively, the required time delay is 10/4 = 2.5 ms. The prescaler factor for TMR0 is set to 1:16, while the maximum possible delay is 256x16 = 4096 µs, and we need a pause of 2.5 ms. Let's calculate the number to write to TMR0: 256-((256x2.5)/4.096) = 256-156.25 = 99.75. After rounding, we get the number 100.

Below you can download a model for the Proteus program, firmware and source code with the implementation of dynamic indication on a 4-digit indicator with a common cathode using the PIC16F628A microcontroller. For example, the numbers 0000 are displayed on the indicator; 0001; 0002; 13.52; 9764.

Now consider connecting a matrix with a resolution of 8x8 pixels (LEDs). The structure of a matrix is ​​usually considered in terms of rows and columns. In the picture below, in each column, the cathodes of all LEDs are connected, and in each row, the anodes. Strings (8 lines, LED anodes) are connected through resistors to the microcontroller. Each column (LED cathodes) is connected to the microcontroller through 8 transistors. The indication algorithm is the same, first we set the necessary logical levels on the rows, in accordance with which LEDs should light in the column, then we connect the first column (indication from left to right). After a certain pause, we turn off the column, and change the logical levels on the lines to display the second column, then we connect the second column. And so alternately commute all the columns. Below is a diagram of connecting the matrix to the microcontroller.


In total, to connect such a matrix, 16 microcontroller pins are required, which is quite a lot, therefore, to reduce the control lines, it is better to use serial shift registers.

The most common serial register is the 74HC595 microcircuit, which contains shift register for loading data, and a holding register through which data is transferred to the output lines. Loading data into it is simple, set the logical 0 at the SH_CP clock input, then set the required logic level at the DS data input, after which we switch the clock input to 1, while saving the level value (at the DS input) inside the shift register. At the same time, the data is shifted by one bit. Reset the SH_CP output to 0 again, set the required level at the DS input and raise SH_CP to 1. After the shift register is fully loaded (8 bits), set the ST_CP output to 1, at this moment the data is transferred to the storage register and fed to the output lines Q0 ... Q7, after which we reset the output of ST_CP. During sequential loading, the data is shifted from Q0 to Q7. Pin Q7' is connected to the last bit of the shift register, this pin can be connected to the input of the second microcircuit, so you can load data into two or more microcircuits at once. The OE pin switches the output lines to the third (high-resistance) state when a logic 1 is applied to it. The MR pin is designed to reset the shift register, that is, setting low logic levels at the outputs of the register triggers, which is equivalent to loading eight zeros. Below is a diagram of loading data into the 74NS595 microcircuit, setting the value 11010001 on the output lines Q0 ... Q7, provided that there were zeros initially:


Consider connecting an 8×8 matrix to a PIC16F628A microcontroller using two 74HC595 shift registers, the diagram is shown below:


The data is loaded into the DD2 chip (logic level control on the rows, LED anodes), then it is transferred through the Q7 pin to DD3 (column control), respectively, first we load the byte to enable the column, then the byte with the logical levels on the rows. Transistors switching matrix columns (LED cathodes) are connected to the output lines of DD3. Below is the program code for displaying an image on a matrix:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Implementation of dynamic indication for a matrix with a resolution of 8x8 ;Frequency of the clock generator for example 4 MHz, machine cycle 1 µs org 0000h ;start program execution from address 0000h goto Start ;jump to label Start ;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Interrupt routine org 0004h ;start subroutine execution from address 0004h movwf W_TEMP ;save key register values ​​swapf STATUS,W ; clrf STATUS ; movwf STATUS_TEMP ; ; movwf FSR_osn ;to the FSR_osn register movf FSR_prer,W ;restoring the previously saved value movwf FSR ;of the FSR register from the FSR_prer register ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;; ;load the contents of the stolb register into the chip movf stolb,W ;copy the contents of the stolb register movwf var ;to the register var met2 btfsc var,0 ;set the output ds in accordance with btfss var,0 ; bcf ds ; bcf sh_cp ; rrf var,F ;Shift register var right to prepare;next bit goto met2 ;scetbit not equal to zero: jump to label met2 ;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;; ;load the contents of the INDF register into the chip;74HC595 (serial shift register) movf INDF,W ;copy the contents of the INDF register movwf var ;to the var register movlw .8 ;write the number 8 into the scetbit register, for counting movwf scetbit ;transferred bits met1 btfsc var ,7 ;set output ds according to bsf ds ;value of 7th bit of register var btfss var,7 ; bcf ds ; bsf sh_cp ;clock sh_cp output to latch data bcf sh_cp ; rlf var,F ;Shift register var left to prepare;next bit decfsz scetbit,F ;Decrement with register condition scetbit goto met1 ;scetbit not equal to zero: Jump to label met1 ; bsf st_cp ; clock the output st_cp to transfer the loaded bcf st_cp ; bytes to the output lines of the 74HC595 chips ; bcf STATUS,C ;reset the C bit of register status before shift rrf stolb,F ;left shift register stolb ; incf FSR,F ;Increment FSR register, prepare next ;Register to send data to 74HC595 decfsz shet,F ;Decrement with register condition shet goto exxit ;Shet register not equal to 0: Jump to exxit movlw data1 ;Shet register equal to 0: Write address first movwf FSR ;Register for storing information in the FSR register movlw .8 ;Writing the number 8 in the shet register, for maintaining movwf shet ;Counting columns ; exxit bcf INTCON,T0IF ;reset overflow interrupt flag TMR0 movlw . 124 ;write number 124 to timer register TMR0 movwf TMR0 ; ; movf FSR,W ;Save the current value of FSR movwf FSR_prer ;To FSR_prer movf FSR_osn ,W ;Restore the previously saved value movwf FSR ;FSR from FSR_osn ; swapf STATUS_TEMP,W ; restore contents of key registers movwf STATUS ; swapf W_TEMP,F ; swapf W_TEMP,W ; ; retfie ;exit from interrupt subroutine;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Main program Start ................ ;Initial setting of registers ................. ;Special purpose..... ............ bsf STATUS,RP0 ;write binary number 11010011 into register movlw b"11010010" ;OPTION_REG, thereby setting the internal movwf OPTION_REG ;clock source for TMR0 bcf STATUS,RP0 ;enable prescaler before TMR0; set the prescaler ratio 1:8; movlw .8 ;write number 8 to shet register, before starting movwf shet ;tmr0 overflow interrupts, executed;once, after power on movlw b"10000000" ;write binary number 10000000 to movwf stolb ;stolb register, to enable 1st column; is performed once, after turning on the power; movlw data1 ;Write the address of the first register (storage registers movwf FSR_prer ;information) into the FSR_prer register, performed;one time after power on; movlw .8 ;clearing 8 registers of information output to movwf tmp ;matrix, equivalent to turning off movlw data1 ;matrix movwf FSR ; met3 clrf INDF ; incf FSR,F ; decfsz tmp,F ; goto met3 ; ; bcf INTCON,T0IF ; clear TMR0 overflow interrupt flag bsf INTCON,T0IE ; enable TMR0 overflow interrupts bsf INTCON,GIE ; enable global interrupts; m1 movlw data1 ; R output example 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 ; ; .................; .................; .................; ; end ; end of the whole program;

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

;Implementation of dynamic indication for a matrix with a resolution of 8x8

;Example clock frequency 4 MHz, machine cycle 1 µs

org 0000h ;start program execution at address 0000h

goto Start ;go to label Start

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

;Interrupt routine

org 0004h ;start subroutine execution at address 0004h

movwf W_TEMP ;save key register values

swapf STATUS,W ;

movwf STATUS_TEMP ;

movf FSR,W ;save the current value of the FSR register

movwf FSR_osn ;to FSR_osn register

movf FSR_prer,W ; restore previously saved value

movwf FSR ;FSR from FSR_prer

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

;74HC595 (serial shift register)

movf stolb,W ; copy contents of stolb register

movwf var ;to register var

movlw .8 ;write number 8 into scetbit register, for counting

movwf scetbit ;transmitted bits

met2 btfsc var,0 ;set ds output according to

bsf ds ; 7th bit value of register var

bsf sh_cp ;clock sh_cp output to latch data

rrf var,F ; shift register var right to prepare

;next bit

decfsz scetbit,F ;decrement with scetbit register condition

goto met2 ;scetbit not equal to zero: jump to met2 label

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

;74HC595 (serial shift register)

movf INDF,W ; copy contents of register INDF

movwf var ;to register var

movlw .8 ;write number 8 into scetbit register, for counting

movwf scetbit ;transmitted bits

met1 btfsc var,7 ;set ds output according to

bsf ds ; 7th bit value of register var

bsf sh_cp ;clock sh_cp output to latch data

rlf var,F ;left shift var to prepare

;next bit

decfsz scetbit,F ;decrement with scetbit register condition

goto met1 ;scetbit not equal to zero: jump to label met1

bsf st_cp ;clock the output of st_cp to transfer loaded

bcf st_cp ;bytes per 74HC595 output lines

bcf STATUS,C ; clear C bit of status register before shift

rrf stolb,F ;left shift register stolb

incf FSR,F ;increment FSR register, prepare next

; register to send data to 74HC595

decfsz shet,F ;decrement with register condition shet

goto exxit ;shet register not equal to 0: jump to exxit

movlw data1 ;shet register is 0: write the address of the first

movwf FSR ;Register to store information in FSR

movlw .8 ;write number 8 into shet register, for reference

movwf sheet ;column counts

movlw b"10000000" ;write binary number 10000000 into

movwf stolb ;register stolb, to include the 1st column

exxit bcf INTCON,T0IF ;reset TMR0 overflow interrupt flag

movlw .124 ;write number 124 to timer register TMR0

movf FSR,W ;save the current value of the FSR register

movwf FSR_prer ;to FSR_prer register

movf FSR_osn ,W ; restore previously saved value

movwf FSR ;FSR from FSR_osn

swapf STATUS_TEMP,W ; restore contents of key registers

swapf W_TEMP,F ;

swapf W_TEMP,W ;

retfie ;exit interrupt routine

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

;Main program

Start ................. ;initial setting of registers

................. ;special purpose

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

bsf STATUS,RP0 ;write binary number 11010011 to register

movlw b"11010010" ;OPTION_REG, thereby setting the internal

movwf OPTION_REG ; clock source for TMR0

bcf STATUS,RP0 ;enable prescaler before TMR0

;Set the prescaler ratio to 1:8

movlw .8 ;write number 8 into shet register before running

movwf shet ; TMR0 overflow interrupts, running

;once after power on

movlw b"10000000" ;write binary number 10000000 into

movwf stolb ;register stolb, to include the 1st column

Information with logical levels for the rows of each column is stored in 8 information storage registers, which are accessed through. The address of the first register is named data1. In addition to the initial writing of the shet and stolb registers, it is necessary to write the address of the first information storage register to the FSR_prer register (the register is data1, the entry in FSR_prer is performed once, then it is adjusted in the handler), only after that, allow TMR0 overflow interrupts.

Before enabling interrupts, it is desirable to clear the information storage registers, this operation is performed using the additional tmp register (as a counter) and indirect addressing, clearing is equivalent to turning off the matrix.

In the interrupt handling routine, we load the contents of the stolb register into the DD2 chip (the first time you enter the handler after enabling interrupts, the register contains the number 10000000, as mentioned above). Loading starts from the low bit of the stolb register, which shifts in the direction from Q0 to Q7 (inside the DD2 chip) as it is loaded, the loading algorithm was discussed above, so I think it will not be difficult to understand the code. Next, we load the contents of the INDF register into DD2, this is one of the information storage registers, the address of which is in the FSR (the first time you enter the handler after enabling interrupts, the FSR contains the address of the first information storage register called data1). Loading starts from the high bit of the INDF register. After loading the considered 2 bytes, we clock the st_cp output, thereby the downloaded data is transmitted to the output lines of the DD2, DD3 microcircuits. Thus, at the first input to the handler, the first column of the matrix is ​​switched, in which LEDs light up, on the anodes of which there is a high logic level, in accordance with the contents of the data1 register (the first information storage register).

Next, we shift the stolb register to the right by one bit in order to prepare the second column of the matrix for switching at the next entry into the interrupt handler. The C flag of the STATUS register must be cleared before the shift, since the shift occurs through this flag and its state is not known at the time of the shift. After the shift, we increment the FSR register, preparing the next storage register (after the data1 register) with logical row levels for the second column. Next, we decrement the shet register with the condition, and if it is not equal to zero, reset the TMR0 overflow interrupt flag, write the number to the timer, and exit the interrupt handler.

The next time you enter the handler, the second column of the matrix will be enabled, and so on. When the shet register is reset (after switching the 8th column), the number 8 is written to it for the next cycle of switching columns, in addition, the value of the stolb register is corrected, the address of the first information storage register (data1) is written to the FSR register.

Let's calculate the time delay for the TMR0 timer, the clock frequency is 4 MHz, the machine cycle is 1 µs. To avoid flickering of the LEDs, let's take the refresh rate of each column as 100Hz (period T=10ms), the time delay is 10/8 = 1.25ms. We set the prescaler ratio TMR0 to 1:8, while the maximum possible delay is 256x8 = 2048 µs. For a pause of 1.25 ms, the timer should count (256x1.25) / 2.048 = 156.25 times, rounding up we get 156 counts. Accordingly, it is necessary to write the number 256-156 = 100 into the timer. But this is not quite the correct value, since it takes some time to execute the interrupt routine, in this case it takes about 190 µs, recalculated taking into account the prescaler coefficient, we get 190/8 = 23.75 or 24 counts. Correct value for writing to TMR0 is: 100+24=124.

In the main program, we write 8 information storage registers, in accordance with what we want to display on the matrix. Below is a diagram explaining the output of information to the matrix for the above code.


In addition to shift registers, there are specialized drivers for displaying information on seven-segment indicators and LED matrices, in this case the driver itself implements dynamic indication, all that remains is to send data to it for display. I reviewed one of these popular drivers in an article about.

Below the link you can download the firmware and source code for the PIC16F628A microcontroller, with the implementation of dynamic indication on an 8x8 matrix using two 74HC595 shift registers, the connection diagram was discussed above. The letters R, L, the number 46, a smiley, and just a pattern in the form of a cross are alternately displayed on the matrix, this animation is shown in the video below.

with tags , . Read .

Assembling a marquee based on an LED matrix and Arduino is a simple task that can be done even at home. You don't need to be a programmer and have in-depth knowledge of electronics to make letters move on an LED display. In this article, we will analyze how to assemble a running line from ready-made LED matrices and Arduino Nano.

What will be required?

To implement the idea, you need very few details:

  • two LED modules, consisting of four matrices of 8 by 8 pixels;
  • holder for a battery of standard size "Krona";
  • 9 volt battery (CR-9V, ER-9V or equivalent);
  • two-pin switch;
  • connecting wires;
  • Arduino Nano board;
  • hot glue.

Scheme

On the printed circuit board of the LED module used, there are 4 matrices 8 by 8 pixels in size. Each LED board is controlled by an integrated circuit (IC) MAX7219. This IC is a controller for controlling led displays, common cathode matrices and discrete LEDs in an amount of up to 64 pcs.

For a more comfortable perception of information displayed on the LED display, it is recommended to install several modules. To do this, they are combined into series-connected groups, that is, the output of the first module (out) is connected to the input of the second module (in). This assembly consists of two modules (16 matrices), the length of which is quite enough for convenient reading of entire sentences.

Assembly

The matrix module can have a pin connection or contacts on the board in the form of printed conductors. It depends on how they are connected. In the first case, a harness with connectors is used to obtain a reliable electrical contact, and in the second case, jumpers will have to be installed and soldered.

But first you need to combine both modules into a single unit using hot melt adhesive. Thermoplastic adhesive does not conduct electricity, which means that it can be safely applied to the printed circuit board. Glue is applied from the ends of both boards, pressed and left for several minutes. After hardening, the output contacts of the first block are connected to the input contacts of the second block according to the scheme:

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

WITH reverse side PCB with hot glue attached Arduino Nano, battery compartment and switch. Details are arranged in such a way that they can be conveniently used.
At the next stage, the Arduino is connected to the LED module by connecting the wires to the input of the first matrix. Depending on the version of the module, the operation is performed through a detachable connection or by soldering according to the diagram below:

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

At the final stage of assembly, it is necessary to connect the battery power. To do this, the negative contact (black wire) from the crown compartment is connected to the GND pin of the Arduino. The positive contact (red wire) is connected to the switch, and then to Arduino pin #30, designed to supply voltage from an unregulated source. In test mode, a do-it-yourself ticker can be powered via micro USB from a computer.
After making sure of the reliability of the fasteners and the quality of the electrical connections, they begin to assemble the case. It can be made from an aluminum or plastic profile, since the elements of the circuit do not heat up. The color, dimensions, degree of protection and fastening of the housing depend on the future use of the device. In the simplest case, a protective screen made of a building plastic corner profile with a cutout for a switch is suitable.

Ticker programming

The running line from Arduino and LED modules under control of MAX7219 is almost ready. It is time to move on to the final program part. The software (software) for the used Arduino and the driver for it must be installed on the computer. Next, you need to download two libraries and a sketch (a special program that will be loaded and executed by the Arduino processor). The libraries are installed with the Arduino IDE closed in the Documents - Arduino - Libraries folder. Then they download and run the sketch and check for the presence of libraries and the correctness of other data.

Sketch setup:

  • "number of horizontal displays" indicate the number of lines, in our case 1;
  • "number of vertical displays" indicate the number of matrices, in our case 8;
  • "string tape" indicate the inscription displayed on the display;
  • "int wait" sets the output speed in milliseconds.

After checking the entered data, it remains to click on the "download" button. Then disconnect from the PC, insert the battery and start the device.

In conclusion, I would like to add that the do-it-yourself running line is assembled quite quickly even without the skills of working with Arduino. Therefore, you should not be afraid of this intricate board. It is also worth noting that the running line can be made longer by increasing the number of LED matrices.

Read also

In recent years, LED matrices have become widespread in outdoor advertising and various information boards. Quite bright, dynamic - they perfectly attract attention and do not go blind on a sunny day. Each of you sees them on the streets of your city every day.
Of course, their distribution was facilitated by the low price (due to Chinese manufacturers) and the ease of assembly of the screen.

But what if you try to use such matrices in your devices on microcontrollers? What is the exchange interface and output logic of these matrices?
Let's try to figure it all out.

The Chinese offer both the matrices themselves of different sizes and with different resolutions, as well as controllers for displaying images on them with various simple effects, as well as all the necessary accessories, connecting cables, frames.
Matrices are found as single-color (white, yellow, red, green, blue), and 3-color (RGB). The designation of the matrix model usually looks like Pxx or PHxx, where xx is a number indicating the distance between pixels in millimeters. In my case it is P10. In addition, matrices of some standard sizes are not only rectangular, but also square.

Possible options for die sizes



So, we have a white matrix of 32x16 pixels with dimensions of 320x160mm and, accordingly, an interpixel distance of 10 mm. Let's take a closer look at it.
Front view:

It also seemed to you that the LEDs are some kind of oval? Didn't you think...


A small visor is made above the LEDs, which prevents sunlight from illuminating the LEDs.

Front view with plastic mask removed



We turn the matrix and see the board:


There are a bunch of logic chips on the board. Let's see what these microcircuits are:
1. 1 x SM74HC245D - non-inverting buffer
2. 1 x SM74HC04 - 6-channel inverter
3. 1 x SM74HC138D - 8-bit decoder
4. 4 x APM4953 - assembly of 2 P-channel MOSFETs
5. 16 x 74HC595D Latched Shift Register
Two 16-pin connectors are interface, one of them is input (the screen controller is connected to it), and the second is output (the next matrix in the chain is connected to it). The arrow on the board is directed from the input connector to the output.
Power is supplied to the terminals in the center of the board. Supply voltage - 5V, maximum current (when all LED matrices are on) - 2A (for white matrix).

All the above information, as well as a demonstration of the matrix in the video below. In it, from 13:04 to 15:00 I talk about the dependence of the screen brightness on the number of matrices. This is due to an error in the algorithm. The bug has been fixed and now the data is loaded before the screen turns off.

I will also be glad to see you my youtube channel, where I still connect a lot of stuff to microcontrollers.

Thank you all for your attention!

Time passes imperceptibly and it would seem that recently purchased equipment is already out of order. So, having worked out their 10,000 hours, the lamps of my monitor (AOC 2216Sa) ordered to live for a long time. At first, the backlight did not turn on the first time (after turning on the monitor, the backlight turned off after a few seconds), which was solved by turning the monitor on / off again, over time, the monitor had to be turned off / off already 3 times, then 5, then 10, and at some point it could not turn on the backlight, regardless of the number of attempts to turn it on. The lamps taken out into the light of God turned out to be with blackened edges and legally went to the scrap. An attempt to put replacement lamps (new lamps of a suitable size were bought) was unsuccessful (the monitor was able to turn on the backlight several times, but quickly went back to on-off mode) and finding out the reasons for what could be the problem already in the monitor electronics led me to the idea about the fact that it will be easier to assemble your own monitor backlight on LEDs than to repair the existing inverter circuit for CCFL lamps, especially since there have already been articles on the network showing the fundamental possibility of such a replacement.

We disassemble the monitor

A lot of articles have already been written on the topic of disassembling the monitor, all monitors are very similar to each other, so in short:
1. We unscrew the mount of the monitor supply and the only bolt at the bottom that holds the back wall of the case


2. At the bottom of the case there are two slots between the front and back of the case, into one of which we put a flat screwdriver and begin to remove the cover from the latches around the entire perimeter of the monitor (simply by gently turning the screwdriver around its axis and lifting the case cover). It is not necessary to apply excessive efforts, but it is difficult to remove the case from the latches only for the first time (during the repair I opened it many times, so the latches began to be removed much easier over time).
3. We have a view of the installation of the internal metal frame in front of the case:


We take out the board with the buttons from the latches, take out (in my case) the speaker connector and, having unbent the two latches at the bottom, we take out the inner metal case.
4. On the left you can see 4 wires for connecting backlights. We take them out by slightly squeezing, because. to prevent falling out, the connector is made in the form of a small clothespin. We also take out a wide cable going to the matrix (at the top of the monitor), squeezing its connector on the sides (because there are side latches in the connector, although this is not obvious at first glance at the connector):


5. Now you need to disassemble the "sandwich" containing the matrix itself and the backlight:


Along the perimeter there are latches that open with a slight prying with the same flat screwdriver. First, the metal frame holding the matrix is ​​​​removed, after which you can unscrew three small bolts (a regular cross-head screwdriver will not work because of their miniature size, you will need an especially small one) that hold the matrix control board and the matrix can be removed (it is best to put the monitor on a hard surface, such as a table covered with fabric matrix down, unscrewing the control board, put it on the table, unfolding it through the end of the monitor and just lift the backlit case by lifting it vertically, and the matrix will remain lying on the table. in order - i.e. cover the matrix lying on the table with the assembled backlit case, wrap the cable through the end to the control board and screwing the control board carefully lift the assembled unit).
It turns out the matrix separately:


And the backlit block separately:


The backlit block is disassembled in a similar way, only instead of a metal frame, the backlight is held by a plastic frame, which simultaneously positions the plexiglass used to diffuse the light of the backlight. Most of the latches are on the sides and are similar to those that held the metal frame of the matrix (open by prying with a flat screwdriver), but on the sides there are several latches that open “inward” (you need to press on them with a screwdriver so that the latches go inside the case).
At first, I memorized the position of all the parts to be removed, but then it turned out that it would not be possible to assemble them “incorrectly”, and even if the parts look absolutely symmetrical, the distances between the latches on different sides of the metal frame and the fixing protrusions on the sides of the plastic frame holding the backlight will not allow them to be assembled “incorrectly” ".
That's actually all - we dismantled the monitor.

LED strip lighting

At first, it was decided to make the backlight from an LED strip with white LEDs 3528 - 120 LEDs per meter. The first thing that turned out was that the width of the tape was 9 mm, and the width of the backlights (and the seat for the tape) was 7 mm (in fact, there are backlights of two standards - 9 mm and 7 mm, but in my case they were 7 mm). Therefore, after examining the tape, it was decided to cut 1 mm from each edge of the tape, because. this did not touch the conductive tracks on the front of the tape (and on the back, along the entire tape, there are two wide power wires, which will not lose their properties due to a decrease in their properties by 1 mm at a backlight length of 475 mm, because the current will be small). No sooner said than done:


Just as neat LED Strip Light trimmed along the entire length (the photo shows an example of what happened before and what happened after trimming).
We will need two strips of 475 mm tape (19 segments of 3 LEDs per strip).
I wanted the monitor backlight to work in the same way as the regular one (i.e. turned on and off by the monitor controller), but I wanted to adjust the brightness “manually”, like on old CRT monitors, because this is a frequently used function and I got tired of climbing the on-screen menu every time I pressed a few keys (in my monitor, the right-left keys do not adjust the monitor modes, but the volume of the built-in speakers, so the modes each time had to be changed through the menu). For this, a manual was found on the network for my monitor (for whom it is useful - attached at the end of the article) and + 12V, On, Dim and GND were found on the page with the Power Board according to the scheme, which we are interested in.


On - signal from the control board to turn on the backlight (+ 5V)
Dim - PWM backlight brightness control
+ 12V turned out to be far from 12, but somewhere around 16V without backlight load and somewhere around 13.67V with under load
It was also decided not to make any PWM adjustments to the brightness of the backlight, but to power the backlight with direct current (at the same time, the issue is being resolved with the fact that for some monitors the backlight PWM does not work at a very high frequency and some eyes get a little more tired from this). In my monitor, the frequency of the "native" PWM was 240 Hz.
Further on the board, contacts were found to which the On signal is applied (marked in red) and + 12V to the inverter unit (the jumper that must be unsoldered to de-energize the inverter unit is marked green). (photo can be enlarged to see notes):


The LM2941 linear regulator was taken as the basis of the control circuit, mainly because at a current of up to 1A it had a separate On / Off control pin, which was supposed to be used to control the backlight on / off with the On signal from the monitor control board. True, in the LM2941 this signal is inverted (that is, there is voltage at the output when the On / Off input is zero potential), so I had to assemble an inverter on one transistor to match the direct On signal from the control board and the inverted LM2941 input. The scheme does not contain any other excesses:


The calculation of the output voltage for the LM2941 is made by the formula:

Vout = Vref * (R1+R2)/R1

Where Vref = 1.275V, R1 in the formula corresponds to R1 in the circuit, and R2 in the formula corresponds to a pair of resistors RV1 + RV2 in the circuit (two resistors are introduced for smoother brightness control and reducing the range of voltages regulated by the variable resistor RV1).
As R1, I took 1 kOhm, and the selection of R2 is carried out according to the formula:

R2=R1*(Vout/Vref-1)

The maximum voltage we need for the tape is 13V (I took a couple more than the nominal 12V so as not to lose brightness, and the tape will survive such a slight overvoltage). Those. maximum value R2 = 1000*(13/1.275-1) = 9.91kΩ. The minimum voltage at which the tape still somehow glows is about 7 volts, i.e. minimum value R2 = 1000*(7/1.275-1) = 4.49kΩ. Our R2 consists of a variable resistor RV1 and a multi-turn trimmer RV2. We get the resistance RV1 9.91kOhm - 4.49kOhm = 5.42kOhm (we choose the nearest value of RV1 - 5.1kOhm), and set RV2 at about 9.91-5.1 = 4.81kOhm (in fact, it is best to first assemble the circuit, set the maximum resistance of RV1 and measure the voltage across output LM2941 set the resistance RV2 so that the output has the desired maximum voltage (in our case, about 13V).

Installation of LED strip

Since after cutting the tape by 1 mm, the power wires were exposed at the ends of the tape, I glued electrical tape on the case in the place where the tape will be glued (unfortunately not blue but black). A tape is glued on top (it’s good to warm the surface with a hairdryer, because adhesive tape sticks much better to a warm surface):


Next, the back film, plexiglass and light filters that lay on top of the plexiglass are mounted. Along the edges, I propped up the tape with pieces of eraser (so that the edges on the tape do not come off):


After that, the backlight unit is assembled in the reverse order, the matrix is ​​​​installed, the backlight wires are brought out.
The circuit was assembled on a breadboard (because of simplicity, I decided not to breed the board), it was bolted through the holes in the back wall of the metal case of the monitor:




Power and control signal On were started from the power supply board:


The estimated power allocated to the LM2941 is calculated by the formula:

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

For my case, it is Pd = (13.6-13) * 0.7 + 13.6 * 0.006 = 0.5 Watts, so it was decided to get by with the smallest radiator for the LM2941 (planted through a dielectric gasket because it is not isolated from the ground in the LM2941).
The final assembly showed quite a performance of the design:


Of the advantages:

  • Uses standard LED strip
  • Simple control board
Of the shortcomings:
  • Insufficient backlight brightness in bright daylight (monitor in front of a window)
  • The LEDs in the strip are not spaced often enough to show small cones of light from each individual LED near the top and bottom edges of the monitor
  • The white balance is a little off and goes slightly greenish (most likely it is solved by adjusting the white balance of either the monitor itself or the video card)
Pretty good, simple and a budget option backlight repair. It is quite comfortable to watch movies or use the monitor as a kitchen TV, but probably not suitable for everyday work.

Brightness control with PWM

For those hackers who, unlike me, do not remember with nostalgia the analog brightness and contrast controls on the old CRT monitors you can make control from the standard PWM generated by the monitor control board without removing any additional controls to the outside (without drilling the monitor case). To do this, it is enough to assemble an AND-NOT circuit on two transistors at the input of the On / Off controller and remove the brightness control at the output (set output voltage constant at 12-13V). Modified schema:


The resistance of the trimmer resistor RV2 for a voltage of 13V should be around 9.9kOhm (but it is better to set it exactly when the regulator is on)

More dense LED backlight

To solve the problem of insufficient brightness (and at the same time uniformity) of the backlight, it was decided to install more LEDs and more often. Since it turned out that buying LEDs individually is more expensive than buying 1.5 meters of tape and soldering them from there, a more economical option was chosen (soldering LEDs from a tape).
The 3528 LEDs themselves were placed on 4 strips 6 mm wide and 238 mm long, 3 LEDs in series in 15 parallel assemblies on each of the 4 strips (the wiring for the LEDs is attached). After soldering the LEDs and wires, the following is obtained:




The strips are laid two at the top and bottom with wires to the edge of the monitor in a joint in the center:




The nominal voltage across the LEDs is 3.5V (range 3.2 to 3.8V), so an assembly of 3 LEDs in series should be powered by about 10.5V. So the controller parameters need to be recalculated:


The maximum voltage we need for the tape is 10.5V. Those. maximum value R2 = 1000*(10.5/1.275-1) = 7.23kΩ. The minimum voltage at which the assembly of LEDs still somehow glows is about 4.5 volts, i.e. minimum value R2 = 1000*(4.5/1.275-1) = 2.53kΩ. Our R2 consists of a variable resistor RV1 and a multi-turn trimmer RV2. We get the resistance RV1 7.23kOhm - 2.53kOhm = 4.7kOhm, and set RV2 at about 7.23-4.7 = 2.53kOhm and adjust it in the assembled circuit to get 10.5V at the output of LM2941 at maximum resistance RV1.
One and a half times more LEDs consume 1.2A of current (nominally), so the power dissipation on the LM2941 will be equal to Pd = (13.6-10.5) * 1.2 + 13.6 * 0.006 = 3.8 watts, which already requires a more solid heatsink to remove heat:


We collect, connect, we get much better:


Advantages:
  • Sufficiently high brightness (possibly comparable, and possibly even superior to the brightness of the old CCTL backlight)
  • Lack of light cones at the edges of the monitor from individual LEDs (LEDs are located quite often and the backlight is uniform)
  • Still a simple and cheap control board
Flaws:
  • The issue with the white balance, leaving in greenish tones, was not resolved in any way
  • LM2941, although with a large heatsink, is heated and heats everything inside the case

Control board based on step-down regulator

To eliminate the heating problem, it was decided to assemble a dimmer based on a Step-down voltage regulator (in my case, LM2576 was chosen with a current of up to 3A). It also has an inverted On / Off control input, so the same inverter on one transistor is present for matching:


Coil L1 affects the efficiency of the converter and should be 100-220 μH for a load current of about 1.2-3A. The output voltage is calculated by the formula:

Vout=Vref*(1+R2/R1)

Where Vref = 1.23V. Given R1, you can get R2 using the formula:

R2=R1*(Vout/Vref-1)

In calculations, R1 is equivalent to R4 in the circuit, and R2 is equivalent to RV1+RV2 in the circuit. In our case, to adjust the voltage in the range from 7.25V to 10.5V, we take R4 = 1.8kOhm, variable resistor RV1 = 4.7kOhm and a 10kOhm trimming resistor RV2 with an initial approximation of 8.8kOhm (after assembling the circuit, it is best to set its exact value by measuring the voltage at the output of LM2576 at maximum resistance RV1).
For this controller, I decided to make a board (the dimensions did not matter, because there is enough space in the monitor to mount even a large board):


Control board assembly:


After mounting in the monitor:


Everyone is here:


After assembly, everything seems to work:


Final variant:


Advantages:

  • Sufficient brightness
  • Step-down controller does not heat up and does not heat the monitor
  • No PWM, which means nothing blinks at any frequency
  • Analog (manual) brightness control
  • No minimum brightness limit (for those who like to work at night)
Flaws:
  • Slightly shifted white balance towards green tones (but not much)
  • At low brightness (very low), unevenness in the glow of LEDs of different assemblies is visible due to the spread of parameters

Upgrade options:

  • White balance is adjustable both in the monitor settings and in the settings of almost any video card
  • You can try to put other LEDs that will not noticeably knock down the white balance
  • To avoid uneven illumination of the LEDs at low brightness, you can use: a) PWM (adjust the brightness using PWM always supplying the rated voltage) or b) connect all the LEDs in series and feed them with an adjustable current source (if you connect all 180 LEDs in series, you will need 630V and 20mA), then the same current must pass through all the LEDs, and each will have its own voltage drop, the brightness is regulated by changing the current and not the voltage.
  • If you want to make a PWM-based circuit for the LM2576, you can use the NAND circuit at the On / Off input of this Step-down regulator (similar to the above circuit for the LM2941), but it's better to put a dimmer in the gap of the negative wire of the LEDs through the logic-level mosfet

You can download from the link:

  • AOC2216Sa Service Manual
  • LM2941 and LM2576 datasheets
  • LM2941 Regulator Schematics in Proteus 7 and PDF Format
  • Board layout for LEDs in Sprint Layout 5.0 format
  • Diagram and wiring of the regulator board on the LM2576 in Proteus 7 and PDF format

LEDs are increasingly taking their place among lighting sources.
Low power consumption, brightness allowed LEDs to replace traditional incandescent lamps and quite confidently compete with energy-saving ones.
Yielding to the general trend, I decided to feel with my own hands and look at the LED matrix with my own eyes, which does not require any separate drivers, but connects directly to the 220 volt network. Who is interested in this topic, please under the cat.
As a result, I opted for the following instance:

From the description on the page it follows that this light source:
- produced using LED COB technology;
- supply voltage 220 volts;
- power consumption 30 watts;
- color temperature 2500-3200K;
- material of the substrate (base) aluminum;
- overall dimensions 40*60mm;

While the package was traveling, I studied the theory.
What is LED COB technology?

Until about 2009, LED products had only one direction of development - increasing the power of the LED or Power LED. The improvement of this technology has made it possible to achieve the power of one LED at the level of 10 watts.
As it turned out, a further increase in power does not make sense due to the high cost of producing a separate high-power LED. An important role in the search for a different way of development was also played by the fact that the LED is a point source of light, and it turned out to be not easy and not very cheap to illuminate a large surface area using high-power LEDs. To obtain more or less acceptable results, the use of optical systems was required in order to make the light diffuse.
The next step was to use SMD LEDs to create acceptable diffuse light sources - a large number of LEDs were soldered onto one board. The disadvantages are the overall labor intensity of the process - the production of individual LEDs (each on its own ceramic substrate + personal phosphor layer, etc.). In addition, the disadvantages of the method were the low reliability of individual LEDs and the need for repair if at least one of them failed.
As a result, the engineers came up with the idea of ​​the need to produce LEDs without personal attributes and place them on the same board on short distance from each other under a common phosphor layer, i.e. LED COB technology. Ultimately, this made it possible to reduce the cost of the light source as a whole and, in the event of failure of individual LEDs, to change the entire module (matrix).

The package arrived in a yellow envelope with a bubble wrap inside. The matrix itself is enclosed in a commensurate plastic bag.





As you can see, indeed the LEDs are located close to each other, covered with a common layer of phosphor and protected by a mass resembling plastic glue.
The white substance around the perimeter of the matrix and the protective circuit of the driver looks like rubber or hot glue - not a solid, elastic mass. This made it possible to remove it from the most prominent cases and determine that one of them is an MB10S diode bridge with a maximum constant reverse voltage of 1000 volts and a maximum forward current of 0.5 amperes.
Datasheet:

Dimensions correspond to those indicated in the description.



The thickness of the substrate is 1 mm and the weight of the matrix is ​​as much as 8 grams.

It goes without saying that, as for high-power LEDs, matrices also need a heatsink. As such, a heatsink from the processor was chosen.


With self-tapping screws, through the KPT-8 thermal paste, the matrix was ​​fixed to the radiator.
A mistake was made in this sequence of actions - the wire should have been soldered before the matrix was \u200b\u200battached to the radiator - the heat from the soldering iron went into the heat sink. The soldering result is visible in the photo. However, the wires were held securely, and I did not begin to remove the matrix.


The first inclusion made an indelible impression - to say “brightly”, to say nothing. Even if viewed from a distance at a slight angle to the plane of the matrix, "hares" are provided. Compared to what is available energy-saving lamps at a temperature of 2800K, the light is white and there is a lot of it.

Room of 14 sq. meters illuminated more than well.







After 20 minutes the temperature rose to 85 degrees. Further, I did not test the matrix for strength, although control chips can control the current through the LEDs with strong heating.

Further tests were carried out using forced cooling with a standard cooler from this radiator and a fan speed control board. I removed the last one from the old PC power supply.





The temperature did not rise above 31.5 degrees for an hour and a half, and the fan worked at low speeds without accelerating.



After that, the fan speed control board was excluded from the design, and the power supply was replaced with a 9-volt one.

The increase in the voltage in the network made it possible to make sure that the declared power consumption is true.



As expected, the camera reacted to the flickering of the matrix with a frequency of 100 Hertz. I didn't take a video, but I was able to capture the following

It would be possible to overcome ripples by soldering a capacitor to the diode bridge. This would cause an increase in voltage to 220 * 1.41 = 310.2 volts and it would be necessary to play with the BP5132H limiting resistors, but since I was initially aware that this light source was not for living quarters, I did not start this fight .
The scope of the matrix is ​​​​general street lighting, utility rooms, etc., and, therefore, pulsations can be neglected.
With the help of LATR, it was possible to establish (the experiment was carried out at work and did not take a photo, so as not to answer the questions: “Why?”), That the lower threshold at which the matrix still emits light is 130-odd volts. I didn’t supply more than 250 volts, but in that case the welder’s mask will not interfere).
Due to the fact that this light source has a high power and, so to speak, an increased density of light, a diffusing screen in front of the matrix will not be superfluous at all.

As a result, the disadvantages include:
- increased heat dissipation (costs of technology, but not design) and the need to use a heat sink (preferably active cooling);
- rather high cost.

However, these disadvantages are more than offset by the brightness of this matrix, the ability to illuminate a large area, and compliance with the declared characteristics.
Flickering cannot be attributed to negative features, as the area of ​​\u200b\u200bapplication of the matrix is ​​NOT RESIDENTIAL premises.
Separately, I want to turn to the adherents of the order "Haters of point 18"). Friends, I ask you to be objective in assessing the information presented in the review, especially since it took quite a lot of effort and time to collect, systematize and present it.

The product was provided for writing a review by the store. The review is published in accordance with clause 18 of the Site Rules.

I plan to buy +44 Add to favorites Liked the review +60 +111

Loading...
Top