From 01f1fa844f865927d91f1719a26681864cc80e5d Mon Sep 17 00:00:00 2001 From: Tristan Krause Date: Fri, 29 Mar 2019 13:35:06 +0100 Subject: [PATCH] Lauffaehig, aber unzuverlaessig --- drv/b15f.cpp | 21 +++++++----- drv/b15f.o | Bin 26800 -> 28288 bytes drv/usart.cpp | 33 +++++++++++++++++++ drv/usart.h | 11 +++++++ drv/usart.o | Bin 17880 -> 19712 bytes main | Bin 51920 -> 56416 bytes main.cpp | 86 +++++++++++--------------------------------------- main.o | Bin 13200 -> 15712 bytes 8 files changed, 76 insertions(+), 75 deletions(-) diff --git a/drv/b15f.cpp b/drv/b15f.cpp index 0637124..f503a71 100644 --- a/drv/b15f.cpp +++ b/drv/b15f.cpp @@ -15,6 +15,7 @@ void B15F::init() usart.openDevice(SERIAL_DEVICE); std::cout << "OK" << std::endl; + delay_ms(1); std::cout << PRE << "Teste Verbindung... " << std::flush; @@ -39,7 +40,6 @@ void B15F::init() // Gib board info aus std::vector info = getBoardInfo(); std::cout << PRE << "AVR Firmware Version: " << info[0] << " um " << info[1] << " Uhr (" << info[2] << ")" << std::endl; - } void B15F::reconnect() @@ -123,7 +123,7 @@ std::vector B15F::getBoardInfo(void) uint8_t aw = usart.readByte(); if(aw != MSG_OK) - throw DriverException("Board Info fehlerhalft"); + throw DriverException("Board Info fehlerhalft: code " + std::to_string((int) aw)); return info; } @@ -185,6 +185,9 @@ uint16_t B15F::analogRead(uint8_t channel) bool B15F::analogSequence(uint8_t channel_a, uint16_t* buffer_a, uint32_t offset_a, uint8_t channel_b, uint16_t* buffer_b, uint32_t offset_b, uint16_t start, int16_t delta, uint16_t count) { + buffer_a += offset_a; + buffer_b += offset_b; + usart.writeByte(RQ_ADC_DAC_STROKE); usart.writeByte(channel_a); usart.writeByte(channel_b); @@ -198,20 +201,22 @@ bool B15F::analogSequence(uint8_t channel_a, uint16_t* buffer_a, uint32_t offset throw DriverException("Out of sync"); } - uint8_t block[5]; // 4 Datenbyte + crc + //uint8_t block[5]; // 4 Datenbyte + crc for(uint16_t i = 0; i < count; i++) { - bool crc_ok = usart.readBlock(&block[0], 0); + /*bool crc_ok = usart.readBlock(&block[0], 0); if (!crc_ok) { std::cout << PRE << "bad crc" << std::endl; return analogSequence(channel_a, buffer_a, offset_a, channel_b, buffer_b, offset_b, start, delta, count); - } + }*/ + buffer_a[i] = usart.readInt(); + buffer_b[i] = usart.readInt(); + //std::cout << buffer_a[i] << " - " << buffer_b[i] << std::endl; - - buffer_a[offset_a + i] = ((uint16_t) block[0]) | (((uint16_t) block[1]) << 8); - buffer_b[offset_b + i] = ((uint16_t) block[2]) | (((uint16_t) block[3]) << 8); + /*buffer_a[i] = ((uint16_t) block[0]) | (((uint16_t) block[1]) << 8); + buffer_b[i] = ((uint16_t) block[2]) | (((uint16_t) block[3]) << 8);*/ } aw = usart.readByte(); diff --git a/drv/b15f.o b/drv/b15f.o index 00c28b9aa16d2c56fe889dd9a0a5ffcf813c884c..80956dfa059134caec3fb7df4484dcee49a22499 100644 GIT binary patch literal 28288 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 diff --git a/drv/usart.cpp b/drv/usart.cpp index 4deff04..d9c0dbf 100644 --- a/drv/usart.cpp +++ b/drv/usart.cpp @@ -51,6 +51,7 @@ void USART::clearOutputBuffer() void USART::writeByte(uint8_t b) { + //std::cout << "write(): " << (int) b << std::endl; if(write(file_desc, &b, 1) != 1) throw USARTException("Fehler beim Senden: writeByte()"); } @@ -60,6 +61,38 @@ void USART::writeInt(uint16_t d) if(write(file_desc, reinterpret_cast(&d), 2) != 2) throw USARTException("Fehler beim Senden: writeInt()"); } + +void USART::writeBlock(uint8_t* buffer, uint16_t offset, uint8_t len) +{ + buffer += offset; + uint8_t crc = 0; + + writeByte(len); + + while(len--) + { + writeByte(*buffer); + + crc ^= *buffer; + for (uint8_t i = 0; i < 8; i++) + { + if (crc & 1) + crc ^= CRC7_POLY; + crc >>= 1; + } + + buffer++; + } + + writeByte(crc); + writeByte(0x80); // Stoppzeichen für Block + + uint8_t aw = readByte(); + if(aw != 0xFF) + { + std::cout << "Ende Gelände" << std::endl; + } +} uint8_t USART::readByte(void) { diff --git a/drv/usart.h b/drv/usart.h index a23cab1..a52d74a 100644 --- a/drv/usart.h +++ b/drv/usart.h @@ -65,8 +65,19 @@ public: */ void writeInt(uint16_t d); + /** + * Empfängt ein Byte über die USART Schnittstelle + * \throws USARTException + */ uint8_t readByte(void); + + /** + * Empfängt ein Integer über die USART Schnittstelle + * \throws USARTException + */ uint16_t readInt(void); + + void writeBlock(uint8_t* buffer, uint16_t offset, uint8_t len); bool readBlock(uint8_t* buffer, uint16_t offset); /*************************************/ diff --git a/drv/usart.o b/drv/usart.o index 9e8a0beaf3ce3262da5ef89505b89c70fe3f8569..57ade56e20212e50d8a7d653c907d02f30926438 100644 GIT binary patch delta 5311 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 c@cFXh>eE!_Hf->f#@AP+b3 zxBPjtqsRPir@1TO*;{rb=h}o1C-o-c^pp~$q|O+Oq?RO%_Zx=s5ROjIGRI+Ldeh1? z9s;P1bClsFeOY7U8TQxz_$4Md4zAx+dYv`6U0h5^P1T|I)o19MDJEW0z&LcJPQynt zFZgcLd!}LEbJL7Q3i@UVGlcwfVaD(c^;=+4zeCCAl-wz;z5}LYNV&&Qq>9ypIVP#H?jSrcnl0tzgEc=O0HJ&1tqU4pVzQ*cG!GZAqSN_qT~rBzfkg=lGl+k zN0@h1KM{-P2wyrCHN{9W252m@wK~cuQr2>9_38;;tF0~Qqu3X;)m@S&we?LEyGL7_ zNz3M1--nqY%u~|GysG3)Rps@M;ZNSqZfv-#4@vu)yv8nJ3GjCe`EU4hx%GpG6n3d=>Vat++*z zYskwzOYi7NSz{~GBLasbmVJTowV{E~`iO;&h~Fo_dv5F<=Cua>5fNui)*lP$v=$@8 zafz5~8M+R3zJQf)*&8$}M^S(Zjoyeu+w+BQ1Is>Nf5RkyBlhRZ6+BBm{6sI&KF$i> zB`e>Ns~AHKLJLIaO2)s5Sz`=;k#Ro8@K?sbPmh8B!1(oQb*k^%^ohhuO%}$NaTUW? zlg(X*H5!*i`We2F;e6SiVLW^*Y?~-3nwr`Rq}>EBBW0ne_=ttIG3yD2uVZ*1kzS}t zw#P8CP;~Oy+L)w_sz`n=4~>C;s&UDdMUOkSuNlsZyuf&Lk(<=)em_RQPh;STlbnH$ zo)lZ-a+TWHfTp3ZNOby{bv?7@F}4DRuO7pH(-{7*GXEOJv(v#l)x7f4vWEpUvVeUo zK_(6kfG#qe59k`>xp#cMwA8;b zLk!zXg;|UdlBMV`rLSD6h1W_g2eV6Ag?{vreMXt(t6*pj^<|UWpcoZp!ncTe?k;?r z`m)I)7o)vQU~8FWpI4ZJ)?j~`umgm+F_+LqcZki|mK=-uJBBDKG3qy;KqxAFTbO5> z=8?I#qBR;e+tE$(DV&Uoboag}oxIvp{;+q*K8B*H>eodZ;yj{AFBh0qZrK^yEaM94 zUZ0A#@^R)8Y%G7ytQs6CKVbTH$n4all8<|Zd>vhtV%_;sR`()#brkMiB>x_TyBA3- zLFTxh#l1&n3@)zv#bXvAR9%H&br5^2r<&R5r?v(QtRjLh1iNjv1%k(&1btgkKde49*_PRBrPKz4^~D-$j!8}tWf8X~cP=Z|Ex z#40_8g&tD77GRhZ{RpNlsq}oe04=08lZ{lbg<(=93z1e=IUe$V5c;C2=%@>L4%z6b zt4x|XStT}(;7VO_(i#00#N4ID2*(o9wzS0KEkMswO5w#YsonylEvxh_@}h;*qh9oo zI#z&TQXO8TEvKOsqJ>m1*+>mg9I3WKq^%%NiX-*2*C}yDAnAtQ8+3tNQJnOAp);Uk nm|I^wZHE4DwO1dRTrw7*y*@W-V7B9T8h!P}o=6FX>*xOm5O+11 diff --git a/main b/main index 03affcedecbe6e4eb9ee1812b5f0cc7932fdd289..8bc0c14860a62e004b9b8d94743710ee3f6001a3 100755 GIT binary patch literal 56416 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

