Friday, March 14, 2025

Mackie Thump TH-15A Powered speaker Repair

 I was asked to repair a Mackie Thump TH-15A Powered speaker by a friend.  It powered on and everything looked good but there was no sound coming out.  I checked the speakers and the power supplies but everything was just fine.  However, the computer board was getting really hot.  It had 3.3 volts coming into a voltage regulator but only .5 volts coming out.  I tried easter egging the capicitors and it turned out to be the tiny little .1 uF capacitor that was shorting out the power supply.  The correct output is 1.2 volts.

This is what the guts look like, we are going to zero in on the logic board.


This is the logic board once the metal cover is removed.


These are the filter caps on the 1.2 volt power supply circled in red.


This is what the powered speaker looks like once it was back together.



Saturday, March 8, 2025

ESP32 HUB75 DMA Hue Value Spectrum demo

The Hue Value Spectrum demo is beautiful, cameras do not do it justice.
This is found at https://github.com/mrcodetastic/ESP32-HUB75-MatrixPanel-DMA


This software connects to just the input port of the LED array.


The issue with this software is that it it too fast.  The speed results in noise from the 3 volt logic driving the 5 volt panel.  You have to play with the ground wires and keep the ribbon cable as short as possible to prevent noise and even then there are faint blinking LED's from th noise issue.

Another issue is the software does not support "Strange" LED panels like most 8S outdoor panels.






Aurora Demo on ESP32 with a 16S 32x32 LED panel

This is the Aurora Demo working on 32x32 RGB LED matrix panel with an ESP32 Processor.  I bought a circuit bard to do this but could not get it to work, so I went with jumper wires and it worked almost perfectly from the start!

This wiring arrangement uses two sets of jumper wires going to both the input and output of the LED panel.  This makes it almost impossible to transfer it to another panel to test different ones to see if they are supported inthe software.


The wiring looks like this:


This wiring makes it difficult to add more panels or to try using another panel.

Thursday, February 13, 2025

New Big LED sign powered by Raspberry Pi

I have made another big LED sign, but this time it is powered by a Raspberry Pi.  At first I used the Adafruit Hat ,but I have upgraded to the three HUB75 Hat from ElectroDragon! This enalbes three chains of LED arrays. So far I have 5 32x32 panels in each chain but I will likely expand that.

This is a view of the back of the assembled panel. I am using metal brackets to hold the panels together as they have on inch spacing. 24mm is ideal as the one inch spacing leaves about a two mm space between the panels. I have a 3D printed version of the brackets on thingiverse and have used them in other designs.

Here is a couple of pictures of the panel being lit up. The text demo is limited to one line of panels.

There are several demo programs to check out the proper operation of the Raspbery Pi adapter.


Here is a link to the video of the demos;

https://youtu.be/44ykJb_ZB7A?si=ylKY5zBix4FU4i2X

Sunday, February 9, 2025

Testing LED panels for bad LED's

I have written two programs to test LED panels after someone sold me a pile of them with many bad LED's.  Some panels had over 30 LED's that were not working.  He also shipped them with no padding between the LED's!  This resulted in smashed LED's and some of the alignment nubs were broken off.  Fortunatly with some soldering I was able to reduce the number of bad LED's to 3 or 4 per panel.  Now I can use them for testing out programs and configurations.  Some LED's had broken runs but most of them just needed to be resoldered.

The first program tests the colors and leaves the panel white for quickly testing if the LED's just soldered are working.  This does not work on 16S panels for some reason.

// RGBcolors test for Adafruit RGBmatrixPanel library.

// For testeing LED arrays for bad bits.

#include <RGBmatrixPanel.h>

#define CLK  8   // USE THIS ON ARDUINO UNO, ADAFRUIT METRO M0, etc.

#define OE   9

#define LAT 10

#define A   A0

#define B   A1

#define C   A2

#define D   A3

// Does not work with 16S panels if you add "D" nothing happens!

RGBmatrixPanel matrix(A, B, C, CLK, LAT, OE, false);

void setup() {

  matrix.begin();

   // fill the screen with colors

  matrix.fillRect(0, 0, 32, 32, matrix.Color333(0, 7, 0));

  delay(1000);

  matrix.fillRect(0, 0, 32, 32, matrix.Color333(7, 0, 0));

  delay(1000);

  matrix.fillRect(0, 0, 32, 32, matrix.Color333(0, 0, 7));

  delay(1000);

  matrix.fillRect(0, 0, 32, 32, matrix.Color333(7, 7, 7));

  delay(1000);

}

