diff --git a/driver/examples/pegel/gnuplotscript.gp b/driver/examples/pegel/gnuplotscript.gp new file mode 100644 index 0000000..54829e1 --- /dev/null +++ b/driver/examples/pegel/gnuplotscript.gp @@ -0,0 +1,13 @@ +set margin 10,10 +unset key +set grid +set title '' +set xlabel 'U_{OUT} [V]' +set ylabel 'U_{IN} [V]' +set xrange [0:5] +set yrange [0:5] +set label at 5,5 ' [V] = 0' left +unset output +set terminal qt +unset output +plot "/tmp/tempfile0" using ($1*0.004888):($2*0.004888) binary format="%int16%int16" endian=big title ' [V] = 0' w l diff --git a/driver/examples/pegel/main.cpp b/driver/examples/pegel/main.cpp index 84e29b0..4a98e19 100644 --- a/driver/examples/pegel/main.cpp +++ b/driver/examples/pegel/main.cpp @@ -4,175 +4,40 @@ #include -void kennlinieErsterQuadrant() -{ - - B15F& drv = B15F::getInstance(); - PlottyFile pf; - - uint16_t ba[1024]; - uint16_t bb[1024]; - - const uint16_t sample_count = 1024; - const uint16_t delta = 1; - - const uint16_t u_gs_start = 440; - const uint16_t u_gs_delta = 20; - const uint16_t u_gs_end = 600; - - pf.setUnitX("V"); - pf.setUnitY("mA"); - pf.setUnitPara("V"); - pf.setDescX("U_{DS}"); - pf.setDescY("I_D"); - pf.setDescPara("U_{GS}"); - pf.setRefX(5); - pf.setRefY(50); - pf.setParaFirstCurve(u_gs_start); - pf.setParaStepWidth(u_gs_delta); - - uint8_t curve = 0; - - std::cout << "Erfasse Kennlinie erster Quadrant..." << std::endl << std::flush; - - for(uint16_t u_gs = u_gs_start; u_gs <= u_gs_end; u_gs += u_gs_delta) - { - drv.analogWrite1(u_gs); - - drv.analogSequence(0, &ba[0], 0, 1, &bb[0], 0, 0, delta, sample_count); - - for(uint16_t k = 0; k < sample_count; k++) - { - uint16_t i_d = ba[k] - bb[k]; - uint16_t u_ds = bb[k]; - pf.addDot(Dot(u_ds, i_d, curve)); - } - - std::cout << "\033[1K\r" << 1e2 * (u_gs - u_gs_start) / (u_gs_end - u_gs_start) << "%" << std::flush; - - curve++; - } - - std::cout << "\033[1K\r" << std::flush; - - // speichern und plotty starten - pf.writeToFile("test_plot"); - pf.startPlotty("test_plot"); -} - -void kennlinieZweiterQuadrant() -{ - B15F& drv = B15F::getInstance(); - PlottyFile pf; - - uint16_t ba[1024]; - uint16_t bb[1024]; - - const uint16_t sample_count = 1024; - const uint16_t delta = 1; - - const uint16_t u_gs_start = 300; - const uint16_t u_gs_delta = 25; - const uint16_t u_gs_end = 700; - - pf.setQuadrant(2); - pf.setUnitX("V"); - pf.setUnitY("mA"); - pf.setUnitPara("V"); - pf.setDescX("U_{GS}"); - pf.setDescY("I_D"); - pf.setDescPara("U_{DS}"); - pf.setRefX(5); - pf.setRefY(50); - pf.setParaFirstCurve(u_gs_start); - pf.setParaStepWidth(u_gs_delta); - - uint8_t curve = 0; - - std::cout << "Erfasse Kennlinie zweiter Quadrant..." << std::endl << std::flush; - - for(uint16_t u_gs = u_gs_start; u_gs <= u_gs_end; u_gs += u_gs_delta) - { - drv.analogWrite1(u_gs); - - drv.analogSequence(0, &ba[0], 0, 1, &bb[0], 0, 0, delta, sample_count); - - curve = 0; - for(uint16_t k = 0; k < sample_count; k++) - { - if(ba[k] > bb[k] && bb[k] % 50 == 0 && bb[k] != 0) - { - uint16_t i_d = ba[k] - bb[k]; - pf.addDot(Dot(u_gs, i_d, bb[k] / 50)); - } - curve++; - } - - std::cout << "\033[1K\r" << 1e2 * (u_gs - u_gs_start) / (u_gs_end - u_gs_start) << "%" << std::flush; - } - - std::cout << "\033[1K\r" << std::flush; - - // speichern und plotty starten - pf.writeToFile("test_plot"); - pf.startPlotty("test_plot"); -} - -void testFunktionen() -{ - B15F& drv = B15F::getInstance(); - - std::cout << "DIP-Switch: " << (int) drv.readDipSwitch() << std::endl; - - - drv.digitalWrite0(0xFF); - drv.analogWrite0(128); - std::cout << (int) drv.digitalRead0() << std::endl;; - std::cout << "adc: " << (int) drv.analogRead(4) << std::endl; - - drv.digitalWrite0(0x00); - drv.analogWrite0(0); - std::cout << (int) drv.digitalRead0() << std::endl;; - std::cout << "adc: " << (int) drv.analogRead(4) << std::endl; - - drv.digitalWrite0(0xFF); - drv.analogWrite0(255); - std::cout << (int) drv.digitalRead0() << std::endl; - std::cout << "adc: " << (int) drv.analogRead(4) << std::endl; - - - std::cout << "Kennlinie..." << std::endl; - uint16_t a[1024]; - uint16_t b[1024]; - drv.analogSequence(0, &a[0], 0, 1, &b[0], 0, 0, 1, 1024); - - /*for(uint16_t i= 0; i < sizeof(a) / sizeof(uint16_t); i++) - { - std::cout << (int) i << " : " << a[i] << " " << b[i] << std::endl; - }*/ - -} - int main() { - //testFunktionen(); - //kennlinieZweiterQuadrant(); - - B15F& drv = B15F::getInstance(); - while(1) - { - //uint8_t be0 = drv.digitalRead0(); - //uint8_t be1 = drv.digitalRead1(); - //uint8_t dsw = drv.readDipSwitch(); - drv.analogRead(0); - drv.analogRead(1); - drv.analogRead(2); - drv.analogRead(3); - drv.analogRead(4); - drv.analogRead(5); - drv.analogRead(6); - drv.analogRead(7); - } - std::cout << "Schluss." << std::endl; + B15F& drv = B15F::getInstance(); + PlottyFile pf; + + uint16_t ba[1024]; + uint16_t bb[1024]; + + const uint16_t sample_count = 1024; + const uint16_t delta = 1; + + pf.setUnitX("V"); + pf.setUnitY("V"); + pf.setUnitPara("V"); + pf.setDescX("U_{OUT}"); + pf.setDescY("U_{IN}"); + pf.setDescPara(""); + pf.setRefX(5); + pf.setRefY(5); + pf.setParaFirstCurve(0); + pf.setParaStepWidth(0); + + uint8_t curve = 0; + + + drv.analogSequence(0, &ba[0], 0, 1, &bb[0], 0, 0, delta, sample_count); + + for(uint16_t x = 0; x < sample_count * delta; x += delta) + { + pf.addDot(Dot(x, ba[x], curve)); + } + + // speichern und plotty starten + pf.writeToFile("test_plot"); + pf.startPlotty("test_plot"); } diff --git a/driver/examples/pegel/test_plot b/driver/examples/pegel/test_plot new file mode 100644 index 0000000..d6217fd Binary files /dev/null and b/driver/examples/pegel/test_plot differ diff --git a/driver/src/Makefile b/driver/src/Makefile index f3a2495..903df83 100644 --- a/driver/src/Makefile +++ b/driver/src/Makefile @@ -9,7 +9,8 @@ COMPILER_PATH = g++ # Options LIB_DRV = ../lib/libb15fdrv.so LIB_PATH = /usr/lib/ -INCLUDE_PATH = /usr/include/b15f +INCLUDE_PATH = /usr/include/b15f/ +BIN_PATH = /usr/bin/ OBJ_MAIN = main.o OUT_CLI = ../bin/cli.elf OBJ_CLI = cli.o @@ -35,6 +36,7 @@ install: drv cp $(LIB_DRV) $(LIB_PATH) mkdir -p $(INCLUDE_PATH) cp drv/*.h $(INCLUDE_PATH) + cp plotty $(BIN_PATH) help: @echo "This Makefile compiles the b15f driver lib and command line interface (CLI):" diff --git a/driver/src/drv/plottyfile.cpp b/driver/src/drv/plottyfile.cpp index a2d3d5a..1f2b955 100644 --- a/driver/src/drv/plottyfile.cpp +++ b/driver/src/drv/plottyfile.cpp @@ -192,7 +192,7 @@ void PlottyFile::writeToFile(std::string filename) void PlottyFile::startPlotty(std::string filename) { - int code = system(("./plotty --in " + filename).c_str()); + int code = system(("plotty --in " + filename).c_str()); if(code) throw std::runtime_error("Fehler beim Aufruf von plotty"); }