DIY Moving Message Display

Status
Not open for further replies.
diy led moving display

Allegro sells a nice high source-current serial to parallel IC... good for the anodes (you would need 10 for a row of 80):



And I've found the ideal (ideally small TO92) NPN sink transistor, at about 5A, a Fairchild KSC5019:

https://www.fairchildsemi.com/ds/KS/KSC5019.pdf

You could also use a 74HC595 to drive the sink transistors. All said, I could envision driving the whole display with a single 8-pin PIC just to prove the point...
 

rs232 interface pic16f84a-04p

you use direct bus to do it

the freq spread gives display bandwidth
data leaves a pc mux as 64 bit headers

tripple data rate....and interleave

to form massive displays

each company has its own methods and youll hear nothing these days

gone are the days of free speech
 

max6952 18f452

PIC's can clock SPI devices up to 10MHz. So you could clock out 80 bits to anodes in about 80x100ns= 8us. It would leave plenty of room to extend the row if one wished.

The possible issues of overall design will lie in the multiplexing and the part it is plays in display power. A single row requires 8 multiplexed lines, which produces a 12.5% duty cycle. Add a second row and this is cut in half. That requires that you run at higher currents on the anode side, as blueroomelectronics suggested. But these higher currents do not create a greater watt load on the power supply, because the effective power is less due to the duty cycling. The real watt load will be based on the desired brightness of the display.

There does come a point when the display must be designed around some parallel processes, and that's why commercial companies that design such products get pretty good money for such projects.
 

irf9530 uln2803

Here's an 8by64 single color moving message disply that can be controlled through hyperterminal based on PIC16F877a and written in picbasic pro"very easy to use compiler"!!!
 

moving message display software

hello to all

can any 1 donate the 20 points to download the moving_message.zip

i appreciate

thanks
 

diy led moving message

A dream come true for NeoMatrix...
 

moving message effects using visual basic

Hello xorcise

i made 1 using pic16f877a and using shift register 74hc595 8x24 its working perfectly i am attached the eeprom 24c02 saving the data in eeprom and reading and displaying and scrolling i just confuse how to increase the brightness

for rows i am giving from portb through 100ohms resistor and for cols through 74hc595 not using anything

i don't no much just can any bedy tell me what to use so that brightbess will be good

rows is positive and cols is negative as i want to use uln2803 or uln2003a for cols to be negative and for rows i don't no what transistors have to use

suggestion will be appreciate and thanks
 

my_miv_prj.zip

xorcise,

Your 8x8 demo really shows off your programming skills.

May I provide some "food for thought" on hardware?

The example full brightness design below utilizes 8 bit serial-to-parallel sinking driver ICs for column drivers and P-channel MOSFETs for row drivers.

PORTB performs double duty as both a row driver bus during display "on" time and as a shift register data bus during display "off" time.

The PWM signal modulates the driver IC Output Enable lines. Brightness is inversely proportional to PWM duty cycle and a minimum 1% PWM duty cycle (max brightness 99%) provides a 10 usec window at the beginning of each 1 msec interrupt cycle where the the display is "off" and PORTB is used to load the driver shift registers (in parallel).

As you suspected, loading 64 bits of data into the eight shift registers takes only 32 instruction cycles (6.4 usecs @ 20 MHz) and in this design is accomplished by writing 8 bytes to PORTB with a CLK pulse after each byte during the display "off" time at the beginning of each interrupt cycle.

The PWM signal also provides the driver Strobe/Latch signal which transfers the contents of the shift registers onto the driver output pins.

The hardware PWM module really is doing most of the work for us automatically. We need only change the duty cycle in MAIN to vary brightness and throw 8 bytes of shift register data onto PORTB at the beginning of each interrupt cycle. Well, it's a little more involved than that as you must create 8 special "shift register" data bytes with all of the bit 7's in one byte, bit 6's in another byte, and so on, in preparation for the next interrupt cycle, but that's simple.
 

how to build moving message display

BTW, the method in the previous post can be expanded quite easily at the expense of a little more interrupt driver "overhead"...

