Solid State
-----------

.. jupyter-execute::
    :hide-code:

    %config InlineBackend.figure_format = 'svg'
    import schemdraw
    from schemdraw import elements as elm


S-R Latch (Transistors)
^^^^^^^^^^^^^^^^^^^^^^^

.. jupyter-execute::
    :code-below:

    d = schemdraw.Drawing()
    Q1 = d.add(elm.BJT_NPN_C, reverse=True, lftlabel='Q1')
    Q2 = d.add(elm.BJT_NPN_C, xy=[d.unit*2, 0], label='Q2')
    d.add(elm.LINE, xy=Q1.collector, d='up', l=d.unit/2)

    R1 = d.add(elm.RES, d='up', label='R1', move_cur=False)
    d.add(elm.DOT, lftlabel='V1')
    d.add(elm.RES, d='right', botlabel='R3', l=d.unit*.75)
    d.add(elm.DOT)
    d.push()
    d.add(elm.LINE, d='up', l=d.unit/8)
    d.add(elm.DOT_OPEN, label='Set')
    d.pop()
    d.add(elm.LINE, to=Q2.base)

    d.add(elm.LINE, xy=Q2.collector, d='up', l=d.unit/2)
    d.add(elm.DOT, rgtlabel='V2')
    R2 = d.add(elm.RES, d='up', botlabel='R2', move_cur=False)
    d.add(elm.RES, d='left', botlabel='R4', l=d.unit*.75)
    d.add(elm.DOT)
    d.push()
    d.add(elm.LINE, d='up', l=d.unit/8)
    d.add(elm.DOT_OPEN, label='Reset')
    d.pop()
    d.add(elm.LINE, to=Q1.base)

    d.add(elm.LINE, xy=Q1.emitter, d='down', l=d.unit/4)
    BOT = d.add(elm.LINE, d='right', tox=Q2.emitter)
    d.add(elm.LINE, to=Q2.emitter)
    d.add(elm.DOT, xy=BOT.center)
    d.add(elm.GND, xy=BOT.center)

    TOP = d.add(elm.LINE, endpts=[R1.end,R2.end])
    d.add(elm.DOT, xy=TOP.center)
    d.add(elm.LINE, xy=TOP.center, d='up', l=d.unit/8, rgtlabel='Vcc')
    d.draw()


