Wednesday, May 1, 2019

Panasonic Pro AG-DVC7 Rebuild with higher resolution

I am rebuilding a Panasonic AG-DVC7 to give a better image resolution.  I am looking at USB Camera boards with sound on eBay to attach to the existing optics.  An Arduino will handle the Zoom, Focus, and Iris.  A Raspberry Pi will do the recording and provide a viewfinder.

One of the first steps is to reverse engineer the optics.

This is the main side of the optical assembly with the Zoom and Focus stepper motors.

This is the back side - The Iris solenoid connections are shown.  You need to remove the cover on the left to get to the connections.

This is a close up of the Iris assembly.  You do not need to take the optics apart this far.

Here is the first video of the arrangement working.


Yet to do:
Increase the range of the zoom - Add a spacer between board and the image sensor.
Set up a viewfinder - Need a small 5-7 inch HDMI Monitor.
Make the steps finer/smoother. - Done with 8 phases for servos instead of 4.
Auto focus - Need to run the focus to its stop then keep track of its position.
  Perhaps add an ultrasonic distance sensor?
Focus Issue - Somehow I damaged the optical assembly, it does not focus properly when installed back in the DVC7 camera....

Here is the schematic of the Arduino servo controller that was used for the camera.

This is a close up of the Arduino and servo driver interface.

This is a close up of the Raspberry Pi. You could use a USB camera board as well.

Here is the code for the servos.

/*****************************
Dual Four wire stepper motor Control
For Panasonic AG-DVC7 with two servos
by Bob Davis
May 1, 2019
*****************************/
// To L293 one
int motor1A =4;
int motor1B =5;
int motor1C =6;
int motor1D =7;
// To L293 Two
int motor2A =8;
int motor2B =9;
int motor2C =10;
int motor2D =11;
// 2P Momentary Switch One Center is off
int m1sw1 = 14;
int m1sw2 = 15;
// 2P Momentary Switch Two Center is off
int m2sw1 = 16;
int m2sw2 = 17;
// Variables
int m1step = 0;
int m2step = 0;
int mspeed = 100; // Step speed

void setup() {
  pinMode(motor1A, OUTPUT);
  pinMode(motor1B, OUTPUT);
  pinMode(motor1C, OUTPUT);
  pinMode(motor1D, OUTPUT);
  pinMode(motor2A, OUTPUT);
  pinMode(motor2B, OUTPUT);
  pinMode(motor2C, OUTPUT);
  pinMode(motor2D, OUTPUT);
  pinMode(m1sw1, INPUT_PULLUP);
  pinMode(m1sw2, INPUT_PULLUP);
  pinMode(m2sw1, INPUT_PULLUP);
  pinMode(m2sw2, INPUT_PULLUP);
}