void loop() {

}


The next program is for sorting LED panels by how they are internally wired.  There are 16S, 8S (There are many varieties of 8S) and 4S panels.  It scans all LED's one at a time.


I could not get this to work with the normal drivers so I wrote my own using "bit banging".  Its slow but works great!  Note:This program was improved in March of 2021, it runs much better now!

// RGB bitbang test bits by scanning

#define CLK  8  

#define OE   9

#define LAT 10

#define A   A0

#define B   A1

#define C   A2

#define D   A3

#define R1  2

#define G1  3

#define BL1  4

#define R2  5

#define G2  6

#define B2  7

int tbit;

int row;

int col;

void setup() {

  pinMode(A, OUTPUT);

  pinMode(B, OUTPUT);

  pinMode(C, OUTPUT);

  pinMode(D, OUTPUT);

  pinMode(CLK, OUTPUT);

  pinMode(OE, OUTPUT);

  pinMode(LAT, OUTPUT);

  pinMode(R1, OUTPUT);

  pinMode(G1, OUTPUT);

  pinMode(BL1, OUTPUT);

  pinMode(R2, OUTPUT);

  pinMode(G2, OUTPUT);

  pinMode(B2, OUTPUT);

  }

void loop() {

  // Set sequential bits

  for (row=0; row<16; row++){

    for (col=0; col<64; col++){

      for (tbit=0; tbit<64; tbit++){

        digitalWrite(R1, LOW);  

        digitalWrite(G1, LOW);  

        digitalWrite(BL1, LOW);  

        if (tbit <= col){

          digitalWrite(R1, HIGH); 

//          digitalWrite(G1, HIGH); 

//          digitalWrite(BL1, HIGH); 

        }

      digitalWrite(CLK, HIGH);  

      digitalWrite(CLK, LOW);  //Clock data in

      } 

    // latch and display results

    digitalWrite(OE, HIGH);  // disable output while latching data.

    digitalWrite(LAT, HIGH);  

    // select next column if it has changed

    digitalWrite(A, LOW);

    digitalWrite(B, LOW);

    digitalWrite(C, LOW);

    digitalWrite(D, LOW);

    // update row selection

    if ((row & 0x0001)>0)digitalWrite(A, HIGH);  

    if ((row & 0x0002)>0)digitalWrite(B, HIGH);  

    if ((row & 0x0004)>0)digitalWrite(C, HIGH);  

    if ((row & 0x0008)>0)digitalWrite(D, HIGH);  

 //   delay(5); // dim display

    digitalWrite(LAT, LOW);  

    digitalWrite(OE, LOW);  

    delay(50);

    }

  }

}

Sunday, February 2, 2025

Explaining the different types of LED Arrays

Not all LED arrays are the same, there are many varieties within a set size and set amount of LED's.  There are the P numbers.  P10 means 10mm LED spacing.  P6 is 6mm spacing.  P3 is 3mm spacing.

Then there are the S or scan or row select numbers.  Typical S numbers are S4, S8, and S16.  But they even vary within these numbers!  Lets start with a 16S arrangement.  In a 32 by 32 LED array there are two 32 bit shift registers one for the top half and one for the bottom (As well as one for each color).  Then there are 16 row selectors that select what two rows are currently lit up.


Next there is an 8S LED array.  Withing a 32x32 array there are four 32 bit shift registers.  The top two and the bottom two are sequential. (This is for each of the three colors) Then there are 8 row selectons.  These select what four rows are currently lit up.


Now things get tricky.  Some arrays do not follow the normal pattern.  For instance the modified 8S panel depicted below.  These are not compatable with some controllers.  There are two 16 bit shift registers and a 32 bit shift register for the top half and the same for the bottom.  (This is for each of the three colors)  The shift register sequence is the top 16, then the middle 32, then the other top 16 bits.


So not only are you dealing with color differences between different batches you are dealing with scanning differences.  You cannot mix an 8S and a modified 8S in the same chain of LED arrays.


Tuesday, January 28, 2025

Big LED sign with 6x4 of 32x32 P6 LED panels

My latest LED sign is by far my biggest LED sign yet!  I purchased a pile of P6 32x32 LED panels on eBay for about $10 each.  The seller even included the cables needed to get it to work!

Here is a picture of it with a TF-QS3N Controller.  It uses PowerLED to set it up from a computer over a newwork.


This is the back side of the sign as I was assembling it.  The sign is now over twice the size shown in this picture.

