make it volatile

This commit is contained in:
Tristan Krause 2019-04-03 08:40:14 +02:00
parent 4d2ea6013c
commit de7143887d
25 changed files with 368 additions and 377 deletions

View file

@ -136,13 +136,12 @@ std::vector<std::string> 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<char>(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)

View file

@ -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);
/*************************/

Binary file not shown.

View file

@ -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

View file

@ -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

Binary file not shown.

View file

@ -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;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -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

View file

@ -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;

View file

@ -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

View file

@ -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;

View file

@ -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;

View file

@ -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)
{

View file

@ -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);

View file

@ -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

View file

@ -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

View file

@ -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());
}
}

View file

@ -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)));

View file

@ -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;
};

View file

@ -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);

View file

@ -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;
};

View file

@ -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<<UDRE0)));