Thursday, April 11, 2019

Panasonic DVX100 Video camera repair and modification

This started with a dream that I had three professional cameras.  At one time I had two Panasonic AG-DVC7 cameras.  My brother had them, so I asked if I could have them back.  He was happy to return them because they were both very difficult to turn on.  I have shown how to repair that problem in another blog post.  However, my research showed that the DVX100 that once cost about $4000 was now available on eBay for about $50 each needing repairs.

The DVX100 has a actual native resolution of 1546 x 990 according to some sources.  At one time there was the a modification to take advantage of this higher resolution.  I think that I might be the ideal person to revive this modification since I have lots of experience in modifying everything from LED sighs to computer monitors.

I bought two of the cameras for $85 that were in need of repair.  To my surprise they both worked!  Even the tape decks could record and play back videos.  They are missing some parts and one of the LCD screens goes crazy when you move it.



This is what the insides of the camera look like. You have to remove the top microphone assembly to get to a screw under it as well as the bottom plate to get to three screws under that.
DVX100 Cover Removed

This is the LCD side cover.  There are a lot of connectors to unplug including two that are under the microphone assembly.

This is the top of the video processor board.

This is the bottom of the video processor board.  Note the two VSP2212 video processor and analog to digital converter chips on the left side.  The third one is located on the top of the board.

Here is the block diagram of the video processor.
Here is the pin numbers to connect to.
The problem now is what do I connect to?  If I connect to the analog input then I need to have a circuit to process the CMOS output, that is not straight analog, but instead it is clock pulses followed by analog values.  I also loose the gain control circuitry (PGA).  If I connect to the digital outputs I have to connect 12 wires to each analog converter and I am limited to the sampling rate of the converter that has a maximum clock of 20 MHz or 1,500 pixels horizontally.  That is assuming that they clocked it at the maximum frequency (highly unlikely).

These pictures compare the optics of the DVC7 to the DVX100 optics.

DVX100 Lens

These next two pictures compare images between the two cameras, the DVC7 is first.

This might freak you out, but I disassembled the optics! Its from a slightly broken camera so you can breath a sigh of relief.

This is the focus assembly (No wonder there is no focus motor).  There are two coils attached to the lens that then move inside of a top and bottom magnet.  This is much like a hard rive positioning mechanism.
DVX100 Focus

This is the image stabilization mechanism. Two coils one for X and one for Y move inside of magnets.
DVX100 Stabilization

This is the iris solenoid (A screwdriver is holding it open) with the filters also visible on the right side.
DVX100 Iris

Here is how to connect to the optical assembly.  The zoom motor is a conventional motor, connect power one way to zoom in and reverse it to zoom out.  The Iris solenoid needs just two pins as marked.  The focus coils (just two connections) only need a little power to move.  The other connections next to the focus coils are for the manual zoom/focus ring that is missing on this lens assembly.  Varying the voltage varies the focus lens position. 
There are three optical sensors, one is for the filters.  There is a variable resistor to sense the position of the zoom.  The image stabilizer might be the hardest thing to operate. I can see the image is off center when power is not applied. That lens is what you hear rattling inside the lens assembly. Hopefully I can break it down to two coils that need to be energized.



Tuesday, April 9, 2019

Arduino UNO interfaced to a Sunrise Systems 7x96 LED array

I have interfaced an Arduino UNO to a Sunrise Systems 7x96 LED array.  It only needs a 74138 and 7 driver transistors such as TIP127's.  I am also using a 5 volt 5 amp regulated power supply.



Here is the first video testing the interface:


When I try to make the characters 6 bytes wide instead of 8 bytes the sign will flicker because the math takes too long.  I will have to work on another way to do the math.

This is a picture of the Sunrise Systems controller that was removed.

This is a close up of the logic connection the pins are 5 volts, Latch, Data, Clock, and Ground.

I have a collection of the Sunrise System Signs.  The red one on the right is a newer design that has the controller built into the circuit board.  This makes it much harder to control with an Arduino.

This picture shows what the signs say when they arrived.

This is a close up of the interface circuitry.
These next two pictures show the smaller text.  Instead of 96 LED's, the software sees 16 characters and 6 columns per character. 

Here is a video of the improved text with better software.


If you add a MSGEQ7 you can make a large spectrum analyzer like in this video.


