Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from skidl import *
- std_footprint = "_0805_2012Metric_Pad1.15x1.40mm_HandSolder"
- baseVoltage = 3.3
- gnd = Net('GND')
- vdd = Net('VDD')
- def decouple(pin, v="100u", footprint='C' + std_footprint):
- c = Part("Device",'C', value=v,footprint=footprint)
- c.ref = "C."+pin.part.ref + "." + pin.num
- c[1] += pin
- c[2] += gnd
- def connect2(pin1,pin2):
- if pin1.name in ["GND","VDD"]:
- n = Net.get(pin1.name)
- else:
- n = Net(pin1.name)
- n += pin1
- n += pin2
- def connect2part(part,pin1,pin2):
- connect2(pin1, part[1])
- connect2(pin2, part[2])
- def pullup(pin, r="1k", footprint='R' + std_footprint):
- return connect2part(Part("Device",'R', value=r,footprint=footprint),vdd,pin)
- def pulldown(pin, r="1k", footprint='R' + std_footprint):
- return connect2part(Part("Device",'R', value=r,footprint=footprint),gnd,pin)
- def connectAll(part, name, net, cb=lambda none:none):
- if part[name]:
- for pin in part[name]:
- pin += net
- cb(pin)
- def createPart(part, analog=False):
- connectAll(part, "VDD", vdd, decouple)
- connectAll(part, "VSS", gnd)
- connectAll(part, "GND", gnd)
- if analog:
- connectAll(part, "VDDA", vdd, lambda d: decouple(d,v="1u"))
- connectAll(part, "VSSA", gnd)
- return part
- def findConnect(pin,part):
- if part[pin.name]:
- net = Net(pin.name)
- net += pin
- net += part[pin.name]
- def connectSPI(master, slave, CS):
- connectPins(master, ["SCK","MISO","MOSI", CS.name], slave, ["SCK","MISO","MOSI", "CS"])
- def connectPins(part1, signals1, part2, signals2):
- for i, j in zip(signals1,signals2):
- n = Net(i)
- n += part1[i]
- n += part2[j]
- def bme280(type="SPI"):
- b = createPart(Part("Sensor", "BME280", footprint="Bosch_LGA-8_3x3mm_P0.8mm_ClockwisePinNumbering"))
- if type == "SPI":
- b.SDI.name = "MOSI"
- b.SDO.name = "MISO"
- b.CSB.name = "CS"
- return b
- def roundResistor(r, series=""):
- return int(round(r))
- def ledResistor(drivePin, I=20,Vf=1.3, V=baseVoltage, library="LED_SMD", footprint="LED_0603_1608Metric"):
- r=(V-Vf)/I*1000
- led = Part("Device", "LED", footprint=footprint)
- pulldown(led.K,roundResistor(r))
- connect2(drivePin, led.A)
- return led
- #createPart connects all GND and VCC pins and puts 100nF on each VCC Pin
- mcu = createPart(Part("MCU_ST_STM32F1", "STM32F103C8Tx", footprint="Package_QFP:LQFP-48_7x7mm_P0.5mm"), True)
- #rename Pins for SPI use
- mcu.PA5.name = "SCK"
- mcu.PA6.name = "MISO"
- mcu.PA7.name = "MOSI"
- #custom part, renames Pins for SPI and uses createPart
- bme = bme280("SPI")
- #Connects all SPI signals
- connectSPI(mcu,bme,CS=mcu.PA4)
- #add Pullup to Pin
- pullup(mcu.PA8, r="1k")
- #add LEDs and series resistor
- ledResistor(mcu.PA3, I=10, Vf=1.4)
- ledResistor(mcu.PA2, I=20, footprint="LED_0805_2012Metric")
- generate_netlist()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement