diff --git a/driver/drv/b15f.cpp b/driver/drv/b15f.cpp index 1130b0b..78ad9ac 100644 --- a/driver/drv/b15f.cpp +++ b/driver/drv/b15f.cpp @@ -136,13 +136,12 @@ std::vector B15F::getBoardInfo(void) while(n--) { uint8_t len = usart.readByte(); - std::cout << (int) len << std::endl; std::string str; - while(len--) + while(len--) { str += static_cast(usart.readByte()); - - std::cout << str << std::endl; + } + info.push_back(str); } @@ -215,7 +214,7 @@ uint16_t B15F::analogRead(uint8_t channel) return usart.readInt(); } -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) +void 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; @@ -239,13 +238,15 @@ bool B15F::analogSequence(uint8_t channel_a, uint16_t* buffer_a, uint32_t offset { buffer_a[i] = usart.readInt(); buffer_b[i] = usart.readInt(); + if(buffer_a[i] > 1023 || buffer_b[i] > 1023) + std::cout << PRE << "bad data detected" << std::endl; } uint8_t aw = usart.readByte(); - if(aw == MSG_OK) - return aw; - - throw DriverException("Sequenz unterbrochen"); + if(aw != MSG_OK) + throw DriverException("Sequenz unterbrochen"); + + delay_us(1); } void B15F::delay_ms(uint16_t ms) diff --git a/driver/drv/b15f.h b/driver/drv/b15f.h index 8b1b465..6bcf7fc 100644 --- a/driver/drv/b15f.h +++ b/driver/drv/b15f.h @@ -162,7 +162,7 @@ public: * \param count Anzahl an Inkrementierungen * \throws DriverException */ - bool 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); + void 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); /*************************/ diff --git a/driver/drv/b15f.o b/driver/drv/b15f.o index 31747e1..a6377d6 100644 Binary files a/driver/drv/b15f.o and b/driver/drv/b15f.o differ diff --git a/driver/drv/usart.h b/driver/drv/usart.h index 1659316..c4bba52 100644 --- a/driver/drv/usart.h +++ b/driver/drv/usart.h @@ -132,7 +132,7 @@ private: int file_desc = -1; // Linux Dateideskriptor uint32_t baudrate = 9600; int TEST = 0; - uint8_t timeout = 10; // in Dezisekunden + uint8_t timeout = 5; // in Dezisekunden uint8_t block_buffer[MAX_BLOCK_SIZE + 3]; // debug statistics diff --git a/driver/gnuplotscript.gp b/driver/gnuplotscript.gp index 752e2b8..6bdaed1 100644 --- a/driver/gnuplotscript.gp +++ b/driver/gnuplotscript.gp @@ -2,35 +2,19 @@ set margin 10,10 unset key set grid set title '' -set xlabel 'U_{GS} [V]' +set xlabel 'U_{DS} [V]' set ylabel 'I_D [mA]' -set xrange [5:0] -set x2range [5:0] -set y2range [0:50] +set xrange [0:5] set yrange [0:50] -set label at 2,36 'U_{DS} [V] = 300' right -set label at 2,33 'U_{DS} [V] = 325' right -set label at 2,21 'U_{DS} [V] = 350' right -set label at 2,38 'U_{DS} [V] = 375' right -set label at 2,23 'U_{DS} [V] = 400' right -set label at 2,23 'U_{DS} [V] = 425' right -set label at 2,24 'U_{DS} [V] = 450' right -set label at 2,24 'U_{DS} [V] = 475' right -set label at 2,25 'U_{DS} [V] = 500' right -set label at 2,5 'U_{DS} [V] = 525' right -set label at 2,6 'U_{DS} [V] = 550' right -set label at 2,13 'U_{DS} [V] = 575' right -set label at 2,13 'U_{DS} [V] = 600' right -set label at 2,13 'U_{DS} [V] = 625' right -set label at 2,2 'U_{DS} [V] = 650' right -set label at 2,2 'U_{DS} [V] = 675' right -set label at 2,6 'U_{DS} [V] = 700' right -set label at 2,2 'U_{DS} [V] = 725' right -set label at 2,2 'U_{DS} [V] = 725' right -set y2tics -unset ytics -set ytics format '' +set label at 4,3 'U_{GS} [V] = 460' left +set label at 4,7 'U_{GS} [V] = 480' left +set label at 3,13 'U_{GS} [V] = 500' left +set label at 2,22 'U_{GS} [V] = 520' left +set label at 1,32 'U_{GS} [V] = 540' left +set label at 0,38 'U_{GS} [V] = 560' left +set label at 0,38 'U_{GS} [V] = 580' left +set label at 0,38 'U_{GS} [V] = 600' left unset output set terminal qt unset output -plot "/tmp/tempfile1" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{DS} [V] = 300' w l,"/tmp/tempfile2" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{DS} [V] = 325' w l,"/tmp/tempfile3" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{DS} [V] = 350' w l,"/tmp/tempfile4" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{DS} [V] = 375' w l,"/tmp/tempfile5" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{DS} [V] = 400' w l,"/tmp/tempfile6" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{DS} [V] = 425' w l,"/tmp/tempfile7" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{DS} [V] = 450' w l,"/tmp/tempfile8" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{DS} [V] = 475' w l,"/tmp/tempfile9" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{DS} [V] = 500' w l,"/tmp/tempfile10" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{DS} [V] = 525' w l,"/tmp/tempfile11" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{DS} [V] = 550' w l,"/tmp/tempfile12" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{DS} [V] = 575' w l,"/tmp/tempfile13" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{DS} [V] = 600' w l,"/tmp/tempfile14" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{DS} [V] = 625' w l,"/tmp/tempfile15" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{DS} [V] = 650' w l,"/tmp/tempfile16" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{DS} [V] = 675' w l,"/tmp/tempfile17" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{DS} [V] = 700' w l,"/tmp/tempfile18" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{DS} [V] = 725' w l,"/tmp/tempfile19" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{DS} [V] = 750' w l +plot "/tmp/tempfile0" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{GS} [V] = 440' w l,"/tmp/tempfile1" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{GS} [V] = 460' w l,"/tmp/tempfile2" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{GS} [V] = 480' w l,"/tmp/tempfile3" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{GS} [V] = 500' w l,"/tmp/tempfile4" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{GS} [V] = 520' w l,"/tmp/tempfile5" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{GS} [V] = 540' w l,"/tmp/tempfile6" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{GS} [V] = 560' w l,"/tmp/tempfile7" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{GS} [V] = 580' w l,"/tmp/tempfile8" using ($1*0.004888):($2*0.048876) binary format="%int16%int16" endian=big title 'U_{GS} [V] = 600' w l diff --git a/driver/main b/driver/main index 289cfc6..f774480 100755 Binary files a/driver/main and b/driver/main differ diff --git a/driver/main.cpp b/driver/main.cpp index 320629e..f4f7d16 100644 --- a/driver/main.cpp +++ b/driver/main.cpp @@ -13,8 +13,8 @@ void kennlinieErsterQuadrant() uint16_t ba[1024]; uint16_t bb[1024]; - const uint16_t sample_count = 100; - const uint16_t delta = 10; + 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; @@ -37,11 +37,11 @@ void kennlinieErsterQuadrant() drv.analogWrite1(u_gs); drv.analogSequence(0, &ba[0], 0, 1, &bb[0], 0, 0, delta, sample_count); - drv.delay_ms(10); - drv.discard(); - drv.delay_ms(10); + //drv.delay_ms(10); + //drv.discard(); + //drv.delay_ms(10); - for(uint16_t k = 0; k < sample_count+1; k++) + for(uint16_t k = 0; k < sample_count; k++) { uint16_t i_d = ba[k] - bb[k]; uint16_t u_ds = bb[k]; @@ -64,7 +64,7 @@ void kennlinieZweiterQuadrant() uint16_t ba[1024]; uint16_t bb[1024]; - const uint16_t sample_count = 1000; + const uint16_t sample_count = 1024; const uint16_t delta = 1; const uint16_t u_gs_start = 300; @@ -91,9 +91,9 @@ void kennlinieZweiterQuadrant() drv.analogSequence(0, &ba[0], 0, 1, &bb[0], 0, 0, delta, sample_count); curve = 0; - for(uint16_t k = 0; k < sample_count + 1; k++) + for(uint16_t k = 0; k < sample_count; k++) { - if(ba[k] > bb[k] && bb[k] % 50 == 0 && bb[k] > 0) + 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)); @@ -143,7 +143,8 @@ void testFunktionen() int main() { - testFunktionen(); + kennlinieZweiterQuadrant(); + kennlinieErsterQuadrant(); std::cout << "Schluss." << std::endl; } diff --git a/driver/main.o b/driver/main.o index d905bc5..551402b 100644 Binary files a/driver/main.o and b/driver/main.o differ diff --git a/driver/test_plot b/driver/test_plot index 9dbebdd..aaca480 100644 Binary files a/driver/test_plot and b/driver/test_plot differ diff --git a/firmware/B15F.elf b/firmware/B15F.elf index 36bfda5..0977134 100755 Binary files a/firmware/B15F.elf and b/firmware/B15F.elf differ diff --git a/firmware/B15F.hex b/firmware/B15F.hex index 70a3efa..707add3 100644 --- a/firmware/B15F.hex +++ b/firmware/B15F.hex @@ -3,36 +3,36 @@ :100020000C9489000C9489000C9489000C9489002C :100030000C9489000C9489000C9489000C9489001C :100040000C9489000C9489000C9489000C9489000C -:100050000C9484080C9489000C94AE080C948900CC +:100050000C949B080C9489000C94C5080C9489009E :100060000C9489000C9489000C9489000C948900EC :100070000C9489000C9489000C9489000C948900DC :100080000C9489000C9489000C948900FD000001F7 :100090000301E900060109010C010F011201E7004B -:1000A000FA00150142093F093C091A0939093609C4 -:1000B000330930092D0918092A094509480911246D +:1000A000FA001501590956095309310950094D093A +:1000B0004A09470944092F0941095C095F091124CC :1000C0001FBECFEFD0E4DEBFCDBF11E0A0E0B1E0B6 -:1000D000E2E0F3E100E00BBF02C007900D92AE3208 -:1000E000B107D9F722E0AEE2B1E001C01D92AB3218 +:1000D000E0E3F3E100E00BBF02C007900D92AE3207 +:1000E000B107D9F722E0AEE2B1E001C01D92AB3812 :1000F000B207E1F710E0CFE5D0E004C02197FE01A0 -:100100000E947609CE35D107C9F70E94D8080C9411 -:100110007F090C9400008AE292E00E94190160E0DD -:1001200087E292E00E945C016FEF87E292E00E941A -:100130007D0160E084E292E00E945C016FEF84E266 -:1001400092E00E947D016FEF81E292E00E947D01CA -:100150008AE192E00E9454028FE291E00E944C03F7 +:100100000E948D09CE35D107C9F70E94EF080C94E3 +:1001100096090C9400008AE892E00E94190160E0C0 +:1001200087E892E00E945C016FEF87E892E00E940E +:100130007D0160E084E892E00E945C016FEF84E85A +:1001400092E00E947D016FEF81E892E00E947D01C4 +:100150008AE792E00E9454028FE291E00E944C03F1 :100160008FE291E00E946C03789484B7877F84BF0C :10017000109260000FB6F894A89580916000886195 :1001800080936000109260000FBE0895CF9398E0B6 :1001900088E10FB6F894A895809360000FBE909305 -:1001A0006000A8958FE291E00E94D504C82F682FC7 -:1001B00084E292E00E949E018C2F90E0FC01319736 -:1001C000EC30F10530F4EA5BFF4F0C9476090E94A5 -:1001D000E3078FE291E00E946C030FB6F894A895B4 +:1001A0006000A8958FE291E00E94E904C82F682FB3 +:1001B00084E892E00E949E018C2F90E0FC01319730 +:1001C000EC30F10530F4EA5BFF4F0C948D090E948E +:1001D000FA078FE291E00E946C030FB6F894A8959D :1001E00080916000886180936000109260000FBE73 -:1001F000CF9108950E94F907ECCF0E942A07E9CF1A -:100200000E944307E6CF0E946A07E3CF0E947F0760 -:10021000E0CF0E949507DDCF0E94AB07DACF0E94A6 -:10022000BC07D7CF0E94CD07D4CF0E940F08D1CFF3 +:1001F000CF9108950E941008ECCF0E944107E9CFEB +:100200000E945A07E6CF0E948107E3CF0E9496071B +:10021000E0CF0E94AC07DDCF0E94C207DACF0E9478 +:10022000D307D7CF0E94E407D4CF0E942608D1CFAE :10023000089584B1806B84B926988AB18C618AB99B :1002400080E58CBD81E08DBD8BB1837E8BB95A9AE0 :100250005B9A5C9A08958BB1837E8BB98BB160FDFC @@ -42,268 +42,270 @@ :10029000892B8BB98BB162FFF0CF90E1892B8BB9A1 :1002A00008956EBD0DB407FEFDCF8EB50895FC0117 :1002B00071836083428308951F93CF93DF93EC0192 -:1002C000162F6A81888199810E942B0160E48881C0 -:1002D00099810E94510160E0888199810E945101B9 -:1002E000612F888199810E94510167E088819981FD +:1002C000162F6A81888199810E942B0188819981EA +:1002D00060E40E9451018881998160E00E9451018F +:1002E00088819981612F0E9451018881998167E0FD :1002F000DF91CF911F910C942B011F93CF93DF932C -:10030000EC01162F6A81888199810E942B0160E49B -:10031000888199810E94510161E0888199810E94C0 -:100320005101612F888199810E94510167E0888184 -:100330009981DF91CF911F910C942B011F93CF9343 +:10030000EC01162F6A81888199810E942B018881D6 +:10031000998160E40E9451018881998161E00E9485 +:10032000510188819981612F0E94510188819981B1 +:1003300067E0DF91CF911F910C942B011F93CF9316 :10034000DF93EC01162F6A81888199810E942B012D -:1003500060E4888199810E94510162E188819981DC -:100360000E945101612F888199810E94510167E0AB -:1003700088819981DF91CF911F910C942B011F935C +:100350008881998160E40E9451018881998162E1DC +:100360000E94510188819981612F0E9451018881E9 +:10037000998167E0DF91CF911F910C942B011F931E :10038000CF93DF93EC01162F6A81888199810E94B7 -:100390002B0160E4888199810E94510163E1888189 -:1003A00099810E945101612F888199810E94510198 -:1003B00067E088819981DF91CF911F910C942B0187 +:100390002B018881998160E40E94510188819981B3 +:1003A00063E10E94510188819981612F0E9451016E +:1003B0008881998167E0DF91CF911F910C942B0187 :1003C0001F93CF93DF93EC016A81888199810E940A -:1003D0002B0161E4888199810E94510162E1888149 -:1003E00099810E94510160E0888199810E945101A8 -:1003F000182F67E0888199810E942B01812FDF915E +:1003D0002B018881998161E40E9451018881998172 +:1003E00062E10E9451018881998160E00E9451017F +:1003F000182F8881998167E00E942B01812FDF915E :10040000CF911F9108951F93CF93DF93EC016A81E1 -:10041000888199810E942B0161E4888199810E94E1 -:10042000510163E1888199810E94510160E08881D6 -:1004300099810E945101182F67E0888199810E945B +:10041000888199810E942B018881998161E40E94E1 +:1004200051018881998163E10E94510188819981FC +:1004300060E00E945101182F8881998167E00E9435 :100440002B01812FDF91CF911F910895FC017183C2 :100450006083428308950F931F93CF93DF93EC0142 -:100460008B016A81888199810E942B01B801002447 -:10047000660F771F001C660F771F001C672F702DFB -:10048000888199810E945101602F660F660F8881D3 -:1004900099810E94510167E088819981DF91CF9114 +:100460008B016A81888199810E942B018881998101 +:10047000B8010024660F771F001C660F771F001C51 +:10048000672F702D0E94510188819981602F660F1E +:10049000660F0E9451018881998167E0DF91CF91B9 :1004A0001F910F910C942B0110927C0087E8809390 :1004B0007A00089580917C00807E682B60937C0098 :1004C00080917A00806480937A0083EA91E00197BA :1004D000F1F700C0000080917A0086FDFCCF80918A :1004E00078009091790008950F931F93CF93DF9335 -:1004F00061E087E292E00E949E01C1E0D0E001E06D +:1004F00061E087E892E00E949E01C1E0D0E001E067 :1005000010E02FEF84E39CE0215080409040E1F721 :1005100000C00000B8010C2E01C0660F0A94EAF773 -:1005200087E292E00E949E012196C930D10549F7E9 +:1005200087E892E00E949E012196C930D10549F7E3 :10053000DF91CF911F910F9108950F931F93CF9348 -:10054000DF9361E084E292E00E949E01C1E0D0E08E +:10054000DF9361E084E892E00E949E01C1E0D0E088 :1005500001E010E02FEF84E39CE0215080409040C8 :10056000E1F700C00000B8010C2E01C0660F0A942C -:10057000EAF784E292E00E949E012196C930D105FB +:10057000EAF784E892E00E949E012196C930D105F5 :1005800049F7DF91CF911F910F910895CF93DF939A -:10059000C0E0D0E0BE018EE192E00E942B0287E82D +:10059000C0E0D0E0BE018EE792E00E942B0287E827 :1005A00093E10197F1F700C000002196C11594E096 :1005B000D90781F72FE78AE196E0215080409040EB -:1005C000E1F700C0000060E070E08EE192E0DF91B2 +:1005C000E1F700C0000060E070E08EE792E0DF91AC :1005D000CF910C942B02CF93DF93C0E0D0E0BE010B -:1005E0008BE192E00E942B0287E893E10197F1F7FB +:1005E0008BE792E00E942B0287E893E10197F1F7F5 :1005F00000C000002196C11594E0D90781F72FE7CC :100600008AE196E0215080409040E1F700C0000070 -:1006100060E070E08BE192E0DF91CF910C942B02CF +:1006100060E070E08BE792E0DF91CF910C942B02C9 :100620000FB6F894A895809160008861809360006F -:10063000109260000FBE60E08AE192E00E945A02D0 -:10064000BC018EE192E00E942B0261E08AE192E01F -:100650000E945A02BC018BE192E00E942B0287E2C9 -:1006600092E00E940302682F87E292E00E949E01BE -:1006700081E292E00E940302682F84E292E00E94ED +:10063000109260000FBE60E08AE792E00E945A02CA +:10064000BC018EE792E00E942B0261E08AE792E013 +:100650000E945A02BC018BE792E00E942B0287E8BD +:1006600092E00E940302682F87E892E00E949E01B8 +:1006700081E892E00E940302682F84E892E00E94E1 :100680009E01D9CF0E9474020E949D020E94C60260 :100690000E94EB020E94100322E02093C00028ED8C :1006A0002093C10026E02093C2001092C50024E1EF -:1006B0002093C40086519F4FFC01108208958091C1 +:1006B0002093C400865B9E4FFC01108208958091B8 :1006C000C6008FE792E00197F1F700C0000080912B -:1006D000C00087FDF4CF089589519F4FFC0110821F -:1006E00008959C01FC01E651FF4F90819111FDCFCF -:1006F000F901E851FF4F10820895DC01A951BF4F65 +:1006D000C00087FDF4CF089589539F4FFC0110821D +:1006E00008959C01FC01E65BFE4F90819111FDCFC6 +:1006F000F901E85BFE4F10820895DC01A953BF4F5A :100700002C9131E0320F3C933091C600FC01E20F96 -:10071000F11DE953FF4F30832C91FC01E953FF4F4A +:10071000F11DE95BFF4F30832C91FC01E95BFF4F3A :10072000E081F0E0E050FF4F8081281720F01C921C :1007300081E080932E0108950F931F93CF93DF9351 -:10074000EC018C0108511F4FF801608187E292E0B3 +:10074000EC018C01085B1E4FF801608187E892E0A4 :100750000E949E01F801908131968081981740F0A7 -:10076000C651DF4F1882DF91CF911F910F910895ED +:10076000C65BDE4F1882DF91CF911F910F910895E4 :100770008091C00085FFFCCFF801808191E0980F47 -:100780009083C80FD11D89818093C600DF91CF91DE -:100790001F910F910895CF92DF92EF92FF920F93E6 -:1007A0001F93CF93DF93EC01C851DF4F28812111B4 -:1007B00009C0DF91CF911F910F91FF90EF90DF90D3 -:1007C000CF9008958C018881780199EEE90EF11C93 -:1007D000F701808318826801FAEECF0ED11C81E008 -:1007E000F6018083688187E292E00E949E019881F1 -:1007F000F7018081981778F49091C00095FFFCCFA5 -:10080000888191E0980F9883E801C80FD11D8981F4 -:100810008093C600CECFF6011082CBCFFC01E85109 -:10082000FF4F208131E0320F3083FC01E20FF11DD8 -:1008300061830895FC01E851FF4F208131E0320FC0 -:100840003083DC01A20FB11D11966C93208131E041 -:10085000320F3083FC01E20FF11D718308950F9375 -:100860001F93CF93DF938C01FC01E851FF4F8081F0 -:1008700091E0980F9083D801A80FB11D11964C9369 -:100880009FEF940F442361F0DB013D91208141E013 -:10089000420F4083E801C20FD11D39839150A8F760 -:1008A000DF91CF911F910F910895EF92FF920F93D7 -:1008B0001F93CF93DF937C01EC01C851DF4F8881F8 -:1008C00091E0980F9883F701E80FF11D41835FEFE6 -:1008D000540F442309F467C0FB0120E041E9BF0144 -:1008E0003191888191E0980F98838701080F111D3D -:1008F000D80111963C93DB018C912827822F842705 -:1009000020FD282F30E035952795842F822720FD64 -:10091000282F30E035952795842F822720FD282F1A -:1009200030E035952795842F822720FD282F30E051 -:1009300035952795842F822720FD282F30E0359587 -:100940002795942F922720FD292F30E03595279564 -:10095000942F922720FD292F30E035952795842F5D -:10096000822720FD282F2695515008F0B8CF888186 -:1009700091E0980F9883F701E80FF11D2183F701AB -:10098000E951FF4F808191E0980F9083D701A80F24 -:10099000B11DA953BF4F8C91DF91CF911F910F9142 -:1009A000FF90EF90089520E0E2CFFC01E951FF4F66 -:1009B000208131E0320F3083820F911DFC01E95319 -:1009C000FF4F80810895FC01E951FF4F208131E004 -:1009D000320F3083DC01A20FB11DA953BF4F2C9100 -:1009E000308141E0430F4083830F911DFC01E953A7 -:1009F000FF4F3081822F90E0932B0895CF93DF93A8 -:100A0000DC01EC01CB53DF4F888199818230910565 -:100A100009F467C0B0F4009709F440C0019759F495 -:100A20008C91FD01E80FF11DEF57FF4F608382E0CD -:100A300090E0998388838C918F5F8C93DF91CF9125 -:100A400008958330910509F4D3C00497A1F78091EC -:100A5000C6008FE792E00197F1F700C00000809197 -:100A6000C00087FDF4CFFD01EC53FF4F8081882348 -:100A700009F435C19EEFFD01E851FF4F808121E06F -:100A8000280F2083FD01E80FF11D91831982188240 -:100A90008C918F5F8C93DF91CF910895613408F42E -:100AA00020C18091C6008FE792E00197F1F700C066 -:100AB00000008091C00087FDF4CFFD01E851FF4F99 -:100AC000808191E0980F9083FD01E80FF11D8EEF7A -:100AD0008183198218828C918F5F8C93DF91CF91E3 -:100AE00008958C91FD01E80FF11DEF57FF4F6083D2 -:100AF000FD01EC53FF4F808168276083808180FF78 -:100B000004C0908181E989278083808190E0959558 -:100B100087958083808180FF04C0908181E9892747 -:100B20008083808190E0959587958083808180FF88 -:100B300004C0908181E989278083808190E0959528 -:100B400087958083808180FF04C0908181E9892717 -:100B50008083808190E0959587958083808180FF58 -:100B600004C0908181E989278083808190E09595F8 -:100B700087958083808180FF04C0908181E98927E7 -:100B80008083808190E0959587958083808180FF28 -:100B900004C0908181E989278083808190E09595C8 -:100BA00087958083808180FF04C0908181E98927B7 -:100BB0008083808190E09595879580839C91FD014D -:100BC000EF57FF4F8081981709F498C09C9180815E -:100BD000981708F430CF8091C6008FE792E0019714 -:100BE000F1F700C000008091C00087FDF4CF65CF11 -:100BF0008C91FD01E80FF11DEF57FF4F6083FD0160 -:100C0000EC53FF4F808168276083808180FF04C0A0 -:100C1000908181E989278083808190E095958795EF -:100C20008083808180FF04C0908181E9892780834F -:100C3000808190E0959587958083808180FF04C0B6 -:100C4000908181E989278083808190E095958795BF -:100C50008083808180FF04C0908181E9892780831F -:100C6000808190E0959587958083808180FF04C086 -:100C7000908181E989278083808190E0959587958F -:100C80008083808180FF04C0908181E989278083EF -:100C9000808190E0959587958083808180FF04C056 -:100CA000908181E989278083808190E0959587955F -:100CB0008083808180FF04C0908181E989278083BF -:100CC000808190E095958795808384E090E099837A -:100CD00088838C918F5F8C93DF91CF9108959FEFE4 -:100CE000CACEFD01EF57FF4F6083ED5BFF4F1082CF -:100CF0001C9281E090E0998388839DCE83E090E010 -:100D00009983888398CECF92DF92FF920F931F939F -:100D1000CF93DF93FC01E951FF4F9C0128513F4FD6 -:100D20006901D1E9640F711DAEEFFA2E208131E027 -:100D3000320F3083AC01420F511D9A0129533F4FAE -:100D4000D9011C91103809F473C0113408F010E077 -:100D5000C0E020E0308141E0430F4083AC01430F0D -:100D6000511DDA01A953BF4F0C91202720FD2D27DB -:100D700030E035952795422F20FF02C04D2F4227A6 -:100D8000242F30E035952795422F20FF02C04D2FAC -:100D9000422750E055954795242F40FF02C02D2F44 -:100DA000242730E035952795422F20FF02C04D2F94 -:100DB000422750E055954795242F40FF02C02D2F24 -:100DC000242730E035952795422F20FF02C04D2F74 -:100DD000422750E055954795242F40FF02C02D2F04 -:100DE00024272695C11780F1CF5F1C1708F0B2CFDA -:100DF0003091C600AFE7B2E01197F1F700C00000F4 -:100E00003091C00037FDF4CF211112C0F6012081CE -:100E100031E0320F3083FC01E20FF11D2FEF21830F -:100E2000DF91CF911F910F91FF90DF90CF900895A8 -:100E3000D6012C9131E0320F3C93AC01420F511D91 -:100E4000DA011196FC9272CFAB014C0F511DDA0101 -:100E50000C93CACFCF938FE291E00E9471038FE28F -:100E600091E00E94D504C82F6FEF8FE291E00E94BD -:100E70000E046C2F8FE291E00E940E048FE291E04D -:100E8000CF910C94CB038FE291E00E94710363E059 -:100E90008FE291E00E940E044CE062E271E08FE28A -:100EA00091E00E942F0449E069E171E08FE291E056 -:100EB0000E942F044CE06DE071E08FE291E00E940F -:100EC0002F046FEF8FE291E00E940E048FE291E019 -:100ED0000C94CB038FE291E00E9471038FE291E0CA -:100EE0000E94E304BC01660F771F680F791F8FE231 -:100EF00091E00E941A048FE291E00C94CB038FE200 -:100F000091E00E9471038FE291E00E94D504682F66 -:100F100087E292E00E949E016FEF8FE291E00E94D3 -:100F20000E048FE291E00C94CB038FE291E00E94DB -:100F300071038FE291E00E94D504682F84E292E071 -:100F40000E949E016FEF8FE291E00E940E048FE2FB -:100F500091E00C94CB038FE291E00E94710387E251 -:100F600092E00E940302682F8FE291E00E940E043B -:100F70008FE291E00C94CB038FE291E00E94710329 -:100F800084E292E00E940302682F8FE291E00E94C7 -:100F90000E048FE291E00C94CB038FE291E00E946B -:100FA00071038FE291E00E94E304BC018EE192E0C4 -:100FB0000E942B026FEF8FE291E00E940E048FE2FD -:100FC00091E00C94CB038FE291E00E9471038FE2D9 -:100FD00091E00E94E304BC018BE192E00E942B02AD -:100FE0006FEF8FE291E00E940E048FE291E00C948B -:100FF000CB038FE291E00E9471038FE291E00E94A7 -:10100000D504682F8AE192E00E945A02BC018FE267 -:1010100091E00E941A048FE291E00C94CB038F922E -:101020009F92AF92BF92CF92DF92EF92FF920F9377 -:101030001F93CF93DF938FE291E00E94D504882E17 -:101040008FE291E00E94D504982E8FE291E00E94F9 -:10105000E304EC018FE291E00E94E3045C018FE283 -:1010600091E00E94E304A89E6001A99ED00CB89E66 -:10107000D00C11246FEF84E292E00E949E01CC1507 -:10108000DD054CF5BE018EE192E00E942B02A89591 -:10109000682D8AE192E00E945A027C01692D8AE162 -:1010A00092E00E945A028C018FE291E00E9471034B -:1010B000B7018FE291E00E941A04B8018FE291E03B -:1010C0000E941A048FE291E00E94CB03CA0DDB1D3F -:1010D000CC15DD05BCF28FE291E00E9471036FEF49 -:1010E0008FE291E00E940E048FE291E0DF91CF91B8 -:1010F0001F910F91FF90EF90DF90CF90BF90AF9036 -:101100009F908F900C94CB031F920F920FB60F926B -:1011100011240BB60F922F933F934F935F936F93CE -:101120007F938F939F93AF93BF93EF93FF938FE240 -:1011300091E00E947D03FF91EF91BF91AF919F914C -:101140008F917F916F915F914F913F912F910F9070 -:101150000BBE0F900FBE0F901F9018951F920F920D -:101160000FB60F9211240BB60F922F933F934F930C -:101170005F936F937F938F939F93AF93BF93EF93FF -:10118000FF938FE291E00E949C03FF91EF91BF914A -:10119000AF919F918F917F916F915F914F913F910F -:1011A0002F910F900BBE0F900FBE0F901F901895B0 -:1011B0000E948B006FEF87E292E00E949E012FE772 -:1011C0008AE196E0215080409040E1F700C00000A5 -:1011D00060E087E292E00E949E0118E1D8E004C03E -:1011E00026E02A95F1F700C080912E018823C1F3F3 -:1011F00010922E010FB6F894A895109360000FBEC0 -:10120000D0936000A8958FE291E00E94D504C82F8A -:10121000682F84E292E00E949E018C2F90E0FC01F6 -:101220003197EC30F10530F4EE5AFF4F0C9476090B -:101230000E94E3078FE291E00E946C030FB6F894DE -:10124000A895809160008861809360001092600092 -:101250000FBEC6CF0E94F907EDCF0E94CD07EACF9F -:101260000E94BC07E7CF0E94AB07E4CF0E9495071E -:10127000E1CF0E947F07DECF0E946A07DBCF0E948A -:101280004307D8CF0E942A07D5CF0E940F08D2CF9C -:101290008AE292E00E94180142E06AE272E087E28C -:1012A00092E00E94570143E06AE272E084E292E039 -:1012B0000E94570145E06AE272E081E292E00E94FA -:1012C000570140E06AE272E08EE192E00E9426025D -:1012D00041E06AE272E08BE192E00E942602109205 -:1012E0002F011092F5011092F4010895EE0FFF1FE7 -:1012F0000024001C0BBE0790F691E02D0994F89491 -:02130000FFCF1D -:1013020001020103000202010103030209626F618B -:101312007264696E666F2E680031353A35393A3338 -:0E132200390041707220203220323031390003 +:100780009083C80FD11DC853DF4F88818093C60066 +:10079000DF91CF911F910F910895CF92DF92EF9249 +:1007A000FF920F931F93CF93DF93EC01C85BDE4F53 +:1007B0002881211109C0DF91CF911F910F91FF90E6 +:1007C000EF90DF90CF9008958C018881780197EBAE +:1007D000E91A9EEFF90AF701808318826801F6EBA7 +:1007E000CF1AFEEFDF0A81E0F6018083688187E897 +:1007F00092E00E949E019881F7018081981788F409 +:100800009091C00095FFFCCF888191E0980F98836C +:10081000E801C80FD11DC853DF4F88818093C600FF +:10082000CACFF6011082C7CFFC01E85BFE4F2081E2 +:1008300031E0320F3083820F911DFC01E853FF4FEE +:1008400060830895FC01E85BFE4F208131E0320FA8 +:100850003083DC01A20FB11DA853BF4F6C932081E0 +:1008600031E0320F3083820F911DFC01E853FF4FBE +:10087000708308950F931F93CF93DF938C01DC0156 +:10088000A85BBE4F8C9191E0980F9C93F801E80F04 +:10089000F11DE853FF4F40839FEF940F442371F005 +:1008A000EB0139912C9141E0420F4C93F801E20F9A +:1008B000F11DE853FF4F3083915098F7DF91CF91AE +:1008C0001F910F910895EF92FF920F931F93CF9373 +:1008D000DF937C01EC01C85BDE4F888191E0980FCB +:1008E0009883F701E80FF11DE853FF4F40835FEF56 +:1008F000540F442309F46BC0FB0120E041E9BF0120 +:100900003191888191E0980F98838701080F111D1C +:10091000C80188539F4FDC013C93DB018C91282751 +:10092000822F842720FD282F30E035952795842FAE +:10093000822720FD282F30E035952795842F8227A8 +:1009400020FD282F30E035952795842F822720FD24 +:10095000282F30E035952795842F822720FD282FDA +:1009600030E035952795942F922720FD292F30E0F0 +:1009700035952795942F922720FD292F30E0359526 +:100980002795842F822720FD282F2695515008F087 +:10099000B6CF888191E0980F9883F701E80FF11D99 +:1009A000E853FF4F2083F701E953FF4F808191E027 +:1009B000980F9083D701A80FB11DA95BBF4F8C91F1 +:1009C000DF91CF911F910F91FF90EF90089520E05C +:1009D000E0CFFC01E953FF4F208131E0320F30833B +:1009E000820F911DFC01E95BFF4F80810895FC019E +:1009F000E953FF4F208131E0320F3083DC01A20F39 +:100A0000B11DA95BBF4F2C91308141E0430F408362 +:100A1000830F911DFC01E95BFF4F3081822F90E035 +:100A2000932B0895CF93DF93DC01EC01CB5BDF4F79 +:100A3000888199818230910509F469C0A0F40097FA +:100A400009F440C0019749F48C91FD01E80FF11DB4 +:100A5000618382E090E0998388838C918F5F8C938F +:100A6000DF91CF9108958330910509F4D6C00497A2 +:100A7000A1F78091C6008FE792E00197F1F700C0DF +:100A800000008091C00087FDF4CFFD01EC5BFF4FBB +:100A90008081882309F436C19EEFFD01E85BFE4F9B +:100AA000808121E0280F2083FD01E80FF11DE8532C +:100AB000FF4F9083198218828C918F5F8C93DF9106 +:100AC000CF910895613408F41FC18091C6008FE76B +:100AD00092E00197F1F700C000008091C00087FD0F +:100AE000F4CFFD01E85BFE4F808191E0980F908389 +:100AF000FD01E80FF11DE853FF4F8EEF808319824F +:100B000018828C918F5F8C93DF91CF9108958C9197 +:100B1000FD01E80FF11D6183FD01EC5BFF4F80815A +:100B200068276083808180FF04C0908181E98927E4 +:100B30008083808190E0959587958083808180FF78 +:100B400004C0908181E989278083808190E0959518 +:100B500087958083808180FF04C0908181E9892707 +:100B60008083808190E0959587958083808180FF48 +:100B700004C0908181E989278083808190E09595E8 +:100B800087958083808180FF04C0908181E98927D7 +:100B90008083808190E0959587958083808180FF18 +:100BA00004C0908181E989278083808190E09595B8 +:100BB00087958083808180FF04C0908181E98927A7 +:100BC0008083808190E0959587958083808180FFE8 +:100BD00004C0908181E989278083808190E0959588 +:100BE000879580839C9111968C911197981709F4A1 +:100BF00098C09C9111968C911197981708F42DCF5D +:100C00008091C6008FE792E00197F1F700C00000E5 +:100C10008091C00087FDF4CF64CF8C91FD01E80F77 +:100C2000F11D6183FD01EC5BFF4F808168276083CC +:100C3000808180FF04C0908181E989278083808141 +:100C400090E0959587958083808180FF04C0908196 +:100C500081E989278083808190E0959587958083BD +:100C6000808180FF04C0908181E989278083808111 +:100C700090E0959587958083808180FF04C0908166 +:100C800081E989278083808190E09595879580838D +:100C9000808180FF04C0908181E9892780838081E1 +:100CA00090E0959587958083808180FF04C0908136 +:100CB00081E989278083808190E09595879580835D +:100CC000808180FF04C0908181E9892780838081B1 +:100CD00090E0959587958083808180FF04C0908106 +:100CE00081E989278083808190E09595879580832D +:100CF00084E090E0998388838C918F5F8C93DF915F +:100D0000CF9108959FEFC9CE11966C931197FD0175 +:100D1000EC5BFF4F10821C9281E090E09983888306 +:100D20009CCE83E090E09983888397CECF92DF9228 +:100D3000FF920F931F93CF93DF93FC01E953FF4F73 +:100D40009C01285B3E4F6901D1E9640F711DAEEF34 +:100D5000FA2E208131E0320F3083AC01420F511D59 +:100D60009A01295B3F4FD9011C91103809F475C0D5 +:100D7000113408F010E0C0E020E0308141E0430F82 +:100D80004083AC01430F511DDA01A95BBF4F0C91A9 +:100D9000202720FD2D2730E035952795422F20FF75 +:100DA00002C04D2F4227242F30E035952795422F42 +:100DB00020FF02C04D2F422750E055954795242F24 +:100DC00040FF02C02D2F242730E035952795422F74 +:100DD00020FF02C04D2F422750E055954795242F04 +:100DE00040FF02C02D2F242730E035952795422F54 +:100DF00020FF02C04D2F422750E055954795242FE4 +:100E000040FF02C02D2F24272695C117A0F1CF5FE8 +:100E10001C1708F0B2CF3091C600AFE7B2E01197CF +:100E2000F1F700C000003091C00037FDF4CF211170 +:100E300014C0F601208131E0320F3083820F911D02 +:100E4000FC01E853FF4F8FEF8083DF91CF911F911B +:100E50000F91FF90DF90CF900895D6012C9131E053 +:100E6000320F3C93AC01420F511D9A0128533F4F62 +:100E7000D901FC926ECFAB014C0F511DDA010C93DE +:100E8000C6CFCF938FE291E00E9471038FE291E091 +:100E90000E94E904C82F6FEF8FE291E00E941404D2 +:100EA0006C2F8FE291E00E9414048FE291E0CF91C9 +:100EB0000C94CD038FE291E00E94710363E08FE216 +:100EC00091E00E9414044CE062E271E08FE291E054 +:100ED0000E943A0449E069E171E08FE291E00E94EA +:100EE0003A044CE06DE071E08FE291E00E943A0438 +:100EF0006FEF8FE291E00E9414048FE291E00C9476 +:100F0000CD038FE291E00E9471038FE291E00E9495 +:100F1000F704BC01660F771F680F791F8FE291E01D +:100F20000E9422048FE291E00C94CD038FE291E0C5 +:100F30000E9471038FE291E00E94E904682F87E824 +:100F400092E00E949E016FEF8FE291E00E941404F4 +:100F50008FE291E00C94CD038FE291E00E94710347 +:100F60008FE291E00E94E904682F84E892E00E94F9 +:100F70009E016FEF8FE291E00E9414048FE291E0F6 +:100F80000C94CD038FE291E00E94710387E892E018 +:100F90000E940302682F8FE291E00E9414048FE206 +:100FA00091E00C94CD038FE291E00E94710384E8FC +:100FB00092E00E940302682F8FE291E00E941404E5 +:100FC0008FE291E00C94CD038FE291E00E947103D7 +:100FD0008FE291E00E94F704BC018EE792E00E944C +:100FE0002B026FEF8FE291E00E9414048FE291E0F8 +:100FF0000C94CD038FE291E00E9471038FE291E0A7 +:101000000E94F704BC018BE792E00E942B026FEF75 +:101010008FE291E00E9414048FE291E00C94CD03E2 +:101020008FE291E00E9471038FE291E00E94E90457 +:10103000682F8AE792E00E945A02BC018FE291E099 +:101040000E9422048FE291E00C94CD038F929F9234 +:10105000AF92BF92CF92DF92EF92FF920F931F93C6 +:10106000CF93DF938FE291E00E94E904882E8FE214 +:1010700091E00E94E904982E8FE291E00E94F7042B +:10108000EC018FE291E00E94F7045C018FE291E0B5 +:101090000E94F704A89E6001A99ED00CB89ED00CB7 +:1010A00011246FEF84E892E00E949E01CC15DD05CB +:1010B0004CF5BE018EE792E00E942B02A895682DA8 +:1010C0008AE792E00E945A027C01692D8AE792E049 +:1010D0000E945A028C018FE291E00E947103B701D5 +:1010E0008FE291E00E942204B8018FE291E00E9419 +:1010F00022048FE291E00E94CD03CA0DDB1DCC15C6 +:10110000DD05BCF28FE291E00E9471036FEF8FE288 +:1011100091E00E9414048FE291E0DF91CF911F9142 +:101120000F91FF90EF90DF90CF90BF90AF909F9086 +:101130008F900C94CD031F920F920FB60F92112433 +:101140000BB60F922F933F934F935F936F937F93C1 +:101150008F939F93AF93BF93EF93FF938FE291E0B1 +:101160000E947D03FF91EF91BF91AF919F918F916D +:101170007F916F915F914F913F912F910F900BBE97 +:101180000F900FBE0F901F9018951F920F920FB6E1 +:101190000F9211240BB60F922F933F934F935F93AF +:1011A0006F937F938F939F93AF93BF93EF93FF932F +:1011B0008FE291E00E949C03FF91EF91BF91AF916C +:1011C0009F918F917F916F915F914F913F912F915F +:1011D0000F900BBE0F900FBE0F901F9018950E949E +:1011E0008B006FEF87E892E00E949E012FE78AE173 +:1011F00096E0215080409040E1F700C0000060E0A0 +:1012000087E892E00E949E0118E1D8E004C026E041 +:101210002A95F1F700C080912E018823C1F3109226 +:101220002E010FB6F894A895109360000FBED093CE +:101230006000A8958FE291E00E94E904C82F682F12 +:1012400084E892E00E949E018C2F90E0FC0131978F +:10125000EC30F10530F4EE5AFF4F0C948D090E94EA +:10126000FA078FE291E00E946C030FB6F894A895FC +:1012700080916000886180936000109260000FBED2 +:10128000C6CF0E941008EDCF0E94E407EACF0E946B +:10129000D307E7CF0E94C207E4CF0E94AC07E1CF9B +:1012A0000E949607DECF0E948107DBCF0E945A077B +:1012B000D8CF0E944107D5CF0E942608D2CF8AE816 +:1012C00092E00E94180142E06AE872E087E892E04A +:1012D0000E94570143E06AE872E084E892E00E94CD +:1012E000570145E06AE872E081E892E00E94570108 +:1012F00040E06AE872E08EE792E00E94260241E058 +:101300006AE872E08BE792E00E94260210922F01B9 +:1013100010927501109274010895EE0FFF1F0024C2 +:10132000001C0BBE0790F691E02D0994F894FFCFB6 +:1013300001020103000202010103030209626F615D +:101340007264696E666F2E680030383A33393A3508 +:0E1350003700417072202033203230313900D6 :00000001FF diff --git a/firmware/adu.cpp b/firmware/adu.cpp index adabec2..d6eb119 100644 --- a/firmware/adu.cpp +++ b/firmware/adu.cpp @@ -1,6 +1,6 @@ #include "adu.h" -void ADU::init() +void ADU::init() volatile { // externe Referenz an AREF ADMUX = 0; @@ -9,7 +9,7 @@ void ADU::init() ADCSRA = _BV(ADEN) | _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0); } -uint16_t ADU::getValue(uint8_t channel) +uint16_t ADU::getValue(uint8_t channel) volatile { // lege Kanal fest ADMUX = (ADMUX & 0xE0) | channel; diff --git a/firmware/adu.h b/firmware/adu.h index ad4828e..8b63d59 100644 --- a/firmware/adu.h +++ b/firmware/adu.h @@ -8,8 +8,8 @@ class ADU { public: - void init(void); - uint16_t getValue(uint8_t); + void init(void) volatile; + uint16_t getValue(uint8_t) volatile; }; #endif // ADC_H diff --git a/firmware/global_vars.cpp b/firmware/global_vars.cpp index 2cd6483..1359c7e 100644 --- a/firmware/global_vars.cpp +++ b/firmware/global_vars.cpp @@ -1,11 +1,11 @@ #include "global_vars.h" volatile SPI spi; -volatile MCP23S17 beba0(*((SPI*) &spi), SPIADR::BEBA0); -volatile MCP23S17 beba1(*((SPI*) &spi), SPIADR::BEBA1); -volatile MCP23S17 sw(*((SPI*) &spi), SPIADR::SWITCH); -volatile TLC5615 dac0(*((SPI*) &spi), SPIADR::AA0); -volatile TLC5615 dac1(*((SPI*) &spi), SPIADR::AA1); +volatile MCP23S17 dio0(spi, SPIADR::BEBA0); +volatile MCP23S17 dio1(spi, SPIADR::BEBA1); +volatile MCP23S17 dsw(spi, SPIADR::SWITCH); +volatile TLC5615 dac0(spi, SPIADR::AA0); +volatile TLC5615 dac1(spi, SPIADR::AA1); volatile ADU adu; volatile USART usart; volatile bool nextRequest = false; diff --git a/firmware/global_vars.h b/firmware/global_vars.h index 84929c5..60bab49 100644 --- a/firmware/global_vars.h +++ b/firmware/global_vars.h @@ -7,9 +7,9 @@ #include "usart.h" extern volatile SPI spi; -extern volatile MCP23S17 beba0; -extern volatile MCP23S17 beba1; -extern volatile MCP23S17 sw; +extern volatile MCP23S17 dio0; +extern volatile MCP23S17 dio1; +extern volatile MCP23S17 dsw; extern volatile TLC5615 dac0; extern volatile TLC5615 dac1; extern volatile ADU adu; diff --git a/firmware/main.cpp b/firmware/main.cpp index e20e0e2..f8dcda3 100644 --- a/firmware/main.cpp +++ b/firmware/main.cpp @@ -11,15 +11,15 @@ void initAll() { - ((SPI*) &spi)->init(); + spi.init(); - ((MCP23S17*) &beba0)->setDirA(0x00); // alle Ausgang - ((MCP23S17*) &beba0)->setDirB(0xFF); // alle Eingang - ((MCP23S17*) &beba1)->setDirA(0x00); // alle Ausgang - ((MCP23S17*) &beba1)->setDirB(0xFF); // alle Eingang - ((MCP23S17*) &sw)->setDirB(0xFF); // alle Eingang + dio0.setDirA(0x00); // alle Ausgang + dio0.setDirB(0xFF); // alle Eingang + dio1.setDirA(0x00); // alle Ausgang + dio1.setDirB(0xFF); // alle Eingang + dsw.setDirB(0xFF); // alle Eingang - ((ADU*) &adu)->init(); + adu.init(); usart.init(); usart.initRX(); @@ -39,7 +39,7 @@ void handleRequest() wdt_reset(); const uint8_t req = usart.readByte(); - ((MCP23S17*) &beba1)->writePortA(req); + dio1.writePortA(req); switch(req) { @@ -104,9 +104,9 @@ int main() initAll(); // Reset anzeigen - ((MCP23S17*) &beba0)->writePortA(0xFF); + dio0.writePortA(0xFF); _delay_ms(100); - ((MCP23S17*) &beba0)->writePortA(0x00); + dio0.writePortA(0x00); while(1) { diff --git a/firmware/mcp23s17.cpp b/firmware/mcp23s17.cpp index 251ead8..18cfbe0 100644 --- a/firmware/mcp23s17.cpp +++ b/firmware/mcp23s17.cpp @@ -1,10 +1,10 @@ #include "mcp23s17.h" -MCP23S17::MCP23S17(SPI& spi, uint8_t adr) : spi(spi), adr(adr) +MCP23S17::MCP23S17(volatile SPI& spi, uint8_t adr) : spi(spi), adr(adr) { } -void MCP23S17::setDirA(uint8_t dir) const +void MCP23S17::setDirA(uint8_t dir) const volatile { spi.setAdr(adr); spi.pushByte(MCP23S17_OPCODE | MCP23S17_WRITE); @@ -13,7 +13,7 @@ void MCP23S17::setDirA(uint8_t dir) const spi.setAdr(SPIADR::NONE); } -void MCP23S17::setDirB(uint8_t dir) const +void MCP23S17::setDirB(uint8_t dir) const volatile { spi.setAdr(adr); spi.pushByte(MCP23S17_OPCODE | MCP23S17_WRITE); @@ -22,7 +22,7 @@ void MCP23S17::setDirB(uint8_t dir) const spi.setAdr(SPIADR::NONE); } -void MCP23S17::writePortA(uint8_t port) const +void MCP23S17::writePortA(uint8_t port) const volatile { spi.setAdr(adr); spi.pushByte(MCP23S17_OPCODE | MCP23S17_WRITE); @@ -31,7 +31,7 @@ void MCP23S17::writePortA(uint8_t port) const spi.setAdr(SPIADR::NONE); } -void MCP23S17::writePortB(uint8_t port) const +void MCP23S17::writePortB(uint8_t port) const volatile { spi.setAdr(adr); spi.pushByte(MCP23S17_OPCODE | MCP23S17_WRITE); @@ -40,7 +40,7 @@ void MCP23S17::writePortB(uint8_t port) const spi.setAdr(SPIADR::NONE); } -uint8_t MCP23S17::readPortA(void) const +uint8_t MCP23S17::readPortA(void) const volatile { spi.setAdr(adr); spi.pushByte(MCP23S17_OPCODE | MCP23S17_READ); @@ -50,7 +50,7 @@ uint8_t MCP23S17::readPortA(void) const return port; } -uint8_t MCP23S17::readPortB(void) const +uint8_t MCP23S17::readPortB(void) const volatile { spi.setAdr(adr); spi.pushByte(MCP23S17_OPCODE | MCP23S17_READ); diff --git a/firmware/mcp23s17.h b/firmware/mcp23s17.h index 4179c0f..c25491a 100644 --- a/firmware/mcp23s17.h +++ b/firmware/mcp23s17.h @@ -3,28 +3,31 @@ #include "spi.h" -constexpr uint8_t MCP23S17_DIRA = 0x00; -constexpr uint8_t MCP23S17_DIRB = 0x01; -constexpr uint8_t MCP23S17_PORTA = 0x12; -constexpr uint8_t MCP23S17_PORTB = 0x13; -constexpr uint8_t MCP23S17_READ = 0x01; -constexpr uint8_t MCP23S17_WRITE = 0x00; -constexpr uint8_t MCP23S17_OPCODE = 0x40; + class MCP23S17 { public: - MCP23S17(SPI&, uint8_t); - void setDirA(uint8_t dir) const; - void setDirB(uint8_t dir) const; - void writePortA(uint8_t) const; - void writePortB(uint8_t) const; - uint8_t readPortA(void) const; - uint8_t readPortB(void) const; + MCP23S17(volatile SPI&, uint8_t); + void setDirA(uint8_t dir) const volatile; + void setDirB(uint8_t dir) const volatile; + void writePortA(uint8_t) const volatile; + void writePortB(uint8_t) const volatile; + uint8_t readPortA(void) const volatile; + uint8_t readPortB(void) const volatile; private: - SPI& spi; + volatile SPI& spi; const uint8_t adr; + + // constants + constexpr static uint8_t MCP23S17_DIRA = 0x00; + constexpr static uint8_t MCP23S17_DIRB = 0x01; + constexpr static uint8_t MCP23S17_PORTA = 0x12; + constexpr static uint8_t MCP23S17_PORTB = 0x13; + constexpr static uint8_t MCP23S17_READ = 0x01; + constexpr static uint8_t MCP23S17_WRITE = 0x00; + constexpr static uint8_t MCP23S17_OPCODE = 0x40; }; #endif // MCP23S17_H diff --git a/firmware/requests.cpp b/firmware/requests.cpp index e3a2960..052b1c5 100644 --- a/firmware/requests.cpp +++ b/firmware/requests.cpp @@ -32,7 +32,7 @@ void rqDigitalWrite0() { usart.initTX(); uint8_t port = usart.readByte(); - ((MCP23S17*) &beba0)->writePortA(port); + dio0.writePortA(port); usart.writeByte(USART::MSG_OK); usart.flush(); @@ -42,7 +42,7 @@ void rqDigitalWrite1() { usart.initTX(); uint8_t port = usart.readByte(); - ((MCP23S17*) &beba1)->writePortA(port); + dio1.writePortA(port); usart.writeByte(USART::MSG_OK); usart.flush(); @@ -51,7 +51,7 @@ void rqDigitalWrite1() void rqDigitalRead0() { usart.initTX(); - uint8_t port = ((MCP23S17*) &beba0)->readPortB(); + uint8_t port = dio0.readPortB(); usart.writeByte(port); usart.flush(); } @@ -59,7 +59,7 @@ void rqDigitalRead0() void rqDigitalRead1() { usart.initTX(); - uint8_t port = ((MCP23S17*) &beba1)->readPortB(); + uint8_t port = dio1.readPortB(); usart.writeByte(port); usart.flush(); } @@ -68,7 +68,7 @@ void rqAnalogWrite0() { usart.initTX(); uint16_t value = usart.readInt(); - ((TLC5615*) &dac0)->setValue(value); + dac0.setValue(value); usart.writeByte(USART::MSG_OK); usart.flush(); @@ -78,7 +78,7 @@ void rqAnalogWrite1() { usart.initTX(); uint16_t value = usart.readInt(); - ((TLC5615*) &dac1)->setValue(value); + dac1.setValue(value); usart.writeByte(USART::MSG_OK); usart.flush(); @@ -88,7 +88,7 @@ void rqAnalogRead() { usart.initTX(); uint8_t channel = usart.readByte(); - uint16_t value = ((ADU*) &adu)->getValue(channel); + uint16_t value = adu.getValue(channel); usart.writeInt(value); usart.flush(); } @@ -105,15 +105,15 @@ void rqAdcDacStroke() //usart.writeByte(USART::MSG_OK); count *= delta; - ((MCP23S17*) &beba1)->writePortA(0xFF); + dio1.writePortA(0xFF); for(int16_t i = start; i < count; i += delta) { - ((TLC5615*) &dac0)->setValue(i); + dac0.setValue(i); wdt_reset(); - uint16_t val_a = ((ADU*) &adu)->getValue(channel_a); - uint16_t val_b = ((ADU*) &adu)->getValue(channel_b); + uint16_t val_a = adu.getValue(channel_a); + uint16_t val_b = adu.getValue(channel_b); usart.initTX(); usart.writeInt(val_a); @@ -127,8 +127,8 @@ void rqAdcDacStroke() }; union doubleword dw; - dw.word[0] = ((ADU*) &adu)->getValue(channel_a); - dw.word[1] = ((ADU*) &adu)->getValue(channel_b); + dw.word[0] = adu.getValue(channel_a); + dw.word[1] = adu.getValue(channel_b); uint8_t ret = 0; do diff --git a/firmware/selftest.cpp b/firmware/selftest.cpp index c75a77d..5bb0680 100644 --- a/firmware/selftest.cpp +++ b/firmware/selftest.cpp @@ -13,7 +13,7 @@ void testBEBA0(void) { for(uint8_t i = 0; i < 9; i++) { - ((MCP23S17*) &beba0)->writePortA(_BV(i)); + dio0.writePortA(_BV(i)); if(i < 8) _delay_ms(200); @@ -24,7 +24,7 @@ void testBEBA1(void) { for(uint8_t i = 0; i < 9; i++) { - ((MCP23S17*) &beba1)->writePortA(_BV(i)); + dio1.writePortA(_BV(i)); if(i < 8) _delay_ms(200); @@ -35,22 +35,22 @@ void testDAC0(void) { for(uint16_t i = 0; i < 1024; i++) { - ((TLC5615*) &dac0)->setValue(i); + dac0.setValue(i); _delay_ms(1); } _delay_ms(100); - ((TLC5615*) &dac0)->setValue(0); + dac0.setValue(0); } void testDAC1(void) { for(uint16_t i = 0; i < 1024; i++) { - ((TLC5615*) &dac1)->setValue(i); + dac1.setValue(i); _delay_ms(1); } _delay_ms(100); - ((TLC5615*) &dac1)->setValue(0); + dac1.setValue(0); } void testMirror() @@ -61,9 +61,9 @@ void testMirror() // Endlosschleife while(1) { - ((TLC5615*) &dac0)->setValue(((ADU*) &adu)->getValue(0)); - ((TLC5615*) &dac1)->setValue(((ADU*) &adu)->getValue(1)); - ((MCP23S17*) &beba0)->writePortA(((MCP23S17*) &beba0)->readPortB()); - ((MCP23S17*) &beba1)->writePortA(((MCP23S17*) &sw)->readPortB()); + dac0.setValue(adu.getValue(0)); + dac1.setValue(adu.getValue(1)); + dio0.writePortA(dio0.readPortB()); + dio1.writePortA(dsw.readPortB()); } } diff --git a/firmware/spi.cpp b/firmware/spi.cpp index 699b8d8..3ab2b41 100644 --- a/firmware/spi.cpp +++ b/firmware/spi.cpp @@ -4,7 +4,7 @@ SPI::SPI(void) { } -void SPI::init(void) const +void SPI::init(void) const volatile { // Konfiguriere SPI DDRs @@ -23,7 +23,7 @@ void SPI::init(void) const setAdr(SPIADR::NONE); } -void SPI::setAdr(uint8_t adr) const +void SPI::setAdr(uint8_t adr) const volatile { PORTD &= ~(_BV(DMUX1) | _BV(DMUX2) | _BV(DMUX3)); PORTD |= (adr & 0x01) ? _BV(DMUX1) : 0; @@ -31,7 +31,7 @@ void SPI::setAdr(uint8_t adr) const PORTD |= (adr & 0x04) ? _BV(DMUX3) : 0; } -uint8_t SPI::pushByte(uint8_t b) const +uint8_t SPI::pushByte(uint8_t b) const volatile { SPDR = b; while(!(SPSR & _BV(SPIF))); diff --git a/firmware/spi.h b/firmware/spi.h index 4468c3e..13f1286 100644 --- a/firmware/spi.h +++ b/firmware/spi.h @@ -28,9 +28,9 @@ class SPI { public: SPI(void); - void init(void) const; - void setAdr(uint8_t) const; - uint8_t pushByte(uint8_t) const; + void init(void) const volatile; + void setAdr(uint8_t) const volatile; + uint8_t pushByte(uint8_t) const volatile; }; diff --git a/firmware/tlc5615.cpp b/firmware/tlc5615.cpp index 521bef0..1438cea 100644 --- a/firmware/tlc5615.cpp +++ b/firmware/tlc5615.cpp @@ -1,10 +1,10 @@ #include "tlc5615.h" -TLC5615::TLC5615(SPI& spi, uint8_t adr) : spi(spi), adr(adr) +TLC5615::TLC5615(volatile SPI& spi, uint8_t adr) : spi(spi), adr(adr) { } -void TLC5615::setValue(uint16_t val) const +void TLC5615::setValue(uint16_t val) const volatile { spi.setAdr(adr); spi.pushByte(val >> 6); diff --git a/firmware/tlc5615.h b/firmware/tlc5615.h index 6709308..6194c8d 100644 --- a/firmware/tlc5615.h +++ b/firmware/tlc5615.h @@ -6,12 +6,12 @@ class TLC5615 { public: - TLC5615(SPI&, uint8_t); - void setValue(uint16_t) const; + TLC5615(volatile SPI&, uint8_t); + void setValue(uint16_t) const volatile; private: - SPI& spi; + volatile SPI& spi; const uint8_t adr; }; diff --git a/firmware/usart.cpp b/firmware/usart.cpp index 9057a92..49868da 100644 --- a/firmware/usart.cpp +++ b/firmware/usart.cpp @@ -56,7 +56,7 @@ void USART::handleRX(void) volatile void USART::handleTX(void) volatile { - ((MCP23S17*) &beba0)->writePortA(send_pos); + dio0.writePortA(send_pos); if(send_pos < send_len) { while (!(UCSR0A & (1<