Friday, February 27, 2015

Running a 8x40 LED Array from the Raspberry Pi

I have been trying to run one of the 8x40 LED signs from a Raspberry Pi.  For some reason I am getting a lot of glitches.  I know the Raspberry Pi can cause glitches when the GUI is running, but this is different.  UPDATE - I fixed the glitch it was a bad ground on the ribbon cable.

This is what it looks like.  A glitch is happening over the letter "Y".
Here is a video showing the glitching.
https://www.youtube.com/watch?v=n4tE-9H_Adg&feature=youtu.be

Another problem is that I cannot figure out how to do what is called macro substitution in python.  As a result the code is a bit long.  If I could say "if red&row[shift]=1" I could eliminate several lines of code.

Here is my code to make it work:
# LED 8x40 Dual Color array
# Uses individual letters strung together
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)

GPIO.setup(17, GPIO.OUT) # Red Data
GPIO.setup(18, GPIO.OUT) # Green Data
GPIO.setup(27, GPIO.OUT) # Clock, 21 on older
GPIO.setup(22, GPIO.OUT) # Latch
GPIO.setup(23, GPIO.OUT) # Row Data 1
GPIO.setup(24, GPIO.OUT) # Row Data 2
GPIO.setup(25, GPIO.OUT) # Row Data 4
GPIO.setup(4, GPIO.OUT) # Row Enable

A1 =[0,0,0,0,0]
A2 =[0,0,1,0,0]
A3 =[0,1,0,1,0]
A4 =[1,0,0,0,1]
A5 =[1,1,1,1,1]
A6 =[1,0,0,0,1]
A7 =[1,0,0,0,1]
A8 =[1,0,0,0,1]

B1 =[0,0,0,0,0]
B2 =[1,1,1,1,0]
B3 =[1,0,0,0,1]
B4 =[1,0,0,0,1]
B5 =[1,1,1,1,0]
B6 =[1,0,0,0,1]
B7 =[1,0,0,0,1]
B8 =[1,1,1,1,0]

E1 =[0,0,0,0,0]
E2 =[1,1,1,1,1]
E3 =[1,0,0,0,0]
E4 =[1,0,0,0,0]
E5 =[1,1,1,1,0]
E6 =[1,0,0,0,0]
E7 =[1,0,0,0,0]
E8 =[1,1,1,1,1]

P1 =[0,0,0,0,0]
P2 =[1,1,1,1,0]
P3 =[1,0,0,0,1]
P4 =[1,0,0,0,1]
P5 =[1,1,1,1,0]
P6 =[1,0,0,0,0]
P7 =[1,0,0,0,0]
P8 =[1,0,0,0,0]

R1 =[0,0,0,0,0]
R2 =[1,1,1,1,0]
R3 =[1,0,0,0,1]
R4 =[1,0,0,0,1]
R5 =[1,1,1,1,0]
R6 =[1,0,0,0,1]
R7 =[1,0,0,0,1]
R8 =[1,0,0,0,1]

S1 =[0,0,0,0,0]
S2 =[0,1,1,1,1]
S3 =[1,0,0,0,0]
S4 =[1,0,0,0,0]
S5 =[0,1,1,1,0]
S6 =[0,0,0,0,1]
S7 =[0,0,0,0,1]
S8 =[1,1,1,1,0]

Y1 =[0,0,0,0,0]
Y2 =[1,0,0,0,1]
Y3 =[1,0,0,0,1]
Y4 =[0,1,0,1,0]
Y5 =[0,0,1,0,0]
Y6 =[0,0,1,0,0]
Y7 =[0,0,1,0,0]
Y8 =[0,0,1,0,0]

# Z is used as a blank
Z1 =[0,0,0,0,0]
Z2 =[0,0,0,0,0]
Z3 =[0,0,0,0,0]
Z4 =[0,0,0,0,0]
Z5 =[0,0,0,0,0]
Z6 =[0,0,0,0,0]
Z7 =[0,0,0,0,0]
Z8 =[0,0,0,0,0]

