Autor Tema: lectura adc en lcd pero representado en barras  (Leído 6623 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
lectura adc en lcd pero representado en barras
« en: 23 de Marzo de 2014, 01:00:49 »
Hola que tal gente  !!!!! queria consultar por que hace muy poco que estoy con la programacion de microcontroladores y estoy tratando de hacer un medidor de nivel con un pic 16f877a y mostrarlo en un lcd 2 x 16 pero en forma de barras el tema es que busco bastante  y todo lo que me sale es el ejemplo de neoteo (medidor de nivel-vumetro) que es perfecto el efecto que logra  pero esta hecho en lenguaje basic y no entiendo nada yo uso el CCS . Si alguien me puede dar una mano con esto se lo agradeceria estoy encerrado en un bucle infinito y no puedo salir ja ja !!! . Un pequeño ejemplo , un link que no sea el de neoteo , algo para orientarme .Desde ya muchas gracias el foro esta buenisimo !!! saludos a todos !!!
El tiempo es una ilusión ,solo existe el presente................

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: lectura adc en lcd pero representado en barras
« Respuesta #1 en: 23 de Marzo de 2014, 11:41:19 »
En tu librería tendrás alguna función para generar nuevos caracteres  deberás generar una vara dos y tres ya que me parece que el caracter blanco es el espacio y hay un carácter que deja todo lleno y luego usarlos como mejor te convenga un saludo
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: lectura adc en lcd pero representado en barras
« Respuesta #2 en: 23 de Marzo de 2014, 11:51:36 »
Lee sobre el uso de la CGRAM.
Con esa generas tus caracteres y después los muestras.
El ejemplo en Basic te dará una idea.

Por mas que te ayudemos, si eso no lo entiendes bien, nunca podrás innovar nada...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: lectura adc en lcd pero representado en barras
« Respuesta #3 en: 24 de Marzo de 2014, 12:23:57 »
como te comenta MGLSOFT

tienes que ver como crear nuevos caracteres (CGRAM)

mira aqui:
http://www.todopic.com.ar/foros/index.php?topic=36174.0
"Nada es imposible, no si puedes imaginarlo"

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re: lectura adc en lcd pero representado en barras
« Respuesta #4 en: 24 de Marzo de 2014, 19:41:31 »
muchas gracias amigos por las respuestas por lo menos ahora se por donde empezar en unos dias les cuento
                                                        Saludos !!!
El tiempo es una ilusión ,solo existe el presente................

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re: lectura adc en lcd pero representado en barras
« Respuesta #5 en: 26 de Marzo de 2014, 20:39:12 »
Hola gente !!!!! como andan les ecribo para contarles que al fin hice el programa , tal vez no me exprese bien al hacer la primera pregunta pero de todos modos me sirvio para aprender mas , lo que hice es un medidor de angulo de timon de un barco este representa en una pantalla lcd cuantos grados se mueve el timon tanto a babor como a estribor , al comienzo puse el ejemlo de neo teo por que cuando lo vi era eso mas o menos lo que queria y se me trabaron las neuronas en eso, pero cada tanto se me acomodan y algo me sale, ja ja , muy basico obiamente por que soy un principiante pero bueno funciona, hasta ahora en isis proteus, mas adelante les contare en fisico . Mi duda ahora es por que debe haber una manera mas sencilla de hacerlo y les queria mostrar el programa a ver que opinan ya que gracias a sus comentarios es como se abren posibilidades de aprender mas les mando un Saludo !!!! y como siempre mil gracias por ayudar !!!!
El tiempo es una ilusión ,solo existe el presente................

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: lectura adc en lcd pero representado en barras
« Respuesta #6 en: 26 de Marzo de 2014, 23:17:08 »
  ¿Le sacaste una foto al monitor?  :D En ISIS en "File" tienes la opción de exportar gráficos lo cual permite exportar tu diagrama (incluso corriendo la simulación) a .BMP que luego puedes convertir a .JPG y/o .PNG para subirlo al foro.

  Para subir código te aconsejo utilizar la opción GeSHi del editor de mensajes del foro.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re: lectura adc en lcd pero representado en barras
« Respuesta #7 en: 27 de Marzo de 2014, 08:02:32 »
Ja ja ja!!!!!!!!!  :D gracias Angelgris no tenia ni idea de como lo hacian  jua jua que bruto !!!!! igual sigo sin entender como subir el codigo con el GeSHi
El tiempo es una ilusión ,solo existe el presente................

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: lectura adc en lcd pero representado en barras
« Respuesta #8 en: 27 de Marzo de 2014, 09:01:25 »
Ja ja ja!!!!!!!!!  :D gracias Angelgris no tenia ni idea de como lo hacian  jua jua que bruto !!!!! igual sigo sin entender como subir el codigo con el GeSHi

  Cuando estés escribiendo un mensaje y quieres subir código, vas a a la opción GeSHi y se despliega una lista de posibles lenguajes y/o formatos de texto. Eliges el que esté acorde al código a subir. En el mensaje propiamente dicho te aparecerán las etiquetas
[ code= formato elegido ] y [ /code ] y es entre dichas etiquetas que tienes que colocar tu código....

Código: C
  1. unsigned char variable;
  2. void main(void)
  3. {
  4. }

En el ejemplo anterior el formato elegido es C
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re: lectura adc en lcd pero representado en barras
« Respuesta #9 en: 27 de Marzo de 2014, 12:43:39 »
Código: C
  1. #include<16f88.h>
  2. #device adc =10
  3. #use delay (clock=4M)
  4. #fuses XT,NOWDT
  5. #include <lcd.c>
  6.  
  7.  
  8. void main()
  9. {
  10. int16 q;
  11. //float p;
  12.   setup_adc_ports(sAN0|sAN1|sAN2|VSS_VDD);
  13.    setup_adc(ADC_CLOCK_DIV_2);
  14. lcd_init();
  15.  
  16. while(1){
  17. set_adc_channel(0); //habilitacion canal 0
  18. delay_us(20);
  19.  
  20. q = read_adc();     //lectura canal 0
  21. //p =(float) read_adc() / 64; //conversion a tension
  22.  
  23. if (q<96&&q>0)
  24. {
  25.  
  26. lcd_gotoxy(6,1);
  27. printf(lcd_putc,"35\337er");
  28. delay_ms(100);
  29.  
  30. lcd_gotoxy(8,2);
  31. printf(lcd_putc,"|>>>>>>>>");
  32. delay_ms(100);
  33.  
  34.  
  35. }
  36.  
  37. if (q<160&&q>96)
  38. {
  39.  
  40. lcd_gotoxy(6,1);
  41. printf(lcd_putc,"30\337er");
  42. delay_ms(100);
  43.  
  44. lcd_gotoxy(8,2);
  45. printf(lcd_putc,"|>>>>>>> ");
  46. delay_ms(100);
  47.  
  48.  
  49. }
  50.  
  51. if (q<224&&q>160)
  52. {
  53.  
  54. lcd_gotoxy(6,1);
  55. printf(lcd_putc,"25\337er");
  56. delay_ms(100);
  57.  
  58. lcd_gotoxy(8,2);
  59. printf(lcd_putc,"|>>>>>>  ");
  60. delay_ms(100);
  61.  
  62.  
  63. }
  64.  
  65. if (q<288&&q>224)
  66. {
  67.  
  68. lcd_gotoxy(6,1);
  69. printf(lcd_putc,"20\337er");
  70. delay_ms(100);
  71.  
  72. lcd_gotoxy(8,2);
  73. printf(lcd_putc,"|>>>>>   ");
  74. delay_ms(100);
  75.  
  76.  
  77. }
  78.  
  79. if (q<352&&q>288)
  80. {
  81.  
  82. lcd_gotoxy(6,1);
  83. printf(lcd_putc,"15\337er");
  84. delay_ms(100);
  85.  
  86. lcd_gotoxy(8,2);
  87. printf(lcd_putc,"|>>>    ");
  88. delay_ms(100);
  89.  
  90.  
  91. }
  92. if (q<416&&q>352)
  93. {
  94.  
  95. lcd_gotoxy(6,1);
  96. printf(lcd_putc,"10\337er");
  97. delay_ms(100);
  98.  
  99. lcd_gotoxy(8,2);
  100. printf(lcd_putc,"|>>     ");
  101. delay_ms(100);
  102.  
  103.  
  104. }
  105.  
  106. if (q<480&&q>416)
  107. {
  108.  
  109. lcd_gotoxy(7,1);
  110. printf(lcd_putc,"5\337er");
  111. delay_ms(100);
  112.  
  113. lcd_gotoxy(8,2);
  114. printf(lcd_putc,"|>      ");
  115. delay_ms(100);
  116.  
  117.  
  118. }
  119. //**************a la via**************
  120. if  (q>480&&q<544)
  121. {
  122.  
  123. lcd_gotoxy(8,1);
  124. printf(lcd_putc,"\f       0");
  125. delay_ms(100);
  126.  
  127.  
  128. lcd_gotoxy(1,2);
  129. printf(lcd_putc,"       |        ");
  130. delay_ms(100);
  131. }
  132. //*****************************************
  133. if (q>544&&q<608)
  134. {
  135.  
  136.  
  137. lcd_gotoxy(7,1);
  138. printf(lcd_putc,"5\337br");
  139. delay_ms(100);
  140.  
  141. lcd_gotoxy(1,2);
  142. printf(lcd_putc,"      <|       ");
  143. delay_ms(100);
  144. }
  145.  
  146. if (q>608&&q<672)
  147. {
  148.  
  149.  
  150. lcd_gotoxy(6,1);
  151. printf(lcd_putc,"10\337br");
  152. delay_ms(100);
  153.  
  154. lcd_gotoxy(1,2);
  155. printf(lcd_putc,"     <<|        ");
  156. delay_ms(100);
  157. }
  158. if (q>672&&q<736)
  159. {
  160.  
  161.  
  162. lcd_gotoxy(6,1);
  163. printf(lcd_putc,"15\337br");
  164. delay_ms(100);
  165.  
  166. lcd_gotoxy(1,2);
  167. printf(lcd_putc,"    <<<|        ");
  168. delay_ms(100);
  169. }
  170. if (q>736&&q<800)
  171. {
  172.  
  173.  
  174. lcd_gotoxy(6,1);
  175. printf(lcd_putc,"20\337br");
  176. delay_ms(100);
  177.  
  178. lcd_gotoxy(1,2);
  179. printf(lcd_putc,"   <<<<|        ");
  180. delay_ms(100);
  181. }
  182.  
  183. if (q>800&&q<864)
  184. {
  185.  
  186.  
  187. lcd_gotoxy(6,1);
  188. printf(lcd_putc,"25\337br");
  189. delay_ms(100);
  190.  
  191. lcd_gotoxy(1,2);
  192. printf(lcd_putc,"  <<<<<|        ");
  193. delay_ms(100);
  194. }
  195.  
  196. if (q>864&&q<928)
  197. {
  198.  
  199.  
  200. lcd_gotoxy(6,1);
  201. printf(lcd_putc,"30\337br");
  202. delay_ms(100);
  203.  
  204. lcd_gotoxy(1,2);
  205. printf(lcd_putc," <<<<<<|        ");
  206. delay_ms(100);
  207. }
  208.  
  209. if (q>928&&q<992)
  210. {
  211.  
  212.  
  213. lcd_gotoxy(6,1);
  214. printf(lcd_putc,"35\337br");
  215. delay_ms(100);
  216.  
  217. lcd_gotoxy(1,2);
  218. printf(lcd_putc,"<<<<<<<|        ");
  219. delay_ms(100);
  220. }
  221.  
  222.  
  223. }
  224. }
« Última modificación: 27 de Marzo de 2014, 17:50:21 por arielmdq »
El tiempo es una ilusión ,solo existe el presente................

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re: lectura adc en lcd pero representado en barras
« Respuesta #10 en: 27 de Marzo de 2014, 17:57:48 »
Bueno ANGELGRIS gracias a tu ayuda  ahora creo que si quedo  :)  soy duro cheee arranque de muy  grande ja ja !!! igual me gustaria saber que opinas del programa pero dame con un caño si es necesario que no pasa nada ,siempre me lo tomo bien me gusta reirme de los errores, si para eso estamos para aprender, te mando un saludo desde mar del plata 
El tiempo es una ilusión ,solo existe el presente................

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: lectura adc en lcd pero representado en barras
« Respuesta #11 en: 27 de Marzo de 2014, 18:15:00 »
  Si siempre utilizas el mismo canal del ADC, no es necesario colocarlo dentro del while. Simplemente lo seleccionas, y haces la espera de 20us pero fuera del while.

  No entiendo el porque la espera luego de hacer cada escritura en el LCD.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re: lectura adc en lcd pero representado en barras
