Skip navigation

I just got in my new boards for the scoreboard project, and I was super excited to test out my plain old, unmodified toaster oven for some old fashioned reflow soldering. So I taped down the stencil and jig I had ordered from OSHStencils, and applied the solder paste to the board.

2015-04-03 21.32.22

One of my first concerns when settings up this first go at reflow soldering, was how expensive the solder paste was. Well, just as i had thought, it takes very little paste to cover all the little pads. I was concerned about waste, and while there was some paste left on the stencil and the spreader tool (a plastic card that also came with the OSHStencil order), I was able to collect most of the excess paste with the tool and place it back in the container. Since this was a large board, I started with a small gob of paste and worked the board in sections, alternating between thick spreading, and scraping it back up with the edge of the card.

2015-04-03 22.26.22

Placing the parts wasn’t too bad, I’d say it was easier than normal soldering with the 0603 resistors. I did expect the paste to be tackier, and while the parts did stick in place, it took very little effort to move them, so a stead hand is still needed to place and position. On the SOIC parts, the paste did seem to mingle between pads, but that wasn’t an issue at all. Once all the parts were down, it was into the oven.

2015-04-03 22.29.37

I tried to keep with the same methodology as the last post, although this time around I had black PCBs (since its an LED display, a dark background is preferred). While I’m only speculating, these boards reached much higher temperature much faster, I believe due to extra IR absorption. So this time I set the oven to 300F/150C on the convection setting (fan on). I let it heat until the thermostat clicked off, and waited until it clicked back on to turn the oven up to 400F/200C. This is were I was suprised. The black board started to flow as it approached this temperature setting, where the red board I had tested earlier flowed on its way to the 450F setting. Using a bright light, I was able to see the metallic shine of melted solder on all the joints. So once the thermostat clicked off, I shut the oven down and opened the door to let it cool. The board looked great, all the joints looked solid. There were a few were I could see that there possibly wasn’t enough paste on the pad, but the connections were still solid. The shift registers looked good, with no solder bridges.

2015-04-03 22.41.16

2015-04-03 22.41.07

2015-04-03 22.40.17

And the best part is, it worked!

2015-04-03 23.26.30

Even the digit chaining worked as expected.

2015-04-04 01.08.31

I think a proper diffusing sheet would make the final product very easy to read.

2015-04-03 23.25.51

And lastly, the Arduino code I used for the testing the digits.

/*
|***F***|
A       E
|***G***|
B       D
|***C***|

*/
const int D1 = 2;
const int CLK = 4;
const int STROBE = 3;

byte digitMap[10] =
{
	B11111100,
	B00011000,
	B01101110,
	B00111110,
	B10011010,
	B10110110,
	B11110110,
	B00011100,
	B11111110,
	B10011110
};


void setup()
{

	/* add setup code here */
	pinMode(D1, OUTPUT);
	pinMode(CLK, OUTPUT);
	pinMode(STROBE, OUTPUT);

	digitalWrite(STROBE, LOW);
	digitalWrite(CLK, LOW);
	digitalWrite(D1, LOW);


}

int state = HIGH;
int count = 0;
void loop()
{

	for (int i = 0; i < 100; i++)
	{
		byte Data2 = digitMap[i / 10];
		byte Data1 = digitMap[i % 10];

		//Write to display 
		for (int j = 0; j < 8; j++)
		{
			digitalWrite(CLK, LOW);
			digitalWrite(D1, Data1 & 0x01);
			Data1 = Data1 >> 1;
			digitalWrite(CLK, HIGH);
		}
		//Write to display 
		for (int j = 0; j < 8; j++)
		{
			digitalWrite(CLK, LOW);
			digitalWrite(D1, Data2 & 0x01);
			Data2 = Data2 >> 1;
			digitalWrite(CLK, HIGH);
		}
		delayMicroseconds(10);
		digitalWrite(STROBE, HIGH);
		digitalWrite(STROBE, LOW);

		delay(1000);
	}
}


Yeah I know, everyone is doing it. Reflow soldering with a standard counter-top toaster oven. While it’s not too exciting, I did want to document my successful test at using a cheapo oven I picked up at Goodwill for $10, completely unmodified. I had picked this up in preparation for some boards I’m going to make as part of my scoreboard project. While I was initially going to try to go for the ever popular reflow conversion, most of the modules out there for purchase seemed quite expensive ($60+, I’m cheap, I know). My own ballpark cost of making one myself came out to be $25-$30 (less if I skip the pesky mains isolated power supply for the micro). So while looking at the unit I had acquired, I figured it was at least work testing with built in front panel controls.

