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

0 Usuarios y 2 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 #15 en: 03 de Abril de 2013, 10:00:02 »
Hola, para borrar por ejemplo la segunda línea de un LCD de 2 x 16, como te sugiere AngelGris simplemente le envías los 16 caracteres en blanco así:

Código: [Seleccionar]
lcd_gotoxy(2,1);                  // Al inicio de la segunda línea del LCD
lcd_putc("                ");     // Imprime 16 espacios en blanco en el LCD

Sin embargo, no es muy recomendable borrar constantemente una línea completa y luego imprimir datos en el caso de estar mostrando otras cosas en la misma línea, ya que esto puede producir parpadeos indeseables.  Para esto, es mejor enviar todo el contenido de la segunda línea (los 16 caracteres) sin dejar espacios libres, por ejemplo:

Código: [Seleccionar]
lcd_gotoxy(2,1);                              // Ubicar cursor en la columna 1 de la segunda línea del LCD
printf(lcd_putc, "Valor: %Lu         ", A);   // Imprime 16 espacios en el LCD (Los caracteres de %Lu no se cuentan)

Hay también otras formas de enviar información al LCD sin producir parpadeos, que con la practica vas a conseguir luego.

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 #16 en: 03 de Abril de 2013, 11:31:38 »
Si declaras una variable de 32 bits, puedes hacerlo asi:

Código: C
  1. int32 A = 0;
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #17 en: 03 de Abril de 2013, 20:12:57 »
Che, que comen que saben tanto!!! ((:-))

Código: [Seleccionar]
lcd_gotoxy(2,1);                              // Ubicar cursor en la columna 1 de la segunda línea del LCD
printf(lcd_putc, "Valor: %Lu         ", A);   // Imprime 16 espacios en el LCD (Los caracteres de %Lu no se cuentan)

Funciona ok!!! :-/

ahora quisiera agregarle una ultima cosa a este contador, que me guarde la cuenta cuando le desconecto la corriente, y vuelva a contar desde donde se quedo, cuando lo vuelva a conectar.

tengo hecho esto pero no funciona

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

long long A=0;

void main(void)
{
lcd_init();                //Inicia LCD
lcd_putc(" Contador\n");   // Saca texto
lcd_putc(" Digital");      // Saca texto
delay_ms(2000);            // Retardo
lcd_putc("\f");            // Limpia pantalla
lcd_putc("Conteo\n");      //Saca texto

A = read_eeprom(0x00);   //Lee contador de la EEPROM
   if (A > 9)
   A= 0x00;               //Ajusta el contador si es mayor de 9

while(true)
{

if(input(pin_A0)==0) // Pregunta si RA0 es cero
{
A++;            // Incremento el conteo
delay_ms(1);  // Para visualizar correctamente el conteo

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

}
}



lcd_gotoxy(1,2);          //Acomoda cursor LCD
printf(lcd_putc, "VALOR: %Lu         ", A);   // Imprime 16 espacios en el LCD (Los caracteres de %Lu no se cuentan)
write_eeprom(0x00,A);   //Lo salva en la EEPROM
}
}


Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #18 en: 03 de Abril de 2013, 20:43:12 »
Correccion, si guarda en la eprom, pero solo hsta el 9, a partir del 10 ya no lo guarda,que sera?

Saludos

Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #19 en: 03 de Abril de 2013, 20:51:44 »
Correccion, si guarda en la eprom, pero solo hsta el 9, a partir del 10 ya no lo guarda,que sera?

Saludos

ok ya lo arregle, el error era que le estaba diciendo que si era mayor a 9 pusiera a cero.

Quisiera saber si esta bien, ya que lo estoy simulando en proteus y a veces lo guarda bien y otras no, es decir que la cuenta la detuve en 345 y cuando lo vuelvo a arrancar empieza desde 86 y otras lo hace bien, no se si es un problema de la simulacion o del programa.

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

long long A=0;

void main(void)
{
lcd_init();                //Inicia LCD
lcd_putc(" Contador\n");   // Saca texto
lcd_putc(" Digital");      // Saca texto
delay_ms(2000);            // Retardo
lcd_putc("\f");            // Limpia pantalla
lcd_putc("Conteo\n");      //Saca texto

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

while(true)
{

if(input(pin_A0)==0) // Pregunta si RA0 es cero
{
A++;            // Incremento el conteo
delay_ms(1);  // Para visualizar correctamente el conteo

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

}
}



lcd_gotoxy(1,2);          //Acomoda cursor LCD
printf(lcd_putc, "FICHAS: %Lu         ", A);   // Imprime 16 espacios en el LCD (Los caracteres de %Lu no se cuentan)
write_eeprom(0x00,A);   //Lo salva en la EEPROM
}
}

saludos
« Última modificación: 03 de Abril de 2013, 21:00:21 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 #20 en: 03 de Abril de 2013, 21:01:01 »
Hola, recuerda que estás guardando una variable de 32 bits, entonces busca en la carpeta drivers del PICC una librería llamada internal_eeprom.c  Allí puedes ver la forma de guardar y recuperar datos de 32 bits de la EEPROM.  Debes incluir en el encabezado del programa:

