From c76cbcb7b6b98340b9bea493ad3e572ccec812a0 Mon Sep 17 00:00:00 2001 From: id101010 Date: Tue, 12 May 2015 16:54:59 +0200 Subject: [PATCH 1/9] Added another version of a PID control software --- doc/PID_REGELUNG.tgz | Bin 0 -> 18212 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/PID_REGELUNG.tgz diff --git a/doc/PID_REGELUNG.tgz b/doc/PID_REGELUNG.tgz new file mode 100644 index 0000000000000000000000000000000000000000..c1be5df297c11feef9dea687cb85504e8401d0e9 GIT binary patch literal 18212 zcmV(vK-+nC{_gwfoq6uP=iGDeS?)RK z-e)-BVSITU?2uWpYm7jyL^wa9Y|ywiRc*1W{8|XTLgWseH)%h_ZJo=EA2tiZ-gxoMu-F zU6qmSPQhW*P1L>Nq0_adT%3l+kLZ5!Hy*w=v5pg4oIXS9#xBis7SRXhPgCMus%7$G zyG-}9xA`Zge`?%+{?h}mtK#>ug$M4XnDy*v)|C8sd`hs2=#?^!2cPY91EP)wea+vI zu~WWbDdDZRlIW5LN5p;8c(sn3gm?1Xr^L>esdCKAy2U}d)3j}h183LgZT0G((fr~; zW-qlY$U+D3(G6~=8eS8HQl~U*%P-NLw%?|{CRzT>y}23Gw=2r2-)|c!0roK~I`*neUR&{f2zSh}{*bhhKpKqI6dom(8 zW6F$%q?(+?=11AiER>bS)xHTYSePhsP5OPC(XHcM?cabbaB`I-95CKLg^f*fDoZvd z<0CKlqrx;Ap5#eIc=_6?i<-1%{|6;lSzRzm}1$EKy8ra42s`4tj z<&O4u^}I+|Ri^mN*Ql!exb3RWrgqNZTHzg_& z(l*`GQ60MM&d2vSBKYdpQ*@2qDW-_vz)P11>;dwo5N((JRsF}88}$;Wll`2sJ?XV$%HKehxTB_enM>*jcyygtbq{!h`Wp4*L)fU*3`y^em4{GcE^zs{QP% z6teKGQseD`g0)S_U+#0=$Vixuif~V!f2{D}xyJO$-SVF>i|(z@y>WcsI;YJKZ*?CT zkg`y$k=2PX=5BG=Q~a2H`zku$ymNEq7L~y4rma%~H0y#Aq{0k~pY94de2})d+;Yzv z{gedvpfdKy4_Dp#JjZa>x(y{VA7tOC&Xu}nlGf|SUfgM_wN31DRELt0*7>rls$cn+ zTvEyPUvH~E_u^x=VqKzwq?0Z5cKcbclU6+EJ9r-$EPrC?svh*(YVl!7kLMp()>iXP z3s@cJuhzV`Q3yM2cAda}@m#^6@@KuHc#0p+Z~x@`L8SD>XiUPMPyU_)v1W z&$4f-dFfFyqBXXyl`mx@P7B>qyu_)mzxT##Jsf+AZ2!WXiyfhFznH~wgeC|M@u=&a zUxW#nk(67xE9-o3-}(B8UiJ^pTWv2JOFWF-SugXNoyT^gHP0OJY5SxO9oXDF@9Er3 zXANKenDU*z?wXzatFIrC5K<82=5C0TyOwW%Rr@T-bWOVZHmiZVIald}SGms3EGgt& zIk(xQh^;zT;?kDDDaFbCdgh)SK`*8Cww$@PFx_MA)~-D-*i5{rc0Q}-&!d04khjxh=Ni$hld+E~^JjnDQuJhY zKfm7QL}Q%r3-Q*3yVm)ULHlm|dv*vrcO+NgQlOxAPOT0=^x#d=nh* zN{zkUL=P$Pn)P+(a@}%Q$Cx8+uJor5Yabhvn%XKeKE2pvMw5P3{dJb`P^`|yquw1x zy4?o;J5PR@Ps_TVKK13zHTQEIPFOXD^m+FtE|cu{C;Dr4cSe4SedOm8>*sy4pLQ=% z%i_(7ccDZNEw^R*EnhrNX7J-@b=!x?30HW722T1M$?A*%CdwPJNtGI8WqI+PvtU0C(DP@e3j$`o$UQqLyMn((X)HYp{C4X_(A1Jv02St(W2GCMoLoy zKK8#9JkK?+bwL3fSBqN`d&8KmWcAzyWGiyvns2gK9G__W1&MRS@lb9#@Z>tqr_N54 zpT8;CZe7V)BQNctx6nn&%%aa~&bPl18b5O)w(qM+wbQj}Y;1u-KeK%^z#kSkOvt8( zm_8R5a)ZkJO;2-XuXBGa9%fzxDSlMdGA zU$@r~sarslJ+!&v9*;`ancPx)k9S9}v`$+W_i5Vtiwjg7mp;h5RNcTsUT&cCXf2=U zY2&CH;dA}fdt?qq;x1fSpHtYS8^8PN8}kes&BQA1LUp-F4s)wRK2tfcX7yJ{)pv7+ zB^u+>O5-HYs;%4XwN&8r+w-Rl*^h;L1(;(l*x1HpK6oVMXUUY`*w3}^k*HCamJ@?5*%RZhDOB&qYi)G$-RSKKa@+Gz!+jg7? z&74jUnSI?1leDu+Nr$I^Ao8WHU}Gfy99is z9~`6{_7{8ca$`fKaDI8GT=99^`i3v5y#!Iqh1utNr?`+MC1D?SeF44&Ig{e z1R_qyn#6IgJ(fI$%V3qWPMYkrXQt=aniig0jn%k+X-Cd3&$~0WWh*W!#9S-U_gr>y z=S$)f^je?PDheu)@E>4sade`5SyGEaYtOoLbv?~5PH`L1;6yU#VJF z+t2y2HGiYYE?Zw5x%_UoM#-MD6%NoJWiw~1T3qc@j@dzi*l1Vuw$wNM z2e5XjwSw!PXH)ww6%!Ub>U%7ja8Euhl7$d1)UmbW&-6&r0C9VRPX|Gx0MU z1iozu%6;X$k}6YVBNOFM3VD6JR({>XL__y_(*gd*x9+m}{kjcQdSt&kNq;5A`e$5s}6})|htx;jKed`8CTj z0)y}RDhQY-zq}az@U51mmZl7TEO2Tu+`am(TN*K7(9V0Ph)+R^Cfxiva&Fm z$s@o6y38~&*0%_^O=c#h*i$34CT!|485jh(A<&*!=5xt0^p)Wlh9bW38-H*{` z`i6!>6;)isA}($yE#&=e(P*uEnKl`(8!krd*g<@pD=aCQdHHg1Z(G$;P5%^~(BPc) zR|uHO?Xz=AhAyWx=X+L@O9pXOYV=nJGLL1ttX6bhsOjImbN6nS0*Y9DxKloE!TkAO zKR$AM{`|S4l7IK(C;6UXU*DCZo;{CPHq=|avV70tZT$rW1vhTo82r+ws+^+c$Bqkm zTgq7xFCXEe9sB`xP{t{*095Z`M$Te zJW4R){vO3hYRK2m?*LgsT7k3S^_%)z=ZG50tS<^|x=eSuNE&>xTi(B?dGMwnIYA&R zD@zI#Y3U;dI2>;6+L+8~yB}t|Hk@&}=#yQ5yAin{S%v5wXzFFyb<{FVM@&pC-7sqP z%QYmhSM$xKuIxfzw*)jcy!^JI=-Ggt<|$LBHwM0p+O=!f$!W@!shR=x z=kUnVhW0f@^r#exDW%i52yQRPLx+B>b4V|*IikmTZt*2i_iG7T;troa&1=q~k=5qX zajstAQ1B~BMZbX$oo|{7vDa+3?!uIXAB>ATq)t8I^C&xt#9ie@UnI->sZkUa10UY$ z+A<@3$LZ_OqWR^p;pmvzroEn*n?riduRA{t>7A)@^-}DS*WTGlSI#a~$|$wCQC{xm zcVof46=t{Y-u=`r&9%5DyunZieeHQ!gkOd)MKO8ieQTv}O&)Kbm3H(L^)+vl>q8F? zbmjQj=;vfTahPvhQ)_Bz8PSE(!*Mi+_PKUL^?ZkDE_t**W} z0&c&Xy75zYsonNyb#-+v{ zVLPS#Ay<{)%v6_^sEseK?^==H60;z%`)qmer|wSlvKWkk!45O64{w?@g@rNAML}v$ z)nw}G>KwgwR*NQQzjgco#MmNHfn!CKkhaFv!p5(-bwz=5;vaqO@2x5qBwd!b6Me%(0!p3KF0|pgc-VXLXEgVV=>7*pf=4MoEv$tL3gm;Va@~U7Ds{ zTwIJwjJvQs=k(_Ckg&OYayhgeaOb__ix)4(U@!@nwnu$cofe=Y8hEiN(*uS%0;6=b zDB|w@dsb|j73l5#D$DLv$bwaZn>*&8?Ko<%o4o)t^wL(REEiXmlx`GlsIPxZ(@zkR zl6v)~u*bh3tn$P9$TwUfW@OpQkluyP?t5!r>=HlJ@hE2*Y1PiPsZT$hcz$5CUefF}u=vB3ZyIkbScaF2TQ<7f&!faNxkR0YkIB_}Bw`cJHPZ z=yB_3aL!tiE7of5*4=PXUQw|Z2&(0pHIch^C899b+NzQ3Qm6aA`udzp&N0{h);{4`bx*hQEzt&>KgN&#ce6+ z@9+OC9mc1SsTJE|z>PRFNn30fUlpXGw5>x8zG<{9^c=C_ z!pE*hnzmu4?>aNmL~@H>Wu4O6bPLtb9p=3=GBPqM%7F6|AgGsme8{1B4}dym5_^I0 zcz9Z@6JK7tec?&gojZ5xPC4YPD^LKMdn9wF_3ZP{rSoxB3dO1!`$F4%slxVShgYt7AUV3;#A zGe2RX-@>dLTYY-Xk3ZNh?`yLLUv#gu{V1P(g4 z*vZMsCc{E`SzXH_0p6ZFQ+cbrmLw)$b9KL)qOQI1)4Jl20w*czI-w_7w`0Zmmgy|% zV^8TkdQ`+lh&Vm2UIp7xbL6v^_15Ow=$>iLSAA=E*U8G z&ZW)E)bJGKXqyui==ibIz>Ley6J}IEKyB7L`$pgkz@xJ%E zG*`2nka1a4szb6N;LJJ!i^P~ihu%%ltLELya`U_jQrX>9 z%{dp`SDXO5zW;$;QBenwb$EVTj^o*DZ8gt$*pJh@9ws^j+S%JD z*`-$}$Hj#&3ViqChQhbDZ(eB5o)uixvuWxMVXMXWqW`bzxI+U%P&N^U1a8guDvdz~|RErY#l14z&ch7Arbm zs0Zs&e=+y=5@%y$u2=o<%9o{u4F#!7@e1-4m=7|C&8WO;aa4K6SI59GlziO2XzSvS z4_y>-m8)j-oJv^gA!g)#n_XF1dCr_UE5CisH_DrF*evmJyDs^3CV_h>WQU}0p(qfGNpt#1= zR9j=QLb}*Ip9{`Aw>CLlAS6nXsa{6WLI&7va!c)ndkK#%8qM7gR!Dzq6Sqk8`}`IY z;r(e|^!ELom_;p*rF!1kUO1*P`_%IoXWaGpmb?l%mqPzDDcd%M5ALY6@6ujw#=oyF zNnIu40gD_k7j8UOq}BXM7@6FT-Ew_=%i7Yl_fQUF*w*ubt%;kPd#MI3S2TVrS5W_*ewD>` zE-t%2HLfVE%#Q%@!R_(x(}Q_0Ed$P0QhdS_PT|%_-wqA`?!YGcqk^HJMX#qGIk}we z<+l`tvS!I`vl2yOoxqyxUu^AGEfid$HmzM*TU%RHw2WrovTdJ2ycl0<$_2jdCypO~ zq8h5snf~x9`axAmj!_#mbsKK>(j;Bl5~cLRho9wF>nMKv=JIy#f(6QcFRsrMx42$j z&L^l+S-5$nUWrHIi8!)kio(mr0;++5!I`&B8_hZ9Oc_Y#TJ_?^3l(C$$4!0V6S+<@ z>K}Xt2R;H*)D~8AAicz6vCWwPZD3OAbUKa}XX3D~-tlzXHA%(X2;h%@QobYHv1$=M zZw}7vKzWB`^31Y+X&D(Mw-^L+TYxsQjaOAEr{|kBci+3YL3yD?;+8AGIgd@Bwlyg! zNk9>EQ~&l_YX!mZ>7wfDPY!%g9;k581_45DdOol0mo~YKN|e#^MbyJWVAqyecWJgN zd#`oqww$%rh#m0o@X*)S2Pzg4HMIX$aHV^IqQ## zLzo#o^gf%@b+)EP#Up2S?(~Nbw^GydFI$VDLz$$Ybdg%JA{bRK}?`0>nNH{A098E{jSFBEXC@?Ix#@ zgPr+@y|&!mpXwjg^f<`Ninhvzmv}M2`KU+s0f~JFu=b2DfMi?>d!3$XsLgQF&+~Xa)ZZBu@Uoe>sQ~sfTU`|C=y*&m_Rv1@ z$Q@I!B|09A^||=$Nu;pubtyebe(A;8j(ZhF&t;`M1ZPt8rIV$yOX>Js(Uh#*YbqYK z{sVUe*2V8t(=c0L@A&MToKSw|H6z_C2|>c9)a51>k)mQx+RqopD!BCzJ@-vmn(etq zd?=(~-9Yd|fhErC*866yUE6_;tlMxct-7ta^n~Nl%ukYpremj#FD6)?m~Qgmo%h|d zY+M9~8?8zP^hCpu*Ri*2&s$FSnia6qad;iPSIhW% z?)u%hpXnn>*p{^~HsrmEDb4i|8fR|D4(It$7wW!kluz^ND3kblb=UQx>3l}dg^wPA zQ;vron?ias^;+4+1@EU<)t%r}E_thdcX9l~eSyJer~31&*aavYFU!or%~X26_Q4De zYIdlxi?ION^6m4iwG}t}-3A0~bKKI|d#^eyN@icxQ}Foxbs~OKMTDTux$;u_L(Me3C|aGi>-AEE%c6T4d%Y<9zA>Ci&fjbAc}~d z@e}PA`n|8C1wZUvb^gJJD3`ix+Tr-V&*Tpdep^l};v!ANh5ZIxRh-(@`U0aB4s3ol z&Ea89G_hS!zmtDQT81M&cV(qvn1o5zyS#YCjk|pJ@Ho>04XN;{Y@zi#CFwJ@jFyNk zY1Nc(w_15=c@2M@&F1N{GJPT<%kS7maG87&F{{3w+4zRXTaVLP6ek^-cWf1RrJ*C= zcB@UxIlrtgp*KirNz_XCaOT}yq&@vT?1_`wfqU`sOSW^}a;uOf4g_7zd-lYPO<_5q z5A=rGE_A17`DZOEIPDv~L;3$J)$A=>df6%-~4L8{IG-Qk=l&XnmWv^g~kNb*0pnI zu9~&nx^KR%vC8I?BJ1U|zWJY-$!WHK>A5YlGix91&;Pu_Kk51_|I16s?YCab4f2bA z+}l#Fc9ZAhlB1EUea-dg?tv1)cuyFmMk2WO$?vWHP;6VSeH z6__lo9x3r@`SDq;_sVvPqxAev-%Q?Cv|82ZqS+dH^en>DHa-{I#P^@=S4Tg=Zn(ds z;WN>1u z+m0;*7rGzJu0buoG*3J=b?EDs53%p*>RE%O&UWU0hq$%Tc5E+yKIQ7y7_oew#Xlp>Vp)a*Z`QSN#>%5_k5#azw0*t|l* z5>;xxJMlDjTWy_t=!5AcdM#q4mA3K=j83}JPAYST9koEgH4b^NwPgMF8#_lFsIJz~ zSF-o!?Ofu0W>)BYAwuTiwfT@`-{3yy(y#S1NJZ|QB=%b(AGx>Q;o)ff`fAa(`xRLW zZk@D`)Eewp3Onmuv`&`vKtOu%Y~h<3SKFq4D?Ca2s$uo?qe=z5)N${iX>C{ELf(>Z zXtG1X`PjUA2))DvGZgN}GC(z5rh|p?~ zTl7d$5=O}`Wpg|!X3d@(Qx>QAfLGie8#G5^O0PSI_R`0OEq+a&FW>Nqg&graG~Z1x zF*i-vuk^#=n*$c%$vf-_MCASZ3_E*wjbYA9A8-X7Fkd%Zj8O%HXh2BZS-d1 zM5wX%LU_kPEny#j4{jpl*kiUC;~*Dtj=M!Nae5O^;YQ2USwB9Ln}}sB+_G_4>VoWfs&ysO?N+z4vI2ZcIn8q`${|7Vs zcUa`1pSjq-iUpno%c#peUVf4OEWcTN9G2usu>8OUpNMp5nuoji(fhWs(>5QuZ0y3@&<4=*F(2G$8{2B^{?n^^jc;w|F)=mLKc#)&CV@OjZsdWG!uUUcwSj4nmA(pup$-Ev8uaz8^`Q`LNCFLM zX@Mtw6-iANgb6?e`C|xl7{ZY$kd=cuB!Lox^y#!9NG}LWfF&6{E%mHXx{x-6(i}S! ziA;iJ@g#qkf_QZhk?a98NwL*q^dA{h&(a*FiBABos2{ z5j7r%FK{og7_g5*G%}>dSS&xKI?1r1M8;>Y>z?0yS=gCaA z=FcpOCcp`kJn*=`M&y5A`A+|VnBy@7B&_^xX5gRnUqL~UssBnU$_grIHpC#PqW|ju zpD0ZKZ!FU%SOFUYYZF~Fa{~*zamHYLH4jVUv0gCN#|^Oq4BeN2#+d?$Whj{Axgi5e zK#ZEdR^q=?ey0DwD-8U({-aSUK-pRGpOT6aQ~yza_5V+l@AMxD1Cc5N63wgZ7=Z>E z(n&r@f)6G^!E_2_Lxbrsg$_a^e>{c(2one}6$D)%BEey>upG;P{LcbOk+C*OWV9ON zfpw#UaA;g5!+jCq88J_~`g(49#<~_324)a9H)^Eb+|t(4+Rfa=0)#l++-SA$T67&5 zE$X8UcDmNKNWG1%wTXq1nE?WdMlpgbB(QP-aUz7FQz0S-PXdbv2ZCiFjhMX=OQ^{V z$7mD~RQhAU%r+2U5-^4Y3=L0!NBVOkQ*)!zC~jCX(U$n^a8`WxH5^bg^9joO4%_AgexneKpuD)Dofb_=0U-D0>1JvAf-kqXF;n1aAp(2 zf^kh~<&icD>_15xGA!T;WIsG}#(sfT0n-@4#SFwp7l}Gboj!&Jlgf(5kT`ypW9Rri zyQCqsD?lzHGI4RFMpn?5Mgcv>pkWeXVqt4wZEa^|3xVCv-bBv;vbMCdHL);28j*pR zLXRXmK%h}Q z2EZA{gFTc4AuOFo~H}z~dx@zmr8)YKGZ9LX@yJ zB)*O$4y{-Ljjy9H>Lv)P*7qtk1}|fY#_)4IFv7_3OEwXP*-u(}v^8|(8%&_W|7Ild zbtv(ljWU`$nxuVLd$l3-L{dVBb2C=Rdeb2C1_lQaV`9%x1U!iZQ@k()q@D^B6(ZnaPudTCuF3K_fL%;2)6yO_b&?~5QD7P!Sgny3&GA4w+M|~9M?fYP zOrYV~k;D-)Q-*m7z#y`TNF!_0fbgt610sP&$OjGzD7!#m8c>o4K!x$dBlZ<0(U6~) zK_u7Xdk0c-Ba0#)ZkA5KcoIt|MzjIcdBO~xf&%Ci515A=Oz>wi4v-mOy~toN;0lvQ zsu>_i@={`~0g=@Ft^-yAQHwDRNG23v7IV5HL^1^y8LLsk02h|%D=|haWrn*+N{$n> z5pK)MYEIq&ByXZ%jC_;)9tH{9Cu^TTGFU$9FObaW_9K$VD(4>{nMx!3{sPI2Za*R! zP^O@){71yzyxTYWD8_iGZC-_F?JvgNJMgyeT~rxPa|VSDUunT*vKeol;jVfzq5y- zKbjBl3V&fbNUw?08S76X-;p0BlNb{Y{BU9-pwq9-eq;z4Xrd?ldu9)O=wFyU((5P8 zw8dk6sNc^;UVg%CXh=U9XrkZ#duHMV6Mn_^GP?a_F6&6fpocId3+Y10FB3v!9E2ed zAh2f>F(eP_I?|6>CZhe*@>5V`=LLg;D3bysKXM0AePP(+ry$7A2S7aFUk5>U9st7l zAd+ch%1?VE1|R7S)0mx+Q$l6bI8K|icp7v8DK)Ofh7{vJc#=N!!e%lc&PCT!HNZN1dJy{D7!#qgkXq= zJCZ>l!E|JKgD1L~6Jm+sa3l2h9msx{|HCrB|IRbOf6D(WqKD7_loga!QH=Z_8uj=0 zKmSM>KK~ox`h@Jio~4DYwWZm()c=?|W-tbnig^||lFAgYgfqfjI1Zp0|!F~DQR!xTog zA6Q3ZsVClbVd7hQWS7I?u_$Qs7M z6jCr0P7ro;lN{qbU_njWnv*bI&;uzHJ%3W8(KpW zA~*^RLlioR1Y!dbNyIG!1KU{Z0tXrPqCp#AJP|Sg&L zA;y(q{$qS-cz-7EnPf^ay*nvpc%(bh%*gaI))!ClU?eX^^yx%mkgPRud&zW~2m}*- zab#raWq`|0LNdTq8Vea?wg3p=VK|eBX9=bZaN%gk0SXm?q7z4$C=!675D8$Z7)N># z0Ye2nhQlZ@w-o?mCjArkF(!m5IiOmvaQw#}^KCEivwVC;41++;56^J&JWQguC28Q_ob(+7# zIu_GL<|*=>y08NGpR;h7ga4L!W6ug0tMF$`~vr!zIg^bAN@D}|09Lz|BoIHh7&Qtt?mZU;h0zyj zz!Q4h6N5CyEeqD`G};gvrJ%&bh0H`@6ql`~iGjkX>(7uC$P)N2I089f%re1@Etfel zDvXzy%pIP%wp7TIK;8fxI+y}{?oqGB0#78;m`<3L38E`7!w+NK1u>!0m_CNhaAJ%K zfk;G-;aP%65II|bHIOISkyIEGi4N!0CNu;{j^x)s3({!Gc$I1*f*?tVvG+4N{wNDK zX%cSZI00nc^8!1y4*|n`L3mh3Ss<(uG@90CyoEew6~|<}k=M8J*wG%q;U;R12pH4Q zAVf1o1#egkzVwu@EpX%^`0=KmWl50iKa|OEjMMbdaVJ`gu@EfP+W_ETQt*#W#w6xI86~+A z{BNAan9RB``pGI!Fd5?+JaPRhjVqxANcL|M){?!ujvS`ya@;E8}&Iu@^wbRw7O-fM#Y= zhRgUPPR-H7kKwjS&p(*2+#p1Z!!;p=ularB_lf4oJB{Xu|6UjwE#vf`O8GDT``^sp ze^OCUX8it>>fe9=`;V0G_|HsM{nnoV`RCvNP@VYuAFAlTzyI+^%7~?RGIwL%*|8aC z>&I6!lI#TJg{|S7CbJurnWaVUx-x(Ej}Qcr$jGf$*aP-J0;azP_kU^mPXEm@K7gkL z_&1L65AXj2T~`454|E=lR#a9-GxT5aumAT)iYUZlIODg{Ff=0UiBVKg^PR~f3jN@n z3DAVJT9Q~VU_b<51T==Li2xtt?F?-OYKTh4(E>0OSZ-`PmH=Z&pobpglT4>U8|Zif z^5bV@Zx~C15Q3=VA;>r!0>Hdd0vVVYA_qje_STS|rJ*4tflv>41O?z}UW{rR8r=g= zh7{!jA<$%RZl=3havVlDkoIGw27xr>^upuk*b!V4ijo{k6&cVIc)2u~GJZ(Lug7AL z42eEDfJ7i;{$G2?+S|5~{2T%L51YgRq*j#eJesQ<2c{*;;hkPb%1zz0Fer+WSo0x> zR9qFf|9&&GyX2C3Bt7&B98PSFi2InGot>STUCz!<=`g~=`;B^xjpO^&!?WZKXc51I zIiFY4_0(%J5WSw0csm+(fs5nN|J~zf8+ZjKBNMZUho7-#{whhIRx9`)414>QMNSCN z@YiKN^3@9TuXEcmc)C9B8#g-V2&(7!5gR719|YvmC*0)RO|{a!AKK`6k~?dz>W*V^+gaK%T*1 z3lX|1A(h9vbz@*njKsie_VBDw8#r*i0+mHPMVbn5XakX#FHS+iO4mX;~mr*xS>u@&Wu8fZhoQBM*toZx4dZCqhI zc=Ljo%hZRFrcY`t@IHG%g9(CuI%}}=27B3HuNo}*rOB{7deP9H4zhZzRBo~avP24> z{R#X)er2^moO&(xiunmCawm9nHvHfW?rIj`a3q?{_K5Q|=%&lM`ah9w!x0Wh!ZGi7 zll6Q~9s-;bs+Ep$eS3p$J|G}w+DnBZPPD<{T{&#(1D^n=;V{Ac2;%sGkQELIMN;vZ zVW4-VthYgjz?2vcMx2I}O*YJ7$r7WLR4c}hV@o#&?T%^LfD4Qi=s_`Hg6MdJ2VFq< z5uP-rqfkhVHV6U`fX-?v$WX1c?Xf=S=vD_{X-PW0oJZ^Lzvpnc?WA>3Kxnr_#yH~0 zL&c8K1q2Eu&2kyQGb>ZT3Z-Sc+tY8b58C{sMzpPGiQgjsQWJIjfp7|$+VG?X!&OY1 z$!HZCt(}$kiJ#8UbVwi(==cCVU9CZIYqMk#uTl*-JWL9(KB7+0KH{N2H`PEArZI+S zFBfWP&U6t($>mAyU90I{HiINB^F3aI4_N+s~3L2q* z>zttZG?Wz8?Tn;l)NGDgLz{yIF-cfncrX0EANe8rDB|}sI*c}B!r8J~8Cm9F+`aFa z*A$=zTMQc7y774?N@@ZBaUV+g*2Pb7IH8s?9TDMxa5+)j_?` zVz)OWsk^t$S&(9zd6i5c6*`rGC{p@lxAno!F7a|&K>zOT(6{Wxry|HNcPejkt53y7 zMUS%bqC-Wn94&)_`oMB0^gr z6-ZJW$%beNWXz49I@3mZ0(A?LTs0{pTfGd8MoT6QhW9@hmf5{KTnx%w4{hUcA;Z#b z2Q?F@ag1Vr$`soDcB7eCZ zn?1XbxlZxU30VXrF6vAA&1Xzr65Rwre-`i)qo2^hU3qpJs@oro9y(4>U}!-|BTzIX z<}R2>!|T7dhod`@6i2uJGcE&o;+QLFs8QolOfX3mZ??-eeoKF8C7`-&V_2l zf@$^xrmR9xUC=mh%Uu=_@AEUhFyZ_54UB*_v}_pE0ai3tt9X^PC~h>*zcy~TuoDl6 zCa`+4R{>ET$ebcQs zWBA=|Gy%ZrN$m;}Km(Mj^*iu4g1;^+mJ>)#WY<6u;0y!J$}yw>@uXuxDM(cc=GhdK z1z!vTnXw8FMUWY5z21Fp0*9fy24%|yx!FWhkn)g53ZivhPcih$6}8`(BMn0hm!6ut zBu!yU0Ai#ZJOsoM1Z<#VEiv^$l1cjo#S)*zwBs?Q1e&%C-LaAdusDne!le8b^MV;| z5P;HRL6Wd!LskhSx0DqryjCkvOid%r2-OPZQ1t;AH4ULwD*#tb6wQF~v+;0&Io&{? zs5`*hPp&+75zBwk_>gjss3CjODwR+qCzXSaZWS4z0S^c8_@OT06Jh;i88{mv6bAl4 zJ_S@h7(WVW4=fKqV5~Gwdo;Rf7olFJh0*Jl>*!?~<^x2ifg1e;nxR;V{c?e(P{a_+ z3#Op2$n5$BT5`O_`h_Su^RZLenE%I3kkmiWLQXbUPJYROe#DpGxCKzHD6ENU<;fLH zlQz;av*F1K6#G{B=2VkGX`#?dJXhwnCzwv2SJV=^v3(74)Ts1@e_HY2!*BDqw7#v7~9MI3ziiS(zXzpnVh;bkc ztOcid5fq3vCv~*5-~L8>UWbcLlH@B(MlpW${>sAK#KpqrR2a#GTbo+~V&}ZY{;N|3 zYSN%7bOCA%X$MvV%ZZ)5E0?ZT#AfQ(wOBAazPf2>VsG=$x$4K=Ak-PL*m0z-p<0u+ z7?DbKeh~&Tj#318;6;;U=ZgbKOU}F^40ARavRvM1mK+Si@(NLV(IgRk2(;jC4qH=! z|C+(mVA#`a=t<>WioDBbplf2cfu_|nr^756%YMfFwI6x-j{K4P~V{`m(pR!y-1MuI)sF3DP{-^faqFOY#6P>7IS&? zrKWiMB~z|x8^Eg_-MV92?B5(&M%x_T+LQ(TtrJ6V-OXQjVk?Z*3{jNHAQLkKr!J}k zTL|<{t{_S56%_5htTQU!yeGxIaUx{QkdE$NSs{#NG#VsQY?(YrJc>E)gR zo0V-qC2ODAC08MJLW(bFw=AEXIZ``s=K$gM+Y4l+@Kxu@FE6!t_v1pq? zS%Tz?55*4rSu8zvtvvW=So!7jXThK<2Me39dUW;ppLn+XKZwWv+%~?>|L^tN^Ve_Q zzNPq2ug_n-KKlRt70=fA^Lq^b)Hc2p|LeQ6H<|zEoA2oU$5(HU{y%@oL;l}ShznRh zh9zgbLWl68>kq#YP5uxoZ|dW>=E)jSLWhFsDJ=TKc$vozFVCKm_PRBER!JbDGy_cE=BPYO%H(SW4t4> z18{?6whkHu14^@x=J><#cFc4z7C!2hr4Pn;7cBFx`Rs96ez**L01aJRIZ?WS9uSDW zVPQ-*SW>}~V0?#rDqV9tFl?K_;*#lXq+4UNecRJ5HoCP&L)&OF@)H551mOUoXEazV zw4GAC={)QF9Sm>+2m-?{oX;K%wCnkw0X>J|x1leOAwhA17()`FJ6Ebu6Yw)<=FML+V{;y@oAGLX8gMAd>HGfzcQd?q=h1f`V2RRVI?5zwyNfV(@vE}N zNJ?Ez*Y3kIj;2j_@#RZfF=)=8agVFaVb7$C_%kJK_ia7wSr%ASO;qpjL9b!{l_M#H z_UPaC#^$JJ8kPv|(NWK4qNVwOXZC>~pH}$k{jEr%m+TEcRgxci&hC_vXDzdn)p>+= zCZqk!ED8%OJngbuYDzI8exhhytNg5s%kOB-D||X|Tg)#^doLrDNRV`c43C;|Km4Jq z-XSAk%dkb+Aw&#o=HSH|uUbRl$oDHMbV z9-f^wzsO?ae8k!lfz+51ly5kSbj&8tSF*&(S*xl8jw$#Ik Date: Wed, 13 May 2015 01:34:26 +0200 Subject: [PATCH 2/9] Working touchcontroller communication --- discovery/src/ll_touch.c | 134 ++++++++++++--------------------------- 1 file changed, 42 insertions(+), 92 deletions(-) diff --git a/discovery/src/ll_touch.c b/discovery/src/ll_touch.c index 0b98c21..7192661 100644 --- a/discovery/src/ll_touch.c +++ b/discovery/src/ll_touch.c @@ -2,73 +2,9 @@ #include #include - #define CLEAR_CS GPIO_ResetBits(GPIOB,GPIO_Pin_9) #define SET_CS GPIO_SetBits(GPIOB,GPIO_Pin_9) - -/* -static void touch_read(const uint16_t RegisterStartAddress, const uint8_t NumberOfRegisters, uint16_t *DataBuffer, const uint16_t OffsetInBuffer) -{ - uint16_t ControlValue; - uint8_t i,j, RegisterIndex; - uint16_t InputValue; - - ControlValue = 0xE400 | (RegisterStartAddress & 0x03FF); // Create the 16-bit header - - for (i=0;i<100;i++); // delay - - //Write out the control word - CLEAR_CS; - SPI_I2S_SendData(SPI1, ControlValue); - while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) != RESET); - while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET); - InputValue = SPI_I2S_ReceiveData(SPI1); // Read dummy - - //Copy each register in the buffer contiguously. - //Read data in. - for (RegisterIndex=0; RegisterIndex Date: Thu, 28 May 2015 16:07:26 +0200 Subject: [PATCH 3/9] implemented functions to get x and y coordinates and a test function --- common/app/app.c | 2 +- discovery/src/ll_system.c | 3 ++ discovery/src/ll_touch.c | 108 +++++++++++++++++++++++++++++++------- 3 files changed, 94 insertions(+), 19 deletions(-) diff --git a/common/app/app.c b/common/app/app.c index cd593d7..61c1d0f 100644 --- a/common/app/app.c +++ b/common/app/app.c @@ -19,7 +19,7 @@ void app_init() { void app_process() { system_process(); //Let the system handle it's pending events - gui_screen_update(); //update the currently active screen + //gui_screen_update(); //update the currently active screen } diff --git a/discovery/src/ll_system.c b/discovery/src/ll_system.c index 5858d64..4feddca 100644 --- a/discovery/src/ll_system.c +++ b/discovery/src/ll_system.c @@ -49,8 +49,11 @@ bool ll_system_init(void) return true; } +void touch_test(void); + void ll_system_process() { USBH_Process(&USB_OTG_Core, &USB_Host); + touch_test(); } void ll_system_delay(uint32_t msec) { diff --git a/discovery/src/ll_touch.c b/discovery/src/ll_touch.c index 7192661..267a52c 100644 --- a/discovery/src/ll_touch.c +++ b/discovery/src/ll_touch.c @@ -2,8 +2,78 @@ #include #include -#define CLEAR_CS GPIO_ResetBits(GPIOB,GPIO_Pin_9) -#define SET_CS GPIO_SetBits(GPIOB,GPIO_Pin_9) +#include +#include +#include + +/* Defines ---------------------------------------------------------- */ +#define CLEAR_CS GPIO_ResetBits(GPIOB,GPIO_Pin_9) +#define SET_CS GPIO_SetBits(GPIOB,GPIO_Pin_9) +#define REQ_X_COORD 0x90 // Request x coordinate +#define REQ_Y_COORD 0xD0 // Request y coordinate +#define REQ_1_DATAB 0x00 // Request one databyte + + +/* Prototypes -------------------------------------------------------- */ +bool ll_touch_init(); +static uint8_t touch_send(uint8_t dat); +static uint16_t touch_get_y_coord(); +static uint16_t touch_get_y_coord(); +void touch_test(); + +/* +void touch_test() +{ + tft_clear(BLACK); + //test + CLEAR_CS; + touch_send(0xD0); + + uint16_t buf = ((uint16_t) touch_send(0x00))<<5; + buf|= touch_send(0x00) >> 3; + + int test = 3; + + SET_CS; + + char b[10]; + + itoa(buf, b, 10); + + tft_print_line(10,10,WHITE,TRANSPARENT,0,(const char*)b); + tft_print_formatted(10,50,WHITE,TRANSPARENT,0,"XCoord %d", test); +} +*/ + +/* Functions --------------------------------------------------------- */ +static uint16_t touch_get_x_coord() +{ + uint16_t buf_x = 0; + CLEAR_CS; // clear chipselect + touch_send(REQ_X_COORD); // request x coordinate + + buf_x = ((uint16_t) touch_send(REQ_1_DATAB)) << 5; + buf_x |= touch_send(REQ_1_DATAB) >> 3; + + SET_CS; // set chipselect + + return buf_x; +} + +static uint16_t touch_get_y_coord() +{ + uint16_t buf_y = 0; + + CLEAR_CS; // clear chipselect + touch_send(REQ_Y_COORD); // request y coordinate + + buf_y = ((uint16_t) touch_send(REQ_1_DATAB)) << 5; + buf_y |= touch_send(REQ_1_DATAB) >> 3; + + SET_CS; // set chipselect + + return buf_y; +} static uint8_t touch_send(uint8_t dat) { @@ -13,6 +83,24 @@ static uint8_t touch_send(uint8_t dat) return SPI_I2S_ReceiveData(SPI2); } +void touch_test() +{ + uint16_t x = 0, y = 0; + char xs[10]; + char ys[10]; + + tft_clear(BLACK); + + x = touch_get_x_coord(); + y = touch_get_y_coord(); + + itoa(x, xs, 10); + itoa(y, ys, 10); + + tft_print_line(10, 10, WHITE, TRANSPARENT, 0, (const char*)xs); + tft_print_line(10, 30, WHITE, TRANSPARENT, 0, (const char*)ys); +} + bool ll_touch_init() { //We have a ADS7843 Touch controller @@ -73,22 +161,6 @@ bool ll_touch_init() // enable spi SPI_Cmd(SPI2, ENABLE); - - /* - * TEST ahead ... - */ - - CLEAR_CS; - touch_send(0x90); - - for(long i=0; i<1000; i++); - - uint16_t buf = ((uint16_t) touch_send(0x00))<<5; - buf|= touch_send(0x00) >> 3; - - SET_CS; - - return true; } From 9b1020c0bba0d3814222a42ecf5e040eb681bc8e Mon Sep 17 00:00:00 2001 From: id101010 Date: Thu, 28 May 2015 17:13:55 +0200 Subject: [PATCH 4/9] Working PENIRQ --- discovery/src/ll_system.c | 2 +- discovery/src/ll_touch.c | 108 +++++++++++++++++++++----------------- 2 files changed, 62 insertions(+), 48 deletions(-) diff --git a/discovery/src/ll_system.c b/discovery/src/ll_system.c index 4feddca..6e91c8a 100644 --- a/discovery/src/ll_system.c +++ b/discovery/src/ll_system.c @@ -53,7 +53,7 @@ void touch_test(void); void ll_system_process() { USBH_Process(&USB_OTG_Core, &USB_Host); - touch_test(); + //touch_test(); } void ll_system_delay(uint32_t msec) { diff --git a/discovery/src/ll_touch.c b/discovery/src/ll_touch.c index 267a52c..00fed50 100644 --- a/discovery/src/ll_touch.c +++ b/discovery/src/ll_touch.c @@ -1,7 +1,8 @@ #include"ll_touch.h" #include #include - +#include +#include #include #include #include @@ -13,38 +14,14 @@ #define REQ_Y_COORD 0xD0 // Request y coordinate #define REQ_1_DATAB 0x00 // Request one databyte - /* Prototypes -------------------------------------------------------- */ bool ll_touch_init(); +static void init_exti(); static uint8_t touch_send(uint8_t dat); static uint16_t touch_get_y_coord(); static uint16_t touch_get_y_coord(); void touch_test(); -/* -void touch_test() -{ - tft_clear(BLACK); - //test - CLEAR_CS; - touch_send(0xD0); - - uint16_t buf = ((uint16_t) touch_send(0x00))<<5; - buf|= touch_send(0x00) >> 3; - - int test = 3; - - SET_CS; - - char b[10]; - - itoa(buf, b, 10); - - tft_print_line(10,10,WHITE,TRANSPARENT,0,(const char*)b); - tft_print_formatted(10,50,WHITE,TRANSPARENT,0,"XCoord %d", test); -} -*/ - /* Functions --------------------------------------------------------- */ static uint16_t touch_get_x_coord() { @@ -106,29 +83,25 @@ bool ll_touch_init() //We have a ADS7843 Touch controller //Datasheet: http://www.ti.com/lit/ds/symlink/ads7843.pdf - // init structures + /* init structures */ SPI_InitTypeDef SPI_SPI2_InitStructure; GPIO_InitTypeDef GPIO_SPI2_InitStructure; - // enable gpio clock - RCC_APB2PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); - - // enable spi clock - RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); + RCC_APB2PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); // enable clock on gpiob + RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); // ebable spi clock - // fill gpio init struct and init gpio + /* fill gpio init struct and init gpio */ GPIO_StructInit(&GPIO_SPI2_InitStructure); GPIO_SPI2_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15; // 10 = SPI2_SCK, 14 = SPI2_MISO, 15 = SPI2_MOSI GPIO_SPI2_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_SPI2_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_SPI2_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_SPI2_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_SPI2_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOB, &GPIO_SPI2_InitStructure); - // set chip select - SET_CS; + SET_CS; // set chip select - // fill gpio init struct and init gpio + /* fill gpio init struct and init gpio */ GPIO_StructInit(&GPIO_SPI2_InitStructure); GPIO_SPI2_InitStructure.GPIO_Pin = GPIO_Pin_9; // 9 = SPI2_CS GPIO_SPI2_InitStructure.GPIO_Mode = GPIO_Mode_OUT; @@ -136,15 +109,14 @@ bool ll_touch_init() GPIO_SPI2_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_SPI2_InitStructure); - // init alternate functions on GPIOB + /* init alternate functions on GPIOB */ GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_SPI2); GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2); GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2); + + SPI_I2S_DeInit(SPI2); // Clear spi initialisation - // clear spi initialisation - SPI_I2S_DeInit(SPI2); - - // fill spi init structure + /* fill spi init structure */ SPI_StructInit(&SPI_SPI2_InitStructure); SPI_SPI2_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_SPI2_InitStructure.SPI_Mode = SPI_Mode_Master; @@ -155,12 +127,54 @@ bool ll_touch_init() SPI_SPI2_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; SPI_SPI2_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; - // init spi - SPI_Init(SPI2, &SPI_SPI2_InitStructure); - - // enable spi - SPI_Cmd(SPI2, ENABLE); + SPI_Init(SPI2, &SPI_SPI2_InitStructure); // init spi + SPI_Cmd(SPI2, ENABLE); // enable spi + + init_exti(); // init external interrupt for penirq return true; } +static void init_exti() +{ + /* init structures */ + GPIO_InitTypeDef gpio; + EXTI_InitTypeDef exti; + NVIC_InitTypeDef nvic; + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); // enable GPIOA clock + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); // enable SYSCFG clock + + /* Set GPIOA0 as input */ + gpio.GPIO_Mode = GPIO_Mode_IN; + gpio.GPIO_OType = GPIO_OType_PP; + gpio.GPIO_Pin = GPIO_Pin_0; + gpio.GPIO_PuPd = GPIO_PuPd_UP; + gpio.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_Init(GPIOA, &gpio); + + SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0); // Bind Exti_line0 to PA0 + + /* EXTI on PA0 */ + EXTI_StructInit(&exti); + exti.EXTI_Line = EXTI_Line0; + exti.EXTI_Mode = EXTI_Mode_Interrupt; + exti.EXTI_Trigger = EXTI_Trigger_Falling; + exti.EXTI_LineCmd = ENABLE; + EXTI_Init(&exti); + + /* Add IRQ vector to NVIC */ + nvic.NVIC_IRQChannel = EXTI0_IRQn; // PD0 -> EXTI_Line0 -> EXTI0_IRQn vector + nvic.NVIC_IRQChannelPreemptionPriority = 0x00; // Set priority + nvic.NVIC_IRQChannelSubPriority = 0x00; // Set sub priority + nvic.NVIC_IRQChannelCmd = ENABLE; // Enable interrupt + NVIC_Init(&nvic); // Config NVIC +} + +/* Interrupt service routines ------------------------------------------ */ +void EXTI0_IRQHandler() +{ + if (EXTI_GetITStatus(EXTI_Line0) != RESET) { // Make sure the interrupt flag is set + touch_test(); + EXTI_ClearITPendingBit(EXTI_Line0); // Clear interrupt flag + } +} From 30197bfc69296d5f85753028c5aefb4780e47402 Mon Sep 17 00:00:00 2001 From: id101010 Date: Thu, 28 May 2015 22:30:34 +0200 Subject: [PATCH 5/9] recent changes --- discovery/src/.ll_touch.c.swp | Bin 0 -> 20480 bytes discovery/src/ll_touch.c | 21 ++++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 discovery/src/.ll_touch.c.swp diff --git a/discovery/src/.ll_touch.c.swp b/discovery/src/.ll_touch.c.swp new file mode 100644 index 0000000000000000000000000000000000000000..192e78c9b41d578de4d4ba38b2fd8247fadf1429 GIT binary patch literal 20480 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 CNaWW5 literal 0 HcmV?d00001 diff --git a/discovery/src/ll_touch.c b/discovery/src/ll_touch.c index 00fed50..6e2e7f2 100644 --- a/discovery/src/ll_touch.c +++ b/discovery/src/ll_touch.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -14,6 +15,9 @@ #define REQ_Y_COORD 0xD0 // Request y coordinate #define REQ_1_DATAB 0x00 // Request one databyte +/* Globals ----------------------------------------------------------- */ +volatile bool pen_state = false; // PenDown = True; PenUp = False; + /* Prototypes -------------------------------------------------------- */ bool ll_touch_init(); static void init_exti(); @@ -158,7 +162,7 @@ static void init_exti() EXTI_StructInit(&exti); exti.EXTI_Line = EXTI_Line0; exti.EXTI_Mode = EXTI_Mode_Interrupt; - exti.EXTI_Trigger = EXTI_Trigger_Falling; + exti.EXTI_Trigger = EXTI_Trigger_Rising_Falling; exti.EXTI_LineCmd = ENABLE; EXTI_Init(&exti); @@ -175,6 +179,21 @@ void EXTI0_IRQHandler() { if (EXTI_GetITStatus(EXTI_Line0) != RESET) { // Make sure the interrupt flag is set touch_test(); + + //uint16_t x = touch_get_x_coord(); + //uint16_t y = touch_get_y_coord(); + + uint16_t x = 0; + uint16_t y = 0; + + if(pen_state){ + touch_add_raw_event(x, y, TOUCH_DOWN); + }else{ + touch_add_raw_event(x, y, TOUCH_UP); + } + + pen_state = !pen_state; // Toggle penstate + EXTI_ClearITPendingBit(EXTI_Line0); // Clear interrupt flag } } From 1785b80dc4756a9bf6180099e7d1eb1bea18c887 Mon Sep 17 00:00:00 2001 From: id101010 Date: Thu, 28 May 2015 22:32:13 +0200 Subject: [PATCH 6/9] Recent changes without temporary files --- discovery/src/.ll_touch.c.swp | Bin 20480 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 discovery/src/.ll_touch.c.swp diff --git a/discovery/src/.ll_touch.c.swp b/discovery/src/.ll_touch.c.swp deleted file mode 100644 index 192e78c9b41d578de4d4ba38b2fd8247fadf1429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20480 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 CNaWW5 From 7d2d1a13e44013669dcca912855fa8e95fd9441c Mon Sep 17 00:00:00 2001 From: id101010 Date: Fri, 29 May 2015 01:34:55 +0200 Subject: [PATCH 7/9] Implemented basic sampling and averaging of touch coordinates using timer7 --- common/app/app.c | 7 ++- common/app/screen_guitest.c | 2 +- discovery/.gitignore | 4 ++ discovery/src/ll_touch.c | 90 +++++++++++++++++++++++++++++-------- 4 files changed, 79 insertions(+), 24 deletions(-) diff --git a/common/app/app.c b/common/app/app.c index 61c1d0f..21da23b 100644 --- a/common/app/app.c +++ b/common/app/app.c @@ -2,7 +2,7 @@ #include "tft.h" #include "system.h" #include "touch.h" -#include "screen_guitest.h" +#include "screen_main.h" #include "filesystem.h" void app_init() { @@ -11,15 +11,14 @@ void app_init() { touch_init(); filesystem_init(); - gui_screen_navigate(get_screen_guitest()); + gui_screen_navigate(get_screen_main()); } - //app event loop void app_process() { system_process(); //Let the system handle it's pending events - //gui_screen_update(); //update the currently active screen + gui_screen_update(); //update the currently active screen } diff --git a/common/app/screen_guitest.c b/common/app/screen_guitest.c index 282636e..201b23e 100644 --- a/common/app/screen_guitest.c +++ b/common/app/screen_guitest.c @@ -104,7 +104,7 @@ static void enter(void* screen) { n_updown.max=11; n_updown.min =-5; n_updown.callback=n_updown_cb; - gui_numupdown_add(&n_updown); + //gui_numupdown_add(&n_updown); } diff --git a/discovery/.gitignore b/discovery/.gitignore index 0ccb2ea..1004af7 100644 --- a/discovery/.gitignore +++ b/discovery/.gitignore @@ -4,3 +4,7 @@ obj/ libs/*/obj libs/*/*.a libs/*/*.o + +*~ +*.swp +*.swo diff --git a/discovery/src/ll_touch.c b/discovery/src/ll_touch.c index 6e2e7f2..1879e00 100644 --- a/discovery/src/ll_touch.c +++ b/discovery/src/ll_touch.c @@ -14,19 +14,45 @@ #define REQ_X_COORD 0x90 // Request x coordinate #define REQ_Y_COORD 0xD0 // Request y coordinate #define REQ_1_DATAB 0x00 // Request one databyte +#define DWIDTH 320 +#define DHEIGHT 240 +#define CCENTER 20 +#define x1 0x0231 +#define dx 0x0C08 +#define y1 0x0287 +#define dy 0x0B56 +#define NSAMPLE 16 /* Globals ----------------------------------------------------------- */ -volatile bool pen_state = false; // PenDown = True; PenUp = False; +volatile bool pen_state = false; // PenDown = True; PenUp = False; +volatile bool tim_flag = false; +volatile uint16_t x_samples[NSAMPLE-1]; +volatile uint16_t y_samples[NSAMPLE-1]; +volatile int i; /* Prototypes -------------------------------------------------------- */ bool ll_touch_init(); static void init_exti(); +static void init_timer(); static uint8_t touch_send(uint8_t dat); +static uint16_t avg_vals(uint16_t samples[], uint16_t len); static uint16_t touch_get_y_coord(); static uint16_t touch_get_y_coord(); -void touch_test(); +void touch_test(uint16_t x, uint16_t y); /* Functions --------------------------------------------------------- */ +static uint16_t avg_vals(uint16_t samples[], uint16_t len) +{ + uint16_t j = 0; + uint32_t tmp = 0; + + for(j = 0; j < len; j++){ + tmp += samples[j]; + } + + return (uint16_t)(tmp/len); +} + static uint16_t touch_get_x_coord() { uint16_t buf_x = 0; @@ -64,16 +90,12 @@ static uint8_t touch_send(uint8_t dat) return SPI_I2S_ReceiveData(SPI2); } -void touch_test() +void touch_test(uint16_t x, uint16_t y) { - uint16_t x = 0, y = 0; char xs[10]; char ys[10]; tft_clear(BLACK); - - x = touch_get_x_coord(); - y = touch_get_y_coord(); itoa(x, xs, 10); itoa(y, ys, 10); @@ -135,9 +157,11 @@ bool ll_touch_init() SPI_Cmd(SPI2, ENABLE); // enable spi init_exti(); // init external interrupt for penirq + init_timer(); // init the timer 6 for sampling x and y coordinates return true; } + static void init_exti() { /* init structures */ @@ -174,26 +198,54 @@ static void init_exti() NVIC_Init(&nvic); // Config NVIC } +static void init_timer() +{ + TIM_TimeBaseInitTypeDef t; + const int APB1_CLK = 42E6; + + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE); // Enable clock for TIM6 + + /* Timer 7 configuration */ + TIM_TimeBaseStructInit(&t); // Init TimeBaseStruct + t.TIM_Prescaler = APB1_CLK / 1000 - 1; // 0..41999 prescaler + t.TIM_Period = 20- 1; // 10ms cycle time + TIM_TimeBaseInit(TIM7, &t); // Init TIM7 + TIM_ITConfig(TIM7, TIM_IT_Update, ENABLE); // Enable update IRQ for TIM7 + NVIC_EnableIRQ(TIM7_IRQn); // Enable IRQs for TIM7 +} + /* Interrupt service routines ------------------------------------------ */ void EXTI0_IRQHandler() { - if (EXTI_GetITStatus(EXTI_Line0) != RESET) { // Make sure the interrupt flag is set - touch_test(); + if (EXTI_GetITStatus(EXTI_Line0) == SET) { // Make sure the interrupt flag is set - //uint16_t x = touch_get_x_coord(); - //uint16_t y = touch_get_y_coord(); - - uint16_t x = 0; - uint16_t y = 0; - - if(pen_state){ - touch_add_raw_event(x, y, TOUCH_DOWN); + if(!pen_state){ // Check if PENDOWN or PENUP + TIM_Cmd(TIM7, ENABLE); // Start the timer + while(!tim_flag); // Wait for the sampling to finish + touch_add_raw_event(avg_vals(x_samples, NSAMPLE), avg_vals(y_samples, NSAMPLE), TOUCH_DOWN); }else{ - touch_add_raw_event(x, y, TOUCH_UP); + TIM_Cmd(TIM7, ENABLE); // Start the timer + while(!tim_flag); // Wait for the sampling to finish + touch_add_raw_event(avg_vals(x_samples, NSAMPLE), avg_vals(y_samples, NSAMPLE), TOUCH_UP); } pen_state = !pen_state; // Toggle penstate - + tim_flag = false; // Clear timer flag EXTI_ClearITPendingBit(EXTI_Line0); // Clear interrupt flag } } + +void TIM7_IRQHandler() +{ + if(TIM_GetFlagStatus(TIM7, TIM_IT_Update) == SET){ // Make sure the interrupt flag is set + for(i = 0; i < (NSAMPLE-1); i++){ + /* get x and y coordinate and apply calibration */ + x_samples[i] = (((long)(DWIDTH-2*CCENTER)*2*(long)((long)touch_get_x_coord()-x1)/dx+1)>>1)+CCENTER; + y_samples[i] = (((long)(DHEIGHT-2*CCENTER)*2*(long)((long)touch_get_y_coord()-y1)/dy+1)>>1)+CCENTER; + } + + tim_flag = true; // Set the global timer flag + TIM_Cmd(TIM7, DISABLE); // Count only once + } + +} From dff2e76caba813cb04a1b8eb004518d4af013871 Mon Sep 17 00:00:00 2001 From: id101010 Date: Mon, 1 Jun 2015 01:30:51 +0200 Subject: [PATCH 8/9] Touch recognition working --- discovery/src/ll_touch.c | 59 +++++++++++++++++++------------------- emulator/emulated/test.txt | 1 - 2 files changed, 29 insertions(+), 31 deletions(-) delete mode 100644 emulator/emulated/test.txt diff --git a/discovery/src/ll_touch.c b/discovery/src/ll_touch.c index 1879e00..36d373a 100644 --- a/discovery/src/ll_touch.c +++ b/discovery/src/ll_touch.c @@ -129,8 +129,8 @@ bool ll_touch_init() /* fill gpio init struct and init gpio */ GPIO_StructInit(&GPIO_SPI2_InitStructure); - GPIO_SPI2_InitStructure.GPIO_Pin = GPIO_Pin_9; // 9 = SPI2_CS - GPIO_SPI2_InitStructure.GPIO_Mode = GPIO_Mode_OUT; + GPIO_SPI2_InitStructure.GPIO_Pin = GPIO_Pin_9; // 9 = SPI2_CS + GPIO_SPI2_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_SPI2_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_SPI2_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_SPI2_InitStructure); @@ -186,7 +186,7 @@ static void init_exti() EXTI_StructInit(&exti); exti.EXTI_Line = EXTI_Line0; exti.EXTI_Mode = EXTI_Mode_Interrupt; - exti.EXTI_Trigger = EXTI_Trigger_Rising_Falling; + exti.EXTI_Trigger = EXTI_Trigger_Falling; // Trigger on falling edge (PENIRQ) exti.EXTI_LineCmd = ENABLE; EXTI_Init(&exti); @@ -207,8 +207,8 @@ static void init_timer() /* Timer 7 configuration */ TIM_TimeBaseStructInit(&t); // Init TimeBaseStruct - t.TIM_Prescaler = APB1_CLK / 1000 - 1; // 0..41999 prescaler - t.TIM_Period = 20- 1; // 10ms cycle time + t.TIM_Prescaler = APB1_CLK / 1000 - 1; // 41999 prescaler + t.TIM_Period = 50 - 1; // 50ms count time TIM_TimeBaseInit(TIM7, &t); // Init TIM7 TIM_ITConfig(TIM7, TIM_IT_Update, ENABLE); // Enable update IRQ for TIM7 NVIC_EnableIRQ(TIM7_IRQn); // Enable IRQs for TIM7 @@ -217,35 +217,34 @@ static void init_timer() /* Interrupt service routines ------------------------------------------ */ void EXTI0_IRQHandler() { - if (EXTI_GetITStatus(EXTI_Line0) == SET) { // Make sure the interrupt flag is set - - if(!pen_state){ // Check if PENDOWN or PENUP - TIM_Cmd(TIM7, ENABLE); // Start the timer - while(!tim_flag); // Wait for the sampling to finish - touch_add_raw_event(avg_vals(x_samples, NSAMPLE), avg_vals(y_samples, NSAMPLE), TOUCH_DOWN); - }else{ - TIM_Cmd(TIM7, ENABLE); // Start the timer - while(!tim_flag); // Wait for the sampling to finish - touch_add_raw_event(avg_vals(x_samples, NSAMPLE), avg_vals(y_samples, NSAMPLE), TOUCH_UP); - } - - pen_state = !pen_state; // Toggle penstate - tim_flag = false; // Clear timer flag + if (EXTI_GetITStatus(EXTI_Line0) == SET) { // If the right interrupt flag is set + TIM_Cmd(TIM7, ENABLE); // Start the timer EXTI_ClearITPendingBit(EXTI_Line0); // Clear interrupt flag } } void TIM7_IRQHandler() { - if(TIM_GetFlagStatus(TIM7, TIM_IT_Update) == SET){ // Make sure the interrupt flag is set - for(i = 0; i < (NSAMPLE-1); i++){ - /* get x and y coordinate and apply calibration */ - x_samples[i] = (((long)(DWIDTH-2*CCENTER)*2*(long)((long)touch_get_x_coord()-x1)/dx+1)>>1)+CCENTER; - y_samples[i] = (((long)(DHEIGHT-2*CCENTER)*2*(long)((long)touch_get_y_coord()-y1)/dy+1)>>1)+CCENTER; - } - - tim_flag = true; // Set the global timer flag - TIM_Cmd(TIM7, DISABLE); // Count only once - } - + if(TIM_GetFlagStatus(TIM7, TIM_IT_Update) == SET){ // Make sure the interrupt flag is set + + TIM_Cmd(TIM7, DISABLE); // Disable the timer during the measuring + + if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)){ // Only do this if the PENIRQ line is still low + /* Sample 16 times and submit */ + for(i = 0; i < (NSAMPLE-1); i++){ + /* Apply some calibration to the measured positions */ + x_samples[i] = (((long)(DWIDTH - 2 * CCENTER) * 2 * (long)((long)touch_get_x_coord() - x1) / dx + 1) >> 1) + CCENTER; + y_samples[i] = (((long)(DHEIGHT -2 * CCENTER) * 2 * (long)((long)touch_get_y_coord() - y1) / dy + 1) >> 1) + CCENTER; + } + + touch_add_raw_event(avg_vals(x_samples, NSAMPLE), avg_vals(y_samples, NSAMPLE), TOUCH_DOWN); + TIM_Cmd(TIM7, ENABLE); + + } else { + touch_add_raw_event(avg_vals(x_samples, NSAMPLE), avg_vals(y_samples, NSAMPLE), TOUCH_UP); + TIM_Cmd(TIM7, DISABLE); + } + + TIM_ClearFlag(TIM7, TIM_IT_Update); + } } diff --git a/emulator/emulated/test.txt b/emulator/emulated/test.txt deleted file mode 100644 index 9bbe689..0000000 --- a/emulator/emulated/test.txt +++ /dev/null @@ -1 +0,0 @@ -Hallo Test 1241 From caa7b5c50f24f227344fcabcd7ecfe15d04ff658 Mon Sep 17 00:00:00 2001 From: id101010 Date: Mon, 1 Jun 2015 21:25:49 +0200 Subject: [PATCH 9/9] Added IRQ for user button, fixed some touchproblems. --- common/app/screen_main.c | 2 +- common/app/screen_pixytest.c | 4 +- discovery/src/ll_tft.c | 46 ++++++++++---------- discovery/src/ll_touch.c | 81 +++++++++++++++++++++++++++--------- 4 files changed, 87 insertions(+), 46 deletions(-) diff --git a/common/app/screen_main.c b/common/app/screen_main.c index 1ff52d6..6aefa24 100644 --- a/common/app/screen_main.c +++ b/common/app/screen_main.c @@ -77,7 +77,7 @@ static void enter(void* screen) { b_ref_tracking.txtcolor=WHITE; b_ref_tracking.bgcolor=HEX(0xFF2151); b_ref_tracking.font=0; - b_ref_tracking.text="Reference Tracking"; + b_ref_tracking.text="Ref Tracking"; b_ref_tracking.callback=b_ref_tracking_cb; gui_button_add(&b_ref_tracking); diff --git a/common/app/screen_pixytest.c b/common/app/screen_pixytest.c index 05b5402..32fdcf4 100644 --- a/common/app/screen_pixytest.c +++ b/common/app/screen_pixytest.c @@ -264,7 +264,7 @@ static void enter(void* screen) { n_led_powerlimit.max=40; n_led_powerlimit.min =0; n_led_powerlimit.callback=n_led_powerlimit_cb; - gui_numupdown_add(&n_led_powerlimit); + //gui_numupdown_add(&n_led_powerlimit); @@ -283,7 +283,7 @@ static void leave(void* screen) { gui_button_remove(&b_led_red); gui_button_remove(&b_led_green); gui_button_remove(&b_led_blue); - gui_numupdown_remove(&n_led_powerlimit); + //gui_numupdown_remove(&n_led_powerlimit); } diff --git a/discovery/src/ll_tft.c b/discovery/src/ll_tft.c index 912b7dd..37037b2 100644 --- a/discovery/src/ll_tft.c +++ b/discovery/src/ll_tft.c @@ -101,7 +101,7 @@ void ll_tft_draw_char(uint16_t x, uint16_t y, uint16_t color, uint16_t bgcolo #define TFT_SSD1289_REG_46 0x46 // Y-end register // Timeouts -#define TFT_INIT_TIMEOUT 1 // 1ms timeout +#define TFT_INIT_TIMEOUT 10 // 1ms timeout /* * ---------------------- init functions ---------------------------------------------------------- @@ -230,30 +230,30 @@ static bool fsmc_init() RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); // prepare timing struct - FSMC_NORSRAMTimingInitStructure.FSMC_AddressSetupTime = TFT_SSD1289_FSMC_AST; - FSMC_NORSRAMTimingInitStructure.FSMC_AddressHoldTime = 1; - FSMC_NORSRAMTimingInitStructure.FSMC_DataSetupTime = TFT_SSD1289_FSMC_DST; - FSMC_NORSRAMTimingInitStructure.FSMC_BusTurnAroundDuration = 0; - FSMC_NORSRAMTimingInitStructure.FSMC_CLKDivision = 0; - FSMC_NORSRAMTimingInitStructure.FSMC_DataLatency = 0; - FSMC_NORSRAMTimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_A; + FSMC_NORSRAMTimingInitStructure.FSMC_AddressSetupTime = TFT_SSD1289_FSMC_AST; + FSMC_NORSRAMTimingInitStructure.FSMC_AddressHoldTime = 1; + FSMC_NORSRAMTimingInitStructure.FSMC_DataSetupTime = TFT_SSD1289_FSMC_DST; + FSMC_NORSRAMTimingInitStructure.FSMC_BusTurnAroundDuration = 0; + FSMC_NORSRAMTimingInitStructure.FSMC_CLKDivision = 0; + FSMC_NORSRAMTimingInitStructure.FSMC_DataLatency = 0; + FSMC_NORSRAMTimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_A; // bank-1 / PSRAM-1 - FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1; - FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; - FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM; - FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; - FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; - FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; - FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; - FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; - FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; - FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; - FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; - FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; - FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; - FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &FSMC_NORSRAMTimingInitStructure; - FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &FSMC_NORSRAMTimingInitStructure; + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &FSMC_NORSRAMTimingInitStructure; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &FSMC_NORSRAMTimingInitStructure; // config FSMC FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); diff --git a/discovery/src/ll_touch.c b/discovery/src/ll_touch.c index 36d373a..8773e9a 100644 --- a/discovery/src/ll_touch.c +++ b/discovery/src/ll_touch.c @@ -1,4 +1,6 @@ #include"ll_touch.h" +#include"screen.h" +#include"screen_guitest.h" #include #include #include @@ -11,6 +13,7 @@ /* Defines ---------------------------------------------------------- */ #define CLEAR_CS GPIO_ResetBits(GPIOB,GPIO_Pin_9) #define SET_CS GPIO_SetBits(GPIOB,GPIO_Pin_9) +#define PENIRQ !GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1) #define REQ_X_COORD 0x90 // Request x coordinate #define REQ_Y_COORD 0xD0 // Request y coordinate #define REQ_1_DATAB 0x00 // Request one databyte @@ -35,13 +38,13 @@ bool ll_touch_init(); static void init_exti(); static void init_timer(); static uint8_t touch_send(uint8_t dat); -static uint16_t avg_vals(uint16_t samples[], uint16_t len); +static uint16_t avg_vals(volatile uint16_t samples[], uint16_t len); static uint16_t touch_get_y_coord(); static uint16_t touch_get_y_coord(); void touch_test(uint16_t x, uint16_t y); /* Functions --------------------------------------------------------- */ -static uint16_t avg_vals(uint16_t samples[], uint16_t len) +static uint16_t avg_vals(volatile uint16_t samples[], uint16_t len) { uint16_t j = 0; uint32_t tmp = 0; @@ -164,34 +167,64 @@ bool ll_touch_init() static void init_exti() { + + // PENIRQ -> EXTI1 (PC1) + // Blue Button -> EXTI0 (PA0) + /* init structures */ GPIO_InitTypeDef gpio; EXTI_InitTypeDef exti; NVIC_InitTypeDef nvic; - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); // enable GPIOA clock RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); // enable SYSCFG clock + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); // enable GPIOC clock + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); // enable GPIOA clock - /* Set GPIOA0 as input */ + /* Set GPIOC1 as input */ gpio.GPIO_Mode = GPIO_Mode_IN; gpio.GPIO_OType = GPIO_OType_PP; - gpio.GPIO_Pin = GPIO_Pin_0; + gpio.GPIO_Pin = GPIO_Pin_1; gpio.GPIO_PuPd = GPIO_PuPd_UP; gpio.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_Init(GPIOC, &gpio); + + SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource1); // Bind Exti_line1 to PC1 + + /* Set GPIOA0 as input */ + gpio.GPIO_Mode = GPIO_Mode_IN; + gpio.GPIO_OType = GPIO_OType_OD; + gpio.GPIO_Pin = GPIO_Pin_0; + gpio.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOA, &gpio); - SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0); // Bind Exti_line0 to PA0 + SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0); // Bind Exti_line1 to PC1 - /* EXTI on PA0 */ + /* EXTI on PC1 */ EXTI_StructInit(&exti); - exti.EXTI_Line = EXTI_Line0; + exti.EXTI_Line = EXTI_Line1; exti.EXTI_Mode = EXTI_Mode_Interrupt; exti.EXTI_Trigger = EXTI_Trigger_Falling; // Trigger on falling edge (PENIRQ) exti.EXTI_LineCmd = ENABLE; EXTI_Init(&exti); + + /* EXTI on PA0 */ + EXTI_StructInit(&exti); + exti.EXTI_Line = EXTI_Line0; + exti.EXTI_Mode = EXTI_Mode_Interrupt; + exti.EXTI_Trigger = EXTI_Trigger_Falling; // Trigger on calibration (Blue button) + exti.EXTI_LineCmd = ENABLE; + EXTI_Init(&exti); /* Add IRQ vector to NVIC */ - nvic.NVIC_IRQChannel = EXTI0_IRQn; // PD0 -> EXTI_Line0 -> EXTI0_IRQn vector + nvic.NVIC_IRQChannel = EXTI1_IRQn; // PC1 -> EXTI_Line1 -> EXTI1_IRQn vector + nvic.NVIC_IRQChannelPreemptionPriority = 0x00; // Set priority + nvic.NVIC_IRQChannelSubPriority = 0x00; // Set sub priority + nvic.NVIC_IRQChannelCmd = ENABLE; // Enable interrupt + NVIC_Init(&nvic); // Config NVIC + + /* Add IRQ vector to NVIC */ + nvic.NVIC_IRQChannel = EXTI0_IRQn; // PA0 -> EXTI_Line0 -> EXTI0_IRQn vector nvic.NVIC_IRQChannelPreemptionPriority = 0x00; // Set priority nvic.NVIC_IRQChannelSubPriority = 0x00; // Set sub priority nvic.NVIC_IRQChannelCmd = ENABLE; // Enable interrupt @@ -218,33 +251,41 @@ static void init_timer() void EXTI0_IRQHandler() { if (EXTI_GetITStatus(EXTI_Line0) == SET) { // If the right interrupt flag is set - TIM_Cmd(TIM7, ENABLE); // Start the timer + gui_screen_navigate(get_screen_guitest()); EXTI_ClearITPendingBit(EXTI_Line0); // Clear interrupt flag } } +void EXTI1_IRQHandler() +{ + if (EXTI_GetITStatus(EXTI_Line1) == SET) { // If the right interrupt flag is set + TIM_Cmd(TIM7, ENABLE); // Start the timer + EXTI_ClearITPendingBit(EXTI_Line1); // Clear interrupt flag + } +} + void TIM7_IRQHandler() { if(TIM_GetFlagStatus(TIM7, TIM_IT_Update) == SET){ // Make sure the interrupt flag is set TIM_Cmd(TIM7, DISABLE); // Disable the timer during the measuring - if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)){ // Only do this if the PENIRQ line is still low - /* Sample 16 times and submit */ - for(i = 0; i < (NSAMPLE-1); i++){ - /* Apply some calibration to the measured positions */ + if(PENIRQ){ // Only do this if the PENIRQ line is still low + for(i = 0; i < (NSAMPLE-1); i++){ // Sample 16 times and apply some calibration x_samples[i] = (((long)(DWIDTH - 2 * CCENTER) * 2 * (long)((long)touch_get_x_coord() - x1) / dx + 1) >> 1) + CCENTER; y_samples[i] = (((long)(DHEIGHT -2 * CCENTER) * 2 * (long)((long)touch_get_y_coord() - y1) / dy + 1) >> 1) + CCENTER; } - - touch_add_raw_event(avg_vals(x_samples, NSAMPLE), avg_vals(y_samples, NSAMPLE), TOUCH_DOWN); - TIM_Cmd(TIM7, ENABLE); + + touch_add_raw_event(avg_vals(x_samples, NSAMPLE), avg_vals(y_samples, NSAMPLE), TOUCH_DOWN); // Update position + //tft_draw_pixel(avg_vals(x_samples, NSAMPLE), avg_vals(y_samples, NSAMPLE), RED); + TIM_Cmd(TIM7, ENABLE); // Reenable timer } else { - touch_add_raw_event(avg_vals(x_samples, NSAMPLE), avg_vals(y_samples, NSAMPLE), TOUCH_UP); - TIM_Cmd(TIM7, DISABLE); + touch_add_raw_event(avg_vals(x_samples, NSAMPLE), avg_vals(y_samples, NSAMPLE), TOUCH_UP); // Update position one last time + //tft_draw_pixel(avg_vals(x_samples, NSAMPLE), avg_vals(y_samples, NSAMPLE), RED); + TIM_Cmd(TIM7, DISABLE); // Disable timer } - TIM_ClearFlag(TIM7, TIM_IT_Update); + TIM_ClearFlag(TIM7, TIM_IT_Update); // Clear timer interrupt flag } }