Autor Tema: Amperimetro/Voltimetro - 3 digitos 1/2 - 7 segmentos - graficados en LCD 16x2  (Leído 57487 veces)

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

Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
hola muchachos.... nuevamente con un proyecto en manos...
la idea es hacer un instrumento que me permita visualizar la tension y al cambiar de modo (por pulsador externo) me permita visualizar la corriente... para ser implementado como un monitor de éstas variables tan cotidianas... etc.. etc.. etc...
en principio utilizaria un 16F873, leyendo dos entradas analogicas donde previamente se acondicionaron las variales que se desean monitorear...

la forma en la que quiero visualizar las mediciones es mediante un LCD 16X2 caracteres.... pero no utilizando los caracteres que nos brindan los lcd inteligentes....
sino que,... usando dos caracteres de ancho por 2 de alto, para poder mostrar un digito visible mucho mas grande, de formato similar a los 7 segmentos led. para ello es necesario usar un generador de caracteres especiales , en mi caso estoy usando el soft de nuestro amigo Palitroquez...

por el momento estoy formado los caracteres tipo 7seg.... para despues continuar con la parte de la conversion del valor que deseo mostrar...

pero tengo un problema... el programa  de palitroquez, genera un varios caracteres e la misma linea... y cuando quiero saltar a mostrar la segunda linea... la anterior se sobreescribe con ésta ultima....

acá va el código.... quiero mostrar el digito "0" CERO en los primeros 4 caracteres de la izquierda del LCD

Código: [Seleccionar]
#include <16F873.h>
#fuses HS, NOWDT, NOLVP
#use delay(clock=20000000)
#include <lcd.c>

int const ALTA00_direccion[8]={0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47};   // parte superior izquiera del cero
int const ALTA00_datos[8]={0b11111,0b01111,0b10000,0b11000,0b11000,0b11000,0b11000,0b0};

int const ALTA01_direccion[8]={0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f};    // parte superior derecha del cero
int const ALTA01_datos[8]={0b11111,0b11110,0b00001,0b00011,0b00011,0b00011,0b00011,0b0};

int const BAJA00_direccion[8]={0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47};    // parte inferior izquierda del cero
int const BAJA00_datos[8]={0b11000,0b11000,0b11000,0b11000,0b10000,0b01111,0b11111,0b0};

int const BAJA01_direccion[8]={0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f};     // parte inferior derecha del cero
int const BAJA01_datos[8]={0b00011,0b00011,0b00011,0b00011,0b00001,0b11110,0b11111,0b0};

void main()
{
   int  contador;
   lcd_init();
   delay_ms(100);
   lcd_send_byte(0,0x01); // limpia pantalla

   for(contador=0;contador<8;contador++)
      {
      lcd_send_byte(0,ALTA00_direccion[contador]);   //modo comando
      lcd_send_byte(1,ALTA00_datos[contador]);        // modo dato
      lcd_send_byte(0,ALTA01_direccion[contador]);   //modo comando
      lcd_send_byte(1,ALTA01_datos[contador]);        // modo dato
      }
   lcd_send_byte(0,0x80); // ubica caracter
   for(contador=0;contador<2;contador++){
   lcd_send_byte(1,contador); //modo dato
   }
 
   for(contador=0;contador<8;contador++)
      {
      lcd_send_byte(0,BAJA00_direccion[contador]);   //modo comando
      lcd_send_byte(1,BAJA00_datos[contador]);        // modo dato
      lcd_send_byte(0,BAJA01_direccion[contador]);   //modo comando
      lcd_send_byte(1,BAJA01_datos[contador]);        // modo dato
      }
   lcd_send_byte(0,0xc0); // ubica caracter
   for(contador=0;contador<2;contador++){
   lcd_send_byte(1,contador); //modo dato
   }  
   for (;;);
  
}  

y acá va una imagen de lo que ocurre....
probé tambien dibujar la parte alta y la baja del cero, por separado y todo bien... sin problemas....
pero cuando tiene que dibujar ambas ... la parte baja sobreescribe a la alta... en fin...



nos leemos...
saludos...
German  8)


« Última modificación: 10 de Noviembre de 2009, 16:12:46 por NANO1985 »
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -

Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
Re: Amperimetro/Voltimetro - 3 digitos 1/2 - 7 segmentos - graficados en LCD 16x2
« Respuesta #1 en: 07 de Noviembre de 2009, 21:04:37 »
éste es el digito que se desea mostrar...



Saludos

 
« Última modificación: 07 de Noviembre de 2009, 21:13:05 por NANO1985 »
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -

Desconectado om@r

  • PIC12
  • **
  • Mensajes: 86
Re: Amperimetro/Voltimetro - 3 digitos 1/2 - 7 segmentos - graficados en LCD 16x2
« Respuesta #2 en: 08 de Noviembre de 2009, 02:01:39 »
Hola Nano
hace tiempo edite caracteres y por lo que veo puede ser que se este pisando los datos cargados en la ram del lcd...
no entiendo tu programa por eso no te puedo decir mas  :shock:
usando el programa que usas edite el digito ''0'' usando otras posiciones de memoria por si queres probar a ver que pasa...
por lo que veo editas caracteres de 5x7 ,si queres podes editar 5x8 ,la ultima linea en algunos lcd es editable 100x100
y en otros solo podes cargar 1FH  :shock:

int const caracter0_direccion[8]={0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47};
int const caracter0_datos[8]={0b11111,0b01111,0b10000,0b11000,0b11000,0b11000,0b11000,0b0};

int const caracter1_direccion[8]={0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f};
int const caracter1_datos[8]={0b11111,0b11110,0b00001,0b00011,0b00011,0b00011,0b00011,0b0};

int const caracter2_direccion[8]={0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57};
int const caracter2_datos[8]={0b11000,0b11000,0b11000,0b11000,0b10000,0b01111,0b11111,0b0};

int const caracter3_direccion[8]={0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f};
int const caracter3_datos[8]={0b00011,0b00011,0b00011,0b00011,0b00001,0b11110,0b11111,0b0};

Saludos!

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Amperimetro/Voltimetro - 3 digitos 1/2 - 7 segmentos - graficados en LCD 16x
« Respuesta #3 en: 08 de Noviembre de 2009, 13:02:45 »
Yo hice algo parecido:



Lo que hice fue definir solo los segmentos que iba a usar y luego, segun el string a mostrar, los ubicaba en la LCD. Hacia el barrido primero en la primera linea y luego en la segunda.

Tengo esa info algo perdida -si, soy algo desordenao..jaja- la voy a buscar.

Saludos
El papel lo aguanta todo

Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
Re: Amperimetro/Voltimetro - 3 digitos 1/2 - 7 segmentos - graficados en LCD 16x2
« Respuesta #4 en: 08 de Noviembre de 2009, 14:35:33 »
muchas gracias por responder MLO__ y  om@r...
yo creo que debe ser algun problema relacionado a lo que dice el amigo om@r... sobreescritura de los datos de la ram del LCD... o algo por el estilo...
pero hay algo aun más extraño... si coloco un delay entre la parte del código que grafica el cero superior y el cero inferior...
puedo observar que si se grafica como corresponde...
pero luego se sobreescribe con la segunda... quedando como la imagen que puse en el mensaje 1 de éste post...
« Última modificación: 08 de Noviembre de 2009, 14:37:36 por NANO1985 »
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Amperimetro/Voltimetro - 3 digitos 1/2 - 7 segmentos - graficados en LCD 16x
« Respuesta #5 en: 09 de Noviembre de 2009, 00:49:20 »
Hola.

Lo mejor es definir primero los simbolos y asignarles un macro:

Código: C#
  1. int const caracter0[8]={0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47};
  2. int const data_C0[8]={31,31,31,0,0,0,0,0};
  3. int const caracter1[8]={0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f};
  4. int const data_C1[8]={0,0,0,0,0,31,31,31};
  5. ...
  6. #define SegSuperior  0
  7. #define SegIzquierda 1
  8. ...