So the particular oven I picked up was a Black & Decker Toast-R-Oven 1500W, model TRO4075. Part of the reason I choose this oven over a $5 unit that was also for sale was that this one can the ‘Convection Bake’ feature, which means it includes an air circulation fan on the inside. From what I have read previously about reflowing, this can be extremely helpful for even heating and preventing hot spots.

2015-03-15 11.50.09
Oven Markings.

2015-03-15 11.50.33
Knobs.

Also looking at the front panel controls, it also already had its own temperature control and timer. Before the first test, I already knew the temp control wasn’t going to be very accurate, and the timer knob resolution not really useful as the first official marking (after light and dark toast) was 10 minutes. So for the first test I simply placed a board in the oven, set the temp to the 400F/200C mark, selected convection bake, and set the timer for dark toast.

The board I used was a 10cm square board that is almost the same board that I’m going to be assembling. The board is a double digit, seven segment LED numerical display. Foolishly I hit order to quickly on the first set, and being the amateur I am, wired the three LEDs of each segment in parallel instead of series. I only noticed after I tried doing the calculations for the resistor value and power ratings did I notice that I messed it up. While technically these boards would still work, having the LEDs in parallel can lead to current imbalance that can shorted the life of the individual LEDs as well as use 3x the power of the series configuration. The only major difference in the new boards, and I’m hoping this doesn’t have to big of an effect on the infrared heating, is that the test board was DirtyPCBs.com’s default red, and my new boards are coming in with the black solder mask. My other realization was that bright red would make a terrible background for a LED display, especially with red LEDs.

Anyways, back to the test. It was clear that the oven heats up pretty fast, probably faster than the recommended profile from the solder paste I’m planning to use. It wasn’t long before the existing solder on the pre-tinned pads began to wet. Now, I don’t have a thermocouple to measure the board temp with, so I only had my trusty el-cheapo infrared thermometer. Once the ovens own thermostat clicked the elements off, I measured the board at about 221C. Just over the melt line of the profile, but I do not have reason to suspect that the measurement was accurate by any means. I let it cook for a bit untill the timer clicked off and pulled it out of the oven after a short cool down. At first inspection all went well, no burn marks, scorching or other visible damage to the PCB. The only thing I had noticed was a bit of upward warping while the board was at peak temperature. On this board I had most of the wiring on the top layer and bottom layer is almost solid copper, so I’m guessing its a bit of thermal expansion of the bottom side that cause this. Not a big deal, it only appeared to be about a 2mm deflection at the one corner.

2015-03-14 18.56.57

For the next test, I just wanted to see how some of my extra 0603 resistors would handle it. I didn’t break out the stencil yet, so I just dabbed some paste on 8 footprints spread about the board. Pretty ugly, but the resistors stuck to it.

2015-03-14 19.04.02

2015-03-14 19.11.03

In this test, I tried to follow a bit of a profile to keep the board from heating too fast. I started by setting the temp to the 300F/150C mark, then waited for the thermostat to click the elements off. I waited a few seconds, then crept the temp up the the 400F/200C mark again. I did the same by waiting for the thermostat to click off in the toaster. While this is enough melt the solder, the profile called for a peak temp of around 230-249, so for the final bit I set the temp on the toaster to its max setting, 450F/230C. After the thermostat clicked off again, I shut it down and took another temperature measurement of about 235C. I waited about 20 seconds and then removed the board from the oven to cool quickly. The results where not that bad, other than the slightly excessive amount of paste that was put down for the pads. Again no board scorching, discoloration, bubbling, or other faults. The resistors looked as though they survived as well, all measuring close to the promised 1K Ohms.

2015-03-14 19.22.43

2015-03-14 19.21.55

Now as soon as my new boards get here, I’m going to be ready to try out my stencil and push a few boards through.

2015-02-19 23.15.37

2015-02-19 23.14.37