Here is a newer picture at 4 by 7 panels.  It is now 5 by 7 panels in size and growing!  I hope to get to 5 by 8 panels but the model numbers of the next panels do not match and the color balance might be too far off to intermix them.


One option to connect the panels together is these metal brackets available at most hardware stores at four for $5.00.  Thes have a hole spacing of one inch (24.5mm) and the panel mounting holes are 24 mm so there is a 1.5 mm gap between the panels if you uses these brackets. 

I have 3D printed my own brackets for connecting the panels.  They were designed on TinkerCad.  The STL files are available on thingiverse. 

Here is a video of when I first got them working.

Wednesday, January 1, 2025

Expanding my sign with 16x16 addressable LED arrays.

 I am expanding my sign with 16x16 WS2812B Addressable LED arrays.  Currently I am at 3x5 of these arrays but am working on adding three more for a 3x6 or 48 by 96 sign.

This is the built in demo with a T8000 controller.  I had more luck with the SP801E controller.


Here I am starting to add the grids to make the pixels square.  The grids are on thingiverse.  I drilled too many holes in the luan because I confused the orientation.  They need to connet from top to bottom.

This is another picture of assembling the arrays.  I am using E-6000 glue to hold them in place.  I glue two or three at a time just in the corners then put something on them to hold them in place till the glue dries.

Here is the first video with the T8000 controller

https://www.youtube.com/watch?v=STn5s0Ipr-M

This is a demo with an SP801E controller

https://www.youtube.com/shorts/VzCqLekaI-U

Here it is with WLED on an ESP32 processor

https://youtu.be/ZxGXOkgYxrg

Here are some pictures from the WLED demo.








Friday, November 29, 2024

Sunrise Systems LED Sign revisited

 I was asked to convert another Sunrise Systems LED sign to Arduino control and wireless updates via bluetooth.  This time I wanted to make the conversion simpler by reusing the driver IC's and Transistors.  To do that I cut the board in half just to the right of the processor.  Then I tapped into signals on the 74HC04 and 74HC138.  The following picture shows the location for the cut and where to tap into the signals:

Here is a picture of the prototypeing of this new setup.  Everything worked but some of the signals were inverted so it took some playing with the code to get it to work.


I spliced in a bare board to add the arduino processor. 


Here is the revised code for a basic version of this arrangement;

// Sunrise 7x96 Uno LED Array driver
// Easier to read code
// 4/4/2024 by Bob Davis

#define Data 7// Data pin
#define CLK 8 // Port B assignments 
#define OE  9 // 74138 pins 4 and 5
#define LAT 10// Latch
#define A0 11 // 74138 pin1
#define A1 12 // 74138 pin2
#define A2 13 // 74138 pin3

String text="ARDUINO+SUNRISE  ";