The example below is still scanning "rows" but the drawing is turned around sideways to show driver connections to each portion of the 8x8 RGB modules...

This could be 24 mono color 8x8 modules instead of 8 RGB 8x8 modules... and duty cycle is still 12.5%

Regards, Mike
 

how to program a moving message display

Hi Mike,

Nice graphics and thanks for the compliments. I have a couple more that should twist the mind of an astute programmer.

Your circuit is identical to mine except in the inverse. I am sourcing the individual LED's and sinking the common cathodes. I found low saturation TO92 NPN's that can manage up to 5A and drive easily from a PIC pin. Since I have a profound tendency to look at electrical design from the programmer's point of view I selected mine because I didn't have to invert the signals. Your circuit is just as valid and inverting the data is really not a problem.

By the way, how did you generate the circuit graphics?

Added after 19 minutes:

Mike said:
PORTB performs double duty as both a row driver bus during display "on" time and as a shift register data bus during display "off" time.

I think this is a clever idea, one that I will try.


As a technical aside, with a PIC you are doing a lot more instruction cycles to output 8 bytes simultaneously and serially using software. I can work out the code but it will certainly be a lot of machine cycles. But, that said, it will probably still be fast enough to fit the overall function of what you want to do with the display.
 

avr attiny2313 led moving display codes

HI ALL

MANY TIMES I HAVE WRITTEN TO THIS TOPIC BUT STILL I HAVE NOT GOT MY ANSWER, I WANT A VERY SIMPLE MOVING MESSAGE DISPLAY BASED ON ATMEL 89C51 WITH ASSEMBLY CODE. MY BIG PROBLEM IS THAT I CAN NOT UNDERSTAND THAT HOW TO SCROLL DIFFERENT TEXT ON MOVING MESSAGE DISPLAY WITH DIFFERETN STYLE???? PLZ PLZ PLZ HELP IF ANY ONE CAN DO SO.

REGARDS
 

16f877 7x10 matrix

I try to load the shift registers as quickly as possible in order to keep the display blanking interval as short as possible. This wouldn't be necessary if I wasn't multiplexing PORTB.
Code:
;******************************************************************
;
;  K8LH High Performance 10-pin Display Subsystem ISR Driver
;
;  This subsystem hardware/software design supports from one
;  to eight 8x8 matrix displays.
;
;  One matrix 'row' is driven during each 1.0 msec interrupt
;  cycle (overall 12.5% duty cycle and 125 Hz refresh rate).
;
;  A minimum PWM 'on-time' of 1% provides a 10 usec window
;  at the start of each interrupt cycle where the PWM signal
;  drives the MIC5821 Output Enable lines high (display off)
;  which allows me to use the RB7-RB0 'row' driver lines as
;  <DAT> lines to load the MIC5821 shift registers.
;
;  Serial data is clocked into eight MIC5821 shift registers
;  in parallel by stuffing PORTB with eight "shift register"
;  formatted bytes which drive the MIC5821 <DAT> inputs.
;
;  The 1% minimum PWM 'on' time limits maximum brightness to
;  99% but the 1% loss of brightness is inperceivable.
;
;  211 cycles, 42.2 usecs, 4.22% "overhead" (20 MHz)
;
ISR_Display_Load
;
;  32 cycles, 6.4 usecs (20 MHz)
;
        movff   SBuff+7,LATB    ; bit 7 byte
        bcf     LATA,0          ; toggle <CLK> pin
        bsf     LATA,0          ;
        movff   SBuff+6,LATB    ; bit 6 byte
        bcf     LATA,0          ;
        bsf     LATA,0          ;
        movff   SBuff+5,LATB    ; bit 5 byte
        bcf     LATA,0          ;
        bsf     LATA,0          ;
        movff   SBuff+4,LATB    ; bit 4 byte
        bcf     LATA,0          ;
        bsf     LATA,0          ;
        movff   SBuff+3,LATB    ; bit 3 byte
        bcf     LATA,0          ;
        bsf     LATA,0          ;
        movff   SBuff+2,LATB    ; bit 2 byte
        bcf     LATA,0          ;
        bsf     LATA,0          ;
        movff   SBuff+1,LATB    ; bit 1 byte
        bcf     LATA,0          ;
        bsf     LATA,0          ;
        movff   SBuff+0,LATB    ; bit 0 byte
        bcf     LATA,0          ;
        bsf     LATA,0          ;
