diff --git a/B15F.elf b/B15F.elf index 3007bd3..2832be0 100644 Binary files a/B15F.elf and b/B15F.elf differ diff --git a/B15F.hex b/B15F.hex index d80459c..94f989d 100644 --- a/B15F.hex +++ b/B15F.hex @@ -6,11 +6,11 @@ :100050000C9464000C9464000C9464000C94640090 :100060000C9464000C9464000C9464000C94640080 :100070000C9464000C9464000C9464000C94640070 -:100080000C9464000C9464000C946400C601112468 +:100080000C9464000C9464000C946400E801112446 :100090001FBECFEFD0E4DEBFCDBF21E0A0E0B1E0D6 -:1000A00001C01D92AA30B207E1F710E0C7E4D0E02A -:1000B00004C02197FE010E94DF01C634D107C9F7B1 -:1000C0000E949E010C94E8010C9400001F920F9274 +:1000A00001C01D92AB30B207E1F710E0C7E4D0E029 +:1000B00004C02197FE010E940102C634D107C9F78E +:1000C0000E94BE010C940A020C9400001F920F9231 :1000D0000FB60F921124289A2FEF84E39CE0215051 :1000E00080409040E1F700C0000028982FEF84E3A3 :1000F0009CE0215080409040E1F700C00000EBCF31 @@ -49,15 +49,19 @@ :10030000B8010024660F771F001C660F771F001CC2 :10031000672F702D888199810E949D00602F660F44 :10032000660F888199810E949D0067E0888199818C -:10033000DF91CF911F910F910C949300209A2898F0 -:10034000A895789489E091E00E94810060E086E0C1 -:1003500091E00E94A8006FEF86E091E00E94C90042 -:100360006FEF83E091E00E94C900C0E0D0E0BE01E1 -:1003700080E091E00E94750182E48A95F1F700C067 -:100380002196C11584E0D80781F3F1CF89E091E08F -:100390000E94800042E069E071E086E091E00E9406 -:1003A000A30045E069E071E083E091E00E94A300D2 -:1003B00040E069E071E080E091E00C947201EE0FA2 -:1003C000FF1F0024001C0BBE0790F691E02D09943E -:0403D000F894FFCFCF +:10033000DF91CF911F910F910C94930010927C004C +:1003400087E880937A00089580917C00807E682BF6 +:1003500060937C0080917A00806480937A0083EAC5 +:1003600091E00197F1F700C0000080917A0086FDCE +:10037000FCCF8091780090917900089581E6809378 +:100380006000209A2898A89578948AE091E00E94CD +:10039000810060E087E091E00E94A8006FEF87E0B5 +:1003A00091E00E94C9006FEF84E091E00E94C900D3 +:1003B00080E091E00E949E0166E080E091E00E9472 +:1003C000A401BC0181E091E00E947501A895F4CFE1 +:1003D0008AE091E00E94800042E06AE071E087E0FC +:1003E00091E00E94A30045E06AE071E084E091E0C2 +:1003F0000E94A30040E06AE071E081E091E00C948B +:100400007201EE0FFF1F0024001C0BBE0790F69137 +:08041000E02D0994F894FFCFE0 :00000001FF diff --git a/Makefile b/Makefile index 7dd3114..3389530 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 +OBJECTS = main.o spi.o mcp23s17.o tlc5615.o adu.o COMPILE = $(COMPILER_PATH) $(CFLAGS) diff --git a/adu.cpp b/adu.cpp new file mode 100644 index 0000000..7038168 --- /dev/null +++ b/adu.cpp @@ -0,0 +1,28 @@ +#include "adu.h" + +void ADU::init() +{ + // externe Referenz an AREF + ADMUX = 0; + + // ADC aktiviert, prescaler = 128 + ADCSRA = _BV(ADEN) | _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0); +} + +uint16_t ADU::getValue(uint8_t channel) +{ + // lege Kanal fest + ADMUX = (ADMUX & 0xE0) | channel; + + // starte Konvertierung + ADCSRA |= _BV(ADSC); + + // warte Konvertierungszeit ab + _delay_us(13 * 1000000 * 128 / F_CPU + 1); + + // warte auf Ende + while(ADCSRA & _BV(ADSC)); + + // liefere Ergebnis + return ADCW; +} diff --git a/adu.h b/adu.h new file mode 100644 index 0000000..ad4828e --- /dev/null +++ b/adu.h @@ -0,0 +1,15 @@ +#ifndef ADC_H +#define ADC_H + +#include +#include +#include + +class ADU +{ +public: + void init(void); + uint16_t getValue(uint8_t); +}; + +#endif // ADC_H diff --git a/main.cpp b/main.cpp index 5e1e204..3a60a8a 100644 --- a/main.cpp +++ b/main.cpp @@ -4,6 +4,7 @@ #include #include "mcp23s17.h" #include "tlc5615.h" +#include "adu.h" #define LED B0 @@ -12,6 +13,7 @@ SPI spi; MCP23S17 beba0(spi, SPIADR::BEBA0); MCP23S17 sw(spi, SPIADR::SWITCH); TLC5615 dac0(spi, SPIADR::AA0); +ADU adu; ISR(WDT_vect) { @@ -27,7 +29,7 @@ ISR(WDT_vect) int main() { - //WDTCSR = _BV(WDIE) | _BV(WDP3) | _BV(WDP0); + WDTCSR = _BV(WDIE) | _BV(WDP3) | _BV(WDP0); dMode(LED, OUT); dWrite(LED, LOW); wdt_reset(); @@ -38,14 +40,13 @@ int main() beba0.setDirA(0x00); // alle Ausgang beba0.setDirB(0xFF); // alle Eingang sw.setDirB(0xFF); // alle Eingang + + adu.init(); while(1) { - for(uint16_t i = 0; i < 1024; i++) - { - dac0.setValue(i); - _delay_us(10); - } + dac0.setValue(adu.getValue(6)); + wdt_reset(); } return 0; diff --git a/spi.h b/spi.h index 8999756..60cb6f8 100644 --- a/spi.h +++ b/spi.h @@ -19,6 +19,7 @@ enum SPIADR { AA1 = 1, BEBA0 = 2, BEBA1 = 3, + EXT = 4, SWITCH = 5, NONE = 7, };