diff --git a/drv/b15f.cpp b/drv/b15f.cpp index c03d0ff..f5a68d4 100644 --- a/drv/b15f.cpp +++ b/drv/b15f.cpp @@ -45,20 +45,6 @@ void B15F::init() if(!testIntConv()) throw DriverException("Konvertierung fehlgeschlagen."); std::cout << "OK" << std::endl; - - while(1) - { - digitaleAusgabe0(0xFF); - digitaleAusgabe0(0x00); - //analogeEingabe(0); - /*for(uint16_t i = 0; i < 1024; ) - { - i = analogeEingabe(0); - analogeAusgabe0(i); - delay(0); - }*/ - } - } void B15F::reconnect() @@ -233,6 +219,38 @@ uint16_t B15F::analogeEingabe(uint8_t channel) } } +bool B15F::analogEingabeSequenz(uint16_t* buffer_a, uint16_t* buffer_b, uint32_t offset_a, uint32_t offset_b, uint16_t start, uint16_t delta, uint16_t count) +{ + try + { + writeByte(RQ_ADC_DAC_STROKE); + writeInt(start); + writeInt(delta); + writeInt(count); + uint8_t aw = readByte(); + + if(aw != MSG_OK) + { + std::cout << "nein: " << (int) aw << std::endl; + throw DriverException("Mikrocontroller nicht synchronisiert"); + } + + for(uint16_t i = 0; i < count; i++) + { + buffer_a[offset_a + i] = readInt(); + buffer_b[offset_b + i] = readInt(); + std::cout << "(" << i << ") " << buffer_a[offset_a + i] << " \t| " << buffer_b[offset_b + i] << std::endl; + } + + aw = readByte(); + return aw == MSG_OK; + } + catch(DriverException& de) + { + reconnect(); + return analogEingabeSequenz(buffer_a, buffer_b, offset_a, offset_b, start, delta, count); + } +} void B15F::writeByte(uint8_t b) diff --git a/drv/b15f.h b/drv/b15f.h index 0ed4d28..809b869 100644 --- a/drv/b15f.h +++ b/drv/b15f.h @@ -27,13 +27,14 @@ public: bool testIntConv(void); // Board Befehle - inline bool digitaleAusgabe0(uint8_t); - inline bool digitaleAusgabe1(uint8_t); - inline uint8_t digitaleEingabe0(void); - inline uint8_t digitaleEingabe1(void); - inline bool analogeAusgabe0(uint16_t); - inline bool analogeAusgabe1(uint16_t); - inline uint16_t analogeEingabe(uint8_t); + bool digitaleAusgabe0(uint8_t); + bool digitaleAusgabe1(uint8_t); + uint8_t digitaleEingabe0(void); + uint8_t digitaleEingabe1(void); + bool analogeAusgabe0(uint16_t); + bool analogeAusgabe1(uint16_t); + uint16_t analogeEingabe(uint8_t); + bool analogEingabeSequenz(uint16_t*, uint16_t*, uint32_t, uint32_t, uint16_t, uint16_t, uint16_t); // Serielle Verbindung inline void writeByte(uint8_t); @@ -73,6 +74,7 @@ private: constexpr static uint8_t RQ_AA0 = 9; constexpr static uint8_t RQ_AA1 = 10; constexpr static uint8_t RQ_ADC = 11; + constexpr static uint8_t RQ_ADC_DAC_STROKE = 12; }; #endif // B15F_h diff --git a/drv/b15f.o b/drv/b15f.o index 3173d0b..3342308 100644 Binary files a/drv/b15f.o and b/drv/b15f.o differ diff --git a/main b/main index 880bff8..8884305 100755 Binary files a/main and b/main differ diff --git a/main.cpp b/main.cpp index 1a09eaf..d1e47cf 100644 --- a/main.cpp +++ b/main.cpp @@ -5,5 +5,21 @@ int main() { B15F& drv = B15F::getInstance(); drv.init(); + + /* + while(1) + { + for(uint16_t i = 0; i < 1024; i++) + { + drv.analogeAusgabe0(drv.analogeEingabe(5)); + //drv.delay(10); + //drv.digitaleAusgabe0(drv.digitaleEingabe0()); + } + }*/ + + uint16_t ba[1024]; + uint16_t bb[1024]; + drv.analogEingabeSequenz(&ba[0], &bb[0], 0, 0, 0, 10, 100); + std::cout << "Schluss." << std::endl; } diff --git a/main.o b/main.o index 1045739..d8d54c6 100644 Binary files a/main.o and b/main.o differ