Autor Tema: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano  (Leído 19943 veces)

0 Usuarios y 5 Visitantes están viendo este tema.

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #45 en: 07 de Abril de 2013, 18:49:13 »
Muy bien! Felicitaciones!  Habrá que estudiar un poco más el Proteus, que seguramente tendrá su modo de hacerlo.  Que grabador utilizas?  Sería ideal que no tuvieras que sacar el PIC de la protoboard para grabarlo.  Hay PICs que facilitan un poco más que el PIC16F84A la programación 'ICSP'

Saludos!

Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #46 en: 07 de Abril de 2013, 19:48:13 »
Muy bien! Felicitaciones!  Habrá que estudiar un poco más el Proteus, que seguramente tendrá su modo de hacerlo.  Que grabador utilizas?  Sería ideal que no tuvieras que sacar el PIC de la protoboard para grabarlo.  Hay PICs que facilitan un poco más que el PIC16F84A la programación 'ICSP'

Saludos!

Gracias, pero no ubiera sido posible sin tu ayuda y la de los demas!!!
el grabador es un pickit clone 2, tiene tambien modo ICSP pero la prueba la hize en el laburo y me habia olvidado el cable ICSP

Voy a migrar todo el codigo al 16F628a, en cuanto llegue a casa lo migro, aca no tengo ninguno para probar.

Amigo bmb no quiero ser abusivo, pero seria posible que me explicara como hacer un scroll en la primera linea del lcd?
para poder pasar mas de 16 caracteres.

Gracias
Saludos

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #47 en: 07 de Abril de 2013, 20:13:44 »
Felicitaciones !!
Hay una instrucción para el LCD que mueve el texto n posiciones a la izquierda o derecha.
Ya lo tratamos en varios lugares, si puedes hacer una búsqueda el el subforo de C, con scroll como clave, seguro encontraras lo que necesitas, sino avisa...

Me quede con la espina y te lo busque...

http://www.todopic.com.ar/foros/index.php?topic=5772.msg31490#msg31490
« Última modificación: 07 de Abril de 2013, 20:16:40 por MGLSOFT »
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #48 en: 07 de Abril de 2013, 20:36:40 »
Hola kapotik, muchas gracias!  Alguna vez he tenido que hacer un scroll en una LCD y como te sugiere MGLSOFT, es fácil de implementar y me he guiado por los ejemplos sacados de aquí del foro.

Saludos!

Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #49 en: 07 de Abril de 2013, 21:16:34 »
Felicitaciones !!
Hay una instrucción para el LCD que mueve el texto n posiciones a la izquierda o derecha.
Ya lo tratamos en varios lugares, si puedes hacer una búsqueda el el subforo de C, con scroll como clave, seguro encontraras lo que necesitas, sino avisa...

Me quede con la espina y te lo busque...

http://www.todopic.com.ar/foros/index.php?topic=5772.msg31490#msg31490

lo e estado probando pero o yo soy muy bruto o no es lo que quiero hacer, por que me desplaza el texto hacia la derecha por ejemplo, pero ademas de que cuando llega al ultimo caracter se queda alli, tambien me dezplasa la segunda linea y ya no se me ve el contador.
Lo que me gustaria hacer es que estando en la segunda linea el contador en la primera pase infinitamente de derecha a izquierda un texto, pero que este siempre en movimiento.

saludos

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #50 en: 07 de Abril de 2013, 22:03:40 »
Hola kapotik, fíjate en este, creo que es fácil ajustarlo para lo que necesitas.

Saludos!

Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #51 en: 08 de Abril de 2013, 09:36:11 »
Hola kapotik, fíjate en este, creo que es fácil ajustarlo para lo que necesitas.

Saludos!

Hola,con ese me salio algo, pero me perjudica al contador, a veces cuando se presiona el pulsador para la cuenta no lo toma, me llamo la atencion de que cuando compila se ocupa el 90% de la rom, es normal?

Código: [Seleccionar]
#include <16f84a.h>
#fuses xt,nowdt,noprotect
#use delay(clock=4000000)

#rom 0x2100 ={0,0,0,0}

#define LCD_ENABLE_PIN  PIN_B1
#define LCD_RS_PIN      PIN_B2
#define LCD_RW_PIN      PIN_B3
#define LCD_DATA4       PIN_B4
#define LCD_DATA5       PIN_B5
#define LCD_DATA6       PIN_B6
#define LCD_DATA7       PIN_B7

#include <lcd.c>
#include <internal_eeprom.c>


   
int32 A = 0, B = 0;
int1 boton = false;