I’ve been working on a project to build a WiFi controlled scoreboard. For a display prototype, I wanted to test out a multiplexing technique for the display. Multiplexing works well for a smaller display since it only requires 16 transistors to control the 9 digits X 7 segement, or 63 LEDs. The disadvantages of multiplex approach is that you have to constantly drive the display, and the reduced brightness due to the duty cycle. For a larger display, like what I may use for the final product, I think I will just directly control the segments directly instead of the multiplex approach.
I originally believed the multiplexed method would be better, due to the reduced number of power lines to the LEDs in comparison to directly driving each segment. However in both this design and a matrix driver I built up for the large display, I used shift registers to reduce it to a serial interface. Eventually what I realized after ordering this board is that I could use the shift registers chained together to create a programmable display that would hold its state. That, and I found an economical way to do the digits as PCBs instead of some type of 3d printed affair and adhesive LED strips. The non-PCB digits is why I thought I would have to run wires to each segment individually and join them into a 8 wire bus to the common drive switches. The PCB based square double digit boards reduce that to a 6 wire (GND, V logic, V LED, CLK, Data, Latch) board to board connection. I think in the larger design where inter-digit wiring will be needed, the cost of the extra transistors (which can have a lower power rating than the multiplex drives) will be more than offset by the cost and complexity of the extra wiring.

The design here is pretty simple, I’m just using 2 standard 74LS595 latching shift registers to feed data into the display. The latching feature is important, because in this application we don’t want the bits to just be shifting along the outputs. On the latch step, the internal 8 bit shifter is copied to the outputs all at once. There are 9 common anode 7 segment displays (I’m not using the dot), which works out to need exactly 16 bits. I’m using NPN transistors to both sink and source current to the display. See the schematic linked below. The code below is just some example code of feeding data to the display. You just have to clock the bits out to each of the shift registers and then latch the outputs. I didn’t chain the registers together, so there are 2 inputs to feed data two simultaneously, as the clock and latch pins are shared on the board. The code uses an array of bytes to map which bits to turn on for each number. One important note I had trouble with on the first attempt, data is clocked in on a low to high rising edge, but an additional high to low falling edge was required before latching, or else the final bit would never change. That doesn’t make much sense, so its possible it was just a timing issue and the extra port write gave the register enough time to settle before latching. The code was tested with the Arduino compiler using the VisualMicro Visual Studio Plugin.

Test Display Schematic

PCB

Shift Register Datasheet



/*
	|***A***|
	F	    B
	|***G***|
    E       C
	|***D***|

	D1 A-G, Com9
	D2 Com1 - Com8
	
*/
const int D1 = 2;
const int D2 = 3;
const int CLK = 5;
const int STROBE = 4;

byte digitMap[10] = 
{
	B11111100,
	B01100000, 
	B11011010,
	B11110010,
	B01100110,
	B10110110,
	B10111110,
	B11100000,
	B11111110,
	B11100110
};


int Score1 = 4;
int Score2 = 3;

int Min = 2;
int Sec = 0;

int Period = 2;

void setup()
{

  /* add setup code here */
	pinMode(D1, OUTPUT);
	pinMode(D2, OUTPUT);
	pinMode(CLK, OUTPUT);
	pinMode(STROBE, OUTPUT);

	digitalWrite(STROBE, LOW);
	digitalWrite(CLK, LOW);
	digitalWrite(D1, LOW);
	digitalWrite(D2, LOW);


}

int state = HIGH;
int count = 0;
void loop()
{

	for (int i = 0; i < 9; i++)
	{
		byte Data2 = B10000000 >> i;
		byte Data1 = getBits(i);
		if (i == 8) Data1 |= B00000001;

		//Write to display 
		for (int j = 0; j < 8; j++)
		{
			digitalWrite(CLK, LOW);
			digitalWrite(D1, Data1 & 0x01);
			digitalWrite(D2, Data2 & 0x01);
			Data1 = Data1 >> 1;
			Data2 = Data2 >> 1;
			digitalWrite(CLK, HIGH);
		}
		digitalWrite(CLK, LOW);
		digitalWrite(STROBE, HIGH);
		digitalWrite(STROBE, LOW);

	}
	count++;
	if (count > 0x0FF0)
	{
		if (Sec == 0)
		{
			Sec = 59;
			Min -= 1;
		}
		else
			Sec -= 1;
		count = 0;
	}


}

byte getBits(int digit)
{
	switch (digit)
	{
	case 0:
		return digitMap[Min / 10];
	case 1:
		return digitMap[Min % 10];
	case 2:
		return digitMap[Sec / 10];
	case 3:
		return digitMap[Sec % 10];
	case 4:
		return digitMap[Period];
	case 5:
		return digitMap[Score1 / 10];
	case 6:
		return digitMap[Score1 % 10];
	case 7:
		return digitMap[Score2 / 10];
	case 8:
		return digitMap[Score2 % 10];
	}

}