;
;  advance the row ring counter and resume PORTB row driver
;  duties before the PWM line goes low (display on)
;
;  3 cycles, 0.6 usecs
;
        rlncf   RowPos,F        ; advance row ring counter
        comf    RowPos,W        ; invert bits (only 1 bit low)
        movwf   LATB            ; setup PORTB row driver lines
;
The other bit of code is not time critical. It preps the special "shift register" bytes for the next interrupt cycle;
Code:
;
;  build the eight '5821 "shift register" bytes in SBuff for the
;  next interrupt cycle.  first, copy the correct eight display
;  buffer bytes into the WBuff work buffer.  then combine all of
;  the b7 bits, b6 bits, b5 bits, etc., into their own bytes in
;  the eight byte SBuff shift register data buffer.
;
;  step <1>
;  copy 8 byte 'row' into the WBuff work buffer
;
;  23 cycles, 4.6 usecs
;
ISR_Display_Prep

        incf    Row,F           ; Row++
        bcf     Row,3           ; Row %= 8 (well, sort of)
        lfsr    0,DBuff         ; FSR0 = address DBuff[0,0]
        swapf   Row,W           ; WREG = Row (0..7) * 16
        rrncf   WREG,W          ; WREG = Row (0..7) * 8
        addwf   FSR0L,F         ; FSR0 = address DBuff[Row,0]
        movff   POSTINC0,WBuff+0 ; WBuff[0] = DBuff[Row,0]
        movff   POSTINC0,WBuff+1 ; WBuff[1] = DBuff[Row,1]
        movff   POSTINC0,WBuff+2 ; WBuff[2] = DBuff[Row,2]
        movff   POSTINC0,WBuff+3 ; WBuff[3] = DBuff[Row,3]
        movff   POSTINC0,WBuff+4 ; WBuff[4] = DBuff[Row,4]
        movff   POSTINC0,WBuff+5 ; WBuff[5] = DBuff[Row,5]
        movff   POSTINC0,WBuff+6 ; WBuff[6] = DBuff[Row,6]
        movff   POSTINC0,WBuff+7 ; WBuff[7] = DBuff[Row,7]
;
;  step <2>
;  build SBuff for next display interrupt cycle.  all of the
;  b0 bits in one byte, b1 bits in the next byte, and so on.
;
;  153 cycles, 30.6 usecs
;
        lfsr    0,SBuff         ; for (n=0; n<8; ++n)
V1      rrcf    WBuff+0,F       ;   WBuff[0] >>= 1
        rrcf    INDF0,F         ;   SBuff[n] >>= 1 + C*128
        rrcf    WBuff+1,F       ;   WBuff[1] >>= 1
        rrcf    INDF0,F         ;   SBuff[n] >>= 1 + C*128
        rrcf    WBuff+2,F       ;   WBuff[2] >>= 1
        rrcf    INDF0,F         ;   SBuff[n] >>= 1 + C*128
        rrcf    WBuff+3,F       ;   WBuff[3] >>= 1
        rrcf    INDF0,F         ;   SBuff[n] >>= 1 + C*128
        rrcf    WBuff+4,F       ;   WBuff[4] >>= 1
        rrcf    INDF0,F         ;   SBuff[n] >>= 1 + C*128
        rrcf    WBuff+5,F       ;   WBuff[5] >>= 1
        rrcf    INDF0,F         ;   SBuff[n] >>= 1 + C*128
        rrcf    WBuff+6,F       ;   WBuff[6] >>= 1
        rrcf    INDF0,F         ;   SBuff[n] >>= 1 + C*128
        rrcf    WBuff+7,F       ;   WBuff[7] >>= 1
        rrcf    POSTINC0,F      ;   SBuff[n] >>= 1 + C*128
        btfsc   FSR0L,3         ;
        bra     V1              ;