This is the schematic of the 74LS138 interface.  The 74138 outputs are low when selected so it has to be inverted back to high by the PNP driver transistors.

Here is the code to make it work with a 74LS138, seven 1K ohm resistors and seven TIP127's

// 7x96 Uno LED Array driver
// Fast Clock Mod-Direct port writes
// 4/4/2019 by Bob Davis

// #define A   A0  74138 pin1
// #define B   A1  74138 pin2
// #define C   A2  74138 pin3
// #define CLK 8 // Port B assignments 
// #define OE  9 // 74138 pins 4 and 5
// #define LAT 10// Latch

#define PIXEL_PORT PORTD  // Port the pixels are connected to
#define PIXEL_DDR  DDRD   // D2-D7
#define ROW_PORT   PORTC  // Port the rows 74138 are connected to
#define ROW_DDR    DDRC   // A0-A5
#define CLK_PORT   PORTB  // Port the Clock/OE/LE are connected to
#define CLK_DDR    DDRB   // D8-D13

char text1[]="ARDUINO UNO WITH           ";
char text2[]="SUNRISE SYSTEMS        ";

// 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() {
  PIXEL_DDR = 0xFF;  // Set all pixel pins to output
  ROW_DDR = 0xFF;    // Set all row pins to output
  CLK_DDR = 0xFF;    // Set all CLK/LE/OE pins to output
}
     
void loop() {
  for (int t=0; t<900; t++){
    // Select the Row
    for (int r=0; r<8; r++){
      // select the character
      for (int ch=0; ch<16; ch++){
        // select the column within character
        for (int c=0; c<6; c++){
          PORTD = 0x00;
          if(t < 400){
            if ((font[text1[ch]-32][c] >> r+1) & 0x01==1) PORTD=0xF0;}
          else {
            if ((font[text2[ch]-32][c] >> r+1) & 0x01==1) PORTD=0xF0;}
          PORTB=5; PORTB=4;  // Toggle clock
        }
      }
      // row is done so display it
      PORTC=r;  // Update row
      PORTB=0;
    }
  }
}

Here is a more complete schematic.
This is what the new control board looks like.  It is rather empty, but it uses a 5 volt 3 amp AC adapter.

It now features BlueTooth so you can program it from your phone.

This picture shows what is inside the new controller.


Thursday, March 28, 2019

Teensy 3.1 and SmartMatrix SD running 32x32 and 32x64 LED Matrix panels.

I purchased a Teensy 3.1 and Smart Matrix SD with 32x32 LED panel kit.  It is called "Pixelmatix SmartMatrix SD Shield KIT, Teensy 3.1, 32x32 RGB LED matrix 4mm pitch".  It had some bugs like the connector that goes to the LED panel, if installed on the Smart Matrix shield, would not fit the panel that came with the kit.  The power connector was in the way.  So as a solution I used a ribbon cable from the smart matrix to the LED panel.  I also added female headers so that the Teensy processor can be removed and used elsewhere.


Here is a video of it working.


This is a close up of the Teensy and SmartMatrix shield. Note that everything is on the top side of the board.
Now to fix the Teensy code to support the newer 64x32 LED panels.

Here is a video of the Teensy working with two 64x32 LED panels after being "Reset" with the code below.



This is the reset code.
// SMart Matrix Panel Reset Program
// For use with newer LED Panels
// Written 3/28/2019 by Bob Davis
int MaxLed = 256;

#define GPIO_PIN_CLK_TEENSY_PIN    14
#define GPIO_PIN_LATCH_TEENSY_PIN   3
#define GPIO_PIN_OE_TEENSY_PIN      4
#define GPIO_PIN_B0_TEENSY_PIN      6
#define GPIO_PIN_R0_TEENSY_PIN      2
#define GPIO_PIN_R1_TEENSY_PIN      21
#define GPIO_PIN_G0_TEENSY_PIN      5
#define GPIO_PIN_G1_TEENSY_PIN      7
#define GPIO_PIN_B1_TEENSY_PIN      20
#define ADDX_TEENSY_PIN_0   9
#define ADDX_TEENSY_PIN_1   10
#define ADDX_TEENSY_PIN_2   22
#define ADDX_TEENSY_PIN_3   23

