# | ? | TYPE | SYMBOL | CONNECTIONS | NOTE | DATASHEET |
1 | JFET N-CH | 0: GND 1: DRAIN 2: GATE 3: SOURCE |
V2 < V3 | J309, J310 | ||
2 | JFET P-CH | 0: GND 1: DRAIN 2: GATE 3: SOURCE |
V2 > V3 | MMBF5460 | ||
3 | MOSFET N-CH DEPLETION |
0: GND 1: - 2: - 3: - |
ID@UDS: + UGS: +/- RARELY USED |
CPC3980 | ||
4 | MOSFET P-CH DEPLETION |
0: GND 1: DRAIN 2: GATE 3: SOURCE |
ID@UDS: - UGS: +/- RARELY USED |
CSD25483F4 | ||
5 | MOSFET N-CH ENHANCEMENT |
0: GND 1: SOURCE 2: GATE 3: DRAIN |
ID@UDS: + UGS: + POWER AMPLIFIER |
IRF7842 | ||
6 | MOSFET P-CH ENHANCEMENT |
0: GND 1: DRAIN 2: GATE 3: SOURCE |
ID@UDS: - UGS: - POWER AMPLIFIER |
IRF7240 | ||
7 | BIPOLAR NPN | 0: GND 1: EMITTER 2: BASE 3: COLLECTOR |
Ibe > 0 |
BC849 BF199 |
||
8 | BIPOLAR PNP | 0: GND 1: COLLECTOR 2: BASE 3: EMITTER |
Ibe < 0 | BC859 |
# | ? | TYPE | SYMBOL | CONNECTIONS | NOTE | DATASHEET |
9 | DIODE SILICIUM (GERMANIUM) |
0: GND 1: ANODE 2: - 3: CATHODE |
V1 < V3 | 1N4148 | ||
1 0 |
DIODE SCHOTTKY |
0: GND 1: ANODE 2: - 3: CATHODE |
V1 < V3 | BAT43 | ||
1 1 |
ZENER DIODE |
0: GND 1: ANODE 2: - 3: CATHODE |
V1 < V3 V3 < 22V |
BZV85-C9V1 | ||
1 2 |
RESISTOR | 0: GND 1: LEAD1 2: - 3: LEAD2 |
R < 99 kΩ | MBE/SMA 0414 | ||
1 3 |
VOLTAGE DEPENDENT RESISTOR |
0: GND 1: LEAD1 2: - 3: LEAD2 |
V < 22V | SIOV-S05K11 |
/* ///////////////////////////////////////////////////////////// ARDUINO TRANSITOR CURVE TRACER "TANACHAI" https://www.changpuak.ch/electronics/Arduino-Shield-TANACHAI.php Software Version 3.1, 26.05.2016, Alexander C. Frank // ///////////////////////////////////////////////////////////*/ // GLOBAL LIMITS BY DESIGN // = GainDAC * GainOpamp * Reference, Millivolt const unsigned int MaxVoltA = 27034 ; const unsigned int MaxVoltB = 27034 ; unsigned int Voltage ; unsigned int Current ; float U ; float I ; // DAC PINs int CS = 11; int SCLK = 12; int SDAT = 13; int LOAD = 10; // USER INTERACTION char Buffy[10] ; int BuffyPointer ; byte byteRead ; char Command ; // ///////////////////////////////////////////////////////////// void UpdateDACA(unsigned int VoltageA) { unsigned int pointer = 0x8000; if (VoltageA > MaxVoltA) VoltageA = MaxVoltA; // NO NEED TO CHANGE , AS DAC's WITH LESS BITS IGNORE THE LSB's unsigned int DACA = (int)( VoltageA * pow(2, 12) / MaxVoltA ); DACA |= 0x1000; // GAIN = 2, DON'T SLEEP, Write to DACA digitalWrite(CS, LOW); for (int i=0; i < 16; i++) { if ((DACA & pointer) > 0) { digitalWrite(SDAT, HIGH); } else { digitalWrite(SDAT, LOW); } digitalWrite(SCLK, HIGH); digitalWrite(SCLK, LOW); pointer = pointer >> 1; } digitalWrite(CS, HIGH); digitalWrite(LOAD, LOW); digitalWrite(LOAD, HIGH); } // ///////////////////////////////////////////////////////////// void UpdateDACB(unsigned int VoltageB) { unsigned int pointer = 0x8000; if (VoltageB > MaxVoltB) VoltageB = MaxVoltB; // NO NEED TO CHANGE, AS DAC's WITH LESS BITS IGNORE THE LSB's unsigned int DACB = (int)( VoltageB * pow(2, 12) / MaxVoltB ); DACB |= 0x9000 ; // GAIN = 2, DON'T SLEEP, Write to DACB digitalWrite(CS, LOW); for (int i=0; i < 16; i++) { if ((DACB & pointer) > 0) { digitalWrite(SDAT, HIGH); } else { digitalWrite(SDAT, LOW); } digitalWrite(SCLK, HIGH); digitalWrite(SCLK, LOW); pointer = pointer >> 1; } digitalWrite(CS, HIGH); digitalWrite(LOAD, LOW); digitalWrite(LOAD, HIGH); } // ///////////////////////////////////////////////////////////// void Info() { Serial.println("\nARDUINO TRANSISTOR CURVE TRACER 'TANACHAI'"); Serial.println("V2.0, 09.05.2016, BY CHANGPUAK.CH"); } // ///////////////////////////////////////////////////////////// void MaiSaab() { Serial.println("\n\nYOUR COMMAND WAS NOT RECOGNISED."); Serial.println("PLEASE TRY AGAIN."); delay(99); } // ///////////////////////////////////////////////////////////// void ReadInput() { boolean ende = false ; BuffyPointer = 0; while ( ( Serial.available() ) || ( ende == false ) ) { byteRead = Serial.read(); if ( byteRead == 10 ){ ende = true ; Buffy[BuffyPointer] = '\n'; BuffyPointer++; } // 0..9, A..Z if (( byteRead > 47 ) & ( byteRead < 91)) { Buffy[BuffyPointer] = byteRead; BuffyPointer++; } } } // ///////////////////////////////////////////////////////////// unsigned int EvaluateBuffer() { unsigned int aux = 0 ; BuffyPointer = 1; while ( Buffy[BuffyPointer] != '\n' ) { aux = aux * 10 + Buffy[BuffyPointer] - 48 ; BuffyPointer++; } return aux ; } // ///////////////////////////////////////////////////////////// void setup() { Serial.begin(9600); pinMode(CS, OUTPUT); pinMode(SDAT, OUTPUT); pinMode(SCLK, OUTPUT); pinMode(LOAD, OUTPUT); digitalWrite(CS, HIGH); digitalWrite(SDAT, LOW); digitalWrite(SCLK, LOW); digitalWrite(LOAD, HIGH); } // ///////////////////////////////////////////////////////////// void loop() { ReadInput(); Command = Buffy[0]; switch (Command) { case 66 : // "B" SET BASE/GATE VOLTAGE Voltage = EvaluateBuffer() ; UpdateDACB(Voltage) ; break; case 67 : // "C" SET COLLECTOR/DRAIN VOLTAGE Voltage = EvaluateBuffer() ; UpdateDACA(Voltage) ; break; case 73 : // "I" READ VOLTAGE AT A0 // Serial.print("I="); Current = 0; for (int i=0; i<32; i++) { Current = Current + analogRead(A0); delay(1); } Serial.println(Current,DEC); break; case 63 : // "?" Info(); break; default: MaiSaab(); break; } } // ///////////////////////////////////////////////////////////// // END OF FILE. // /////////////////////////////////////////////////////////////