Generic ICs with oblong/rectangular pads?

Which gets back to what scenario you have in mind that you want to solder to pins on a pcb with an Arduino Uno board footprint? The oval pins do really have more copper. They are also narrower, to make room for standard size traces between the pins.

I already use the oval dip28 and dip8, now I need the female pins of the header, the scenario is a shield for arduino like this:

Find a FZ part with oval pads.
Export that svg out of FZ.
Open it in Inkscape and copy that oval pad.
Paste it into a exported UNO svg and place them under the pads.
Substitute that svg into a UNO part.
Assign the pins.
Save as new part.

There are details here

So what you want is pieces to help create an Arduino Shield pcb. That will use male headers (or stackable female headers) to connect to an Arduino board below. You may also want a Fritzing part for the Arduino board that will accept the shield (once it is also turned into a part).

The Arduino board (part) itself does not need the oval pins. Neither does the shield when created as a part. The oval pins are needed when designing the pcb for the shield. That is doable. Though I will warn that there is not much room between the header pins and the physical edge of a standard sized Arduino shield to place traces.

As Old_Grey said, you could get an oval pad from one of the existing parts, once you find one with good sized ovals. I think the easiest way to do this, is to create new header parts that have the oval pads, then use those on the pcb. Or even create a part containing a single pad, and use lots of them. Note that an oval pad is really 2 pieces. One is a smaller circle that defines the drill hole size, with a small circular pad. The other is the oblong piece that overlaps the small circular pad, but has a cutout to not cover the hole. The connector id goes on the circle element.

You need to decide just how ‘oval’ you want the pads. Here is an (svg) example that is set to have a 40mil diameter hole, 5mil thick narrow edges, and a total (long) length of 90mil, with the hole directly in the center (it is possible to have the hole closer to one end). Those numbers can be adjusted (fairly) easily mathematically, by editing the sample oval pad svg with a text editor and changing a few numbers. This sample is designed so that 1 pixels is 1 mil. I needed to add a border around the single pad, to get the image big enough for the forum to upload, AND adjust the generate link so that it did not get displayed as a single pixel. I scaled the view here to 5 times actual. That won’t matter when downloading the image.

oval
The 2 pieces do not need to be together in the svg file. I use separate blocks for the circle and path (oval) elements. There is a common offset between them, so a single wrapper translate on each set (circles and paths) can keep the coordinates nice simple multiples of 0.1 inch. Or 100 px in my example

Note that when creating Fritzing parts, the concept of male and female headers is different than male and female connectors (pins). The way the Fritzing code works, Anything that accepts a connection is on the bottom, and is a female connector. Like the holes in a breadboard. The part that connects needs to have a male connector. That is true even if physically the receiving (bottom) part uses a male header, like the Arduino Uno ICSP headers. To be able to plug something onto them (by dragging a part over top), the connectors of the dragged part must be defined as male. Attaching a wire directly to a connector works either way.

you could start with the svg generator https://werner.rothschopf.net/fritzing/part.html : 36 pins, row distance 20000, pin distance 100 mil. You have to shift the pins GPIO8 to SCL and delete some pins on the other side, but at least it’s a start.

Apparently but I don’t know what :slight_smile: . @steelgoose gave me the formula a few years ago and it works. Using a 20 thou stroke width (at standard scale) a 0.038 hole for a header pin has a pad diameter of 0.078in which in turn is 0.078 - 40 (2 * 20 stroke-width) and creates a 0.038 hole in the gerber output. I actually don’t know why the stroke-width needs to be doubled, but it does. This varies by editor as well, Coral Draw (which @steelgoose uses) calculates the hole size differently and I don’t know how illustrator does it.

Peter

AH! The problem is (I think) mixing of the hole, pad, and svg element circle dimensions.

The pad is 78 mil diameter
The hole is 38 mil diameter
The stroke is 20 mil

But the svg circle element diameter is 58 mil (radius = 29 mil), with half of that 20 mill stroke outside, half inside the circle. Which makes the radius of the hole 29 - 10, and the radius of the pad 29 + 10. 19 * 2 = 38, 39 * 2 = 78, giving the 38 mil hole and 78 mil pad diameters.

The rest is the different ways the editors use information to generate the svg. They might treat the requested circle radius/diamater as (any of) the hole, pad, or svg element radius/diameter, and adjust to match the stroke size.

this is the scene for oval pins, shields that dock to arduino:

They are easy enough to do. You basically need an oblong path which contains a standard circular pad (with the connectorxpin label) in it so that the gerber code will find the circle to make the hole. I have not found a way to do that in a path. A circle specified as a path works, but an oblong path with a circle in it has not for me (the gerber code doesn’t find the path.) It is best to remove any translates in the pad because that sometimes breaks things. There are a number of example parts available both in core parts and in the forums.

Peter

I can do the circular hole cut in a path, but that does not help. The Fritzing code does not see it as a hole that needs to be included in the gerber export. It needs to be 2 separate svg elements. An actual circle element to get Fritzing to generate the hole for Gerber, and a path to get the desired pad shape.

I have a python script that will generate a row of them based on parameters. Work in progress. It currently generates valid svg, but only for pads centred over the hole. I want to be able to also offset the pad, so the hole is closer to one end, and generate a second row of pins with the offset the opposite direction. This does use transforms for simplification, but that is x,y translate only.

FZ only accepts circle, so you put that oblong pad under a normal circle pad. I think it’s in my last vid.

@Old_Grey That is what my python program does. Generates an array of circle and path elements.

this is another scenario, oval female headers and oval dip28:

The current version of my script will be able to generate contiguous sections of the oval connectors, but they will need to be manually merged. Looks like it would need 10 segments.

A future version (may be) able to generate the whole layout at once, but then the parameters to define what is needed are going to be complex. Another possible future version would generate sections (say the dip28), but instead of creating a new file, added the connectors to the file created by previous runs that built and added other sections. That should just need x,y offsets and a reference, to tell it where to insert the new connectors relative to the existing. As a bonus, building the layout up in segments, means each segment could potentially use different size and shape for the pads.

At some point (likely not soon :slight_smile: ) I intend on modifying the parts factory to do this when generating generic ICs and headers (and fix double row headers which are currently broken in breadboard.) I had started this a couple of years ago, and recently went back to it when I discovered there is code to deal with older Fritzing versions which makes this whole process much more complex. I think the way forward here is python as @microMerlin has done to prototype what we want to do more easily than changing the C++ source, and once we have a desirable set of tools modify the parts factory C++ code to implement it. I have a few parts, one example here:

with oblong pins for headers. I think there should be single row version as well although I couldn’t immediately find them. At present to get different sizes you need to edit the underlying svgs though there isn’t yet an automated tool in python.

Peter

Peter