Integrated Circuits

555 LED Blinker Circuit

Using the Ic class to define a custom integrated circuit.

../_images/ic_1_0.svg
d = schemdraw.Drawing()
IC555def = elm.Ic(pins=[elm.IcPin(name='TRG', side='left', pin='2'),
                        elm.IcPin(name='THR', side='left', pin='6'),
                        elm.IcPin(name='DIS', side='left', pin='7'),
                        elm.IcPin(name='CTL', side='right', pin='5'),
                        elm.IcPin(name='OUT', side='right', pin='3'),
                        elm.IcPin(name='RST', side='top', pin='4'),
                        elm.IcPin(name='Vcc', side='top', pin='8'),
                        elm.IcPin(name='GND', side='bot', pin='1'),],
                   edgepadW=.5,
                   edgepadH=1,
                   pinspacing=2,
                   leadlen=1,
                   label='555')
T = d.add(IC555def)
BOT = d.add(elm.Ground(xy=T.GND))
d.add(elm.Dot)
d.add(elm.Resistor(endpts=[T.DIS, T.THR], label='Rb'))
d.add(elm.Resistor('u', xy=T.DIS, label='Ra', rgtlabel='+Vcc'))
d.add(elm.Line(endpts=[T.THR, T.TRG]))
d.add(elm.Capacitor('d', xy=T.TRG, toy=BOT.start, label='C', l=d.unit/2))
d.add(elm.Line('r', tox=BOT.start))
d.add(elm.Capacitor('d', xy=T.CTL, toy=BOT.start, botlabel='.01$\mu$F'))
d.add(elm.Dot(xy=T.DIS))
d.add(elm.Dot(xy=T.THR))
d.add(elm.Dot(xy=T.TRG))
d.add(elm.Line(endpts=[T.RST,T.Vcc]))
d.add(elm.Dot)
d.add(elm.Line('u', l=d.unit/4, rgtlabel='+Vcc'))
d.add(elm.Resistor('r', xy=T.OUT, label='330'))
d.add(elm.LED(flip=True, d='down', toy=BOT.start))
d.add(elm.Line('l', tox=BOT.start))
d.draw()

Arduino Board

../_images/ic_2_0.svg
class Atmega328(elm.Ic):
    def __init__(self, *args, **kwargs):
        pins=[elm.IcPin(name='PD0', pin='2', side='r', slot='1/22'),
              elm.IcPin(name='PD1', pin='3', side='r', slot='2/22'),
              elm.IcPin(name='PD2', pin='4', side='r', slot='3/22'),
              elm.IcPin(name='PD3', pin='5', side='r', slot='4/22'),
              elm.IcPin(name='PD4', pin='6', side='r', slot='5/22'),
              elm.IcPin(name='PD5', pin='11', side='r', slot='6/22'),
              elm.IcPin(name='PD6', pin='12', side='r', slot='7/22'),
              elm.IcPin(name='PD7', pin='13', side='r', slot='8/22'),
              elm.IcPin(name='PC0', pin='23', side='r', slot='10/22'),
              elm.IcPin(name='PC1', pin='24', side='r', slot='11/22'),
              elm.IcPin(name='PC2', pin='25', side='r', slot='12/22'),
              elm.IcPin(name='PC3', pin='26', side='r', slot='13/22'),
              elm.IcPin(name='PC4', pin='27', side='r', slot='14/22'),
              elm.IcPin(name='PC5', pin='28', side='r', slot='15/22'),
              elm.IcPin(name='PB0', pin='14', side='r', slot='17/22'),
              elm.IcPin(name='PB1', pin='15', side='r', slot='18/22'),
              elm.IcPin(name='PB2', pin='16', side='r', slot='19/22'),
              elm.IcPin(name='PB3', pin='17', side='r', slot='20/22'),
              elm.IcPin(name='PB4', pin='18', side='r', slot='21/22'),
              elm.IcPin(name='PB5', pin='19', side='r', slot='22/22'),

              elm.IcPin(name='RESET', side='l', slot='22/22', invert=True, pin='1'),
              elm.IcPin(name='XTAL2', side='l', slot='19/22', pin='10'),
              elm.IcPin(name='XTAL1', side='l', slot='17/22', pin='9'),
              elm.IcPin(name='AREF', side='l', slot='15/22', pin='21'),
              elm.IcPin(name='AVCC', side='l', slot='14/22', pin='20'),
              elm.IcPin(name='AGND', side='l', slot='13/22', pin='22'),
              elm.IcPin(name='VCC', side='l', slot='11/22', pin='7'),
              elm.IcPin(name='GND', side='l', slot='10/22', pin='8')]
        super().__init__(pins=pins, w=5, plblofst=.05, botlabel='ATMEGA328', **kwargs)


