예제 #1
0
 public override void stamp(Circuit sim)
 {
     sim.stampVoltageSource(lead_node[4], lead_node[0], voltSource1);
     sim.stampVoltageSource(lead_node[5], lead_node[1], voltSource2);
     sim.stampResistor(lead_node[2], lead_node[4], impedance);
     sim.stampResistor(lead_node[3], lead_node[5], impedance);
 }
예제 #2
0
 public override void stamp(Circuit sim)
 {
     if (waveform == WaveType.DC)
     {
         sim.stampVoltageSource(lead_node[0], lead_node[1], voltSource, getVoltage(sim));
     }
     else
     {
         sim.stampVoltageSource(lead_node[0], lead_node[1], voltSource);
     }
 }
예제 #3
0
		public override void stamp(Circuit sim) {
			// output pin
			sim.stampVoltageSource(0, lead_node[1], pins[1].voltSource);
			// attach Vi to R1 pin so its current is proportional to Vi
			sim.stampVoltageSource(lead_node[0], lead_node[4], pins[4].voltSource, 0);
			// attach 5V to R2 pin so we get a current going
			sim.stampVoltageSource(0, lead_node[5], pins[5].voltSource, 5);
			// put resistor across cap pins to give current somewhere to go
			// in case cap is not connected
			sim.stampResistor(lead_node[2], lead_node[3], cResistance);
			sim.stampNonLinear(lead_node[2]);
			sim.stampNonLinear(lead_node[3]);
		}
예제 #4
0
 public override void stamp(Circuit sim)
 {
     if (position == 0)
     {
         sim.stampVoltageSource(lead_node[0], lead_node[1], voltSource, 0);
     }
 }
예제 #5
0
        public override void step(Circuit sim)
        {
            bool v1 = lead_volt[0] > 2.5;
            bool v2 = lead_volt[1] > 2.5;

            if (v1 && !pins[0].value)
            {
                ff1 = true;
            }
            if (v2 && !pins[1].value)
            {
                ff2 = true;
            }
            if (ff1 && ff2)
            {
                ff1 = ff2 = false;
            }
            double @out = (ff1) ? 5 : (ff2) ? 0 : -1;

            // System.out.println(out + " " + v1 + " " + v2);
            if (@out != -1)
            {
                sim.stampVoltageSource(0, lead_node[2], pins[2].voltSource, @out);
            }
            else
            {
                // tie current through output pin to 0
                int vn = sim.nodeCount + pins[2].voltSource;
                sim.stampMatrix(vn, vn, 1);
            }
            pins[0].value = v1;
            pins[1].value = v2;
        }
예제 #6
0
 public override void stamp(Circuit sim)
 {
     if (position == 2)
     {
         return;                           // in center?
     }
     sim.stampVoltageSource(lead_node[0], lead_node[position + 1], voltSource, 0);
 }
예제 #7
0
        /*public override void getInfo(String[] arr) {
         *      arr[0] = (gain == 1) ? "CCII+" : "CCII-";
         *      arr[1] = "X,Y = " + getVoltageText(lead_volt[0]);
         *      arr[2] = "Z = " + getVoltageText(lead_volt[2]);
         *      arr[3] = "I = " + getCurrentText(pins[0].current);
         * }*/

        // boolean nonLinear() { return true; }
        public override void stamp(Circuit sim)
        {
            // X voltage = Y voltage
            sim.stampVoltageSource(0, lead_node[0], pins[0].voltSource);
            sim.stampVCVS(0, lead_node[1], 1, pins[0].voltSource);
            // Z current = gain * X current
            sim.stampCCCS(0, lead_node[2], pins[0].voltSource, gain);
        }
예제 #8
0
 public override void stamp(Circuit sim)
 {
     // stamp voltage divider to put ctl pin at 2/3 V
     sim.stampResistor(lead_node[N_VIN], lead_node[N_CTL], 5000);
     sim.stampResistor(lead_node[N_CTL], 0, 10000);
     // output pin
     sim.stampVoltageSource(0, lead_node[N_OUT], pins[N_OUT].voltSource);
     // discharge pin
     sim.stampNonLinear(lead_node[N_DIS]);
 }
예제 #9
0
        public override void stamp(Circuit sim)
        {
            double v = (position == 0) ? lowVoltage : highVoltage;

            if (isTernary)
            {
                v = position * 2.5;
            }
            sim.stampVoltageSource(0, lead_node[0], voltSource, v);
        }
예제 #10
0
 public override void stamp(Circuit sim)
 {
     for (int i = 0; i != getLeadCount(); i++)
     {
         Pin p = pins[i];
         if (p.output)
         {
             sim.stampVoltageSource(0, lead_node[i], p.voltSource);
         }
     }
 }
예제 #11
0
 public override void stamp(Circuit sim)
 {
     sim.stampVoltageSource(0, lead_node[0], voltSource);
 }
예제 #12
0
 public override void stamp(Circuit sim)
 {
     sim.stampVoltageSource(0, lead_node[3], voltSource);
     sim.stampNonLinear(lead_node[3]);
     sim.stampNonLinear(lead_node[1]);
 }