int C12[16] = {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
int C13[16] = {0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0};

void setup() {
  // put your setup code here, to run once:
    pinMode(GPIO_PIN_CLK_TEENSY_PIN, OUTPUT);
    pinMode(GPIO_PIN_LATCH_TEENSY_PIN, OUTPUT);
    pinMode(GPIO_PIN_OE_TEENSY_PIN, OUTPUT);
    pinMode(GPIO_PIN_B0_TEENSY_PIN, OUTPUT);
    pinMode(GPIO_PIN_R0_TEENSY_PIN, OUTPUT);
    pinMode(GPIO_PIN_R1_TEENSY_PIN, OUTPUT);
    pinMode(GPIO_PIN_G0_TEENSY_PIN, OUTPUT);
    pinMode(GPIO_PIN_G1_TEENSY_PIN, OUTPUT);
    pinMode(GPIO_PIN_B1_TEENSY_PIN, OUTPUT);
    pinMode(ADDX_TEENSY_PIN_0, OUTPUT);
    pinMode(ADDX_TEENSY_PIN_1, OUTPUT);
    pinMode(ADDX_TEENSY_PIN_2, OUTPUT);
    pinMode(ADDX_TEENSY_PIN_3, OUTPUT);
}

void loop() {
    // put your main code here, to run repeatedly:
    // Send Data to control register 11
    digitalWrite (GPIO_PIN_OE_TEENSY_PIN, HIGH); // Display reset
    digitalWrite (GPIO_PIN_LATCH_TEENSY_PIN, LOW);
    digitalWrite (GPIO_PIN_CLK_TEENSY_PIN, LOW);
    for (int l=0; l<MaxLed; l++){
      int y=l%16;
      digitalWrite (GPIO_PIN_R0_TEENSY_PIN,LOW);
      digitalWrite (GPIO_PIN_G0_TEENSY_PIN,LOW);
      digitalWrite (GPIO_PIN_B0_TEENSY_PIN,LOW);
      digitalWrite (GPIO_PIN_R1_TEENSY_PIN,LOW);
      digitalWrite (GPIO_PIN_G1_TEENSY_PIN,LOW);
      digitalWrite (GPIO_PIN_B1_TEENSY_PIN,LOW);
      if (C12[y]==1){
          digitalWrite (GPIO_PIN_R0_TEENSY_PIN,HIGH);
          digitalWrite (GPIO_PIN_G0_TEENSY_PIN,HIGH);
          digitalWrite (GPIO_PIN_B0_TEENSY_PIN,HIGH);
          digitalWrite (GPIO_PIN_R1_TEENSY_PIN,HIGH);
          digitalWrite (GPIO_PIN_G1_TEENSY_PIN,HIGH);
          digitalWrite (GPIO_PIN_B1_TEENSY_PIN,HIGH);
      }
      if (l>MaxLed-12){digitalWrite(GPIO_PIN_LATCH_TEENSY_PIN, HIGH);}
          else{digitalWrite(GPIO_PIN_LATCH_TEENSY_PIN, LOW);}
      digitalWrite(GPIO_PIN_CLK_TEENSY_PIN, HIGH); 
      digitalWrite(GPIO_PIN_CLK_TEENSY_PIN, LOW); 
    }
  digitalWrite (GPIO_PIN_LATCH_TEENSY_PIN, LOW);
  digitalWrite (GPIO_PIN_CLK_TEENSY_PIN, LOW);
  // Send Data to control register 12
    for (int l=0; l<MaxLed; l++){
      int y=l%16;
      digitalWrite (GPIO_PIN_R0_TEENSY_PIN,LOW);
      digitalWrite (GPIO_PIN_G0_TEENSY_PIN,LOW);
      digitalWrite (GPIO_PIN_B0_TEENSY_PIN,LOW);
      digitalWrite (GPIO_PIN_R1_TEENSY_PIN,LOW);
      digitalWrite (GPIO_PIN_G1_TEENSY_PIN,LOW);
      digitalWrite (GPIO_PIN_B1_TEENSY_PIN,LOW);
      if (C13[y]==1){
          digitalWrite (GPIO_PIN_R0_TEENSY_PIN,HIGH);
          digitalWrite (GPIO_PIN_G0_TEENSY_PIN,HIGH);
          digitalWrite (GPIO_PIN_B0_TEENSY_PIN,HIGH);
          digitalWrite (GPIO_PIN_R1_TEENSY_PIN,HIGH);
          digitalWrite (GPIO_PIN_G1_TEENSY_PIN,HIGH);
          digitalWrite (GPIO_PIN_B1_TEENSY_PIN,HIGH);
      }   
      if (l>MaxLed-13){digitalWrite(GPIO_PIN_LATCH_TEENSY_PIN, HIGH);}
          else{digitalWrite(GPIO_PIN_LATCH_TEENSY_PIN, LOW);}
      digitalWrite(GPIO_PIN_CLK_TEENSY_PIN, HIGH); 
      digitalWrite(GPIO_PIN_CLK_TEENSY_PIN, LOW); 
    }
  digitalWrite (GPIO_PIN_LATCH_TEENSY_PIN, LOW);
  digitalWrite (GPIO_PIN_CLK_TEENSY_PIN, LOW);
}

Here is a video of the Teensy displaying text on two 64x32 LED arrays.

Monday, March 25, 2019

Panasonic AG-DVC7 Videocamera Power Switch Repair

I have two Panasonic AG-DVC7 professional Camcorders that I bought at a Hamfest.  I thought I would test them out again as they do not always power on.  Both cameras needed new on/off switches.  I also had to dissemble one camera to fix a loose connector to the tape transport.  This is what the guts look like.
Panasonic AG-DVC7 Dissembled

 Inside the handle there is a removable assembly that contains the power switch.

I soldered a switch to the two end contacts on the switch.

Then reassemble the control board with the switch wires coming out like this.

Then drill a hole in the top of the handle next to the "photo Shoot" button for the new power switch.

Monday, March 18, 2019

Arduino Uno running a MSGEQ7 and a LCD

I Have an Arduino Uno running a MSGEQ7 and a LCD.  It is sampling each frequency twice for 14 samples each channel.  The MSGEQ7 control pins are connected to D2 and D3.


Here is a video of it working.



Here it is simulating an analog meter.


I added a 4052 analog mux to the MSGEQ7's to get 28 frequencies per channel.


This is the same setup with a sweep generator.


Here is a video with a stereo analog meter.

The code is at: https://github.com/bobdavis321/Arduino-Audio-Projects

Friday, March 8, 2019

Arduino UNO with 64x32 LED Array Displaying Analog Data

Arduino UNO with 64x32 LED Array Displaying Analog Data

I am working on a book titled "Arduino Audio Projects" and one of the projects I am creating is to display the outputs of a MSGEQ7 on the 64x32 LED matrix.  As a starting point, the first step is to display the status of A4 and A5 while running the matrix.


Video displaying the Analog inputs A4 and A5



I have successfully added a MSGEQ7 to the Arduino UNO!

Here is the first video with a MSGEQ7 added.


I rotated the display by changing the software!


Here is how to modify the MSGEQ7 shield so its control pins do not interfere with the RGB Hat.


The code is at: https://github.com/bobdavis321/Arduino-Audio-Projects

Monday, February 18, 2019

P3 64x32 HUB75E LED matrix panels with FM6126A Chip

I purchased a P3 (3mm LED spacing) 64 by 32 HUB75E Panel on eBay.  Needless to say it does not work with a "normal" HUB75 interface.  HUB75E adds a row select called "E" that ties to A4 to get the panel working.  That make 32 row selections possible.  Otherwise noise on that pin would cause garbage to come up on the display once in a while.

Here is a picture of the HUB75 connector from someone else on the Internet.  Note the "E" pin in the middle right of the pin listing.

So far I can only get it to turn all white or half white.  I am working on my own code since all the drivers out there are insanely complex!

 This picture shows the mod to connect E (Located between B and G2) to A4, using the lower yellow jumper wire.  The upper yellow jumper is for the clock to go to D8 or to D11 for use with the Mega.

This is the first video of it starting to work:


Here is a video of THREE 64x32 panels working with an Arduino UNO.


This video shows three panels with different text and background colors.


This is a picture of the display with some different color backgrounds.




The FM6126A Spec sheet tells how the chip is not just a normal shift register.  This was translated from the Chinese manual with google translate.  Basically the number of clock pulses while the LE (Latch Enable) is high tells the shift register what to do.  Three clock pulses are required to latch and display the data.  No clock pulses resets the display to blank.  That explains why most demo programs come up with a blank display.  Eleven or twelve clock pulses access the control registers.  Some people say you can set all the data for the control registers to high and that works.

Instruction         LE     Instruction Description
---------------        ---        ----------------------------
RESET_OEN      0-1     Soft reset signal
DATA_LATCH 3         latches 16 bit data to the output
--                       4~10    Reserved
WR_REG1        11       Write configuration register 1
WR_REG2        12       Write configuration register 2

Remark: The length of LE refers to the number of rising edges of CLK when LE is high. As shown in the figure below, the length of the first LE signal is 3, which is the "Data_Latch" command.

Here is two of the panels working with a Raspberry Pi after running resetmatrix.py


This is the Raspberry Pi VU meter demo program;

This is the back side of one of the LED panels;

My Arduino code is now compatable with the Adafruit demos!

Here is the Youtube Video:


Now some pictures of the demo's running, the first two are called "Plasma"


This is the "Test Shapes" demo:

// 128x32 Uno LED panel driver
// Fast Clock Mod
// 3/4/2019 by Bob Davis

// #define A   A0  // Port D assignments
// #define B   A1
// #define C   A2
// #define D   A3
// #define E   A4
// #define CLK 8 // Port B assignments 
// #define OE  9
// #define LAT 10

int C12[16] = {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
int C13[16] = {0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0};

#define MaxLed 128
byte BGC1=0x04;  // Background
byte FGC1=0x1C;  // Foreground
byte BGC2=0x20;  // Background
byte FGC2=0xE0;  // Foreground

#define PIXEL_PORT PORTD  // Port the pixels are connected to
#define PIXEL_DDR  DDRD   // D2-D7
#define ROW_PORT   PORTC  // Port the rows are connected to
#define ROW_DDR    DDRC   // A0-A5
#define CLK_PORT   PORTB  // Port the Clock/LE/OE are connected to
#define CLK_DDR    DDRB   // D8-D10

char text1[]="ARDUINO UNO RUNS        ";
char text2[]="TWO 64X32 PANELS        ";

// 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() {
  PIXEL_DDR = 0xFF;  // Set all pixel pins to output
  ROW_DDR = 0xFF;    // Set all row pins to output
  CLK_DDR = 0xFF;    // Set all CLK/LE/OE pins to output

  PORTB=0;
  // Send Data to control register 11
  for (int l=0; l<MaxLed; l++){
    int y=l%16;
    PORTD = 0x00;
    if (C12[y]==1) PORTD=0xFC;
      if (l>MaxLed-12){ PORTB=7; PORTB=6; }
      else{ PORTB=1; PORTB=0; }
    }
  PORTB=0;
  // Send Data to control register 12
  for (int l=0; l<MaxLed; l++){
    int y=l%16;
    PORTD = 0x00;
    if (C13[y]==1) PORTD=0xFC;
      if (l>MaxLed-13){ PORTB=7; PORTB=6; }
      else{ PORTB=1; PORTB=0; }
    }
  PORTB=0;
}

void loop() {
  for (int c=0; c<600; c++){
    if (c > 000){BGC1=0x04; BGC2=0x20; FGC1=0x1C; FGC2=0xE0;}
    if (c > 200){BGC1=0x08; BGC2=0x40; FGC1=0x1C; FGC2=0xE0;}
    if (c > 400){BGC1=0x10; BGC2=0x80; FGC1=0x1C; FGC2=0xE0;}
    // Select the Row
    for (int r=0; r<16; r++){
      for (int l=0; l<MaxLed; l++){
        int y=l%8; // remainder after division
        int pd1 = BGC1;
        int pd2 = BGC2;
        if (y < 6){
          if ((font[text1[l/8]-32][y] >> 8-r/2) & 0x01==1) pd1=FGC1;
          if ((font[text2[l/8]-32][y] >> 8-r/2) & 0x01==1) pd2=FGC2;
          PORTD=pd1+pd2;
        }
        if (l<MaxLed-3) {PORTB=1; PORTB=0;}
        else {PORTB=7; PORTB=6;}
      }
      PORTC=r;  // Update row
      PORTB=0;
    }
  }
}

Wednesday, February 13, 2019

More Thyroid problems

DISCLAIMER: I am not a doctor nor do I play one on TV, but the docs have sure seen a lot of me. If you have a medical problem see a doctor.

My latest CAT scan showed some more problems with my liver. I researched it and found out that some people with thyroid problems also develop liver problems. Then I found out that some people have problems with their thyroid medicine. So I tried reducing, then eliminating my thyroid medicine and discovered that I felt much better.

About that time I was having my car worked on and struck up a conversation with a guy that was in the shops waiting room.  I mentioned about stopping taking synthroid.  He asked if the pill was yellow.  I thought that was a really strange question, but the pill is yellow. He said that some people are allergic to the yellow die like in Mountain Dew. I have known for years that I cannot drink Mountain dew!

Eventually my doctor tried a dosage of synthroid that did not have the yellow die, but unfortunately the side effects were the same.

I do fairly well without synthroid by taking supplements like "Thyroid Activator".  It contains kelp and Irish moss.  My blood tests showed that the levels of free T3 and T4 are within .1 of being normal.  My TSH was 12 however, so the doctors want me on something.

My Synthroid / Levothyroxine Symptoms:
Bloating, Nausea, Headache, and Dizziness.
Bending at the waist is painful.
Muscles cramp and bones ache all over.
Loss of energy, Exhaustion, Need to rest.
No BM, (hemorrhoids from trying) No Appetite.
Difficulty standing (Legs feel like rubber).
No restful sleep, wake up feeling exhausted.

Friday, February 8, 2019

Trying to decide where to go to next? New processor?

I am trying to decide what to build next.  Amoung the options is "Arduino Audio Projects".  Should I use a different processor?  This is what I have collected so far:
There is an STM32/Nucleo 64 board.
There are two ESP6266 processors (Only one analog pin)
There are an Arduino UNO, DUO and MEGA.
There is an Orange (and I have several Raspberry processors)
There is a TEENSY 2.0 (Should have gotten one with more pins)
There is one board where I forgot the processor name!

Then there are all of these LCD screens (and there are more).
Don't even ask me to explain what all of these LCD's are!

I also have a collection of addressable LED arrays, signs, and strips.

Would "Arduino Audio projects" be a worthwhile book?

Should I start writing about another processor/board?

Tuesday, January 1, 2019

Dynex 37L150A11 Power Supply and Inverter Repair

I was given a Dynex 37 inch LCD TV to repair or sell parts out of.  The first most obvious problem is the power supply needed two new 1000 uF 35 volt capacitors.  Those capacitors were bulging with some black ooz coming out of the top of one of them.

The second problem is that there are two CCFL tubes that are dim or out.  This causes the OZ964 based inverter to shut off after a couple of minutes.  The standard solution is a 5K resistor to power and a LED to ground.  Attach the center of the two to pin 4 or pin 10 depending on what web site you visit.  Using pin 5 as power and attaching the led to pin 4 resulted in a dim picture.  Using pin 10 was also dim.  I changed to a high efficiency green LED to get good brightness. That green LED is a 2.2 volt device when most LED's are 1.8 volt devices.  If you use a 2.4 volt device the screen gets too bright and starts flashing likely because of an over current condition.


Here is a picture of the other side of the inverter board showing the model number.

By the way you should check all of the transformer outputs for shorts first.  Also 2 of the transformers (top one and third one down) will have a different reading because they use different driver transistors for some reason.

This mod did not last.  After a few weeks the screen brightness started flickering then went dim.  Next I tried the load resistor idea.  I tested the CCFL tubes with a small 2 tube driver.  It only lit the tubes dimly, but, with it I could clearly see tube 2 was not lighting at all.  However, when I had bypassed the safety shutdown, tube 4 or 5 was also not working.  That might indicate there is a bad transformer.

I attached a 470K resistor from CCFL output 2 to ground.  The TV blinked on and off.  I added two more resistors so there were three 470K resistors in series.  That worked for 10-20 minutes until smoke started rolling off the resistors.  Apparently you need about 160-220K rated for at least 5 watts to do this trick.

Next I tried linking two of the outputs together.  I used a 1K resistor from CCFL 2 to the other outputs one at a time.  I discovered that trick works for every other output.  Apparently there are two phases and crossing them causes the TV to shut down.  But, linking two outputs together through a 1K resistor, seems to work for now.  I will keep you updated on this option and how it lasts.

This modification has lasted for a few months now.