d = schemdraw.Drawing(fontsize=11, inches_per_unit=.4)
Q1 = d.add(Atmega328())
JP4 = d.add(elm.Header(rows=10, shownumber=True, flip=True, at=[Q1.PB5[0]+4, Q1.PB5[1]+1], anchor='p6', label='JP4', fontsize=10,
                       pinsright=['D8', 'D9', 'D10', 'D11', 'D12', 'D13', '', '', '', ''], pinalignright='center'))
JP3 = d.add(elm.Header(rows=6, shownumber=True, flip=True, at=[Q1.PC5[0]+4, Q1.PC5[1]], anchor='p6', label='JP3', fontsize=10,
                       pinsright=['A0', 'A1', 'A2', 'A3', 'A4', 'A5'], pinalignright='center'))

JP2 = d.add(elm.Header(rows=8, shownumber=True, flip=True, at=[Q1.PD7[0]+3, Q1.PD7[1]], anchor='p8', label='JP2', fontsize=10,
                       pinsright=['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7'], pinalignright='center'))

d.add(elm.OrthoLines(at=Q1.PB5, to=JP4.p6, n=6))
d.add(elm.OrthoLines(at=Q1.PC5, to=JP3.p6, n=6))
d.add(elm.OrthoLines(at=Q1.PD7, to=JP2.p8, n=8))

d.add(elm.Line('l', at=JP4.p7, l=.9, lftlabel='GND'))
d.add(elm.Line('l', at=JP4.p8, l=.9, lftlabel='AREF'))
d.add(elm.Line('l', at=JP4.p9, l=.9, lftlabel='AD4/SDA'))
d.add(elm.Line('l', at=JP4.p10, l=.9, lftlabel='AD5/SCL'))

JP1 = d.add(elm.Header('r', at=[Q1.PD0[0]+4, Q1.PD0[1]-2], rows=6, anchor='p1', shownumber=True,
                       pinsright=['VCC', 'RXD', 'TXD', 'DTR', 'RTS', 'GND'], pinalignright='center'))
d.add(elm.Line('l', at=JP1.p1, l=d.unit/2))
d.add(elm.Vdd(label='+5V'))
d.add(elm.Line('l', at=JP1.p2, l=d.unit))
d.add(elm.Line('u', toy=Q1.PD0))
d.add(elm.Dot)
d.add(elm.Line('l', at=JP1.p3, l=d.unit+0.6))
d.add(elm.Line('u', toy=Q1.PD1))
d.add(elm.Dot)
d.add(elm.Line('l', at=JP1.p6, l=d.unit/2))
d.add(elm.Ground)

d.add(elm.Line('l', at=Q1.XTAL2, l=d.unit*2))
d.add(elm.Dot)
d.push()
d.add(elm.Capacitor('l', zoom=.75, l=d.unit/2))
d.add(elm.Line('d', toy=Q1.XTAL1))
d.add(elm.Dot)
d.add(elm.Ground)
d.add(elm.Capacitor('r', zoom=.75, l=d.unit/2))
d.add(elm.Dot)
d.pop()
d.add(elm.Crystal('d', botlabel='16MHz', toy=Q1.XTAL1))
d.add(elm.Line('r', tox=Q1.XTAL1))

d.add(elm.Line('l', at=Q1.AREF, l=d.unit/3, lftlabel='AREF'))
d.add(elm.Line('l', at=Q1.AVCC, l=1.5*d.unit))
d.add(elm.Vdd(label='+5V'))
d.add(elm.Dot)
d.add(elm.Line('d', toy=Q1.VCC))
d.add(elm.Dot)
d.add(elm.Line('r', tox=Q1.VCC, move_cur=False))
d.add(elm.Capacitor('d', label='100n'))
GND = d.add(elm.Ground)

d.add(elm.Line('l', at=Q1.AGND))
d.add(elm.Line('d', toy=Q1.GND))
d.add(elm.Dot)
d.add(elm.Line('r', tox=Q1.GND, move_cur=False))
d.add(elm.Line('d', toy=GND.xy))
d.add(elm.Line('l', tox=GND.xy))
d.add(elm.Dot)

d.add(elm.Line('l', at=Q1.RESET))
d.add(elm.Dot)
d.push()
d.add(elm.RBox('u', label='10K'))
d.add(elm.Vdd(label='+5V'))
d.pop()
d.add(elm.Line('l'))
d.push()
d.add(elm.Dot)
RST = d.add(elm.Button('up', label='Reset'))
d.add(elm.Line('l', l=d.unit/2))
d.add(elm.Ground)
d.pop()

d.add(elm.Capacitor('l', at=JP1.p4, botlabel='100n'))
d.add(elm.Line('l', tox=RST.start[0]-2))
d.add(elm.Line('u', toy=Q1.RESET))
d.add(elm.Line('r', tox=RST.start))

d.draw()