Luego en el programa principal, correr la rutina que "dibuja" los numero en la LCD, de esta manera te aseguras que usas los registros de la RAM de la LCD que son.

Saludos
El papel lo aguanta todo

Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
Re: Amperimetro/Voltimetro - 3 digitos 1/2 - 7 segmentos - graficados en LCD 16x2
« Respuesta #6 en: 09 de Noviembre de 2009, 00:57:00 »
hasta donde tengo entendido..... en un LCD de 16x2 sólo se pueden almacenar hasta 8 caractetes especiales verdad?
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Amperimetro/Voltimetro - 3 digitos 1/2 - 7 segmentos - graficados en LCD 16x
« Respuesta #7 en: 09 de Noviembre de 2009, 00:58:28 »
Si, pero con esos 8 creo que podrías hacer los segmentos que necesitas.
El papel lo aguanta todo

Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
Re: Amperimetro/Voltimetro - 3 digitos 1/2 - 7 segmentos - graficados en LCD 16x
« Respuesta #8 en: 09 de Noviembre de 2009, 01:05:53 »
Si, pero con esos 8 creo que podrías hacer los segmentos que necesitas.

tal cual... estoy tratando de imaginar en un papel cuadriculado como puedo hacer que un segmento o una "forma"... me sirva para formar otros numeros....
creatividad...creatividad.... creo haber visto alguna vez en un LCD de 16x2 dibujando numeros que ocupaban ambas lineas....

« Última modificación: 09 de Noviembre de 2009, 01:21:35 por NANO1985 »
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Amperimetro/Voltimetro - 3 digitos 1/2 - 7 segmentos - graficados en LCD 16x
« Respuesta #9 en: 09 de Noviembre de 2009, 01:22:01 »
Hola.

Aqui hay algo que te puede servir.

saludos
El papel lo aguanta todo

Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
Re: Amperimetro/Voltimetro - 3 digitos 1/2 - 7 segmentos - graficados en LCD 16x
« Respuesta #10 en: 09 de Noviembre de 2009, 01:27:16 »
Hola.

Aqui hay algo que te puede servir.

saludos

UUUUAUU!! que buenas imágenes MLO!!... muchisimas gracias....
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -

Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
Re: Amperimetro/Voltimetro - 3 digitos 1/2 - 7 segmentos - graficados en LCD 16x2
« Respuesta #11 en: 09 de Noviembre de 2009, 02:42:08 »
bueno gracias al link con imágenes del MLO_ ... acá van unos avances....



saludos.... mañana seguiré...
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Amperimetro/Voltimetro - 3 digitos 1/2 - 7 segmentos - graficados en LCD 16x
« Respuesta #12 en: 09 de Noviembre de 2009, 03:18:08 »
Ummm, qué interesante. Puede ser muy útil eso que estáis haciendo.

Desconectado El_Guitre

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1046
Re: Amperimetro/Voltimetro - 3 digitos 1/2 - 7 segmentos - graficados en LCD 16x2
« Respuesta #13 en: 09 de Noviembre de 2009, 07:48:03 »
Muy interesante, especial para trasformar los pequeños y aburridos caracteres de estos displays.

Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
Re: Amperimetro/Voltimetro - 3 digitos 1/2 - 7 segmentos - graficados en LCD 16x2
« Respuesta #14 en: 09 de Noviembre de 2009, 10:08:32 »
hola Manolo y Guitre!.... lo que busco es ver una lectura de un solo vistazo... estando por lo menos a 1Metro del LCD... sin tener que acercarme.... y ver los diminutos caracteres.... (por lo menos mi vista ya no da más... jejeje)...
lo unico.... son caracteres algo cuadrados.... pero para la finalidad y teniendo en cuenta q es un LCD 16X2... me recontra sirve....
saludos...

bueno aquí solo una mostracion de los caracteres decimales...
modifiqué un par de numeros,... por ejemplo el 6 y el 9 eran muy deformes  :D (de lo cual no quieren decir que todavía no lo sean je)


saludos
« Última modificación: 09 de Noviembre de 2009, 11:17:10 por NANO1985 »
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -