User manual

103 104
12.2 OLED und einfache Diodenkennlinie
Man kann auch die Kennlinie eines Bauteils aufnehmen. Hier eine ganz einfache Methode für den positiven
Teil der Kennlinie. Der Strom durch die Diode wird indirekt über den Spannungsabfall am Widerstand gemes-
sen. Die Spannung wird über den D/A-Umsetzer zugeführt. Man erkennt die typische nichtlinieare Kennline
der Diode in Durchlassrichtung. Diese Anordnung zur Messung kann man noch beliebig verfeinern. Mit einem
Offset bei der Masse der Diode an der Messtrecke lassen sich auch die negativen Anteile messen. Der Phantasie
sind hier keine Grenzen gesetzt. Der D/A-Umsetzer kann auch negative Spannungen erzeugen, wenn man die
Steckbrücken entsprechend setzt. Aber Vorsicht: der A/D-Umsetzer verträgt nur Spannungen von 0V bis +5V.
+
-
9V
1A
KA
Si Diode
1N414 8
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
C
C OLED 64x48
SCL
SDA
SCL
SDA
+9V
Adr:8x,Xx
+9V
C 12BIT DAC
SCL
SDA
SCL
SDA
+9V
Adr:18-1F
P1
123
P2
P3
Vout
ab
Imax 20mA
P3
0-5V
0-10V
+-10V
P1
+-5V
P2
0-20V
01
10
11
Adr.
Vout
JP1
DE_38
... wie vorher
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 Diodenkennlinie erkennbar
sein, die auch hier wieder durchscrollt.
Statt der Diode 1N4148 kann
man auch die Kennlinie von
LEDs verwenden (einfach
die Dual durchgehende LEDs
nehmen), die Nichtlinearität ist
wesentlich stärker ausgeprägt
und dadurch in der Kennlinie
deutlicher sichtbar.