// This font from http://sunge.awardspace.com/glcd-sd/node4.html
byte font[][7] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ascii 32
0x00,0x00,0xfa,0x00,0x00,0x00,0x00, // !
0x00,0xe0,0x00,0xe0,0x00,0x00,0x00, // "
0x28,0xfe,0x28,0xfe,0x28,0x00,0x00, // #
0x00,0x34,0xfe,0x58,0x00,0x00,0x00, // $
0xc4,0xc8,0x10,0x26,0x46,0x00,0x00, // %
0x6c,0x92,0xaa,0x44,0x0a,0x00,0x00, // &
0x00,0xa0,0xc0,0x00,0x00,0x00,0x00, // '
0x00,0x38,0x44,0x82,0x00,0x00,0x00, // (
0x00,0x82,0x44,0x38,0x00,0x00,0x00, // )
0x10,0x54,0x38,0x54,0x10,0x00,0x00, // *
0x10,0x10,0x7c,0x10,0x10,0x00,0x00, // +
0x00,0x0a,0x0c,0x00,0x00,0x00,0x00, // ,
0x10,0x10,0x10,0x10,0x10,0x00,0x00, // -
0x00,0x06,0x06,0x00,0x00,0x00,0x00, // .
0x04,0x08,0x10,0x20,0x40,0x00,0x00, // /
0x7c,0x8a,0x92,0xa2,0x7c,0x00,0x00, // 0
0x00,0x42,0xfe,0x02,0x00,0x00,0x00, // 1
0x42,0x86,0x8a,0x92,0x62,0x00,0x00, // 2
0x84,0x82,0xa2,0xd2,0x8c,0x00,0x00, // 3
0x18,0x28,0x48,0xfe,0x08,0x00,0x00, // 4
0xe4,0xa2,0xa2,0xa2,0x9c,0x00,0x00, // 5
0x3c,0x52,0x92,0x92,0x0c,0x00,0x00, // 6
0x80,0x8e,0x90,0xa0,0xc0,0x00,0x00, // 7
0x6c,0x92,0x92,0x92,0x6c,0x00,0x00, // 8
0x60,0x92,0x92,0x94,0x78,0x00,0x00, // 9
0x00,0x6c,0x6c,0x00,0x00,0x00,0x00, // :
0x00,0x6a,0x6c,0x00,0x00,0x00,0x00, // ;
0x00,0x10,0x28,0x44,0x82,0x00,0x00, // <
0x28,0x28,0x28,0x28,0x28,0x00,0x00, // =
0x82,0x44,0x28,0x10,0x00,0x00,0x00, // >
0x40,0x80,0x8a,0x90,0x60,0x00,0x00, // ?
0x4c,0x92,0x9e,0x82,0x7c,0x00,0x00, // @
0x7e,0x90,0x90,0x90,0x7e,0x00,0x00, // A
0xfe,0x92,0x92,0x92,0x6c,0x00,0x00, // B
0x7c,0x82,0x82,0x82,0x44,0x00,0x00, // C
0xfe,0x82,0x82,0x82,0x7c,0x00,0x00, // D
0xfe,0x92,0x92,0x92,0x82,0x00,0x00, // E
0xfe,0x90,0x90,0x80,0x80,0x00,0x00, // F
0x7c,0x82,0x82,0x8a,0x4c,0x00,0x00, // G
0xfe,0x10,0x10,0x10,0xfe,0x00,0x00, // H
0x00,0x82,0xfe,0x82,0x00,0x00,0x00, // I
0x04,0x02,0x82,0xfc,0x80,0x00,0x00, // J
0xfe,0x10,0x28,0x44,0x82,0x00,0x00, // K
0xfe,0x02,0x02,0x02,0x02,0x00,0x00, // L
0xfe,0x40,0x20,0x40,0xfe,0x00,0x00, // M
0xfe,0x20,0x10,0x08,0xfe,0x00,0x00, // N
0x7c,0x82,0x82,0x82,0x7c,0x00,0x00, // O
0xfe,0x90,0x90,0x90,0x60,0x00,0x00, // P
0x7c,0x82,0x8a,0x84,0x7a,0x00,0x00, // Q
0xfe,0x90,0x98,0x94,0x62,0x00,0x00, // R
0x62,0x92,0x92,0x92,0x8c,0x00,0x00, // S
0x80,0x80,0xfe,0x80,0x80,0x00,0x00, // T
0xfc,0x02,0x02,0x02,0xfc,0x00,0x00, // U
0xf8,0x04,0x02,0x04,0xf8,0x00,0x00, // V
0xfe,0x04,0x18,0x04,0xfe,0x00,0x00, // W
0xc6,0x28,0x10,0x28,0xc6,0x00,0x00, // X
0xc0,0x20,0x1e,0x20,0xc0,0x00,0x00, // Y
0x86,0x8a,0x92,0xa2,0xc2,0x00,0x00, // Z
};

void setup() {
  Serial.begin(9600);
  Serial.println("Arduino is ready");
  pinMode (Data, OUTPUT); // Data pin to output
  pinMode (CLK, OUTPUT);  // Clock pin to output
  pinMode (OE, OUTPUT);   // Out Enable pin to output
  pinMode (LAT, OUTPUT);  // Latch pin to output
  pinMode (A0, OUTPUT);   // Address pin to output
  pinMode (A1, OUTPUT);   // Address pin to output
  pinMode (A2, OUTPUT);   // Address pin to output
}
     
void loop() {
    if (Serial.available() > 0){
      text=Serial.readString();
      text.toUpperCase();
      Serial.print(text);
      }
    // Select the Row
    for (int r=0; r<8; r++){
      // select the character
      for (int ch=17; ch>-1; ch--){
        // select the column within character
        for (int c=5; c>-1; c--){
          digitalWrite(Data, HIGH); // Data is inverted!
          if ((font[text[ch]-32][c] >> r+1) & 0x01==1) digitalWrite(Data, LOW);
          digitalWrite(CLK, LOW);  // Toggle Clock
          digitalWrite(CLK, HIGH);
        }
      }
      // This row is done so display it
      digitalWrite(OE, HIGH);  // Turn off display
      digitalWrite(LAT, HIGH); // Latch  data
      digitalWrite(LAT, LOW); // Ready for next latch
      digitalWrite(A0, LOW);  // Update Row 
      digitalWrite(A1, LOW);
      digitalWrite(A2, LOW);
      if ((r & 0X01)==1) digitalWrite(A0, HIGH);
      if ((r & 0X02)==2) digitalWrite(A1, HIGH);
      if (r > 3) digitalWrite(A2, HIGH);
      digitalWrite(OE, LOW);  // Display back on
      }
    }

