From 2d26632f418ba907e0c4dc0edb3a47ea92a23d69 Mon Sep 17 00:00:00 2001 From: Tristan Krause Date: Wed, 3 Apr 2019 14:09:58 +0200 Subject: [PATCH] ADC revised --- driver/gnuplotscript.gp | 6 +++--- driver/main | Bin 61936 -> 61936 bytes driver/main.cpp | 4 ++-- driver/test_plot | Bin 37120 -> 37120 bytes firmware/B15F.elf | Bin 19192 -> 19332 bytes firmware/adu.cpp | 19 ++++++++++++------- firmware/adu.h | 21 ++++++++++++++++++--- firmware/interrupts.cpp | 5 +++++ firmware/spi.cpp | 4 ++-- 9 files changed, 42 insertions(+), 17 deletions(-) diff --git a/driver/gnuplotscript.gp b/driver/gnuplotscript.gp index 5b0e0d3..a3f7c3e 100644 --- a/driver/gnuplotscript.gp +++ b/driver/gnuplotscript.gp @@ -11,9 +11,9 @@ 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,41 'U_{GS} [V] = 560' left -set label at 0,42 'U_{GS} [V] = 580' left -set label at 0,42 'U_{GS} [V] = 600' left +set label at 0,39 'U_{GS} [V] = 560' left +set label at 0,39 'U_{GS} [V] = 580' left +set label at 0,39 'U_{GS} [V] = 600' left unset output set terminal qt unset output diff --git a/driver/main b/driver/main index 6d56236f2088ca5c38e09ad8b9184c0488b04a62..0cb40b6626a65986221f2720800b34206ad5117c 100755 GIT binary patch delta 120 zcmezHnEAtF<_#@OBF97zFXUP7u-v6y&-MzpREfvKb$Od-Fy*OQGBGfC^qT4=f+$UPCjR(*(qH U;S`D=@s^{`3F8;Q^24BOHhM3-(^I_uhN&z4zXG?XOd%o&$0i2z4!5Z&+EG9o&`ysH*ZXgPe_FtwNv9N)UMRDSz3}Jgea@H zi@ajDqKjJItn&ZWY}_xY`hfpddDfxyzk9{TN&k-KeewT)xBUOUYya=w|BHk1dqIU8 zEO3X1P^cn2d1A2g)RU(MFP?aD!{E({7f%h|{7-N5|N96ZVUz#g&j0i^`3bww;9z%9 ze`MmRjsVF|WEOrRkl9JINSX+uE=dz1d_pL5R)is(JwkGbNE(G`K0O;^kexjiIhb=w z{vwV&jyX5t`7ZJxFLPd+5BZr3(1Iw0!crztlosPzF}~|W=He*9ToR>F8f7>uOOud{ za*{48(29~SQur;d#GEGSqB5<5s;Gu^RF`y7lh)#XZPYSg!x}yhrq8EB|-iP+1{pbKX zfDSYbrb94P3KYY6KAd?ZMq#uRD8_O=mOt9#*(YG4X)>K61&XOWpT<0$&cIB}!fedJ zT%OItd@NvJNEcx-^J4x}w3IHT%jpWN#45=t)^KkP&(^W8qZ{Z3x)Gb1H`6WH#=MR0 z;QkJ}6T7e*dw8}N`Pg>?}P;&(ZVr z0xmLN!ev}#H(bMY_M7x3y-jb^JM=E@;XWR4_7IQo3m$X!1W%cN#WOsYg2Zq1C0rDSvOem zfK_Bckm3bz_`n7`eBlTF44^o;>yJ#(*#nRnfp8)V=RpW&b|Hj0lx9U3!V!T;MDZ*d z*_dOH9kIy4Sx)3a9C9Pxlt;Lf1mt7SM+B`h!&l0LDOf4aUXr;a&r6{+ z%5YW|Nl0cdhw{u7XhoWWROU)ZW3G%UsLEcArc*;rKDQ=&E!0LG)I~kXr8J-ox!1_l zguN+qQxT#xXKv2i0vTw<-io%NZD>2%UUDfNxZjDnv*c2`@VqO!p*wo;yeI92-ssD{ zzO*0uV*mzX5C&rihVsrZIvgV~5~HLLWegq5^Ko=MCSalzqD-cfMW`~BPQ!G}kV2GM zyknTdK8Mbu^XPmmz#{g=Qi!sIeHrsIx*RL8605LU3RTw9by$xL*vQx2L^n&J%2v9K zv+bsx?7OgA3RU*feb|o!IEX`1sB(lJ#W5+Xa-1ILb57EeBCB$W`7}L)pE>)P{T$BY zBKt+oFVoBHSLs!H4c9rpL2uGqxWltM?01>(;XWSVAs*ouJjN3|#WU_cqc3>x1^o># z@rv`;^mqD({(-l6hxhov`A2-hXZA1nllf2jjs8Wy)9)fo`CDY=FE+BO3RJkk0(W?b zP-IoDQkd#ZePH9PG!GJxk7xO4eiT4K6hdJXK~W@{iqjG(#XF^F z8Cr&xMG}%x4&_k+6_LuFR9XpXsEjI7xLS>-qdID!rU+MS(b}{Qtt*AA^=Sh%d>LJi6l zNcA$GahZ3o(yN?Zr#I+LDN?<~v)j0Xdz{^)_wfJ^@d%GOe@vg?DW0)EqtEFJ`Ws&2 zHM`+=<~R5QZ}ATA@c|$437_#rM5$ltpZF$4so&{$&i@vX{GcP!O_8G9+^7ZaBErps zdcrEA+`Oo_6y;`Pw=?^~kD0&XmmJhzM7!yn2Ou+_k(o0mvy%oPnAwF8DatJ?4U?kW z!g(HnDE4S6$}NUw=PVXEm~&D?9CI9vr|~oo5|EEQA1y!&@VykGh1iSmy%eFvXfc|I z;yf=wOPNa3GDzZ`B%URs9D8{w+N~l@;VhL_LK^of(<-QnYCKCvb<{A`;=DHMpe|?i zP@lPh6z$fCHbxUPm7?96bEgG!23ktdZml?L!`z0pqwS?=w+`%`m^;xfw5zEbdk^Lw zBAZ(;+FOct>q`y&c;255paU_8c@TGpU?}@=e%ppKkK}wL9c3EBvoRvZZ5$ns2|S-j zCt)(CU@CW~(dl#sok3?}Hs-L;p>r`G3)mN$7SknCjN4Ma#&YHrQjFV5?ykaWtl`;O zx}In2nKv>UHnDHU7Hq?I&UVlpbQj%4_n7vw@56rf131X%9HNJD1V?#x3_md+$4TZB zBD>pZX2TiN&zzs*UBd+_yW1stndeue7`JQe*SU9{-VoW1AK?EF{*qkqe}V=7t0ydQ zhlk0NTHysB*euF_>=sq{nly`>_=kmBgg-J_+$G)OAq)YMC-oGW5ooarr^QRkV(}J+ zAc-FXSZpE~E{mPoMF>JIzSIx=T>yky_-g=!S@`P!gjx9O0E;e#TLMIcg+B*KPRgGL zELlwaxxf-EMO$1V+7iMXLPL>NWV3`xF_v%I8SCyrsZh`loxp{6-B%y1*uXVOB$`rohniuOEvbYB7r7Y(or2X zP>b{0QXZPuQkS!OrUra&L*_5XuErU55f}xxZ!*Hpf zWdzSgVl>ajV60ToGLExxqL5`G`$XnRm?#QcrqC&zPovZ544%(mp2<85bJ*v|7P8Fa zd_ER(wvaB83R#xWCEQs?m(vxdRqU(y8f)0s&~@zV=z8`IbQ9euiqImKE$my_w=!?T zcI?1T&UbUZhwhb%SoX8;XFh;~Qc=rc?jFHW_9LR0@dFG4s61_sN(5v(+pLL!2hE&XQi{8dvp55WuJ?4A#J{~eZ!b4Hq@|Zs6>zsw8)6X49xF<^=iy)e%UGZ&>rX(COe#ZdyK*h}(WY34F0E0uIlrb&FQ^0Yk9E1)7$ zkcvu3LlvG^p;b{0>8OqxsKv9Id`2Bwo7Uy5F0D@+NTu8x(MFs#MpNddv>BSC1zK{J zAxgWqVs1s-vbSY!hxX`zj_4$ncJD&FqMKCOy(jm3GWSAn^pQ%t_oMyzy#5$~ff$4# zoDY#L<35~uIP(apjQeQz(adA%7*WQ39P>CjflkCEsf_zno=@R?I-N#ma6Vm>b)Q9N z(m8Z4=JR|W&lfN+pbN1GOW2ptWpo)`julubm33dmXRKjfL)V!$uy0`AL^op#wqhH$ zV~14MeHY!$y}f+)UgrIDpGa~)Am=3aL-Y{O590`q;wR32q9^DHdXoF6=xLl`J}V`= zU*NOOGhg8R0=>e1NwzF=vimjWYxFw3$(>;2?!82 znVB6mbo3;a^8{mI?zts?aWzc*@_fqkQt z;<1VQn?$O|R`xB-+vzs;opdMrF1m|-H}hWXW8Y5?;2`q>QOV;F&ky4$XGiHzoF8XC zNl&n!Vm>XUdYoZDi*xMfd454k^|;8{WzH_sE4aq_HF|?y=WE>L*)81W?3PILxW{~t z`My-i;~{;>y~E3ksfZL$Au4&Qa!&JfW46GPa}R3e+*71^db4}8+o+A& z;Rgr1CTq-To|%|+-qD#eBM?r`oHUs8VCE3n%AQ$yH$+tS4C5@TsNxwxBe)kyqi8hE zMq?0b%1I4zJd308G@j<=GZXl%yv+GID5>4g3H0H{*3ayHC?pI^4&TOcGTHLM4Ssms&v@Ys%)<8=0 zY{=f2XHD6g$fkKVqZ#Zi_^@SjoJa z=c}04(6w}(Y`W)0<_*{+s#y8)|Nr10zX=s?;D_XbzYLc6KX-!vcndFh!v{8#o%%t8 z1OCVa-IUp?2ty#8$RhF2|E&KArY@_S6hcFhmA}zo2tzm`5oL9!?y}J|2HCA1CQsR% zR!?EbWwrh%jybp0OUh&Q7KQ}mHRZGV2txrBwA!dm6q4-JE()WF)mJKN^%F&z6KQd) z_MZ|~hbW0srqWh_VJK_OBqdpO@s9u+Ad*qenpu>W0%@SAXmv^{G}W2~L9%JI5-MAR zMVd8)IfRC?hlr|H{#+o1$yT$5i)z*|QJq$|Mj%q8qq;SkMv0pAAK7R&QOg=5)v?Bk z+Scr%t~Don4pE2JvF4KMTH`p66ZNgRMLlag&4YN+z?zpmLAIeaAI*<^q7iLmEhrjV z3!yM`A<@KIgcg= zg*Azmr{y`Xz??!WidNQCn#x`YX{ao^6;JZs2VBdNW$DQzM;Sex@+GoEMA=Ikvw&!DZOj@CA`wJ_Sr z+7|85-qeX_9htk(PNIvoEBCsH&eYJw+Jkl%U9G*i)04dyb06AUbhGwl?#Dd9G>{JD zdFQ=>6S5m_&tj1c? z2A-`KeWVR^6XzR6KkH`ZE!ZmhTDQ|3QeW#%x|=(@Ip52?hr9cj_v0Y@L3)TD;`|8n z5!wFMqoTj{7>=`_}Sr-u%BZ-M=!_@v|gf@*ssuwVvzMJ_pgY7 z*6Z}D>_F>Hp5MZ4X`uBU&+akbr}w$@koh5fBn`6u!sk5Y*;CG+a`r3xGik8(1$`j~ zTVHYhn;2q!&HjoS-f;ew{T<%2f1n>Y`zQ^ue&L-@VyN{`&cD#V=r`_tr{C!hIS=y^ zVhDzMxrxF2P2Ry??qU!fN{4!R^2`cv&b_D)Y_Q7?^YZ16AG3q!8gnLQe=*D}fCjKT zInT_Vg$B|f&a#N%ULowkG?aTTF~TdHhVeX%vq>s=!`>xdQhqh|ylD%xRoe<})fYSC#WFhIkK1&+sHJg17 zW{U}!=rxaf3)mM*(a_^or z+3Nvk4|w(vzcBwopK|93ea>h8%GnF{U&T~voK5w5#k;TZim&rKXTQ_8+dT5h1reSje3ZQn9N@+PNGx2 zy_mf?_lB34=Iz6oAJ2T*?d*Q+{@ig;opYTzfM)^hfs~*9=N-&>pqTFM;+c!HP?}Ym z;vK?y7-w1etO)LgvuER3G;|Nit~}oqc9p{FjjV!_e7qJ<<2BNV*>9^=6o{mPGg@+XRuG_ zd?xcuS!15zFt2 zHP(oE-W%CB@Ohi*7Hs9&7WN&?+nIN9ZztW!*)G#wKF6@1^ZlG1=I#M8*ZT-PM2~TP zl=EZUIl|XC!G4Nor*Vq2(>N>5@jlP9bIj*)0hib>@)=i{ukaby*sszX>^JBw_M7xB zpLL6ScjP?R`#yaj&GmjHJD<+=e$4!s@8JoaF~8vbXL6qB{hH5sE*5yd;`}!;-}?=H z&9gVW_XplGzvcWRU;6|5NA?fg|H8e`oPWVL&i}#>?tBvqd<4(FQ$@_hJRdhPo6hGS zBF~dNs0X{1dU3~#+Ncj_zSKrFYVa3xd>rgL4PX!8E{$^eJKraqvv9tjNE$)2aW_gV^vS_zX6GyxIgpF{Ie8vOTsEh`rJl;>V~_7wICG?hJ# zxe~1+yNE87s&Q6>v+C?Mc()cc)Zw%1p+3**ai_kt$fqIC>Wd{ljoBNDB{qKi|34IV zeu|yor`AaPV|T$n`V#!@ZNU$T1%JsWyulw5$wuw)g9ZouO_`{U%m_3&X%+;-g%E@y zt0|0zBf`ed140y{kqt4DDjRE4g&`+$Np7;aZEnI4k37h0v%pQ{qlWw_h(aigB9gmo zF`K(EB-%Vgaaxj=q@}2#G|JdKrLr^`=FNQayeL8|tG0XAP;L5t>MLY8Oq>%;qbaqXjZdEp2|n&C7{jXV}8TOj|g@#B4eXb8HcEo=4}}A`v0xW1%gIMu`QsXlWr`WXmQkrb}!w z$Sy6V%dp%QiyYDlTTWqEiB+~-(rR0rSZ&MAoLhD+`+8fvSZB*4t*0Ao37jR+d~)7Q zH%a+rx7zZHt+oOvB(~7))R?#13X2`Kf?}7gD05NfqGBhEeYdTc*keniiL!fbC74Sv zmlS)k-&RWO!+u*CT1NH&J!nf32VnG&Eg9vIB#zoD(DLF4jM;F^mO@jdW421{X{aQQ z)8n?vs3M)PRijnKNn5%&fs?ixvS(~HnQMwuwpyqu&QRm*XIouy+Ez!LrG|612DCos z4Wx6nMzk^Kjl>1|kEY_httoSJG!vKTC0h$|(bkeZgSn-+Ot0G7vbSb#%UK)tcH)Z3 zn6KM9h->twts`?MbY|~NyV9<*H*7tadx#shZsIn*W$Vq{Q}(8<5AXJsZrKKMe*klT zafjZq4d%{3I!MlUY{Pjrlz9Z_L&ZIMm$Q4ek#vN(ZyUut8e^D8ieGHwn8z`X$2jrO zHbFeFO{7!U4O1~mJf@GN={%dso$0(gi+L93bLd<;n|pJykmvKn6Wb!r7s&lFeaimC zwv_jlNss9h+j6Yr&Pv&*wl%WP=u_J|tY=>p>Is1+M1^Y|p7vh8M74vKS z!TBrp_k8AS@sa*vd&~PDc=i#WWZyG?uzh9z%$=`1|4RSFH_m_XHNMM!unX}I3wQq( zpY87Aom~~5>=yBn`J>&_$6I{0YwSL0PN+Y-v#vINZPP1_*Li|O)*rUWZdk*#( z&U4XN*)N=Zv&XZ?(FE?r%iTEpZZE)|m-h>BH!piW6y$j!6h;xA6&63}4|{R;M4p%C zosyiF;hj?KWjQa)UXHzt_}iY$S$X#IG)YnH6=_A@Po-&`r*fwfs`6e{&MGUyo=&T9 zw+5|7YjVE^=XKcYqBe6q&g!EfdwurCv;lV;F*i`$>`nR1ChX1Fn^Qvua|Uh2vzCf# zZ^Pc2w&koHI&$8QcRTaB?G=l?GiP17(+yp@*F)A~??roXuMh3Ty?(SGcl%2!b+Zq^ zAl?~_As8xau@9#sFq(Hp(Q$muQGCW2?vGMD>|>cnE1vdAeAaly-97;mF-h{UPv!Yk z?oH*+4CZNc4xck!u~G{>r1{MAnCDBL_60m&!r3D3FJfM-c-fcp%&?4kC0&gb%xn2t zD;0118t$#*{szuBVl(F(IN!p&iEd}##+@z9TNNMsPUaoVyLo3f^Bz8HhvIAB&%BTG z1M~nr#Q72K9G3OAACtA&PjGfrvDuIFS;u(qBzI4;pP^^DbB6h6<_mnzMVw>5OwV)o zqGGpSW4^&>TvGh(S9x}w&$(&3#eR!B4|slu-r*g?BR=o0qS=4p-UIe0>`$2=Ge72Y zp7GvuJY#>!v)`CsO1}2r>1)p4$okpe^ZYIQ2ln@}cBUMClj^=zl+3=>+0*%) z+PqVpy(Z_iQJ4F5Xg!|Q<-8smve)M`8gbT;Hla;9YsuGatT=r$m@_zQMO(19kqz?g zz}INc+@5Fcc&|M=F?ZxMyKvrxcBh?{EWSNB?@IgfP7gk#k9-!)o|!q2I(-LlX8`*^ z_CXlRK7eGbp&Vzv_OJD)D%^Oo>^FW|El^BIfjGP;y!%ecQBE3ty}RdhAh$OieY z>xeNoddjc*mQ(DN0@)&*(pBn1p7&L!wDtS_YC_v-aW_jGkoR+dY-e3^dh}1h4@~h zSNPi3&$cy|aU@Axpqll(TMX8|}5>Xr_P*QUfrDz%Yud>WZNJcqS zKt-fz7HScx%xUyrRhSJ`QB89f>9hu|4x=?uOY;!5XCfiG&41) zEi_LlgSJF#w2`c`?fJO?!E3%Z(mXkMZ_jP^t?^hO`_ML*43>Q4t?AO@R; z(4m@-G>i_%2#mxijOK3$jizI%VI0O|qG=MHj47I3no6geW@x@*2JHc^ORyBn_z$9CIrB=o0;@C!G_i)Rq3h{7tk?YIypeemHnVT0Td852mI?l1 z2i-w;(Vf_hJ=m-1$RzgDeK;Tmh=cSHj^L;kARW^(i(|~k>2Z2O3zYLIYB zEkt@sf5kH`6d~dTeL-JpS;cS6ujniKJ2kv9z16~m;T_(aKGIM4tc6Qo=vOU5e9>CDUYDPAW&sYZa7oT6tPdsi;*{D!^z8XK7k0O;u906lOyur4oA;tuk|( zQklIft;$|it16q$Ttlm(RA;ZQr7P)LbyQPoX*D=cr!{GHr4Fs7)lzEHI<$^fTdJqk zQR*?*r}ee^N?qngT0Ny9b3?5WXZ4iEw1L);HlYoarnIrvm^N0LX-$Llh%W|8|}$?ccqKgi}UVEH?0rt#okBhOuL(UXnlFsmwf>3uk@hZwSnlb z^rAi4`)ETsAIv_KeF*z7r8je5Z8-CAI+Bj0qv;4`fHq3$j{(|Pr5_!nP2kyBWuP_= z<1s-Rq)n91hG>(N!P->LCMiR;X`D@=(>a^24AExuIWySja6UsBPK~o++C142)R>2B z3uH%X3z_FCW3)x`Y&0FIEmlThw6+9Gv7CJ+=S!6F+A2AZ(N-wqwAH+~lC$-kt(G05 zZQyJpHemy28?lYg*i5(b&Nghv7G;vQi#uDD$=Xh3g0@5M6SdvSL~RdtbG}EJqV3~+ zKMr7@GF3Z756gX;c2Jq79p&C3Wx95R`6uolqbKMI?jGm-49`z-b{eOY8PqUS`!>XrH)a_{jcM&P%j!@_f1WCue^uOSQlFjBm;^x>Wn2EOn@S#$U=x zxbS37BMe(Sd?WBMOo#rDoY%0vP&JFoO^Tb#XWC$aqi8#zMT8A`%ypYpc>~o zcQs{=BNO*BbME9k6MGis0A;Nsm^};6_*FodS2& zUq~^|HaQYGFUp+AT|;r^qRJLWDYhexqWh=Hh>eG5WtEcR6 zG@$jBosLGdAvH8cbM7^z8M3<_ZFs-Avdht$dl||eM|(b_E$?^Wc{}cPkn>JQXP$TE zS!edn-0!UHcJz>EyB$3_>#FQ^^pX31x&yl${b?^{A2sIPj=}7Mm}$EdiqBcc`6|xWaCZ&e$g>TcZ(v`q9CK{t`DW&=eD-GLC&wP%+pHXS>}21CeS8ml z=mGBS;r=1IkIy+m_j2zL?;c`5%AJF9KkoR6v*S3y*$JMV#0ft89AEnsJ&lvfNymBa zoZ~akv5%1no&Nv>h z-{<{@y#IjDe9Zoc{VDqs`YWIRRMwbJJ6^Cqr?2QM&R^3P%Fm8B^bPxa-uqoS>-fy~ z@Q%;>%5Td%xu0~rRn9xU@%)qA&+_byzu?|iCj}{+W~u{=w{7 zxSxfupM~eaaIuH+UO3Of_!=(mW#u!%c*d{(!+eovm;57XHqK&rH<~#Y@8sm&c;3my z{d|0HIk=x!Ij!^K|No(|t8fGV`n<%ywk8bxYbt`D#xD4&SrY%)SMZMjgfINS4|603 z^+zV?$c#WZO<8CVTnI6R(lCUZB4{L{5RDjQN31C)&4oBqJk4WDpm~uG1yB%$Ohsr> z6hoq}$QGw1P|{S2mN6w!Lo&*tyskM2HHG{#^o#_=zIjH44xlh_SYOjGGJOvenOB_ zyeK~phPZv_dV$%}3)U=$gl)S|X-CL}}YSS9J78^_(=|R>5LpY2hrenHY9AiFCkJA&>a0;hQXXwwmFYMwxJqM!~*)P*e zFnR^oa2+=!Kk6rL;WqBzuIV1V&);l&Kp#=VFL;b6c#2|p=U;bk_kHVzXF&8;Y1b$As8+_Pzs@;x>E_^EQ~oE5$xeG8ii@_OG-qf~KbCv;{KsaM_mB&)GEdcW$WEt*8G25{DzlkqGaKgUxsX$thXtlZoGrv+DNc5&9;XA9ulbOl!G@yM;L(eo&)c)pH(E&F=9o-@M+Y+~O`4O_5P&r1`OZP?DflYIyCZn_J* z^?Y*POZT$xr-lQ1e&kgS(?je>=n=gD3d$a%$2dEw7gBy=K0!~?Q}h%)OV84CdSN*m zJ;&Jvy~uwq>P3}{?3d|fy%>rp*KnQvI{S4!QMy5I>cyqooZn--CwUk zYp4#rrj&{E%z7-A_|)rAmdLnw1rY6#OC()wzI z-k9?SYNXys4M!xqAqvsRrZ;77LK~?$n6vB6&{)kyV>yqb#vG?-@VuECueVTh>n+(^ zsCj6-l%eL;Td4`itGAKO&s;!n$KFoOr+472y_%o7px#z3tas+Domxci#GOuRA-xOd zojLEM7Ugbny&GqpXjioub1}UK=Uvp2%q8^hQb}5h^OAZm_8w|!y{A-G@2!@R`m*;? zlk~n)GBuRf`=LJuaXvt;K+DqSuC9;a&PcU}KAwA{Wz#vUrBC8~tXf;2$k{lxjx<)S$6iODAZyI^ z^=aIhOed=i^r>_@&!#g^Qyc0t*=J#f+K4vLXG@LrIqY-P#`;{$lWj_y=nF7kZAP2X z7W#5NV}Y8Xui*Y7xi{69urFg?rncn#-x_l(eHCYGc)pr>jnrCSC)-wEtG3nGtH$0= z-@v?4?j7_kY8!nsXItqewIh26eLMROdDe+`Ku3KS-9`7%-D)R&FWsYd*7tL^TkWPF zquRPCYvB%k%xPjUVe&rhg5Iq%2ZS3jxt zX78(?;rt|L=XiEX9iX4*{4D!L&d>4ug4zeh-cP@z_SY}Vd7yrcXBXAM`gQipvi&(5 zsNdu>uCw2k9jf0@hv~P}A?!owF#Q2{ZmA>m`|42r4t>b^L*_@gFZU7p6Sr+{*upmp^lVZa{d}Gx%)~QtG{J8yiv#SY@Gg%ciyUF=~(?EcRu3- z=U;gKnX~umB>j^*foGFAo50y*{hK;o|E`V;P66eVqQcIx)aa9naZh zIx)Z^O$u;VCk1#iyL0X-O$o44Z+P*po#(!ivCj<9IJc|Q1N=GjqnWtlpqV-MS7!w1 z>a>6Wb|+syP>tO!+S(OCguJd0!xXO5P4<^;shXmxf# zHbkp)19I{_TAd$|ozKc9Ys?D+a;ftIa`QYFXF1sucpfJ^KOm2~ARsT#3-K9+QGh#z zxm$qqg4`)2yC|R-=Y~Y~M0HU>5p@asl7JH2DW)z9C@w7zD9iJb%t@Rlaj&epG@y*S zJfOU~I3SrhmFMNyE7MfYDyS<0QrJ^znmk{|vtE5R>SBlsmLgcba2oWk4WL-}cd!WVwvA3+L-DHAp52tXj5 zrYtlF!3Z&h(lCUZB4{L{5RDjQH^tH%$b~plJk4WDpm~uG1yB%$OoeF?6hoq^I4y}% zrqZ-5l8}sYC~vAjD>@YjkxC7fP#INBRcSS(qXud^`SCxkO$~KWm%SdXM;p+FXk=Sp=?1nX1XWBpwo3I&M|6>)~oK~?NJFpYGup4`@7yGau2XN5o z1*<(r(GDn;4A** z{2ToX-|+)~JMH|U9(F~63O87szLGn$C$qr{FL;}Ls13gGg9Zouoqn>Js6j^n0^vj! zQxJ7IHTWr^$jTgwFoYw*6iK5^*=P)6kpnrM4rodoax)v^k;jym=5zYPp%g$t6k<0N zW-dw%#gK^NC}Aq)%%m7fqYP(Bv@9)0lTjWOP!TCeMJ1#;b!1X1qYA3B8`4eHX${mu zZBrd*fKnIr*c(UzvW+=2G(l5SbK1h0`9B%VEzt^XqyVKIHFQ8nbTW0OUC_-LD0QcX z9_WeQ=!3rKXX@{CDuw~^)lV=)fnG0_>MOrVo6nRzmu zN~hB4)G*UDi_VsUl{wB}WiIo4I-f42hDBH+1u4tvGAwtxq!rAou!em#jIPBxtatL? z1VA@p6Z0mzg&MXpZ>QVoPHNcY3`K~thwi5Ps9`@2;2;j+FpfC0N=NB2{Dk8;fs;6e z(@y?50M0P~ObzF79v5&Cmv9+ZaMc-(Fy%VEPH$4fE!@T(+{Ha-1j3aEc*tycgkSIk zPffqlXU<6FIekG5zu_fb;Wd7DMoDkzA9#y*oPTsiEAN>F zG8^(CKMJ6rGY+}b!qiX{#n=;_xoK|M;DZ<^U!!T zg&HbJ@oHsSne(d71hootHKa4A(;C!J3$>-ZY8_e+^__X82Gr1yvnI4LnmF?zzuJ^G zqs?dwnn7F9mT2WHAm=vBZJFCS3nIVTfw=?iOgqyqoEvjD+Ku*b7E-&@Ug*u-6TNxX zm-clQmhHzpKq^cNs{=6zL!=_Kh&l|zF@m#^7{xpqW1K~4QCdVD=Pag63mI}Tz11eEWko%Np(KY7Ge?m686Pd!oCbE zu#(;ADr#8cEG4aVmZqiEby$xLQW;uC-N?MzSytUdx6&fyzV?V)uocSa@K~Fg=Fqc!$($k!sb*9jA z>Un2H^=HnEUcg1p4VRd&;41SKTy>@*jX71lVY=n4q~2n_gS*_h$8%$T;H=DCN%lVd z#aTst$g^KKH)f+x=u`a4{0z^TUpTAEzI0Y&uBQIR+3%da#_#OEJJY2%%mboW-!`V9&)I?`+HSmTq}zjGWt>?I_>Rk0P>Y_dxprNS|ZHy*phUTUg zGy|>B8f{!EIp0YQyRaL3uowHV9|v#{hg_cU5J%_{ zddzg3-EaaYaSEqRXXsg+!+BhAS>Y)z(M$9Sy+W_jtMod(ft$Exx=ruk9`54-9!g%+ zOFY6a>`(A3p0OLA;{|@hOT5Bs{Ej#H!}QkWE#5JIz(>hje4?K@|AMdh)AWsg#}EAN z@&Uit6I8gt0(X~>NRAJ||w`BFbP;Eznu5#X}HN6AbLfp8)S!Ehl2p~z|q zqY;Qi6rz#MWtU=TcJ>@J7CD*Ys3AAvkp~ILi+srM@`YU~NDI=!v@k774aH2wX$h1x zm8NA-7D=XZEYyI#n;OtY zXl!aio1wYnkj-#8lnnOPXoI%whIY*Dsi7k}p)Z#Sj*(I(nn@YOJcb&^VjRZ1bYxN{nI_XIn2KpUn@(rYf6Zc_!)}<1 z`KASQAr@h=X(?TX<*oo}1zm|%oUNgTwOEJs*no}Lgw3wZ2vD|S8@97=r#q=(7j|P0 z_F^CQ;{Xog5DvQnr6bJ8n2*upIKgZlwzZsE4+t}Bajm-#+5JitRd!Y_D?CwPiq@eI#hLDCE6mw3hgTFRolp@u&=e@6}P z@c|$437_%B6|8(U{mK3pv*9~_;BQwjzwmFcsz8OC%Y|UoofAKk5abF)i0Yy)8j7q4V>g5&f<2l>!Du$bAUk4_1G%KEY8=h& z%8F1m4>cqpFY=*)sSq_3aq-^Q354V3Z+p7Ws!trls8p$g{u{qQ)mjU zL=9=Ef~ux;n(m4~xLSkOptWf&T8A3yq8@ug+5in*ky0b(CTPlTXwIC0mdqJ2+6rx? zD77tZ?}}2}(GJwm5uMN(UC~(*YRd%7$ol2p!D5Va$dR z?1qudqo`pt#$p`COEKyMmmxc{sgs!vQ!$Nw2Az(X%(Lk%7@foYIdmQtU?CQ9wh%^_ zU@4ZlVr7@pIEVA53$8fzBJ(9&#uawMRb0b$S8l|q zH~+t~?mf=ODi7fJ@Ao{I8DnP5)tLF2IcChv&zL(iF5R>dWs!2rk`=8KR)rLbC}Qd2 zQY0bDWud4A_Pzo+>}ua|*c*kk>~ zy4Z_-td$1xo&AhUaR3K#h_%D?2#zxTA1$M0fdc0jdYm4kC+P`DPcc6oC`7(<9v4_U z&s<#8@}0}{5`M!Ku3w{9>2(Tzk$91FBT(e};lO3BQlLI9a;qT33Z){PYetb9!8n4o z>NE<{=s*K4hQ=Ze@kl_Tl|+-cw^pFoO=c`jp^BzLF;1sxff5w!aR%cI##smk8qyNC zF6uF_$2`}{qxs0=T0UfM#-;^}%G|{$@|Puj1UCRrW2mXOx=rdFM54$aiam5?9V7%D=05j@*~Sb#qR0hJ1a_ zTi-(=&ysV<8RhxjcQx|;J}n!~#Jtap}1`nsIgydzWd zZ13FWvw0QXfw|XPm$S&{-5(L?i7{vQB(q8A=RZ#<4ZcmhwNFZ!XsHGn>4JwpdtgXmy9iy?SU@n?SwwT98* zcmXeBr1cUVh0)4|<9h{TFcz<}Hja+RKQMv0n26W#I^MvWn1sogf~j~5Z(|y!;~mUU zm3;5gnRF(dMa68qk2#o&dHB$pPZwaJwTLdpM_7W7vGk_OzGaM;tIFD^bOrO3RD6b2 zSdBIKH`d~Fth3hBFR)Qn(Ka#O%y={1g0C2VO~0jLEB=G;u+7>|zsC;zp!l;t-HBb; z&0OqZyw}=C_p>HSaR3LcL-a6?;3&$hU+8faiV)vPdXk>T8JuN)2GVo5fQ$GQm#oY5 z3a;Xs3PY&xI=!Jn{eCzqOmk@^R7MqqAQWM!YE`2Vh(weXO=A#?I8_y4{&>_tB5JZG zlB{G}3n@s2LT#j3=`;hG$U@M{R^k3^#yK>H=FvP_K=UCjLVYwqu~kAFp)s1^Hr%eN zA>4l_?qV#O;%+V6-;9dpxEC$Z(z>6vQW2=;Z;du+%Us%yK7e+N+oJgi=>hMC(#%E&>w%d2GFPR33+n9#w%%{^Cco#GA9&59#*>n!x$6U4u>cFPNW~!9zZf5333Kr=KEYBf zV|_V3Wh_?UUs#FHunMcOM#Un=zm~40>*zYVfo`B1=|=h`-Gt59g0HM^=(pIa;=tbp z#5QbazMbx%JLnHo{D_^*cT=$kKVdKSVLyIGsdbPZQt^oMAE8I+QIs(*qsOQ?juXsJ zQE?h)a2DrO0^Nw)sEK5i=p-Rv)nYA`v9i)=x>bi}BFhTWy2w^Fk?7(~)*UXFSYYbU|0E8|&Q}cc(q5coaR+3y-nhn~KNL2T!1{)sOa9 zwGeQgq66sDDn*Y6G9QG&cosugmp+H*F%-jC8;%zkkDw#yNIH^^qNBA`=Vdy^8cScr zIE=>xm5LN+B3{EATB`0O#*?`&reLa4&RcXErZbklgBgrx(3x~5okeF`bC}O%Eau?@ z%*O&O#3KCDTC8e2iy1GW;uC8rUB>!y>RG{frL~H#*3xL2vxf2KTAJ>9#v52)k1wzZ zUs{{#7JQ9wv~=CAjK9M+m5wxLI~Ct!2mXs6u~XI2-Nkq}W3h+vUhKnu{ESl8#Q_|| zAsogL97UOyp?i$+ah2hmuujrbtevH2AU%ikxS%q%i(J3V{1WraxWf1<71y;4*GF%t zOxICauAjQ7gvzLbP}W0e7^)(ixrop*-6$%eRS;QjEMgFc1T9E|ZVkpYsYpV=N}(xS zQ>w0;$~cYIhBTdd2F=uhZjg$)$VNTnsBF}A^H6|%El9K7Ts_X#*JQnbHCdN?b1Pi; zuF1N`>|^$mHTm4F_m%H2>*jMo{S0r9JkIZ(DUZ*~In9~8bCy@Gd!Lhgyz|ML%)M(; z^L>MQ?T`DJ`^+`(-v8e(n|D`!9yzDCzr0U#P2Qn-uAIfYU+$CrymxN)E`Lw*J>@D|r&o^t{&y4p>?@Sff ZbNGyTUimX*?tM48*Zlm+-rha7zXN;@p0EG_ literal 37120 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 QTryqXwSbU=u%RURe=^R= -#include -#include class ADU { public: + + /** + * Konfiguriert die ADC Register + */ void init(void) volatile; - uint16_t getValue(uint8_t) volatile; + + /** + * Behandlungsroutine für ADC interrupt + */ + void handleConversionComplete(void) volatile; + + /** + * Startet eine AD Konvertierung, wartet auf Abschluss und liefert Ergebnis + * \param channel Auswahl des ADC Kanals (0-7), Kanal 6 und 7 sind Poti R36 und R37 + */ + uint16_t getValue(uint8_t channel) volatile; + +private: + volatile bool active = false; }; #endif // ADC_H diff --git a/firmware/interrupts.cpp b/firmware/interrupts.cpp index 68319ae..d84bcb0 100644 --- a/firmware/interrupts.cpp +++ b/firmware/interrupts.cpp @@ -15,3 +15,8 @@ ISR(SPI_STC_vect) { spi.handleTransfer(); } + +ISR(ADC_vect) +{ + adu.handleConversionComplete(); +} diff --git a/firmware/spi.cpp b/firmware/spi.cpp index 1c191ed..87e005e 100644 --- a/firmware/spi.cpp +++ b/firmware/spi.cpp @@ -9,10 +9,10 @@ void SPI::init() const volatile // Konfiguriere DMUX DDRs DDRD |= _BV(DMUX1) | _BV(DMUX2) | _BV(DMUX3); - // aktiviere SPI, Master Modus, SPI Modus 0 + // aktiviere SPI, Interruptbetrieb, Master Modus, SPI Modus 0 // F_SPI = F_CPU / 2 (prescaler 2) SPCR = _BV(SPE) | _BV(MSTR) | _BV(SPIE); - SPSR = _BV(SPI2X) | _BV(SPIF); + SPSR = _BV(SPI2X); // waehle keinen SPI Slave aus setAdr(SPIADR::NONE);