PointLess LED Array

From OpenCircuits
Jump to navigation Jump to search

PointLess LED Array Project

Summary

  • Name: PointLess LED Array
  • Status: still developing, but is working
  • Technology: PIC microcontroller with code in BoostC
  • Author: russ_hensel ( where you can find an email address to reach me )

Futulec http://www.futurlec.com/ sells an 8 by 8 array of 64 LED's in a package about 2 inches square. But what to do with it. Well obviously light it up. That is the basis of this project. What is it good for? still looking for a good reason, but it was fun.

PIC microcontroller with code in BoostC.

Files now posted

What it Does

Displays designs on the array, you can spell out messages one character at a time or present little animated designs. The code supplied does all of these. Perhaps I will make a movie.

Parts List

PIC16F877A, my favorite, but I think it is time to move to the 18F series, just not quite there yet.

LED array I got the array from http://www.futurlec.com/ LEDM88OG. This is a two color array ( 64 leds ) , I used only half of them, may use the rest later.

16 small signal transistors – may not be necessary, but allow for larger drive currents

3 x 8 current limiting resistors

Substituting a couple of IC gets rid of most of these transistors and resistors. ( also from http://www.futurlec.com/ )

For better parts list see the schematic.

Circuit/Program Design

We have 64 LEDs and a lot fewer output pins, but wait, the LEDs are already wired in a row and column setup ( all LEDs in one row wired to a common pin, all LEDs in one column wired to a common pin ) We can turn on one row, the set a byte to the column and turn on 0 to 8 LEDs in that column. Time multiplex through the rows and we can display any of 0 to 64 of the 64 LEDs. Do it fast and no one notices the blinking.

The column pins are set to high to turn on the column, the row pins are set to low to turn on the pins. We used high side switches on one side, low side switches on the other side.

This circuit uses an 877A which is overkill, switch to another chip if you wish ( and save board space ).

I built the circuit with discrete transistors using point to point wiring on a perf board, but I have done some work on a printed circuit version using discrete transistor or using the IC's.

Do not rely too much on the circuit and board below, get the eagle files for any recent corrections or improvements.

Circuit

Circuit

  • IC1_PIC16F877 PIC Microcontroller.
  • CA, CB, CC, CD Usual mix of large ( electrolytic )and small caps for use with regulator.
  • Q2 4 Mhz crystal.
  • C1, C2 approx 15 pf.
  • REG 5 volt regulator I used LM7805.
  • REL1...8 Current limiting emitter resistor say 200 ohm.
  • IC2 Low side switch array ULN2803.
  • IC3 High side switch array UDN2891.
  • LED Array Not shown, go to futulec or other supplier and look around.
  • D1 Reverse protection diode, low current rectifier should work, as should just leaving it out ( works most of the time, then the regulator blows, or not ).

Printed Circuit Board

There is still one air wire left, the rest all auto routes. ( I think the design rules... are in the eagle files, if not email me. ) You can fix this with one jumper to the top side. ( or perhaps another way, you could even switch ports and fix in software or the ribbon cable )

Board

Firmware

I use several arrays to store the bits for any given display. The basic idea is to put the data for one column in a char then use 8 char's to display the whole array. We are basically scanning much like a television, or multiplexing a set of 7 segment displays. The difference from a TV is that we put out the equivalent of a whole line at once.

I used a spreadsheet to help me visualize the display and construct the data for the array, see the file download.

The code should be reasonably self explanatory. Send Questions to russ_hensel To make the circuit board easy to layout I have moved some bit and port positions around, you may have to adjust the software to make it work with these changes

Files

All in one zip file, click here

  • This page. Format: Web Archive
  • Planning guide, shows resource/ pin assignment for PIC. Format: open office
  • Character bit pattern planning spreadsheet. Format: open office
  • Schematic and Board Layout Format: Eagle
  • Boostc source and other files, including HEX file. Format: BoostC...

Building your own

My project was hand wired and I made many mistakes. Despite this the code works and I have had a lot of fun with it. Because I changed my mind on the right components and other details all the pieces might not go together for you without a little bit of jiggling. Some particular tips:

The circuit board does not show the array, just a ribbon connector. This goes to the array. One side to the columns, in order 1...8 the other to the rows. The ribbon connector is much bigger than needed, change it to a smaller one.

The 877 is over kill a smaller PIC should work as well, since the firmware is in C it should be an easy move. Since timing is not critical you could dump the crystal if the PIC has a reasonable internal oscillator.

I used discrete transistors not the IC's shown, the IC's should work better, I think. ( and take up less space )

To make the layout work without crossing traces I reversed the connection order on the printed circuit low to high bit, you will have to reverse the bit order somewhere in the code as well.

The code is near ( or above ) the limit for the free BoostC compiler. Much of the stuff is in the effects data, you can delete some. There may also be a fair amount of dead code ( depends on where I am in development cycle ) delete this to reduce code size.

A higher clock frequency would give you more flexibility, lower may force in a flicker.

The value of the current limiting resistors is something you may want to mess with, make brighter, and/or burn out the LED's.

A 5 by 7 array could still do the full character set – with some redesign of the fonts.

Use the spreadsheet for planning your own fonts and effects.

You may have a power supply that makes the on-board regulator unnecessary, but I would leave it in if you are running on batteries ( 9 volt transistor bat for example ).

The circuit is not very complicated, close to a development board. You could start from a development board and put the other circuit components off board, perhaps on a board with the display. The hand wiring should not be a big deal.

Things I am still working on:

  • Add some runtime selection of messages/display
  • Add lower case font.
  • Improve fonts.
  • Add PWM control of brightness.
  • Add more display tricks to the software, perhaps some font variations.
  • There is most of the code in place for a real time clock, displaying time should be pretty easy
  • Other as time and ideas come to me.
  • Mistakes here? Please let me russ_hensel know.

Further reading