User manual

105 106
12.3 OLED und Transistor in Emitterschaltung
Die Aufnahme einer Kennlinie am Beispiel eines Transistors. Wichtig: Der Transistor wird hier mit der Spannung
des D/A-Umsetzers angesteuert, die über den Widerstand zur Basis geleitet wird. Er bestimmt schließlich den
Stromuss in die Basis. Der Transistor verstärkt den Strom durch die Basis zum Emitter (je nach Typ z.B.100x)
und bestimmt damit den Strom der zwischen Emitter und Kollektor ießt.
Das Programm zeigt die Kennlinie, wie bei einem Oszilloskop, als fortlaufende Kurve. Zusätzlich kann auch eine
stehende Darstellung implementiert werden. (Aufgabe für den Leser!)
+
-
9V
1A
BC817
B
E
C
npn
45V
0,8A
B
SCLS DA
+9V
A0
A1
Tx
Rx
PD2
SCLKMOSI
PD3
PD 6
PD 4
PD 5
PD 7
A7
A3
A2
A6
NANO
to
Br ick`R`
3,3V 5V
USB
B0
SS
MISC
B1
I²C
I²C OLED 64x48
SCL
SDA
SCL
SDA
+9V
Adr:8x,Xx
+9V
I²C 12BIT DAC
SCL
SDA
SCL
SDA
+9V
Adr:18-1F
P1
123
P2
P3
Vout
ab
Imax 20mA
// DE_39 Anwendungen - Transistorkennlinie
... wie zuvor
//
char advalbuf[64]; // loop
void setup() {
Wire.begin(); // I2C Initialisierung
i2c_oled_initall(i2coledssd); // OLED Initialsierung
for (int i=0; i<64; i++) advalbuf[i]=47; // Default fuer Buffer
}
void loop() { // Schleife
// 64x48 Pixel OLED
static int cxx = 0; // Ringbuffer
static int daval = 0; // fuer Ausgabe
int ana0 = analogRead(A0); // Einlesen A/D-Umsetzer
char buffer[40]; // ASCII Textbuffer
disp_buffer_clear(COLOR_BLACK); //
double p1 = (ana0*5000.0)/1023.0;
int y1 =0; // Y Position
sprintf(buffer, „A0=%d.%03dV“,(int)p1/1000,(int)p1%1000);
y1 = 47 - (p1 * 30.0)/5000.0; // 5V Max -> 30 pixel
advalbuf[cxx++] = y1; // merken 0..4xx V +-128
if (cxx >63) cxx =0; // Ringbuffer 0..63
disp_print_xy_lcd(2, 0, (unsigned char *)buffer, COLOR_WHITE, 0);
int i=0; // Spalte
int yold = advalbuf[(cxx+1)%64];;
for (i=0; i<63; i++) { // ALles ausgeben
y1 =advalbuf[(cxx+1+i)%64];
disp_line_lcd (i, yold, i, y1, COLOR_WHITE);
yold = y1;
}
disp_lcd_frombuffer();
// DA Umsetzer Werte ausgeben Saegezahn !
i2c_da_write_command(i2cdasel1,daval);
i2c_da_write_command(i2cdasel2,daval);
i2c_da_write_command(i2cdasel3,daval);
daval += (4096/40); // Kennlinie auf einen Schirm
if (daval > 4095) daval = 0;
}
Was passiert? Auf der OLED sollte die typische Transistorkennlinie in Emitterschaltung erkennbar
sein, die ebenfalls durchscrollt.