741 Opamp Internal Schematic
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. jupyter-execute::
    :code-below:

    d = schemdraw.Drawing(fontsize=12, unit=2.5)
    Q1 = d.add(elm.BjtNpn(label='Q1', lftlabel='+IN'))
    Q3 = d.add(elm.BjtPnp('l', xy=Q1.emitter, anchor='emitter', lftlabel='Q3', flip=True))
    d.add(elm.Line('d', xy=Q3.collector))
    d.add(elm.Dot)
    d.push()
    d.add(elm.Line('r', l=d.unit/4))
    Q7 = d.add(elm.BjtNpn(anchor='base', label='Q7'))
    d.pop()
    d.add(elm.Line('d', l=d.unit*1.25))
    Q5 = d.add(elm.BjtNpn('l', anchor='collector', flip=True, lftlabel='Q5'))
    d.add(elm.Line('l', xy=Q5.emitter, l=d.unit/2, lftlabel='OFST\nNULL', move_cur=False))
    d.add(elm.Resistor('d', xy=Q5.emitter, label='R1\n1K'))
    d.add(elm.Line('r', l=d.unit*.75))
    d.add(elm.Dot)
    R3 = d.add(elm.Resistor('u', label='R3\n50K'))
    d.add(elm.Line(toy=Q5.base))
    d.add(elm.Dot)
    d.push()
    d.add(elm.Line('l', to=Q5.base))
    d.add(elm.Line('d', xy=Q7.emitter, toy=Q5.base))
    d.add(elm.DOT)
    d.pop()
    d.add(elm.Line('right', l=d.unit/4))
    Q6 = d.add(elm.BjtNpn(anchor='base', label='Q6'))
    d.add(elm.Line(xy=Q6.emitter, l=d.unit/3, rgtlabel='\nOFST\nNULL', move_cur=False))
    d.add(elm.Resistor('d', xy=Q6.emitter, label='R2\n1K'))
    d.add(elm.Dot)
    
    d.add(elm.Line('u', xy=Q6.collector, toy=Q3.collector))
    Q4 = d.add(elm.BjtPnp('r', anchor='collector', label='Q4'))
    d.add(elm.Line('l', xy=Q4.base, tox=Q3.base))
    d.add(elm.Line('u', xy=Q4.emitter, toy=Q1.emitter))
    Q2 = d.add(elm.BjtNpn('l', anchor='emitter', flip=True, lftlabel='Q2', rgtlabel='$-$IN'))
    d.add(elm.Line('u', xy=Q2.collector, l=d.unit/3))
    d.add(elm.Dot)
    Q8 = d.add(elm.BjtPnp('l', lftlabel='Q8', anchor='base', flip=True))
    d.add(elm.Line('d', xy=Q8.collector, toy=Q2.collector))
    d.add(elm.Dot)
    d.add(elm.Line('l', xy=Q2.collector, tox=Q1.collector))
    d.add(elm.Line('u', xy=Q8.emitter, l=d.unit/4))
    top = d.add(elm.Line('l', tox=Q7.collector))
    d.add(elm.Line('d', toy=Q7.collector))

    d.add(elm.Line('r', xy=top.start, l=d.unit*2))
    d.add(elm.Line('d', l=d.unit/4))
    Q9 = d.add(elm.BjtPnp('r', anchor='emitter', label='Q9', lblofst=-.1))
    d.add(elm.Line('l', xy=Q9.base, tox=Q8.base))
    d.add(elm.Dot(xy=Q4.base))
    d.add(elm.Line('d', xy=Q4.base, l=d.unit/2))
    d.add(elm.Line('r', tox=Q9.collector))
    d.add(elm.Dot)
    d.add(elm.Line('d', xy=Q9.collector, toy=Q6.collector))
    Q10 = d.add(elm.BjtNpn('l', anchor='collector', flip=True, lftlabel='Q10'))
    d.add(elm.Resistor('d', xy=Q10.emitter, toy=R3.start, label='R4\n5K'))
    d.add(elm.Dot)

    Q11 = d.add(elm.BjtNpn('r', xy=Q10.base, anchor='base', label='Q11'))
    d.add(elm.Dot(xy=Q11.base))
    d.add(elm.Line('u', l=d.unit/2))
    d.add(elm.Line('r', tox=Q11.collector))
    d.add(elm.Dot)
    d.add(elm.Line('d', xy=Q11.emitter, toy=R3.start))
    d.add(elm.Dot)
    d.add(elm.Line('u', xy=Q11.collector, l=d.unit*2))
    d.add(elm.Resistor(toy=Q9.collector, botlabel='R5\n39K'))
    Q12 = d.add(elm.BjtPnp('l', anchor='collector', flip=True, lftlabel='Q12', lblofst=-.1))
    d.add(elm.Line('u', xy=Q12.emitter, l=d.unit/4))
    d.add(elm.Dot)
    d.add(elm.Line('l', tox=Q9.emitter))
    d.add(elm.Dot)
    d.add(elm.Line('r', xy=Q12.base, l=d.unit/4))
    d.add(elm.Dot)
    d.push()
    d.add(elm.Line('d', toy=Q12.collector))
    d.add(elm.Line('l', tox=Q12.collector))
    d.add(elm.Dot)
    d.pop()
    d.add(elm.Line('r', l=d.unit*1.5))
    Q13 = d.add(elm.BjtPnp(anchor='base', label='Q13'))
    d.add(elm.Line('u', l=d.unit/4))
    d.add(elm.Dot)
    d.add(elm.Line('l', tox=Q12.emitter))
    K = d.add(elm.Line('d', xy=Q13.collector, l=d.unit/5))
    d.add(elm.Dot)
    d.add(elm.Line('d'))
    Q16 = d.add(elm.BjtNpn('r', anchor='collector', label='Q16', lblofst=-.1))
    d.add(elm.Line('l', xy=Q16.base, l=d.unit/3))
    d.add(elm.Dot)
    R7 = d.add(elm.Resistor('u', toy=K.end, label='R7\n4.5K'))
    d.add(elm.Dot)
    d.add(elm.Line('r', tox=Q13.collector, move_cur=False))
    R8 = d.add(elm.Resistor('d', xy=R7.start, label='R8\n7.5K'))
    d.add(elm.Dot)
    d.add(elm.Line('r', tox=Q16.emitter))
    J = d.add(elm.Dot)
    d.add(elm.Line('u', toy=Q16.emitter))
    Q15 = d.add(elm.BjtNpn('r', anchor='collector', xy=R8.end, label='Q15'))
    d.add(elm.Line('l', xy=Q15.base, l=d.unit/2))
    d.add(elm.Dot)
    C1 = d.add(elm.Capacitor('u', toy=R7.end, label='C1\n30pF'))
    d.add(elm.Line('r', tox=Q13.collector))
    d.add(elm.Line('l', xy=C1.start, tox=Q6.collector))
    d.add(elm.Dot)
    d.add(elm.Line('d', xy=J.center, l=d.unit/2))
    Q19 = d.add(elm.BjtNpn('r', anchor='collector', label='Q19'))
    d.add(elm.Line('l', xy=Q19.base, tox=Q15.emitter))
    d.add(elm.Dot)
    d.add(elm.Line('u', toy=Q15.emitter, move_cur=False))
    d.add(elm.Line('d', xy=Q19.emitter, l=d.unit/4))
    d.add(elm.Dot)
    d.add(elm.Line('left'))
    Q22 = d.add(elm.BjtNpn('l', anchor='base', flip=True, lftlabel='Q22'))
    d.add(elm.Line('u', xy=Q22.collector, toy=Q15.base))
    d.add(elm.Dot)
    d.add(elm.Line('d', xy=Q22.emitter, toy=R3.start))
    d.add(elm.Dot)
    d.add(elm.Line('l', tox=R3.start, move_cur=False))
    d.add(elm.Line('r', tox=Q15.emitter))
    d.add(elm.Dot)
    d.push()
    d.add(elm.Resistor('u', label='R12\n50K'))
    d.add(elm.Line(toy=Q19.base))
    d.pop()
    d.add(elm.Line(tox=Q19.emitter))
    d.add(elm.Dot)
    R11 = d.add(elm.Resistor('u', label='R11\n50'))
    d.add(elm.Line(toy=Q19.emitter))

    d.add(elm.Line('u', xy=Q13.emitter, l=d.unit/4))
    d.add(elm.Line('r', l=d.unit*1.5))
    d.add(elm.Dot)
    d.add(elm.Line(l=d.unit/4, rgtlabel='V+', move_cur=False))
    d.add(elm.Line('d', l=d.unit*.75))
    Q14 = d.add(elm.BjtNpn('r', anchor='collector', label='Q14'))
    d.add(elm.Line('l', xy=Q14.base, l=d.unit/2))
    d.push()
    d.add(elm.Dot)
    d.add(elm.Line('d', l=d.unit/2))
    Q17 = d.add(elm.BjtNpn('l', anchor='collector', flip=True, lftlabel='Q17', lblofst=-.1))
    d.add(elm.Line('r', xy=Q17.base, tox=Q14.emitter))
    d.add(elm.Dot)
    J = d.add(elm.Line('u', toy=Q14.emitter))
    d.pop()
    d.add(elm.Line(tox=Q13.collector))
    d.add(elm.Dot)
    d.add(elm.Resistor('d', xy=J.start, label='R9\n25'))
    d.add(elm.Dot)
    d.push()
    d.add(elm.Line('l', tox=Q17.emitter))
    d.add(elm.Line('u', toy=Q17.emitter))
    d.pop()
    d.add(elm.Line('d', l=d.unit/4))
    d.add(elm.Dot)
    d.add(elm.Line('r', l=d.unit/4, rgtlabel='OUT', move_cur=False))
    d.add(elm.Resistor('d', label='R10\n50'))
    Q20 = d.add(elm.BjtPnp(d='r', anchor='emitter', label='Q20'))
    d.add(elm.Line('l', xy=Q20.base, l=d.unit/2))
    d.add(elm.Line('u', toy=Q15.collector))
    d.add(elm.Line('l', tox=Q15.collector))
    d.add(elm.Dot)
    d.add(elm.Line('d', xy=Q20.collector, toy=R3.start))
    d.add(elm.Dot)
    d.add(elm.Line('r', l=d.unit/4, rgtlabel='V-', move_cur=False))
    d.add(elm.Line('l', tox=R11.start))
    d.draw()
