1. Introdu Intr oducci cción ón
Desarrollar un programa con animación en un LCD gráfco, mostrando el comportamiento de un sistema de nivel de líquido. Donde se tiene un Set Point y un Nivel ctual, mostrando los resultados en el LCD gráfco. 2. Objet Obj etivo ivo
Desarrollar un programa con animación en un LCD gráfco, mostrando el comportamiento de un sistema de nivel de líquido. 3. Desarr Des arrol ollo lo
Se dice que se tomara solamente los !" grados para poder tomar el tope del nivel de líquidos. #s de acá donde se saca la primera $órmula del nivel actual que es% 45 =¿
&'.( )*its+ adecuada al tanque #s de acá donde se o*tiene la $órmula para el nivel de agua actual que es% Lcd ∗100 Na = 37.8
para el valor del Set Point es% Lcd∗100 Sp = 255
3.1.
Animacio Anim aciones nes
Para poder reali-ar la animación del tanque llenándose con sensor de nivel del potenciómetro se utili-a la $órmula de una pará*ola, ya que el movimiento de este es similar a la $unción de una pará*ola. ecordando ecordando cual es la $unción se muestra% muestr a% 2
Y = A x + Bx + C
Donde como resultado o*tuvimos% 2
Y =0.25 x −19.75 x + 390
tenemos el ta/o de 0 con la siguiente $ormula%
x =27 +
a 2 dConvert 8 bit ( 1 )∗12 127.5
Donde se utili-a los dos e1es de coordenadas para el di*u1ado de la recta y la circun$erencia. Con las siguientes coordenadas Dra2Circle)0,y,3,4+5 Dra2Line)&6,4",0,y,4+5 4. Programa
78 includes 87 9include :avr7io.;< 77 access to controller =7> 9include :inttypes.;< 77 integer types 9include :avr7pgmspace.;<77 access to program memory 9include ?glo*al.;? 9include ?uart.;? 77 include uart $unction li*rary 9include ?rprint$.;? 77 include print$ $unction li*rary 9include ?a3d.;?77 include 7D converter $unction li*rary 9include ?timer.;?77 include timer $unction li*rary )timing, P@A, etc+ 9include ?tB6B&c.;?77 defnitions and prototypes 9include ?menunivel.;? 77 menu 9include ?tanque.;? 9include ?pot.;? 9include ?mat;.;? 9include :util7delay.;< 9include :avr7interrupt.;< 78 lo*al Earia*les 87 void muestra)int 0p,int yp,int 0q,int yq+5 void oscope)void+5 void oscope4)void+5 void tanq)void+5 void rprint$Float)c;ar numDigits, dou*le 0+5 void lcd*itmap)c;ar imag+ 5 void lcdprint=cono(0()int 0p,int yp,int fl,int col,c;ar tipo+5 void lcdprint=cono3!03!)int 0p,int yp,int fl,int col,c;ar tipo+5 void lcdclear=cono(0()int 0p,int yp+5 void lcdclear=cono3!03!)int 0p,int yp+5 volatile Goat s0HI.4,syHI.45 volatile int flaHI,colHI, palH4,op,$erH45 uI( imagHI,0HI,-HI,serHI5 int main(void) uI( 1H",JH(,lHI,mHI5 uI( carlHI5 a3d=nit)+5 DDKHI0I&5 out*)DD,I0FC+5 DDDHI0I&5
DDC H I0#I5 77 confgurando el P>C como entrada 77P>C H I04F5 77 activando los PMLLMPS out*)DDD, I0FF+5 P>DHI0IC5 lcdinitialise)+5 lcdcleargrap;ics)+5 lcdclearte0t)+5 ACMCHI0Ia5 c*i)ACMCS,B+5 s*i)=C,"+5 s*i)=C,B+5 s*i)=C,'+5 sei)+5 lcd2ritecommand)LCDD=SPLA>D#SP=CS>N O LCDD=SPLA>D#S#>N+5 rprint$=nit)lcd2ritec;ar+5 lcd*itmap)imag+5 lcddelay4IIms)+5 lcdcleargrap;ics)+5 lcdgoto0y)I,I+5rprint$)? Aenu ?+5 lcdprint=cono3!03!)",(,I,I,I+5 lcdprint=cono3!03!)&",(,I,&,4+5 lcdprint=cono3!03!)B",(,I,B,4+5 lcdprint=cono3!03!)",&(,&,B,4+5 lcdprint=cono3!03!)&",&(,&,&,4+5 lcdprint=cono3!03!)B",&(,&,I,4+5 2;ile )4+ Q 2;ile)$erHHI+ Q i$ )carlHHI+ Q lcdcleargrap;ics)+5 lcdclearte0t)+5 carlH45 R i$)flaHHI+ Q s2itc;)col+ Q case I%Q imagH35 lcd*itmap)imag+5 tanq)+5
muestra)',3,6,B+5 *reaJ5R case 4%Q muestra)B,3,(,B+5 *reaJ5R case 3%Q oscope)+5 muestra)',3,6,B+5 *reaJ5R R R else Q s2itc; )col+ Q case 3%Q imagH45
lcd*itmap)imag+5 oscope4)+5
muestra)',3,6,B+5 *reaJ5R R R R i$)carlHH4+ Q lcdclearte0t)+5 lcdcleargrap;ics)+5 lcdgoto0y)I,I+5rprint$)?Aenu?+5 lcdprint=cono3!03!)",(,I,I,I+5 lcdprint=cono3!03!)&",(,I,&,4+5 lcdprint=cono3!03!)B",(,I,B,4+5 lcdprint=cono3!03!)",&(,&,B,4+5 lcdprint=cono3!03!)&",&(,&,&,4+5 lcdprint=cono3!03!)B",&(,&,I,4+5 flaHI5 colHI5
palH45 1H"5 JH(5 lHI5 mHI5 carlHI5 R i$)flaHHI+ Q s2itc; )col+ Q case I%Q i$)palHHI+ Qlcdclear=cono3!03!)1,J+5 lcdprint=cono3!03!)1,J,l,m,4+5 1H"5 JH(5 lHI5 mHI5 lcdclear=cono3!03!)1,J+5 lcdprint=cono3!03!)1,J,l,m,I+5 pal5 R else Q lcdprint=cono3!03!)1,J,l,m,I+5 R *reaJ5R case 4%Q i$)palHHI+ Qlcdclear=cono3!03!)1,J+5 lcdprint=cono3!03!)1,J,l,m,4+5 1H&"5 JH(5 lHI5 mH&5 lcdclear=cono3!03!)1,J+5 lcdprint=cono3!03!)1,J,l,m,I+5 pal5 R else Q lcdprint=cono3!03!)1,J,l,m,I+5 R
*reaJ5R case 3%Q i$)palHHI+ Qlcdclear=cono3!03!)1,J+5 lcdprint=cono3!03!)1,J,l,m,4+5 1HB"5 JH(5 lHI5 mHB5 lcdclear=cono3!03!)1,J+5 lcdprint=cono3!03!)1,J,l,m,I+5 pal5 R else Q lcdprint=cono3!03!)1,J,l,m,I+5 R *reaJ5R R R else Q s2itc; )col+ Q case I%Q i$)palHHI+ Qlcdclear=cono3!03!)1,J+5 lcdprint=cono3!03!)1,J,l,m,4+5 1H"5 JH&(5 lH&5 mHB5 lcdclear=cono3!03!)1,J+5 lcdprint=cono3!03!)1,J,l,m,I+5 pal5 R else Q lcdprint=cono3!03!)1,J,l,m,I+5 R *reaJ5R case 4%Q i$)palHHI+ Qlcdclear=cono3!03!)1,J+5 lcdprint=cono3!03!)1,J,l,m,4+5
1H&"5 JH&(5 lH&5 mH&5 lcdclear=cono3!03!)1,J+5 lcdprint=cono3!03!)1,J,l,m,I+5 pal5 R else Q lcdprint=cono3!03!)&",&(,&,&,I+5 R *reaJ5R case 3%Q i$)palHHI+ Qlcdclear=cono3!03!)1,J+5 lcdprint=cono3!03!)1,J,l,m,4+5 1HB"5 JH&(5 lH&5 mHI5 lcdclear=cono3!03!)1,J+5 lcdprint=cono3!03!)1,J,l,m,I+5 pal5 R else Q lcdprint=cono3!03!)B",&(,&,I,I+5 R *reaJ5R R R R R void lcd*itmap)c;ar tipo+ Q uint(t 0,0i,0$,y,yi,y$,c,ccc5 uint(t *itmap5 uint(t i5 uint4Bt c*itmapHI5 yiHI5
y$H'5 $or)cccHI5 ccc : (5 ccc+ Q $or)iHI5 i : 4B5 i+ Q 0iH i8(5 0$H )i4+8(T45 $or)yHyi5y:Hy$5y+ Q cHI0(I5 s2itc;)imag+ Q R case 4% Q *itmap H pgmread*yte)U)potVc*itmapW++5
*reaJ5
R case 3% Q *itmap H pgmread*yte)U)tanqueVc*itmapW++5 *reaJ5 R R $or)0H0i50:H0$50+ Q i$))*itmapUc+HHc+ lcdsetpi0el)0,y+5 cHc<<45 R R R yiHyi(5 y$Hy$(5 R !
void lcdprint=cono3!03!)int 0p,int yp,int fl,int col,c;ar tipo+ Q lcdprint=cono(0()0p,yp,fl,col,tipo+5 lcdprint=cono(0()0p,yp(,fl4,col,tipo+5 lcdprint=cono(0()0p,yp4B,fl3,col,tipo+5
lcdprint=cono(0()0p(,yp,fl,col4,tipo+5 lcdprint=cono(0()0p(,yp(,fl4,col4,tipo+5 lcdprint=cono(0()0p(,yp4B,fl3,col4,tipo+5 lcdprint=cono(0()0p4B,yp,fl,col3,tipo+5 lcdprint=cono(0()0p4B,yp(,fl4,col3,tipo+5 lcdprint=cono(0()0p4B,yp4B,fl3,col3,tipo+5 R void lcdprint=cono(0()int 0p,int yp,int fl,int col,c;ar tipo+ Q uint(t 0,0i,0$,y,yi,y$,c5 uint(t *itmap5 uint(t i5 uint4Bt c*itmapHI5 c*itmapHfl84B8((8col5 yiHI5 y$H'5 iHfl8(84B5 0iH i8(5 0$H )i4+8(T45 $or)yHyi5y:Hy$5y+ Q cHI0(I5 *itmap H pgmread*yte)U)menunivelVc*itmapW++5 $or)0H0i50:H0$50+ Q i$)tipoHH4+ Q i$))*itmapUc+HHc+ lcdsetpi0el)00p,yyp+5R else Q i$))*itmapUc+XHc+ lcdsetpi0el)00p,yyp+5R cHc<<45 R R R void lcdclear=cono(0()int 0p,int yp+ Q Fillect)0p,yp,0p(,yp(,I+5 R void lcdclear=cono3!03!)int 0p,int yp+ Q Fillect)0p,yp,0p3!,yp3!,I+5 R void oscope)void+ Q dou*le y,y4,sp,na,;5
yH!IT)a3dConvert(*it)I+8!I73""+5 y4H!IT)a3dConvert(*it)4+8!I7&'.(+5 lcdsetpi0el)ser,y4+5 Dra2LineFormat)4,y,4II,y,4,4+5 lcddelay4IIms)+5 Dra2Line)4,y,4II,y,I+5 ser5 i$)0HH4II+ Q serHI5 lcdcleargrap;ics)+5 R
spH)a3dConvert(*it)I+84II73""+5 naH)a3dConvert(*it)4+84II7&'.(+5 i$)sp:na+ Q Dra2Line)-,!",0,!",4+5 lcddelay4IIms)+5 0H045 -H05 i$)0HH4II+ Q 0HI5 R R i$)sp
77 fnd starting digit place $or)iHI5 i:4"5 i+ Q i$))07place+ : 4I.I+ *reaJ5 else place Hplace84I.I5 R 77 print polarity c;aracter i$)negative+ rprint$C;ar)ZTZ+5 else rprint$C;ar)ZZ+5 77 print digits $or)iHI5 i:numDigits5 i+ Q digit H)int+)07place+5 i$)digit O frstplace O )place HH 4.I++ Q frstplace H M#5 rprint$C;ar)digitI0&I+5 R else rprint$C;ar)Z Z+5 i$)place HH 4.I+ Q rprint$C;ar)Z.Z+5 R 0H0Tdigit8place5 place Hplace74I.I5 R R void oscope4)void+ Q dou*le 04,y45
04H)a3dConvert(*it)4+8'4+73""5 y4H)I.I&3&6804804+T)3.366(804+!'5 Dra2Line)&",3!,04,y4,4+5 lcddelay4IIms)+5 Dra2Line)&",3!,04,y4,I+5
R void tanq)void+ Q dou*le 0,y,i5 0H3'))a3dConvert(*it)4+843+7)43'."++5 yH)I.3"8080+T)46.'"80+&6I5 Dra2Circle)0,y,3,4+5 Dra2Line)&6,4",0,y,4+5 $or)iH!'5i
Q Dra2Line)4I,i,&',i,4+5 R lcddelay4IIms)+5 $or)iH!'5iKHI045 lcdgoto0y)4&,'+5rprint$)?P=3?+5 Dra2Line)!","I,!","3,4+5 lcddelay4IIms)+5 Dra2Line)!","I,!","3,I+5 R i$)spKHI035 lcdgoto0y)4&,'+5rprint$)?P=4?+5 Dra2Line)44,4B,44,4(,4+5 lcddelay4IIms)+5 Dra2Line)44,4B,44,4(,I+5 R R S=NL )S==N#MPI+ Q i$)colHHIUUflaHHI+ QcolH35flaH45 palHI5 R else i$)flaHH4UUcolHHI+ Q
flaHI5 colH35 palHI5 R else Q colTT5palHI5 R R S=NL )S==N#MP4+ Q i$)colHH3UUflaHHI+ Q colHI5 flaH45 palHI5 R else i$)flaHH4UUcolHH3+ Q colHI5 flaHI5 palHI5 R else Q col5 palHI5 R R S=NL )S==N#MP3+ Q i$)$erHH4+ Q $erHI5 R else Q $erH45 R R 4. "imulación en #roteus
$. %onclusion •
Mn *itmap impreso en la pantalla grafca puede llegarse a so*rescri*ir 1untos con las $unciones preesta*lecidas como dra2line o set pi0el, lo que se tiene que tener en cuenta es delimitar el grafco con las varia*les esta*lecidas en el programa.
UNIVERSIDAD PRIVADA DEL VALLE FACULTAD DE INFORMATICA Y ELECTRONICA INGENIERIA ELECTRONICA CAMPUS MIRAFLORES
NIVEL DE LIQUIDOS
Evaluación
Estudiants!
Adrián Mita Carlo Eduardo Terán Sevilla Víctor Mamani Zarate D"cnt!
Ing. German Pereira Mat#ia!
Microcontroladores ll
La Pa !" de #unio del $%!& Gesti'n I ( $%!&