Red1=R1+Z1+S1+P1+Z1+E1+R1+Z1
Red2=R2+Z2+S2+P2+Z2+E2+R2+Z2
Red3=R3+Z3+S3+P3+Z3+E3+R3+Z3
Red4=R4+Z4+S4+P4+Z4+E4+R4+Z4
Red5=R5+Z5+S5+P5+Z5+E5+R5+Z5
Red6=R6+Z6+S6+P6+Z6+E6+R6+Z6
Red7=R7+Z7+S7+P7+Z7+E7+R7+Z7
Red8=R8+Z8+S8+P8+Z8+E8+R8+Z8

Green1=R1+A1+Z1+P1+B1+Z1+R1+Y1
Green2=R2+A2+Z2+P2+B2+Z2+R2+Y2
Green3=R3+A3+Z3+P3+B3+Z3+R3+Y3
Green4=R4+A4+Z4+P4+B4+Z4+R4+Y4
Green5=R5+A5+Z5+P5+B5+Z5+R5+Y5
Green6=R6+A6+Z6+P6+B6+Z6+R6+Y6
Green7=R7+A7+Z7+P7+B7+Z7+R7+Y7
Green8=R8+A8+Z8+P8+B8+Z8+R8+Y8

# set up the loop
cycle= 0
while cycle < 1000:
  row = 0
  while row <9: 

    row = row+1
    # Send data to the shift registers
    shift = 39
    while shift >= 0:
        GPIO.output(17, GPIO.LOW)
        GPIO.output(18, GPIO.LOW)
        # determine if bit is set or clear data is NOT inverted
        if row==1:
          if Red1[shift] == 1: GPIO.output(17, GPIO.HIGH)
          if Green1[shift] == 1: GPIO.output(18, GPIO.HIGH)
        if row==2:
          if Red2[shift] == 1: GPIO.output(17, GPIO.HIGH)
          if Green2[shift] == 1: GPIO.output(18, GPIO.HIGH)
        if row==3:
          if Red3[shift] == 1: GPIO.output(17, GPIO.HIGH)
          if Green3[shift] == 1: GPIO.output(18, GPIO.HIGH)
        if row==4:
          if Red4[shift] == 1: GPIO.output(17, GPIO.HIGH)
          if Green4[shift] == 1: GPIO.output(18, GPIO.HIGH)
        if row==5:
          if Red5[shift] == 1: GPIO.output(17, GPIO.HIGH)
          if Green5[shift] == 1: GPIO.output(18, GPIO.HIGH)
        if row==6:
          if Red6[shift] == 1: GPIO.output(17, GPIO.HIGH)
          if Green6[shift] == 1: GPIO.output(18, GPIO.HIGH)
        if row==7:
          if Red7[shift] == 1: GPIO.output(17, GPIO.HIGH)
          if Green7[shift] == 1: GPIO.output(18, GPIO.HIGH)
        if row==8:
          if Red8[shift] == 1: GPIO.output(17, GPIO.HIGH)
          if Green8[shift] == 1: GPIO.output(18, GPIO.HIGH)
        # advance the clock
        GPIO.output(27, GPIO.HIGH); GPIO.output(27, GPIO.LOW)
        shift=shift-1
    # select the row data is inverted
    GPIO.output(4, GPIO.HIGH) # Turn off display
    if row==2: GPIO.output(23, GPIO.LOW); GPIO.output(24, GPIO.HIGH); GPIO.output(25, GPIO.HIGH)
    if row==3: GPIO.output(23, GPIO.HIGH); GPIO.output(24, GPIO.LOW); GPIO.output(25, GPIO.HIGH)
    if row==4: GPIO.output(23, GPIO.LOW); GPIO.output(24, GPIO.LOW); GPIO.output(25, GPIO.HIGH)
    if row==5: GPIO.output(23, GPIO.HIGH); GPIO.output(24, GPIO.HIGH); GPIO.output(25, GPIO.LOW)
    if row==6: GPIO.output(23, GPIO.LOW); GPIO.output(24, GPIO.HIGH); GPIO.output(25, GPIO.LOW)
    if row==7: GPIO.output(23, GPIO.HIGH); GPIO.output(24, GPIO.LOW); GPIO.output(25, GPIO.LOW)
    if row==8: GPIO.output(23, GPIO.LOW); GPIO.output(24, GPIO.LOW); GPIO.output(25, GPIO.LOW)
    # latch and display the data
    GPIO.output(22, GPIO.LOW); GPIO.output(22, GPIO.HIGH)
    GPIO.output(4, GPIO.LOW) # Turn back on
    # time.sleep(.0005)
  cycle=cycle+1 

 

Wednesday, February 25, 2015

Raspberry Pi Projects - 8x8 RGB LED array

I have been working on a book of Raspberry Pi projects.  One of the projects is an 8x8 three color LED array.  I picked up some more of them on eBay lately and they had a different pin-out.

The MEU 8860 RGB pin-out as seen from above.  I use Dx for the rows as Rx is used for Red.

R1  R2  G2  R3  G3  R4  D2  D1  D3  G5  R6  G6  D5  R7  B8  R8
                                                                                                     

G1  B1  D7  B2  B3  D8  B4  G4  B5  R5  D4  B6  D6  B7  G7  G8

The bottom row is where the model number is stamped.

Here is a picture of one of the displays wired up and working.


Here is a video of another three color 8x8 LED array in operation.

https://www.youtube.com/watch?v=Wj9w4rqbikk

Here is a video of an 8x15 dual color LED array in operation.

https://www.youtube.com/watch?v=oxbNxy2toeU

Thursday, February 19, 2015

Epson 2300MP DLP Projector Repair

My church had a fairly new Epson 2300 MP DLP Projector that had died.  I came across a video on YouTube that said this one capacitor in the power supply was the problem.  Here is a picture of the old 22uF capacitor.

The new capacitor is a bit tricky to install.  There are surface mount components close to it on the bottom side.  I decided to replace the capacitor on the top side of the circuit board.

Here is a picture of the projector now that it is working.  Just a little more assembly to do.

Tuesday, February 10, 2015

NEC LT-265 LCD Projector repair

The other day I had a NEC LT-265 projector that would not focus and had a rattling sound.  To open it up remove the screws on the bottom, one screw is under the handle and the top cover lifts off at the front first then the back so that that it clears the jacks on the rear.


Removing the lens assembly was not easy.  I had to remove the circuit board first.  There were a lot of screws hidden way down inside and behind things.  When I got to the rattle it was the leveling foot that had gone up inside of the projector.  The focus issue was still there and there was nothing obvious that was causing it.  I took a hold of the lens and forced it to turn and to pull out.  The lens then popped into place and started working!  I guess I never needed to take it apart in the first place.

Thursday, February 5, 2015

Hitachi CP-X809 High power LCD Projector repair.

Yesterday I dissembled a Hitachi CP-X809 Projector to see why "dust" was stuck in between the lenses or LCD's.

There are a lot of screws to remove to get to the LCD assembly.  There are about 6 screws accessed from the bottom of the projector.  You have to remove the cover around the lens first.  There are four screws, two are hidden under a flip out panel that hold the lens cover in place.  There are three screws on the back panel that are not marked.  Then you can remove the top cover.  To remove the circuit boards there are another 6 or 8 screws.  Do not forget the screws on the back cover.


The circuit boards can be folded up and out of the way like this.

You need to disconnect some wires and the three LCD ribbon cables and then the circuit board flips back revealing the LCD and lens assembly.  The plastic around the rear jacks needs to be bent out of the way a little.  Here is the LCD and lens assembly.


Here is the problem with the projector, the left color filter is totally shot.  It was not dust that was causing the problem.  I have never seen one so badly damaged.  It must have been severely overheated.  Does anyone know where to get one of these?


By the way I should point out that this kind of damage is usually from overheating because the air filter is clogged.  Usually it is not this severe.

Tuesday, December 23, 2014

DIY 3D Printer - Printing Small Parts

Here is a picture of a printed 3D hand.  When I first tried to print it I had fingers flying all over the place.  I even tried gluing them down to no avail!

Here is what you can do to make printing small parts possible.
1. Clean the glass with a razor blade.
2. Treat the glass with acetone and/or hair spray.
3. Print a 3mm "Brim" around the base of objects.
4. Print the center or "infill" first, then the edges.
5. Use a soldering iron if needed to remove "bumps".
6. Slow down the acceleration to 1000 or 2000.

Here is a video of the results.
http://youtu.be/6_5nY8F2hQg?list=UU49j5FVUO2KIFyH2IXmGXjg

The problem is that the plastic expands in the Z axis as it cools.  Then when the print head goes over it the part is impacted and sent flying.  If the "infill" is printed first then the edge does not need to be passed over to print the infill.