void main(void)
{
   char y=1;               //indice columnas
   signed char x=1;         //indice filas
   lcd_init();                      // Inicia LCD
   lcd_putc("Inicializando el\n");  // Saca texto
   lcd_putc("Equipo Aguarde  ");    // Saca texto
   delay_ms(500);                   // Retardo
   lcd_putc("\f");                  // Limpia pantalla
   

   A = read_int32_eeprom(0x00);     // Lee contador de la EEPROM
   B = read_int32_eeprom(0x00);

   while(true)
   {
   {
   lcd_gotoxy(x,y);      //cursor para escribir mensaje
      lcd_putc("kapotik.kapotik.kapotik.kapotik");   //muestra por pantalla el mensaje
      delay_ms(250);         
      x++;               //incremento indice de filas
      if(x>16){            //¿ya se ha mostrado mensaje entero por 1ºfila?
         x=-8;            //SI -> indice fila x=-8
         x++;            //incremento indice columnas
         
         }
      lcd_putc("\f");         //borra pantalla 
      }            //...infinito
   
      if(!input(pin_A0) && !boton)  // Pregunta si RA0 es cero
      {
         A++;                       // Incremento el conteo
         boton = true;
         write_int32_eeprom(0x00, A);
         delay_ms(50);
         B = read_int32_eeprom(0x00);         
      }

      if(input(pin_A0))
         boton = false;             // Al soltar el Boton...

      if(A>=9999999)                // Preguto si A es mayor o igual a 9999999,
      {                             // cuando sea igual iguala "A" a cero
         A=0;   
      }

      lcd_gotoxy(1,2);                             // Acomoda cursor LCD
      printf(lcd_putc, "valor %Lu         ", B);   // Imprime 16 espacios en el LCD
   }
}

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #52 en: 08 de Abril de 2013, 10:39:02 »
Hola kapotik, en cuanto tenga un momento libre voy a revisar el programa a ver que veo.  En cuanto a lo del uso de la rom, recuerda que la variable B era solo para probar, por lo que la debes eliminar del programa y usar solo la variable A.  De todos modos debes pensar en cambiar de PIC por uno con más capacidad de memoria.

Saludos!

Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #53 en: 08 de Abril de 2013, 10:54:14 »
Hola kapotik, en cuanto tenga un momento libre voy a revisar el programa a ver que veo.  En cuanto a lo del uso de la rom, recuerda que la variable B era solo para probar, por lo que la debes eliminar del programa y usar solo la variable A.  De todos modos debes pensar en cambiar de PIC por uno con más capacidad de memoria.

Saludos!

hola bmb, pero me empezo a salir cuando adicione el scroll, de todos modos que ocupe mucho perjudica a la funcion de grabado en la eeprom?, no verdad?, por que lo que realmente me interesa es la funcion del contador y que sea muy estable ya que lo que cuenta no puede tener fallas, todo lo demas es puramente visual y para que quede lindo, ademas de aprender algo mas de este lenguaje.
mas tarde voy a migrar el codigo al 16f628a, que es casi igual a este pero el doble de memoria, luego posteo los avances.

saludos

edit:

se me hizo un buequito y lo migre al 16f628a les dejo los archivos incluidos los del proteus, logicamente con este pic se fue la advertencia de poca rom, lo heche a andar en circuito real y como comente antes el contador pierde pulsaciones ademas de que las visualizaciones que deverian estar fijas parpadean, sigo intentando y les comento  :)

« Última modificación: 08 de Abril de 2013, 11:30:16 por kapotik »

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #54 en: 08 de Abril de 2013, 11:47:20 »
Si eliminas la variable B vas a ver la cantidad de rom que ganas, aunque es verdad que ese PIC tiene muy poca memoria.

Saludos!

Edit: acabo de compilar el programa sin la variable B y no es gran cosa lo que se recupera de memoria!!!  :oops:

Saludos!
« Última modificación: 08 de Abril de 2013, 11:52:47 por bmb »

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #55 en: 08 de Abril de 2013, 19:00:02 »
OK, ya puede ver tu programa y efectivamente se pierden pulsaciones.  Esto es debido a esta instrucción:

Código: [Seleccionar]
delay_ms(250);
Cuando esa instrucción está activa (contando su tiempo), ninguna otra instrucción funciona, (excepto las interrupciones).  Vas a tener que eliminar esa instrucción y utilizar la interrupción de uno de los Timers del PIC para contar los 250 mSeg.  Allí activas una bandera que vas a aplicar a una condicional (por ejemplo if) para hacer el avance del letrero en la pantalla y luego de esto desactivarla para esperar otra interrupción.

Saludos!

Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #56 en: 08 de Abril de 2013, 20:02:29 »
OK, ya puede ver tu programa y efectivamente se pierden pulsaciones.  Esto es debido a esta instrucción:

Código: [Seleccionar]
delay_ms(250);
Cuando esa instrucción está activa (contando su tiempo), ninguna otra instrucción funciona, (excepto las interrupciones).  Vas a tener que eliminar esa instrucción y utilizar la interrupción de uno de los Timers del PIC para contar los 250 mSeg.  Allí activas una bandera que vas a aplicar a una condicional (por ejemplo if) para hacer el avance del letrero en la pantalla y luego de esto desactivarla para esperar otra interrupción.

Saludos!

mmm.... me parece que lo voy a dejar asi, que se quede fijo, sacrifico bonito por utilidad :?
no me da el conocimiento en este lenguaje para hacer algo asi todavia :5]

saludos

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #57 en: 08 de Abril de 2013, 20:10:41 »
Es fácil, más tarde te pongo un ejemplo.

saludos!

Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #58 en: 08 de Abril de 2013, 20:19:10 »
Es fácil, más tarde te pongo un ejemplo.

saludos!

ok, espero.

Gracias por tu ayuda bmb

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #59 en: 08 de Abril de 2013, 20:48:24 »
Bueno, le hice unos cambios al programa para evitar el parpadeo que produce borrar toda la pantalla y le eliminé la variable B.  Le adicioné un Timer que cuenta 262 mSeg. para reemplazar la instrucción delay_ms().  Lo ensayas y me cuentas.  Puedes experimentar con la configuración del Timer para conseguir otros tiempos (leer y estudiar el uso de los Timers).

Saludos!


 

anything