Here is a picture of the wiring from the back side.


Friday, June 21, 2024

InMoov Compatible Hand Design Upgrade

I am working on a InMoov Compatible Hand Design Upgrade.  The main goal is to put all the servos in the hand.  Years ago I printed out a hand only to discover that all the servos are in the forearm.  Recently I though I could do better.  So far I am on my third hand.

This is what it looks like so far.  I used the one piece finger segments and printed them laying down with supports to plate only.  The servo arms will need to be two sided or 3D printed.


Onthe left are the first three attempts to print the improved hand.  In the latest version the servos are indented 6mm so they stick out the back side of the hand slightly.



Wednesday, June 5, 2024

Converting TV to LED sign with 16x16 Arrays and SP801E

 I have been Converting an  old TV into a LED sign with 16x16 Arrays and SP801E controller.  At first I had 8 of the 16x15 ws2812 LED arrays then I added two of the 8x32 LED arrays to better fill in the screen area.

Here are two demo pictures.  One is a built in pattern and the other is a picture of my wifes pineapple upside down cake.



This is a close up picture of the controller.  I am only using 3 of the 4 outputs of the SP801E.  Each output can light up to 1024 LED's.


The screen is still not completely covered with the LED arrays.  But I do not know how to fill inthe last couple of inches of screen area.

Here is the latest video of the LED sign.

Friday, May 31, 2024

Repair of Suzuki GP-3 Digital Piano

My brother dropped off a Suzuki GP-3 electric digital piano for repairs. Many of the keys were stuck in the down position.  So I googled how to fix it and here is what I found:

Here is a video telling how to take it apart:

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

Then I found this coment on how to fix it at: 

https://www.yamaha-keyboard-guide.com/suzuki-keyboard-repair.html

"I used the orange fibreglass driveway marker from Home Depot. It’s the perfect size. With a rubber mallet I used it to punch out the old rods and replace them at the same time."

The first step was to remove the keys from the piano.


Then I tried to remove some of the individual keys. BTW you do not need to number the keys they are already numbered in the indentation area.  

Eventually I decided to remove every other octave, then remove all of the rods, then carefully push an orange driveway marker through all of the octaves.  I left the angled tip on the rod, and still had to lift some keys slightly to get the rod to go through them.  The commentator above said that he drove the marker through pushing the rods out as he went, but my keyboard was so far gone that that was not a possibility.  I had to use some pliers to twist and pull out the rods, one at a time, as they were really stuck in place.


When I put it back together there were way too many screws left over.  So I took it back apart and put in a lot of missing screws.  Even so I still had about 16 screws left over!!  

Thursday, March 7, 2024

Rocker Bogey 6 Wheel Drive Mars Rover

 I had about eight wheels and matching motors around so I decided to make a six wheel drive Arduino controlled rover.  Then I discovered the rocker-bogie design that can handle really fough terrain.  So I 3D printed a design and modified it for a bigger platform for the electronics.

I have not figured out the front suspension yet and I would love to include one of my 3D prited Nerf guns in the design!



I cut a hold to mount a rotating servo in the middel of the platform.  there is not enough room for the arduino, batteries, and motor controller!





Wednesday, February 21, 2024

Peavey Combo 115 repairs

My brother bought me a Peaver Combo 115 for repair.  They used controls with plastic shafts that broke off. They upgraded the design to use controls with metal shafts but they are out of stock everywhere unless you want to pay a fortune for them.

Here is a picture of the controls with their values and part numbers next to them.  You can see the broken controls in the picture.


This shows what the insides of the amplifier looks like. All of this could be 1/4 the size if it was made today.

The only critical controls that were broken were the 50K linear tone controls. The crossover and compressor can be ignored or bypassed.

Here is a possible source of parts.  The needed parts will cost you over $50 with shipping and may not be in stock.


As a solution I purchased 10 x 50K pots with knobs on eBay.  Short wires have to be run from each control to the circuit board.  I have seen this kind of solution before.