Código: [Seleccionar]
#include <internal_eeprom.c>
Saludos!

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #21 en: 03 de Abril de 2013, 21:01:19 »



No puedes guardar un campo de 32 bits, en una dirección de memoria de un microcontrolador de 8bits.
Echale un vistazo a este post, que te lo aclara muy bien, con el uso de make8 y make32:
https://www.ccsinfo.com/forum/viewtopic.php?p=15000




Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #22 en: 03 de Abril de 2013, 21:06:51 »
No puedes guardar un campo de 32 bits, en una dirección de memoria de un microcontrolador de 8bits.
Echale un vistazo a este post, que te lo aclara muy bien, con el uso de make8 y make32:
https://www.ccsinfo.com/forum/viewtopic.php?p=15000

Hola planeta9999, el hilo al que haces referencia es del año 2002!  En la nuevas versiones de CCS se puede hacer usando la librería que menciono en el post anterior.

Saludos!

Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #23 en: 03 de Abril de 2013, 21:20:14 »
No puedes guardar un campo de 32 bits, en una dirección de memoria de un microcontrolador de 8bits.
Echale un vistazo a este post, que te lo aclara muy bien, con el uso de make8 y make32:
https://www.ccsinfo.com/forum/viewtopic.php?p=15000

Hola planeta9999, el hilo al que haces referencia es del año 2002!  En la nuevas versiones de CCS se puede hacer usando la librería que menciono en el post anterior.

Saludos!

ya la inclui pero no entiendo cuales son los comandos para grabar y leer

hay un stored data y un write eprom, no no entiendo como usarlo

saludos

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #24 en: 03 de Abril de 2013, 21:48:20 »
Hola kapotik, es parecido a lo que estás haciendo.  Según la hoja de datos del PIC16F84A, tiene 64 bytes de EEPROM y su dirección de inicio es 0x00 y termina en 0x3F.  Como habíamos dicho, pones en el encabezado la librería:

Código: [Seleccionar]
#include <internal_eeprom.c>
Para escribir pones la instrucción:

write_int32_eeprom(address, int32 data) que en tu caso sería: write_int32_eeprom(0x00, A)

Para leer pones la instrucción:

read_int32_eeprom(address) que en tu caso sería: read_int32_eeprom(0x00)

Recuerda tener en cuenta que al escribir un dato de 32 bits en la eeprom, te va a ocupar 4 bytes; por lo tanto si vas a escribir algún otro dato en la eeprom, debes utilizar la siguiente dirección libre, o sea, 0x04.

Saludos!
« Última modificación: 03 de Abril de 2013, 21:54:21 por bmb »

Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #25 en: 04 de Abril de 2013, 11:38:35 »
muchachos hasta ahora funciona perfecto, lo unico es que cuando lo inicio por primera ves, el contador arranca en un valor, el mas alto de la cuenta, pero ya iniciado una ves ya no tiene probrema anda bien, calculo yo que es por que al iniciar el programa no estoy limpiando esa pocicion de memoria y tira lo que tiene?, pero si la clareara al inicio no me borraria luego los datos guardados?
espero que se entienda el planteo

saludos

edit: seria la solucion hacer un reset luego de leer la eeprom?, osea poner un pulsador y que al ser presionado poner la cuenta a cero? o hay otra manera mas "profecional" de hacerlo?
« Última modificación: 04 de Abril de 2013, 11:52:55 por kapotik »

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #26 en: 04 de Abril de 2013, 12:09:42 »



Normalmente cuando grabas un PIC, todas las posiciones de memoria que no se utilizan se quedan con 0xFF (255 en decimal), comprueba las cuatro direcciones de la eeprom, y si las tienes con 0xFF, inicialízalas a 0x00.


Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #27 en: 04 de Abril de 2013, 12:11:52 »



Normalmente cuando grabas un PIC, todas las posiciones de memoria que no se utilizan se quedan con 0xFF (255 en decimal), comprueba las cuatro direcciones de la eeprom, y si las tienes con 0xFF, inicialízalas a 0x00.



pero si la inicializo a 0x00 no voy a perder la cuenta cada ves que vuelva a conectar la tension?

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #28 en: 04 de Abril de 2013, 12:35:38 »



Normalmente cuando grabas un PIC, todas las posiciones de memoria que no se utilizan se quedan con 0xFF (255 en decimal), comprueba las cuatro direcciones de la eeprom, y si las tienes con 0xFF, inicialízalas a 0x00.



pero si la inicializo a 0x00 no voy a perder la cuenta cada ves que vuelva a conectar la tension?


Las inicializas a 0x00 SOLO si están a 0xFF.







Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: contador lcd llega A 255 y se vuelve a 0 alguien que me de una mano
« Respuesta #29 en: 04 de Abril de 2013, 17:18:22 »
... cuando lo inicio por primera ves, el contador arranca en un valor, el mas alto de la cuenta ...

Hola kapotik, me alegra que tu programa esté progresando.  No te entiendo muy bien lo que quieres decir.  Tal vez si pones el código podamos ver de que se trata.

Saludos!


 

anything