From f55fd367ee4a024382ae886b4421cefb1b2bf8f6 Mon Sep 17 00:00:00 2001 From: Tristan Krause Date: Mon, 25 Mar 2019 15:40:36 +0100 Subject: [PATCH] adc geht --- B15F.elf | Bin 9880 -> 10152 bytes B15F.hex | 34 +++++++++++++++++++--------------- Makefile | 2 +- adu.cpp | 28 ++++++++++++++++++++++++++++ adu.h | 15 +++++++++++++++ main.cpp | 13 +++++++------ spi.h | 1 + 7 files changed, 71 insertions(+), 22 deletions(-) create mode 100644 adu.cpp create mode 100644 adu.h diff --git a/B15F.elf b/B15F.elf index 3007bd3f1efeaa4b5458d83e991a8857a30f3840..2832be0f1c4fcb5597b42c1102d9fc824186ff59 100644 GIT binary patch delta 2073 zcmZ9NU1(HC6vxj@Hcd=4tk$k6RNZWMHw9m86G24i8k$o2P5r3-05?Uesn#M*WR=i+ zmr8A=AKuKSu_**;6xLP(x)0VOtq-NTC?thaq3y#JVwLz%){1$ky8WNI_hu(|VD3G? zbLM=^oVmM4UMRkFI4+N-oJ69#HA2L*o`@u-z&r^iVQW1kJs!Z5ZKj>q@Mv~E85TEG zn^=mI?3IVSL z4`Oyfu?Y4JkWK&W9JVCwG87ze0L*uUUkj;@YzWWP5q0_j6}XnLQXK=E3C2VG1K2G1 zvT3)F@Cp>aVFnfdYc7Dj3N{li#Et(P#qi*Qmx7!9OC3eQ?O?N@4lsJB2cPJ(%!tV^ zi;rki$lcr%vXH-IAnnWaftdvOSSbDaloHy3eA^7 z{5yCA&QYFH(lszqo*&Rf=$2-U`b6%A{2Mv5KRDmRVDE%1(g~BZ3XfN^gK=cfgC%$o z)Lg(D;Fm?MW$%N{9_QH~cCL$0=rheWhzqWxufPMC8<1Zw7zLO;I{}smko4_m!NG{5 zhd+nbPlWgnUTESuY;PvDYX%)~vaRHuvp-1BL$ncz-{Wj%_8dlUS5 zL#^N#5_b9A2{!#R;3@q6%zj22LkoJq+#ViWP!8-}DUZJZn+cDH{7-=!MD4RX1O65f zVjK?}qIY|GRc=|Xu4ik%y1DFL3~$=<`imXwp4zy2`?kJKJ-hn1b?+!$U+%~Sp1QMl zcW+iHkISuIUH3iY~FyZB4>rrPBr^=dGc7USwH zR9DnhJS%Emx?Q%V)D!7+=3~?|+34Mz4wQx<*e=mL%wYQvY4dWTGPV#5uTw<-1HEBF AF#rGn delta 1880 zcmZ9NT}V_>5Xa}<@Ro9sexrJRQ4%hHj)|`(ozDeTJXHqpc~%)-F;&{w*zffx0M=brVG}6A&t?E zA2DebQj5^d(v&r4O=?YoZfW;c+Izwgn#z6rerKz-n9%$y{4o}%i7Kos)=fLsC{+rI zMH!`XK^!F|Xu6YjXdS`9ta{C8MG>FTgxJu@bVU5RDI6Wf@00&JonAp6k$4*NjLlxO zabDqNh1a&SLBDx(louio4%~(|%K@{&9WgWPI+cL=)_5?NfgfR3fYZSzAj|t}6}~L7 zhYXz>px6u;j#Il@_#dfCv0~P;-;-RP~R?!AH*?wOh za#124ryL*yjJpwoJ66PuJ^aHR*r)g(R=67MoM&)_XQ5cZXi+R;5Ez|+ujM8 zKL9Qw4QoL0A6EFe!V}C0tW%7(83D%aR<(TRj{PkSHUjnO4b#7L}3?V@f+atMT^s*IDiaOz+6G0 z?cmt=fTQJ1v4r=7eell!v;T3h^GDHxR@H!qa4l7~-GJ}rqju9Z*gx?3Wwt{j6mrWZ zz;no&hZk?81zalyJO_OeDn?xK2nS&ocZ8L{ir3P9eq-;za{L*=qJFMOrv)ggI7(1-uBp2(BuY4s28cw1DHa&CjgOJeu>s zT*~EyKaxpQni#wNV&sP)$Po?3bZUS|4ZDa2kd`yJ`8@ss D2m}@- 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, };