LED tiles: Difference between revisions

From London Hackspace Wiki
m (Added link to Greg Akins technical info page)
(Added Getting Started section with information and sample Arduino code)
Line 113: Line 113:


Glen Akins has some extremely good technical detail here: http://bikerglen.com/projects/lighting/led-panel-1up/
Glen Akins has some extremely good technical detail here: http://bikerglen.com/projects/lighting/led-panel-1up/
== Getting Started ==
Some key information and pointers for anyone getting started with a tile and a basic microcontroller like the Arduino (we used a Mega 2560), Raspberry Pi, BeagleBone etc.
The OE (Output Enable) pin is misleadingly named as it's really Output Inhibit or Blanking, having to be pulled low to enable the LEDs.  All other inputs are active high.
The panel is organised as six row groups that are interlaced both vertically and horizontally (see illustration) to minimise flicker.  Each group contains 288 pixels organised in a shift register so new data shifts along the row group in the order shown.
[[File:Hackspace LED Tile addressing.png|thumbnail|48 x 36 LED Tile Addressing Scheme]]
As someone has explained elsewhere the panel displays one row group at a time, so it's necessary to cycle them in equal proportions to get a full image.  The row addressing performs two functions, to select the row group that's both energised and into which data will be clocked.  Note that it appears that you can select a row and clock data into it, but that data is held but  not transferred to the display until you toggle the latch input even if you change to a different row group.  In this way it seems possible (though not yet tried) to build up in the shift register the next image to be displayed a small amount at a time to maintain a good refresh rate, and then transfer it to the display by latching.
Simple Arduino code example:
<code>
digitalWrite(pinOE, LOW);
// select first row
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
For(int i=0; i<288; i++)
{
  // set high or low value for each pixel
  digitalWrite(pinR1, R);
  digitalWrite(pinG1, G);
  digitalWrite(pinB1, B);
  // pulse the clock line to move this data into the shift register
  digitalWrite(pinCLK, HIGH);
  digitalWrite(pinCLK, LOW);
}
// pulse the latch line to transfer the new data to the display
  digitalWrite(pinLAT, HIGH;
  digitalWrite(pinLAT, LOW);
</code>
The pixel writing could be made much faster using direct port operations, particularly with a port dedicated to the tile interface - one write with clock low to set the R G B values and the next holding the values with clock high - probably of the order of 50 times faster than the code above.

Revision as of 16:45, 7 February 2016

LED screen tiles donated by Mistamud. See mailing list thread here.

LED tile

What is it

  • Frame containing 6 LED tiles

LED Frame.jpg

  • Controller/PSU "Infiled"

LED-Infiled.jpg

  • 46 individual LED tiles

What are we doing with it?

The space is likely to keep the frame and controller/PSU, and maybe a few extra screens depending on final decision.

Project maintainers

  • Elisabeth Anderson
  • .....


Tiles for members

The space keeps the frame and controller, plus possibly a few extra screens (decision tbc), which would leave about 40 for members. Register you interest (before 16th Jan) and keep an eye on the mailing list for update on when the tiles are ready to collect. (update: added members who registered their interest on the mailing list as well)

  • 01. Lee Jones (2 if possible please).
  • 02. Nigle
  • 03. Toby Catlin
  • 04. Matt P
  • 05. Aden (2)
  • 06. Henry Sands
  • 07. Matt Wheeler (4 if possible)
  • 08. Egor Kraev
  • 09. Mike (Upto 4, if possible, please)
  • 10. Pingless
  • 11. Asc (2 please)
  • 12. James Cadman
  • 13. Henry Best
  • 14. Martin Goodman (2 please)
  • 15. Thomas Hill
  • 16. JJ (2 please)
  • 17. Michael Margolis (2 if possible)
  • 18. Robin Baumgarten (2 if possible)
  • 19. Giac0m0 (2 if possible)
  • 20. Bennage (2 if possible, please)
  • 21. Det (1)
  • 22. betandr
  • 23. Ciborg
  • 24.Stefan Sabo (HS07764) 2

No more names please, they've all gone

N.B. If you've not done anything with the tile after 3 months please bring it back to the space as someone else may wish to do something with it, don't just let it gather dust in a corner!

LED Specs

The 'tile' contains the matrix of SMDs and the driver ICs and multiplexing to run but you'll need 5v dc and some kind of Pi / Arduino / Nova or Linsn Scancard to control them.

Back of the tile LED-pinout.jpg

Rough Specs sent by Tom:

LEDs Per Pixel 1R1G1B

  • Red Wavelength (Dominant) 625 ~ 630
  • Green Wavelength (Dominant) 520 ~ 525
  • Blue Wavelenghth (Dominant) 470 ~ 475

PIXELS

  • 48 x 36
  • Pixel Configuration SMD 3528
  • LED Type Black Diamond
  • LEDs Per Area LEDs/m2 67,635
  • Physical Pixel Pitch mm 6.66

Physical Pixels Per Area pixels/m2 22,545 Panel:

  • LED Tile Width mm 320
  • LED Tile Height mm 120
  • Viewing Angle – Horizontal degrees 140
  • Viewing Angle - Vertical degrees 120

Frame and controller/PSU specs

- Frame containing 6 LED tiles - Controller/PSU "Infiled"

This is a link to the manufacturers page here: http://www.infiled.com/chanpin/yingyong-3/20131223/250.html

Also a PDF: http://www.infiled.com/uploads/soft/L%20RSS.pdf

Building a LED wall

On this Mistamud says: You'll need a card called a Scancard. (the brains found inside each and every LED panel): http://www.led-card.com/product_info.php?cPath=24&products_id=314

The signal that goes into the Scancard on Cat5 cable needs to come from a Sender Card: http://www.led-card.com/product_info.php?cPath=23&products_id=15. The signal that goes into a Sender card is good ol' DVI from your laptop.

There's also some info on the progress made with the previous screens here

Michael Margolis thinks that they can be controlled by the SmartMatrix library: https://github.com/pixelmatix/SmartMatrix

and Adafruit have a shield for the teensy with a connector that should(?) work with these tiles : https://www.adafruit.com/products/1902

You can find his mailing list post here: https://groups.google.com/d/msg/london-hack-space/Gs4_P4Je1gw/HFshYAzhEQAJ

Glen Akins has some extremely good technical detail here: http://bikerglen.com/projects/lighting/led-panel-1up/

Getting Started

Some key information and pointers for anyone getting started with a tile and a basic microcontroller like the Arduino (we used a Mega 2560), Raspberry Pi, BeagleBone etc.

The OE (Output Enable) pin is misleadingly named as it's really Output Inhibit or Blanking, having to be pulled low to enable the LEDs. All other inputs are active high.

The panel is organised as six row groups that are interlaced both vertically and horizontally (see illustration) to minimise flicker. Each group contains 288 pixels organised in a shift register so new data shifts along the row group in the order shown.

48 x 36 LED Tile Addressing Scheme

As someone has explained elsewhere the panel displays one row group at a time, so it's necessary to cycle them in equal proportions to get a full image. The row addressing performs two functions, to select the row group that's both energised and into which data will be clocked. Note that it appears that you can select a row and clock data into it, but that data is held but not transferred to the display until you toggle the latch input even if you change to a different row group. In this way it seems possible (though not yet tried) to build up in the shift register the next image to be displayed a small amount at a time to maintain a good refresh rate, and then transfer it to the display by latching.

Simple Arduino code example:

digitalWrite(pinOE, LOW);

// select first row digitalWrite(pinA, LOW); digitalWrite(pinB, LOW); digitalWrite(pinC, LOW);

For(int i=0; i<288; i++) {

 // set high or low value for each pixel
 digitalWrite(pinR1, R);
 digitalWrite(pinG1, G);
 digitalWrite(pinB1, B);
 // pulse the clock line to move this data into the shift register
 digitalWrite(pinCLK, HIGH);
 digitalWrite(pinCLK, LOW);

}

// pulse the latch line to transfer the new data to the display

 digitalWrite(pinLAT, HIGH;
 digitalWrite(pinLAT, LOW);

The pixel writing could be made much faster using direct port operations, particularly with a port dedicated to the tile interface - one write with clock low to set the R G B values and the next holding the values with clock high - probably of the order of 50 times faster than the code above.