&qNc{1f8iRB-pJely&&|v_l{hsng|mS0ABGRdI| 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 E11foYMgRZ+ diff --git a/main.cpp b/main.cpp index 22cd69f..40dc56c 100644 --- a/main.cpp +++ b/main.cpp @@ -108,86 +108,38 @@ void kennlinieZweiterQuadrant() pf.startPlotty("test_plot"); } -void beispielFunktionen() +void testFunktionen() { B15F& drv = B15F::getInstance(); - for(uint16_t i = 0; i < 256; i++) - { - drv.digitalWrite0(i); - drv.delay_ms(100); - } + 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; + uint16_t a[1024]; + uint16_t b[1024]; + drv.analogSequence(0, &a[0], 0, 1, &b[0], 0, 0, 1, 1024); - while(1) - { - for(double d = 0; d < M_PI*2; d += .1) - { - uint16_t v = (sin(d) * 511 + 511); - drv.analogWrite0(v); - } - - } - - - - - uint16_t schwelle_unten = 1023; - for(uint16_t i = 0; i < 1024; i++) - { - drv.analogWrite0(i); - drv.delay_ms(1); - if(drv.digitalRead0() & 0x01) - { - drv.discard(); - uint16_t val = drv.analogRead(0); - if(val > 1023) - { - std::cout << "Fehler: " << val << std::endl; - continue; - } - if(val < schwelle_unten) - schwelle_unten = val; - } - } - - std::cout << "OK" << std::endl; - - uint16_t schwelle_oben = 0; - for(uint16_t i = 1023; i > 0; i--) - { - drv.analogWrite0(i); - if(!(drv.digitalRead0() & 0x01)) - { - drv.discard(); - uint16_t val = drv.analogRead(0); - if(val > 1023) - { - std::cout << "Fehler: " << val << std::endl; - continue; - } - if(val > schwelle_oben) - schwelle_oben = val; - } - } - - std::cout << "Schwelle für low: " << schwelle_unten << std::endl; - std::cout << "Schwelle für high: " << schwelle_oben << std::endl; - std::cout << "Verbotene Zone: " << (schwelle_oben - schwelle_unten) << std::endl; } int main() { - beispielFunktionen(); - - //USART usart; - //usart.openDevice("/dev/ttyUSB0"); - //usart.writeByte(5); - + kennlinieZweiterQuadrant(); std::cout << "Schluss." << std::endl; } diff --git a/main.o b/main.o index b17054645c3dde56d19865a69b923e1d3c2518c6..c3c698dfd9d366406764349cf62d99b0dd2ed74b 100644 GIT binary patch literal 15712 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%0DaNKa=pcB>a5|za-&bg6BLe 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 MB4KLPkn4*43or*2OaK4?