;
 

basic block diagram of scrolling message display


Stop using the 89C51, lots of code for the PIC or AVR chips it seems.
 

pic 16f628a scrolling message display

There are a number of 'tricks' to speed up the loading of the shift registers. For example, if you can do with seven 8x8 modules instead of eight then you could use the RB0 line for the SR <CLK> and RB1..RB7 for <DAT> and preset bit 0 in the SR data bytes to '0'. This results in a 9 pin interface instead of 10 pins and loading the shift registers is accomplished like this;
Code:
;
;  24 cycles, 4.8-usecs (20-MHz clock)
;
ISR_load_shift_registers

        movff   SBuff+7,LATB    ; bit 7 byte [ddddddd0]
        bsf     LATB,0          ; clock data [ddddddd1]
        movff   SBuff+6,LATB    ; bit 6 byte
        bsf     LATB,0          ;
        movff   SBuff+5,LATB    ; bit 5 byte
        bsf     LATB,0          ;
        movff   SBuff+4,LATB    ; bit 4 byte
        bsf     LATB,0          ;
        movff   SBuff+3,LATB    ; bit 3 byte
        bsf     LATB,0          ;
        movff   SBuff+2,LATB    ; bit 2 byte
        bsf     LATB,0          ;
        movff   SBuff+1,LATB    ; bit 1 byte
        bsf     LATB,0          ;
        movff   SBuff+0,LATB    ; bit 0 byte
        bsf     LATB,0          ;
;
;  resume PORTB 'row' driver duties before PWM goes low and
;  advance the 'row' ring counter for the next cycle
;
;  3 cycles, 0.6-usecs
;
        comf    ROWPOS,W        ; invert bits (only 1 bit low)
        movwf   LATB            ; setup PORTB column drivers
        rlncf   ROWPOS,F        ; advance column ring counter
Anyway, I hope you get the opportunity to experiment with your 8x8 design by adding PNP anode drivers and some sort of serial-to-parallel sinking cathode driver. Almost anything with an Output Enable line will allow you to implement PWM brightness control and multiplex the driver bus.

The driver scheme is pretty flexible. Here's another food-for-thought example using a little 18 pin 16F88 and an 8 pin interface;
 

moving message display circuit diagram

I get to the forum this morning and said... wow!!! Between the schematics and code I think the questions in the forum should now be answered for most. Nice work Mike.
 

byte pointer codevisionavr char array

PLEASE I WANT COMPLEATE GUIDE FOR BUILD MOVING MASSAGE BOARD USING 89C51 OR 2051 MICROCONTROLLERS
 

font avr 7x5

On this page, the electronic signboard with PIC16F84A.
The message is displayed to flow on the left from the right.
128 LEDs are used for this board.

https://www.hobby-elec.org/e_pic6_2.htm

Added after 12 minutes:

leisryan said:
Here's an 8by64 single color moving message disply that can be controlled through hyperterminal based on PIC16F877a and written in picbasic pro"very easy to use compiler"!!!


hello to all serious of a lot of aid that that can donate me 22 points to download moving messge.zip

disculpén por mi ingles malo.
salu2 desde vzla
 

moving sign projekt

Hi Microtronic,

I think you made that board a work of art.... very worthy of a large picture... you should get points for it's hardwired beauty.

Your circuit design no doubt works fine for the size but if extended to include more LED's, such as by adding another 74HC154, you will have problems with dimming due to reduced duty cycle per column. It is more advantageous to sequence the rows which reduces the multiplexing time divisions, as Mike showed in his circuits above.
 

electronics for you-move message display projects

For neomatrix and all

for rows you can use power transistors drived by portb and for columns you can use only low power transistors like BC547 drived by 595, and the curant wich pass trougth each LED must be at low 70ma if you use a 25hz frequency scaning for rows for a good britness. if you use a 5v supply the resistance must be R=5/0.07=71 ohms. excuse my english !

I made one and i need some high intensity led, and sorry i have'nt any schematic, i disigned this with mind.
 

Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…