diff --git a/B15F.aps b/B15F.aps
index 1790901..e1c2651 100644
--- a/B15F.aps
+++ b/B15F.aps
@@ -1 +1 @@
-B15F22-Mar-2019 14:29:5425-Mar-2019 12:57:42241022-Mar-2019 14:29:5444, 19, 0, 730AVR GCCB15F.elfF:\JTAGICE mkIIATmega1284.xmlfalseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31Auto000spi.cppmain.cppMakefilemcp23s17.cppspi.hmcp23s17.hdefault\B15F.lssdefault\B15F.mapc++NOatmega12811
B15F.elfc++\0-Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enumsdefaultYESMakefileatmega128411
B15F.elfdefault\1C:\avr8-gnu-toolchain-win32_x86\avr\include\C:\avr8-gnu-toolchain-win32_x86\avr\lib\libc.a-Wall -gdwarf-2 -DF_CPU=20000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enumsdefault0C:\avr8-gnu-toolchain-win32_x86\bin\avr-g++.exeC:\WinAVR-20100110\utils\bin\make.exeF:\spi.hF:\mcp23s17.hF:\spi.cppF:\main.cppF:\MakefileF:\mcp23s17.cpp00000main.cpp100001Makefile100002spi.h100003spi.cpp100004mcp23s17.h100005mcp23s17.cpp1
+B15F22-Mar-2019 14:29:5425-Mar-2019 16:14:23241022-Mar-2019 14:29:5444, 19, 0, 730AVR GCCB15F.elfF:\JTAGICE mkIIATmega1284.xmlfalseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31Auto000spi.cppmain.cppMakefilemcp23s17.cppTLC5615.cppadu.cppselftest.cppvars.cppspi.hmcp23s17.hTLC5615.hadu.hselftest.hvars.hdefault\B15F.lssdefault\B15F.mapc++NOatmega12811
B15F.elfc++\0-Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enumsdefaultYESMakefileatmega128411
B15F.elfdefault\0C:\avr8-gnu-toolchain-win32_x86\avr\include\C:\avr8-gnu-toolchain-win32_x86\avr\lib\libc.a-Wall -gdwarf-2 -DF_CPU=20000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enumsdefault0C:\avr8-gnu-toolchain-win32_x86\bin\avr-g++.exeC:\WinAVR-20100110\utils\bin\make.exe00000main.cpp100001Makefile100002selftest.h100003selftest.cpp100004vars.h1
diff --git a/B15F.elf b/B15F.elf
index 2832be0..a45fc7b 100644
Binary files a/B15F.elf and b/B15F.elf differ
diff --git a/B15F.hex b/B15F.hex
index 94f989d..3d8537e 100644
--- a/B15F.hex
+++ b/B15F.hex
@@ -6,62 +6,93 @@
:100050000C9464000C9464000C9464000C94640090
:100060000C9464000C9464000C9464000C94640080
:100070000C9464000C9464000C9464000C94640070
-:100080000C9464000C9464000C946400E801112446
+:100080000C9464000C9464000C946400D10211245C
:100090001FBECFEFD0E4DEBFCDBF21E0A0E0B1E0D6
-:1000A00001C01D92AB30B207E1F710E0C7E4D0E029
-:1000B00004C02197FE010E940102C634D107C9F78E
-:1000C0000E94BE010C940A020C9400001F920F9231
+:1000A00001C01D92A131B207E1F710E0C7E4D0E032
+:1000B00004C02197FE010E94F802C634D107C9F797
+:1000C0000E94CC020C9401030C9400001F920F922A
:1000D0000FB60F921124289A2FEF84E39CE0215051
:1000E00080409040E1F700C0000028982FEF84E3A3
:1000F0009CE0215080409040E1F700C00000EBCF31
-:100100000895249A259A2698279A529A539A549A8F
-:1001100080E58CBD81E08DBD5A985B985C985A9AB9
-:100120005B9A5C9A08955A985B985C9860FD5A9A1D
-:1001300061FD5B9A62FD5C9A08956EBD0DB407FE89
-:10014000FDCF8EB50895FC017183608342830895CD
-:100150001F93CF93DF93EC01162F6A8188819981D9
-:100160000E94930060E4888199810E949D0060E074
-:10017000888199810E949D00612F888199810E94C8
-:100180009D0067E088819981DF91CF911F910C9448
-:1001900093001F93CF93DF93EC01162F6A81888120
-:1001A00099810E94930060E4888199810E949D005A
-:1001B00061E0888199810E949D00612F88819981E9
-:1001C0000E949D0067E088819981DF91CF911F9106
-:1001D0000C9493001F93CF93DF93EC01162F6A8149
-:1001E000888199810E94930060E4888199810E94AE
-:1001F0009D0062E1888199810E949D00612F888124
-:1002000099810E949D0067E088819981DF91CF915B
-:100210001F910C9493001F93CF93DF93EC01162F43
-:100220006A81888199810E94930060E48881998124
-:100230000E949D0063E1888199810E949D00612F49
-:10024000888199810E949D0067E088819981DF9172
-:10025000CF911F910C9493001F93CF93DF93EC01E8
-:100260006A81888199810E94930061E488819981E3
-:100270000E949D0062E1888199810E949D0060E05A
-:10028000888199810E949D00182F67E0888199815B
-:100290000E949300812FDF91CF911F9108951F93AA
-:1002A000CF93DF93EC016A81888199810E9493004A
-:1002B00061E4888199810E949D0063E18881998130
-:1002C0000E949D0060E0888199810E949D00182F06
-:1002D00067E0888199810E949300812FDF91CF91FF
-:1002E0001F910895FC01428308950F931F93CF93AC
-:1002F000DF93EC018B016A81888199810E949300D0
-:10030000B8010024660F771F001C660F771F001CC2
-:10031000672F702D888199810E949D00602F660F44
-:10032000660F888199810E949D0067E0888199818C
-:10033000DF91CF911F910F910C94930010927C004C
-:1003400087E880937A00089580917C00807E682BF6
-:1003500060937C0080917A00806480937A0083EAC5
-:1003600091E00197F1F700C0000080917A0086FDCE
-:10037000FCCF8091780090917900089581E6809378
-:100380006000209A2898A89578948AE091E00E94CD
-:10039000810060E087E091E00E94A8006FEF87E0B5
-:1003A00091E00E94C9006FEF84E091E00E94C900D3
-:1003B00080E091E00E949E0166E080E091E00E9472
-:1003C000A401BC0181E091E00E947501A895F4CFE1
-:1003D0008AE091E00E94800042E06AE071E087E0FC
-:1003E00091E00E94A30045E06AE071E084E091E0C2
-:1003F0000E94A30040E06AE071E081E091E00C948B
-:100400007201EE0FFF1F0024001C0BBE0790F69137
-:08041000E02D0994F894FFCFE0
+:1001000080E191E00E94A20060E08DE091E00E9419
+:10011000C9006FEF8DE091E00E94EA0060E08AE0A4
+:1001200091E00E94C9006FEF8AE091E00E94EA002E
+:100130006FEF87E091E00E94EA0080E091E00C948C
+:10014000BF010895249A259A2698279A529A539A7D
+:10015000549A80E58CBD81E08DBD5A985B985C987F
+:100160005A9A5B9A5C9A08955A985B985C9860FDDD
+:100170005A9A61FD5B9A62FD5C9A08956EBD0DB45A
+:1001800007FEFDCF8EB50895FC0171836083428325
+:1001900008951F93CF93DF93EC01162F6A81888116
+:1001A00099810E94B40060E4888199810E94BE0018
+:1001B00060E0888199810E94BE00612F88819981C9
+:1001C0000E94BE0067E088819981DF91CF911F91E5
+:1001D0000C94B4001F93CF93DF93EC01162F6A8128
+:1001E000888199810E94B40060E4888199810E948D
+:1001F000BE0061E0888199810E94BE00612F8881E4
+:1002000099810E94BE0067E088819981DF91CF913A
+:100210001F910C94B4001F93CF93DF93EC01162F22
+:100220006A81888199810E94B40060E48881998103
+:100230000E94BE0062E1888199810E94BE00612F08
+:10024000888199810E94BE0067E088819981DF9151
+:10025000CF911F910C94B4001F93CF93DF93EC01C7
+:10026000162F6A81888199810E94B40060E4888198
+:1002700099810E94BE0063E1888199810E94BE003D
+:10028000612F888199810E94BE0067E088819981F1
+:10029000DF91CF911F910C94B4001F93CF93DF9304
+:1002A000EC016A81888199810E94B40061E48881AF
+:1002B00099810E94BE0062E1888199810E94BE00FE
+:1002C00060E0888199810E94BE00182F67E08881D4
+:1002D00099810E94B400812FDF91CF911F910895E1
+:1002E0001F93CF93DF93EC016A81888199810E94EB
+:1002F000B40061E4888199810E94BE0063E1888135
+:1003000099810E94BE0060E0888199810E94BE00B0
+:10031000182F67E0888199810E94B400812FDF91B6
+:10032000CF911F910895FC01428308950F931F936D
+:10033000CF93DF93EC018B016A81888199810E94C0
+:10034000B400B8010024660F771F001C660F771FEA
+:10035000001C672F702D888199810E94BE00602F3C
+:10036000660F660F888199810E94BE0067E08881D0
+:100370009981DF91CF911F910F910C94B40010924D
+:100380007C0087E880937A00089580917C00807ECD
+:10039000682B60937C0080917A00806480937A005F
+:1003A00083EA91E00197F1F700C0000080917A00A4
+:1003B00086FDFCCF809178009091790008950F938D
+:1003C0001F93CF93DF9361E08DE091E00E940B01DA
+:1003D000C1E0D0E001E010E02FEF84E39CE0215089
+:1003E00080409040E1F700C00000B8010C2E01C031
+:1003F000660F0A94EAF78DE091E00E940B012196C6
+:10040000C930D10549F761E08AE091E00E940B0113
+:10041000C1E0D0E001E010E08FEF94E32CE08150E8
+:1004200090402040E1F700C00000B8010C2E01C050
+:10043000660F0A94EAF78AE091E00E940B01219688
+:10044000C930D10549F7C0E0D0E0BE0184E091E0B9
+:100450000E94960187E893E10197F1F700C0000040
+:100460002196C11594E0D90781F7C0E0D0E0BE0124
+:1004700081E091E00E94960187E893E10197F1F70E
+:1004800000C000002196C11594E0D90781F7DF91E3
+:10049000CF911F910F9108950F931F93CF93DF93E7
+:1004A00061E08DE091E00E940B01C1E0D0E001E04D
+:1004B00010E02FEF84E39CE0215080409040E1F772
+:1004C00000C00000B8010C2E01C0660F0A94EAF7C4
+:1004D0008DE091E00E940B012196C930D10549F7CA
+:1004E000DF91CF911F910F9108950F931F93CF9399
+:1004F000DF9361E08AE091E00E940B01C1E0D0E06F
+:1005000001E010E02FEF84E39CE021508040904018
+:10051000E1F700C00000B8010C2E01C0660F0A947C
+:10052000EAF78AE091E00E940B012196C930D105DB
+:1005300049F7DF91CF911F910F910895CF93DF93EA
+:10054000C0E0D0E0BE0184E091E00E94960187E81F
+:1005500093E10197F1F700C000002196C11594E0E6
+:10056000D90781F7DF91CF910895CF93DF93C0E052
+:10057000D0E0BE0181E091E00E94960187E893E11E
+:100580000197F1F700C000002196C11594E0D9074A
+:1005900081F7DF91CF9108950E9480000E94DF01D2
+:1005A000FDCF80E191E00E94A10042E060E171E0B6
+:1005B0008DE091E00E94C40043E060E171E08AE0D8
+:1005C00091E00E94C40045E060E171E087E091E0C5
+:1005D0000E94C40040E060E171E084E091E00E948C
+:1005E000930141E060E171E081E091E00C949301BE
+:1005F000EE0FFF1F0024001C0BBE0790F691E02DAC
+:060600000994F894FFCFFD
:00000001FF
diff --git a/Makefile b/Makefile
index 3389530..e8ace70 100644
--- a/Makefile
+++ b/Makefile
@@ -12,7 +12,7 @@ OUTPUT = B15F.elf
HEX = B15F.hex
CFLAGS = -std=c++14 -O3 -mmcu=atmega1284 -DF_CPU=20000000 -DPIO_DISABLE_I2C
LDFLAGS =
-OBJECTS = main.o spi.o mcp23s17.o tlc5615.o adu.o
+OBJECTS = main.o spi.o mcp23s17.o tlc5615.o adu.o selftest.o vars.o
COMPILE = $(COMPILER_PATH) $(CFLAGS)
diff --git a/b15f.aws b/b15f.aws
index d904edc..a961817 100644
--- a/b15f.aws
+++ b/b15f.aws
@@ -1 +1 @@
-
+
diff --git a/main.cpp b/main.cpp
index 3a60a8a..21ebe35 100644
--- a/main.cpp
+++ b/main.cpp
@@ -2,19 +2,12 @@
#include
#include
#include
-#include "mcp23s17.h"
-#include "tlc5615.h"
-#include "adu.h"
+#include "vars.h"
+#include "selftest.h"
+
#define LED B0
-
-SPI spi;
-MCP23S17 beba0(spi, SPIADR::BEBA0);
-MCP23S17 sw(spi, SPIADR::SWITCH);
-TLC5615 dac0(spi, SPIADR::AA0);
-ADU adu;
-
ISR(WDT_vect)
{
while(1)
@@ -27,26 +20,32 @@ ISR(WDT_vect)
WDTCSR |= _BV(WDIE);
}
-int main()
+void initAll()
{
- WDTCSR = _BV(WDIE) | _BV(WDP3) | _BV(WDP0);
- dMode(LED, OUT);
- dWrite(LED, LOW);
- wdt_reset();
-
- sei();
-
spi.init();
+
beba0.setDirA(0x00); // alle Ausgang
beba0.setDirB(0xFF); // alle Eingang
+ beba1.setDirA(0x00); // alle Ausgang
+ beba1.setDirB(0xFF); // alle Eingang
sw.setDirB(0xFF); // alle Eingang
adu.init();
+}
+
+int main()
+{
+ /*WDTCSR = _BV(WDIE) | _BV(WDP3) | _BV(WDP0);
+ dMode(LED, OUT);
+ dWrite(LED, LOW);
+ wdt_reset();
+ sei();*/
+
+ initAll();
while(1)
{
- dac0.setValue(adu.getValue(6));
- wdt_reset();
+ testAll();
}
return 0;
diff --git a/selftest.cpp b/selftest.cpp
new file mode 100644
index 0000000..f8b532f
--- /dev/null
+++ b/selftest.cpp
@@ -0,0 +1,49 @@
+#include "selftest.h"
+
+void testAll(void)
+{
+ testBEBA0();
+ testBEBA1();
+ testDAC0();
+ testDAC1();
+}
+
+void testBEBA0(void)
+{
+ for(uint8_t i = 0; i < 9; i++)
+ {
+ beba0.writePortA(_BV(i));
+
+ if(i < 8)
+ _delay_ms(200);
+ }
+}
+
+void testBEBA1(void)
+{
+ for(uint8_t i = 0; i < 9; i++)
+ {
+ beba1.writePortA(_BV(i));
+
+ if(i < 8)
+ _delay_ms(200);
+ }
+}
+
+void testDAC0(void)
+{
+ for(uint16_t i = 0; i < 1024; i++)
+ {
+ dac0.setValue(i);
+ _delay_ms(1);
+ }
+}
+
+void testDAC1(void)
+{
+ for(uint16_t i = 0; i < 1024; i++)
+ {
+ dac1.setValue(i);
+ _delay_ms(1);
+ }
+}
diff --git a/selftest.h b/selftest.h
new file mode 100644
index 0000000..0957a55
--- /dev/null
+++ b/selftest.h
@@ -0,0 +1,12 @@
+#ifndef SELFTEST_H
+#define SELFTEST_H
+
+#include "vars.h"
+
+void testAll(void);
+void testBEBA0(void);
+void testBEBA1(void);
+void testDAC0(void);
+void testDAC1(void);
+
+#endif // SELFTEST_H
diff --git a/vars.cpp b/vars.cpp
new file mode 100644
index 0000000..414a876
--- /dev/null
+++ b/vars.cpp
@@ -0,0 +1,9 @@
+#include "vars.h"
+
+SPI spi;
+MCP23S17 beba0(spi, SPIADR::BEBA0);
+MCP23S17 beba1(spi, SPIADR::BEBA1);
+MCP23S17 sw(spi, SPIADR::SWITCH);
+TLC5615 dac0(spi, SPIADR::AA0);
+TLC5615 dac1(spi, SPIADR::AA1);
+ADU adu;
diff --git a/vars.h b/vars.h
new file mode 100644
index 0000000..6654e2a
--- /dev/null
+++ b/vars.h
@@ -0,0 +1,16 @@
+#ifndef VARS_H
+#define VARS_H
+
+#include "mcp23s17.h"
+#include "tlc5615.h"
+#include "adu.h"
+
+extern SPI spi;
+extern MCP23S17 beba0;
+extern MCP23S17 beba1;
+extern MCP23S17 sw;
+extern TLC5615 dac0;
+extern TLC5615 dac1;
+extern ADU adu;
+
+#endif // VARS_H