« Respuesta #12 en: 28 de Marzo de 2014, 08:29:48 »
Probe sacar la lectura del adc fuera del while y no me funciona solo me funciona dentro del while , vos crees que si o si deberia estar fuera ?. y los tiempos pense que habia que darle un pequeño tiempo despues de cada lectura pero No ya se los saque y funciona perfecto . Ahora otra pregunta compre un lcd 2 x 16 y no me vino con ninguna hoja de datos lo unico que dice atras en la plaqueta es  INTECH ITM 1602B   y tiene 16 conexiones busque el datasheet y encontre un solo esquemita nada mas , vos  usaste este lcd alguna vez ? lo conoces?  me podes pasar algun dato o donde lo puedo buscar ?    Muchas gracias por tu colaboracion !!!! Saludos!!!!!
El tiempo es una ilusión ,solo existe el presente................

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: lectura adc en lcd pero representado en barras
« Respuesta #13 en: 28 de Marzo de 2014, 09:14:44 »
  Lo siento, me expresé mal. Lo que puedes dejar fuera del while es la selección del canal del ADC, no la lectura del mismo. Sería algo así...

Código: C
  1. void mian(void)
  2. {
  3.   set_adc_channel(0);
  4.   delay_us(20);
  5.   while (1)
  6.   {
  7.     q = read_adc();
  8.     ....
  9.     ....
  10.     ....
  11.   }
  12. }

  Nunca he trabajado con LCD. Estuve a punto de desarmar un sintetizador Korg M1 para sacárselo (hacía un año que lo tenía), pero justo me llamó el cliente para venir a retirarlo
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re: lectura adc en lcd pero representado en barras
« Respuesta #14 en: 28 de Marzo de 2014, 19:43:00 »
Ahora si ,ahi lo probe como me dijiste y si  funciona :) , bueno lo voy a grabar en el pic y en cuanto este seguro de como se conecta la lcd  probare todo el circuito , te agradezco toda la info despues te cuento como me fue . Saludos !!!!
El tiempo es una ilusión ,solo existe el presente................


 

anything