public static void Create() { KiCad.PCB pcb = new KiCad.PCB(); var atmega328 = pcb.Components.AddComponent("Package_QFP:TQFP-32_7x7mm_P0.8mm", "IC1", 13, 3 + 8 * 2.54, -45); var VCC = pcb.Nets.AddNet("VCC"); atmega328.Pads[4].Net = atmega328.Pads[6].Net = VCC; var GND = pcb.Nets.AddNet("GND"); atmega328.Pads[3].Net = atmega328.Pads[5].Net = atmega328.Pads[21].Net = GND; var AREF = pcb.Nets.AddNet("AREF"); atmega328.Pads[20].Net = AREF; var XTAL1 = pcb.Nets.AddNet("XTAL1"); atmega328.Pads[7].Net = XTAL1; var XTAL2 = pcb.Nets.AddNet("XTAL2"); atmega328.Pads[8].Net = XTAL2; var AVCC = pcb.Nets.AddNet("AVCC"); atmega328.Pads[18].Net = AVCC; var NOT_RESET = pcb.Nets.AddNet("NOT_RESET"); atmega328.Pads[29].Net = NOT_RESET; var D0_RX = pcb.Nets.AddNet("D0_RX"); atmega328.Pads[30].Net = D0_RX; var D1_RX = pcb.Nets.AddNet("D1_TX"); atmega328.Pads[31].Net = D1_RX; var D2 = pcb.Nets.AddNet("D2"); atmega328.Pads[32].Net = D2; var D3 = pcb.Nets.AddNet("D3"); atmega328.Pads[1].Net = D3; var D4 = pcb.Nets.AddNet("D4"); atmega328.Pads[2].Net = D4; var D5 = pcb.Nets.AddNet("D5"); atmega328.Pads[9].Net = D5; var D6 = pcb.Nets.AddNet("D6"); atmega328.Pads[10].Net = D6; var D7 = pcb.Nets.AddNet("D7"); atmega328.Pads[11].Net = D7; var C0 = pcb.Nets.AddNet("C0"); atmega328.Pads[23].Net = C0; var C1 = pcb.Nets.AddNet("C1"); atmega328.Pads[24].Net = C1; var C2 = pcb.Nets.AddNet("C2"); atmega328.Pads[25].Net = C2; var C3 = pcb.Nets.AddNet("C3"); atmega328.Pads[26].Net = C3; var C4_SDA = pcb.Nets.AddNet("C4_SDA"); atmega328.Pads[27].Net = C4_SDA; var C5_SCL = pcb.Nets.AddNet("C5_SCL"); atmega328.Pads[28].Net = C5_SCL; var B0 = pcb.Nets.AddNet("B0"); atmega328.Pads[12].Net = B0; var B1 = pcb.Nets.AddNet("B1"); atmega328.Pads[13].Net = B1; var B2 = pcb.Nets.AddNet("B2"); atmega328.Pads[14].Net = B2; var B3_MOSI = pcb.Nets.AddNet("B3_MOSI"); atmega328.Pads[15].Net = B3_MOSI; var B4_MISO = pcb.Nets.AddNet("B4_MISO"); atmega328.Pads[16].Net = B4_MISO; var B5_SCK = pcb.Nets.AddNet("B5_SCK"); atmega328.Pads[17].Net = B5_SCK; var ANALOG6 = pcb.Nets.AddNet("ANLG6"); atmega328.Pads[19].Net = ANALOG6; var ANALOG7 = pcb.Nets.AddNet("ANLG7"); atmega328.Pads[22].Net = ANALOG7; PointF start = new PointF(3, 0); pcb.Edge.LastAngle = 0; pcb.Edge.LastPoint = start; List <KiCad.DrawingLayer.Line> lines = new List <KiCad.DrawingLayer.Line>();; for (int i = 0; i < 2; i++) { lines.Add(pcb.Edge.ContinueLine(20)); pcb.Edge.ContinueArc(3, -90); lines.Add(pcb.Edge.ContinueLine(2.54f * 16)); pcb.Edge.ContinueArc(3, -90); } pcb.Edge.ContinueLine(start); pcb.Zones.AddZone(VCC, true, pcb.Bounds); pcb.Zones.AddZone(GND, false, pcb.Bounds); var leftHeader = pcb.Components.AddComponent("Connector_PinHeader_2.54mm:PinHeader_1x16_P2.54mm_Vertical", "CONN1", 1.27, 3 + 1.27, 0); var rightHeader = pcb.Components.AddComponent("Connector_PinHeader_2.54mm:PinHeader_1x16_P2.54mm_Vertical", "CONN2", 26 - 1.27, 3 + 1.27, 0); for (int i = 1; i <= 16; i++) { pcb.Traces.SetTraceStart(atmega328.Pads[i]); pcb.Traces.ContinueTraceAngle(atmega328.Angle + atmega328.Pads[i].RelativeAngle + 180, 1.1); pcb.Traces.ContinueTrace(0, leftHeader.Pads[i].Location.Y - pcb.Traces.LastPoint.Y); pcb.Traces.ContinueTrace(leftHeader.Pads[i]); pcb.FSilk.AddText(leftHeader.Pads[i].Net.Name, leftHeader.Pads[i].Location + new SizeF(4, 0), 1, 1); pcb.BSilk.AddText(leftHeader.Pads[i].Net.Name, leftHeader.Pads[i].Location + new SizeF(6, 0), 1, 1); } var via_points = new List <PointF>(); for (int i = 1; i <= 16; i++) { pcb.Traces.SetTraceStart(atmega328.Pads[33 - i]); pcb.Traces.ContinueTraceAngle(atmega328.Angle + atmega328.Pads[33 - i].RelativeAngle, 1.1); via_points.Add(pcb.Traces.ContinueTrace(0, rightHeader.Pads[i].Location.Y - pcb.Traces.LastPoint.Y)); pcb.Traces.ContinueTrace(rightHeader.Pads[i]); pcb.FSilk.AddText(rightHeader.Pads[i].Net.Name, rightHeader.Pads[i].Location + new SizeF(-4, 0), 1, 1); pcb.BSilk.AddText(rightHeader.Pads[i].Net.Name, rightHeader.Pads[i].Location + new SizeF(-6, 0), 1, 1); } List <KiCad.Components.Component> test_points = new List <KiCad.Components.Component>(); for (int i = 0; i < 8; i++) { test_points.Add(pcb.Components.AddComponent("TestPoint:TestPoint_Pad_D1.5mm", "TP" + (i + 1).ToString(), 3 + 1.27 + i * 2.54, 1.27)); } test_points[0].Pads[1].Net = VCC; test_points[7].Pads[1].Net = GND; pcb.Traces.SetTraceStart(test_points[7].Pads[1], 0.4); pcb.Traces.ContinueTrace(0, 2); pcb.Traces.ContinueWithVia(0.6, 0.4); pcb.Traces.SetTraceStart(atmega328.Pads[15]); pcb.Traces.ContinueTraceAngle(45, 1); pcb.Traces.ContinueWithVia(0.45, 0.3); pcb.Traces.ContinueTrace(new PointF(pcb.Traces.LastPoint.X, test_points[1].Pads[1].Location.Y + 2.5f)); pcb.Traces.ContinueTrace(new PointF(test_points[1].Pads[1].Location.X, pcb.Traces.LastPoint.Y)); pcb.Traces.ContinueWithVia(0.45, 0.3); pcb.Traces.ContinueTrace(test_points[1].Pads[1]); pcb.Traces.SetTraceStart(atmega328.Pads[16]); pcb.Traces.ContinueTraceAngle(45, 1); pcb.Traces.ContinueWithVia(0.45, 0.3); pcb.Traces.ContinueTrace(new PointF(pcb.Traces.LastPoint.X, test_points[2].Pads[1].Location.Y + 2f)); pcb.Traces.ContinueTrace(new PointF(test_points[2].Pads[1].Location.X, pcb.Traces.LastPoint.Y)); pcb.Traces.ContinueWithVia(0.45, 0.3); pcb.Traces.ContinueTrace(test_points[2].Pads[1]); pcb.Traces.SetTraceStart(atmega328.Pads[17]); pcb.Traces.ContinueTraceAngle(135, 1.2); pcb.Traces.ContinueTrace(0, -3); pcb.Traces.ContinueTrace(1, 0); pcb.Traces.ContinueWithVia(0.45, 0.3); pcb.Traces.ContinueTrace(-1, -1); pcb.Traces.ContinueTrace(new PointF(pcb.Traces.LastPoint.X, test_points[3].Pads[1].Location.Y + 1.5f)); pcb.Traces.ContinueTrace(new PointF(test_points[3].Pads[1].Location.X, pcb.Traces.LastPoint.Y)); pcb.Traces.ContinueWithVia(0.45, 0.3); pcb.Traces.ContinueTrace(test_points[3].Pads[1]); for (int i = 0; i < 3; i++) { pcb.Traces.DrawVia(via_points[i + 1], 0.45, 0.3, rightHeader.Pads[i + 2].Net); pcb.Traces.ContinueTrace(new PointF(pcb.Traces.LastPoint.X, test_points[i + 4].Location.Y + 1.5f + i * 0.5f)); pcb.Traces.ContinueTrace(new PointF(test_points[i + 4].Pads[1].Location.X, pcb.Traces.LastPoint.Y)); pcb.Traces.ContinueWithVia(0.45, 0.3); pcb.Traces.ContinueTrace(test_points[i + 4].Pads[1]); } System.IO.File.WriteAllText("Atemga328_breakout.kicad_pcb", pcb.ToString()); KiCad.PogoPinAdapter pga = new KiCad.PogoPinAdapter(pcb); pga.AddLatch(lines[0]); pga.AddLatch(lines[2]); foreach (var tp in test_points) { pga.AddPads(tp); } // Try to change this for true and see the bottom layer PCB created. pga.Generate("atmega_programmer", KiCad.PogoPinAdapter.BottomMode.PCB_connect_direct); }
public static void Create() { KiCad.PCB pcb = new KiCad.PCB(); var VCC = pcb.Nets.AddNet(1, "VCC"); var GND = pcb.Nets.AddNet(2, "GND"); var ic = pcb.Components.AddComponent("Package_DIP", "DIP-8_W7.62mm", "IC555"); var r1 = pcb.Components.AddComponent("Resistor_THT", "R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal", "R1"); var r2 = pcb.Components.AddComponent("Resistor_THT", "R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal", "R2"); var r3 = pcb.Components.AddComponent("Resistor_THT", "R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal", "R3"); var c1 = pcb.Components.AddComponent("Capacitor_THT", "CP_Radial_D5.0mm_P2.50mm", "C1"); var c2 = pcb.Components.AddComponent("Capacitor_THT", "C_Disc_D3.0mm_W1.6mm_P2.50mm", "C2"); var led = pcb.Components.AddComponent("LED_THT", "LED_D5.0mm", "LED1"); var power = pcb.Components.AddComponent("Connector_PinHeader_2.54mm", "PinHeader_1x02_P2.54mm_Horizontal", "PWR"); PointF start = new PointF(corner_r, 0); pcb.Edge.AddLine(start, new PointF(size.Width - corner_r, 0)); pcb.Edge.ContinueArc(3, -90); pcb.Edge.ContinueLine(new PointF(size.Width, size.Height - corner_r)); pcb.Edge.ContinueArc(3, -90); pcb.Edge.ContinueLine(new PointF(corner_r, size.Height)); pcb.Edge.ContinueArc(3, -90); pcb.Edge.ContinueLine(new PointF(0, corner_r)); pcb.Edge.ContinueArc(3, -90); pcb.Edge.ContinueLine(start); ic.Location = new PointF(6, 12); r1.Location = new PointF(16.8f, 14.5f); r1.Angle = 90; r2.Location = new PointF(16.8f, 24.5f); r2.Angle = 90; c1.Angle = 180; c1.Location = new PointF(13.5f, 24.5f); c2.Location = new PointF(5.5f, 22.86f); r3.Angle = 90; r3.Location = new PointF(2, 16.86f); led.Angle = 180; led.Location = new PointF(8.3f, 5.5f); power.Angle = 270; power.Location = new PointF(8, 26); ic.Pads[4].Net = ic.Pads[8].Net = r1.Pads[2].Net = power.Pads[1].Net = VCC; ic.Pads[1].Net = led.Pads[1].Net = c1.Pads[2].Net = c2.Pads[1].Net = power.Pads[2].Net = GND; pcb.Traces.SetTraceStart(ic.Pads[3]); pcb.Traces.ContinueTrace(r3.Pads[1]); pcb.Traces.SetTraceStart(r3.Pads[2]); pcb.Traces.ContinueTrace(led.Pads[2]); pcb.Traces.SetTraceStart(ic.Pads[7]); pcb.Traces.ContinueTrace(r1.Pads[1]); pcb.Traces.ContinueTrace(r2.Pads[2]); pcb.Traces.SetTraceStart(c1.Pads[1]); pcb.Traces.ContinueTrace(r2.Pads[1]); pcb.Traces.ContinueTrace(0, -4); pcb.Traces.ContinueTrace(ic.Pads[6]); pcb.Traces.ContinueTrace(ic.Pads[2]); pcb.Traces.SetTraceStart(ic.Pads[5]); pcb.Traces.ContinueTrace(c2.Pads[2]); var zone_vcc = pcb.Zones.AddZone(VCC, true, pcb.Bounds); var zone_gnd = pcb.Zones.AddZone(GND, false, pcb.Bounds); pcb.FSilk.AddText("+", power.Pads[1].Location + new SizeF(3, 2.5f)); pcb.FSilk.AddText("-", power.Pads[2].Location + new SizeF(-3, 2.5f)); pcb.MoveAll(new SizeF(100, 100)); File.WriteAllText("Blinky555.kicad_pcb", pcb.ToString()); }
public static void Create() { KiCad.PCB pcb = new KiCad.PCB(); var GND = pcb.Nets.AddNet(1, "GND"); var GCC = pcb.Nets.AddNet(2, "VCC"); var center = new PointF(0, 0); pcb.Edge.AddArc(center, new PointF(-out_r, 0), 180); pcb.Edge.AddArc(center, new PointF(-in_r, 0), 180); pcb.Edge.AddLine(in_r, 0, out_r, 0); pcb.Edge.AddLine(-in_r, 0, -out_r, 0); int slices = (int)Math.Floor((out_r - in_r - 2) / 5); float interval = (out_r - in_r - 2) / slices; for (float distance = in_r + 1; distance < out_r; distance += interval) { pcb.FSilk.AddArc(center, center + new SizeF(-distance, 0), 180); } int led_counter = 0; List <KiCad.Components.Component> firsts = new List <KiCad.Components.Component>(); for (float distance = in_r + 1 + interval / 2; distance < out_r; distance += interval) { bool first = true; for (float angle = 12; angle < 170; angle += (const_angle ? d_angle : (d_distance * 360f) / (2f * (float)Math.PI * distance))) { var led = pcb.Components.AddComponent("LED_THT", "LED_D5.0mm", "LED" + (++led_counter).ToString(), KiCad.Utils.PointOnCircle(center, angle, distance - 1.27), angle); led.Pads[2].Net = GND; if (first) { pcb.Traces.SetTraceStart(led.Pads[1], 0.3); firsts.Add(led); first = false; } else { pcb.Traces.ContinueTraceWithArcToAngle(center, KiCad.Utils.AngleOf(center, led.Pads[1].Location)); } } } var power = pcb.Components.AddComponent("Connector_PinHeader_2.54mm", "PinHeader_1x" + (firsts.Count + 1).ToString().PadLeft(2, '0') + "_P2.54mm_Horizontal", "PWR"); power.Location = new PointF((float)((out_r + in_r) / 2 + firsts.Count * 2.54 / 2), -2); power.Angle = 270; for (int i = 0; i < firsts.Count; i++) { pcb.Traces.DrawTrace(firsts[i].Pads[1], power.Pads[firsts.Count + 1 - i], 0.3); } var zone = pcb.Zones.AddZone(GND, false); zone.Points.Add(new PointF(-out_r, 0)); zone.Points.Add(new PointF(-out_r, -out_r)); zone.Points.Add(new PointF(out_r, -out_r)); zone.Points.Add(new PointF(out_r, 0)); pcb.MoveAll(new SizeF(100 + out_r, 100 + out_r)); File.WriteAllText("rainbow.kicad_pcb", pcb.ToString()); }