void loop() {
// read switches
  if (digitalRead (m1sw1)==HIGH) m1step=m1step+1;
  if (digitalRead (m1sw2)==HIGH) m1step=m1step-1;
  if (m1step > 7) m1step=0;
  if (m1step < 0) m1step=7;
  if (digitalRead (m2sw1)==HIGH) m2step=m2step+1;
  if (digitalRead (m2sw2)==HIGH) m2step=m2step-1;
  if (m2step > 7) m2step=0;
  if (m2step < 0) m2step=7;
// respond M1 with 8 smooth steps
  if (m1step==0){
    digitalWrite (motor1A, LOW); //+A
    digitalWrite (motor1B, HIGH);
    digitalWrite (motor1C, HIGH);
    digitalWrite (motor1D, HIGH);}
  if (m1step==1){
    digitalWrite (motor1A, LOW); //+A,+B
    digitalWrite (motor1B, HIGH);
    digitalWrite (motor1C, LOW);
    digitalWrite (motor1D, HIGH);}
  if (m1step==2){
    digitalWrite (motor1A, HIGH); //+B
    digitalWrite (motor1B, HIGH);
    digitalWrite (motor1C, LOW);
    digitalWrite (motor1D, HIGH);}
  if (m1step==3){
    digitalWrite (motor1A, HIGH); //+B,-A
    digitalWrite (motor1B, LOW);
    digitalWrite (motor1C, LOW);
    digitalWrite (motor1D, HIGH);}
  if (m1step==4){
    digitalWrite (motor1A, HIGH); // -A
    digitalWrite (motor1B, LOW);
    digitalWrite (motor1C, HIGH);
    digitalWrite (motor1D, HIGH);}
  if (m1step==5){
    digitalWrite (motor1A, HIGH); // -A,-B
    digitalWrite (motor1B, LOW);
    digitalWrite (motor1C, HIGH);
    digitalWrite (motor1D, LOW);}
  if (m1step==6){
    digitalWrite (motor1A, HIGH); // -B
    digitalWrite (motor1B, HIGH);
    digitalWrite (motor1C, HIGH);
    digitalWrite (motor1D, LOW);}
  if (m1step==7){
    digitalWrite (motor1A, LOW); // -B,+A
    digitalWrite (motor1B, HIGH);
    digitalWrite (motor1C, HIGH);
    digitalWrite (motor1D, LOW);}
 
// respond M2
  if (m2step==0){
    digitalWrite (motor2A, LOW); //+A
    digitalWrite (motor2B, HIGH);
    digitalWrite (motor2C, HIGH);
    digitalWrite (motor2D, HIGH);}
  if (m2step==1){
    digitalWrite (motor2A, LOW); //+A,+B
    digitalWrite (motor2B, HIGH);
    digitalWrite (motor2C, LOW);
    digitalWrite (motor2D, HIGH);}
  if (m2step==2){
    digitalWrite (motor2A, HIGH); //+B
    digitalWrite (motor2B, HIGH);
    digitalWrite (motor2C, LOW);
    digitalWrite (motor2D, HIGH);}
  if (m2step==3){
    digitalWrite (motor2A, HIGH); //+B,-A
    digitalWrite (motor2B, LOW);
    digitalWrite (motor2C, LOW);
    digitalWrite (motor2D, HIGH);}
  if (m2step==4){
    digitalWrite (motor2A, HIGH); // -A
    digitalWrite (motor2B, LOW);
    digitalWrite (motor2C, HIGH);
    digitalWrite (motor2D, HIGH);}
  if (m2step==5){
    digitalWrite (motor2A, HIGH); // -A,-B
    digitalWrite (motor2B, LOW);
    digitalWrite (motor2C, HIGH);
    digitalWrite (motor2D, LOW);}
  if (m2step==6){
    digitalWrite (motor2A, HIGH); // -B
    digitalWrite (motor2B, HIGH);
    digitalWrite (motor2C, HIGH);
    digitalWrite (motor2D, LOW);}
  if (m2step==7){
    digitalWrite (motor2A, LOW); // -B,+A
    digitalWrite (motor2B, HIGH);
    digitalWrite (motor2C, HIGH);
    digitalWrite (motor2D, LOW);}

  delay (mspeed);
}


Monday, April 29, 2019

HP Laptop Camera to USB Webcam Conversion

I have been working on hacking a Panasonic DVX100 camera.  They sell for about $100 used but they were $4000 new.  They still contain about $1000 of optics.  So I thought about using a different cameras electronics and mating it with the optics.  Then I was further sidetracked by the idea of using an old laptop camera as a USB camera.

I salvaged two laptop cameras from old laptops.  One was just 640x480 resolution but the other was 1280x960!  However the lens was glued in place making using it with the better optics not possible.  Here is a picture of the better camera.
Then, to hack the interface, the ground was metered to connect to the green wire.  Red was power and the twisted pair was the data pair.  I guessed on the twisted pair and got it right the first time.  I added heat shrink tubing later on.
Camera Green - USB Black
Camera Red - USB Red
Camera Black - USB Green
Camera Blue - USB White.

Here are the test results from https://webcamtests.com/


And finally a picture of me taken with the better camera:


Friday, April 12, 2019

Chevy HHR Car inspection P0171 code

I started about three months ahead of the inspection due date.  First I replaced the windshield that was cracked. I found a deal where it was $200 instead of the usual over $300.  Then the brakes were rebuilt and one of the wheel bearing was replaced at over $600.  Then I was quoted $300 to replace the two "GM VVT Control Valve Solenoid" valves on top of the motor.  I did that myself for $18 by buying the parts on eBay.  After that repair the check engine light went out.  Before I could get it inspected the check engine light came back on!

After checking everything and cleaning the Mass Air Flow (MAF) sensor I gave up and took it back to the garage.  As I drove it there the check engine light went out!  However it failed inspection because it had not been driven enough.  So I was given 10 days to fix it.  The garage said they had fixed a vacuum leak.  The next day the check engine light came back on!

So I spent a Saturday trying things, one at a time, to fix it. One thing I needed was something that could tell me if the problem was fixed without having to drive it many miles to see if the check engine light comes back on.  This code reader was the solution.  It read a "permanent" code 171 - fuel too lean.

Next I replaced the spark plugs.  That helped some and cleared the permanent code but soon a "pending" 171 code came back up.  As you can see the plugs were in rough shape.  I replaced them with AC Delco plugs.

Next I replaced the MAF sensor that I had cleaned earlier.  That fixed the problem.  It has some slots in it that I had sprayed the cleaner in but that was apparently not enough to fix the problem.  So after 10 days past due my car finally passed inspection.



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;
    }
  }
}

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.