Autor Tema: alguien tiene un ejemplo de Como generar caracteres en lcd de 4 x 20 ?  (Leído 5307 veces)

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

Desconectado Mikro-77

  • PIC12
  • **
  • Mensajes: 93
Hola basicamente esa es mi pregunta la del titulo resulta que estoy tratando de generar caracteres en un lcd de 4x20 primero con el programa Generador caracteres LCD 2x16 y luego tratando de modificar los parametros para escribir 20 caracteres en los 4 renglones pero estoy bastante perdido! si alguien me guia para entender como funciona tal ves despues desempolve delphi para hacer un programa para generar los caracteres para todas las posiciones en los 4 renglones, ... si es que me acuerdo todavia de pascal  :D

PD: creo que con un ejemplo estaria muy agradecido.

saludos!
// si quieres entender el universo, piensa en energia, frecuencia y vibración. Nikola Tesla.

// Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado electroipod

  • PIC16
  • ***
  • Mensajes: 166
Re: alguien tiene un ejemplo de Como generar caracteres en lcd de 4 x 20 ?
« Respuesta #1 en: 02 de Mayo de 2013, 00:31:14 »
Aqui encontre un tutorial muy bueno ojala te sirva
Tutorial lcd 4x20

Desconectado Mikro-77

  • PIC12
  • **
  • Mensajes: 93
Re: alguien tiene un ejemplo de Como generar caracteres en lcd de 4 x 20 ?
« Respuesta #2 en: 02 de Mayo de 2013, 01:11:56 »
Gracias por la hora que es acá lo vere mañana pero muchas gracias!!!!!!!
// si quieres entender el universo, piensa en energia, frecuencia y vibración. Nikola Tesla.

// Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: alguien tiene un ejemplo de Como generar caracteres en lcd de 4 x 20 ?
« Respuesta #3 en: 02 de Mayo de 2013, 01:54:28 »
Hola Mikro-77

pero dices generar o imprimir caracteres?, porque el font para un 2x16 es igual para un 4x20

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Mikro-77

  • PIC12
  • **
  • Mensajes: 93
Re: alguien tiene un ejemplo de Como generar caracteres en lcd de 4 x 20 ?
« Respuesta #4 en: 02 de Mayo de 2013, 08:12:06 »
Hola PalitroqueZ  quiero generar y no entiendo como debo posicionarme en los caracteres 9° en adelante asi con el 2° 3° y 4° renglon
// si quieres entender el universo, piensa en energia, frecuencia y vibración. Nikola Tesla.

// Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: alguien tiene un ejemplo de Como generar caracteres en lcd de 4 x 20 ?
« Respuesta #5 en: 02 de Mayo de 2013, 09:20:31 »
Hola amigo, esta es la distribución de memoria del LCD en mención, si en algo te puede servir

Saludos.


Desconectado Mikro-77

  • PIC12
  • **
  • Mensajes: 93
Re: alguien tiene un ejemplo de Como generar caracteres en lcd de 4 x 20 ?
« Respuesta #6 en: 02 de Mayo de 2013, 10:03:48 »
muchas gracias Diego E. pero hay algo que no me queda claro y es que al generar el codigo con el generador de caracteres me sale este codigo

Código: [Seleccionar]
//*******************************************************************************
//   CODIGO A NIVEL DE PIXEL con cristal a 4Mhz
//   CON 5 X 7 DOTS (se pueden crear hasta 8 caracteres solamente)
//   EN ESTE EJEMPLO SE PRUEBA COMO GRABAR NUEVOS CARACTERES
//   EN LA CG-RAM-DATA DIRECCIONANDO CADA LINEA CON EL CG-RAM-ADDRESS
//*******************************************************************************

#include <16F84A.h>
#fuses XT,NOWDT,PUT
#use delay(clock=4000000)

#byte porta =5
#byte portb =6
#define use_portb_lcd TRUE
#include <LCD.c>
int const caracter0_direccion[8]={0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47};
int const caracter0_datos[8]={0b00000,0b00000,0b01010,0b00100,0b10001,0b01110,0b00000,0b0};

int const caracter1_direccion[8]={0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f};
int const caracter1_datos[8]={0b00000,0b00000,0b01010,0b00100,0b00000,0b01110,0b10001,0b0};

int const caracter2_direccion[8]={0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57};
int const caracter2_datos[8]={0b00000,0b00000,0b01010,0b00100,0b00000,0b01110,0b00000,0b0};

int const caracter3_direccion[8]={0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f};
int const caracter3_datos[8]={0b00000,0b00000,0b01010,0b00100,0b00000,0b01110,0b01110,0b0};

int const caracter4_direccion[8]={0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67};
int const caracter4_datos[8]={0b00000,0b01010,0b01010,0b00100,0b01110,0b10001,0b01110,0b0};

int const caracter5_direccion[8]={0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f};
int const caracter5_datos[8]={0b00000,0b00000,0b11011,0b00100,0b00100,0b10001,0b01110,0b0};

int const caracter6_direccion[8]={0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77};
int const caracter6_datos[8]={0b00000,0b11011,0b11011,0b00100,0b00000,0b01110,0b00000,0b0};

int const caracter7_direccion[8]={0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f};
int const caracter7_datos[8]={0b00000,0b00000,0b11011,0b00100,0b00000,0b01110,0b10001,0b0};


void main() {
int contador;
set_tris_a(0x0);
set_tris_b(0x0);
lcd_init();
for(contador=0;contador<8;contador++){
lcd_send_byte(0,caracter0_direccion[contador]);   //modo comando
lcd_send_byte(1,caracter0_datos[contador]);        // modo dato
lcd_send_byte(0,caracter1_direccion[contador]);   //modo comando
lcd_send_byte(1,caracter1_datos[contador]);        // modo dato
lcd_send_byte(0,caracter2_direccion[contador]);   //modo comando
lcd_send_byte(1,caracter2_datos[contador]);        // modo dato
lcd_send_byte(0,caracter3_direccion[contador]);   //modo comando
lcd_send_byte(1,caracter3_datos[contador]);        // modo dato
lcd_send_byte(0,caracter4_direccion[contador]);   //modo comando
lcd_send_byte(1,caracter4_datos[contador]);        // modo dato
lcd_send_byte(0,caracter5_direccion[contador]);   //modo comando
lcd_send_byte(1,caracter5_datos[contador]);        // modo dato
lcd_send_byte(0,caracter6_direccion[contador]);   //modo comando
lcd_send_byte(1,caracter6_datos[contador]);        // modo dato
lcd_send_byte(0,caracter7_direccion[contador]);   //modo comando
lcd_send_byte(1,caracter7_datos[contador]);        // modo dato

}
lcd_send_byte(0,0x80);

for(contador=0;contador<8;contador++){
lcd_send_byte(1,contador); //modo dato
}
delay_cycles(1);
}

como ven las lineas

int const caracter0_direccion[8]={0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47};
int const caracter0_datos[8]={0b00000,0b00000,0b01010,0b00100,0b10001,0b01110,0b00000,0b0};

se posicionan en 0x40 en adelante y con tu distribucion empiezan en 80 Diego E. porque es asi en el codigo y que significa 0b0 ?

otra cosa es que si ago

int const caracter0_direccion[8]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87};
int const caracter0_datos[8]={0b00000,0b00000,0b01010,0b00100,0b10001,0b01110,0b00000,0b0};

no funciona ! perdón si no entiendo nada solo toco de oido ! :(

PD: y se me ocurrio algo! al que me conteste primero, le presento a mi hermana  :mrgreen: :D
« Última modificación: 02 de Mayo de 2013, 10:35:01 por Mikro-77 »
// si quieres entender el universo, piensa en energia, frecuencia y vibración. Nikola Tesla.

// Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: alguien tiene un ejemplo de Como generar caracteres en lcd de 4 x 20 ?
« Respuesta #7 en: 02 de Mayo de 2013, 10:38:11 »
Hola !!  :-/ :-/ :-/ :-/
Ya conteste !! :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Mikro-77

  • PIC12
  • **
  • Mensajes: 93
Re: alguien tiene un ejemplo de Como generar caracteres en lcd de 4 x 20 ?
« Respuesta #8 en: 02 de Mayo de 2013, 10:41:36 »
JAJAJA ! olvide decir que es luchadora de sumo pero mientras no me coqueteen ami agan lo que quieran  :D todo sea en nombre de la programacion  :D
// si quieres entender el universo, piensa en energia, frecuencia y vibración. Nikola Tesla.

// Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: alguien tiene un ejemplo de Como generar caracteres en lcd de 4 x 20 ?
« Respuesta #9 en: 02 de Mayo de 2013, 10:50:50 »
No usa corpiño ???!!!  :shock: :shock: :shock: :D :D ((:-)) ((:-))
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Mikro-77

  • PIC12
  • **
  • Mensajes: 93
Re: alguien tiene un ejemplo de Como generar caracteres en lcd de 4 x 20 ?
« Respuesta #10 en: 02 de Mayo de 2013, 10:58:17 »
siii pero se lo olvida aveces   :oops:  :D mi hermana es muy mona ! ... ... si !! es bajita gorda y tiene pelos por todos lados  :D :D
// si quieres entender el universo, piensa en energia, frecuencia y vibración. Nikola Tesla.

// Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Mikro-77

  • PIC12
  • **
  • Mensajes: 93
Re: alguien tiene un ejemplo de Como generar caracteres en lcd de 4 x 20 ?
« Respuesta #11 en: 02 de Mayo de 2013, 11:19:11 »
Repito mi pregunta que quedo un poco resagada!

muchas gracias Diego E. pero hay algo que no me queda claro y es que al generar el codigo con el generador de caracteres me sale este codigo

Código: [Seleccionar]
//*******************************************************************************
//   CODIGO A NIVEL DE PIXEL con cristal a 4Mhz
//   CON 5 X 7 DOTS (se pueden crear hasta 8 caracteres solamente)
//   EN ESTE EJEMPLO SE PRUEBA COMO GRABAR NUEVOS CARACTERES
//   EN LA CG-RAM-DATA DIRECCIONANDO CADA LINEA CON EL CG-RAM-ADDRESS
//*******************************************************************************

#include <16F84A.h>
#fuses XT,NOWDT,PUT
#use delay(clock=4000000)

#byte porta =5
#byte portb =6
#define use_portb_lcd TRUE
#include <LCD.c>
int const caracter0_direccion[8]={0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47};
int const caracter0_datos[8]={0b00000,0b00000,0b01010,0b00100,0b10001,0b01110,0b00000,0b0};

int const caracter1_direccion[8]={0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f};
int const caracter1_datos[8]={0b00000,0b00000,0b01010,0b00100,0b00000,0b01110,0b10001,0b0};

int const caracter2_direccion[8]={0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57};
int const caracter2_datos[8]={0b00000,0b00000,0b01010,0b00100,0b00000,0b01110,0b00000,0b0};

int const caracter3_direccion[8]={0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f};
int const caracter3_datos[8]={0b00000,0b00000,0b01010,0b00100,0b00000,0b01110,0b01110,0b0};

int const caracter4_direccion[8]={0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67};
int const caracter4_datos[8]={0b00000,0b01010,0b01010,0b00100,0b01110,0b10001,0b01110,0b0};

int const caracter5_direccion[8]={0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f};
int const caracter5_datos[8]={0b00000,0b00000,0b11011,0b00100,0b00100,0b10001,0b01110,0b0};

int const caracter6_direccion[8]={0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77};
int const caracter6_datos[8]={0b00000,0b11011,0b11011,0b00100,0b00000,0b01110,0b00000,0b0};

int const caracter7_direccion[8]={0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f};
int const caracter7_datos[8]={0b00000,0b00000,0b11011,0b00100,0b00000,0b01110,0b10001,0b0};


void main() {
int contador;
set_tris_a(0x0);
set_tris_b(0x0);
lcd_init();
for(contador=0;contador<8;contador++){
lcd_send_byte(0,caracter0_direccion[contador]);   //modo comando
lcd_send_byte(1,caracter0_datos[contador]);        // modo dato
lcd_send_byte(0,caracter1_direccion[contador]);   //modo comando
lcd_send_byte(1,caracter1_datos[contador]);        // modo dato
lcd_send_byte(0,caracter2_direccion[contador]);   //modo comando
lcd_send_byte(1,caracter2_datos[contador]);        // modo dato
lcd_send_byte(0,caracter3_direccion[contador]);   //modo comando
lcd_send_byte(1,caracter3_datos[contador]);        // modo dato
lcd_send_byte(0,caracter4_direccion[contador]);   //modo comando
lcd_send_byte(1,caracter4_datos[contador]);        // modo dato
lcd_send_byte(0,caracter5_direccion[contador]);   //modo comando
lcd_send_byte(1,caracter5_datos[contador]);        // modo dato
lcd_send_byte(0,caracter6_direccion[contador]);   //modo comando
lcd_send_byte(1,caracter6_datos[contador]);        // modo dato
lcd_send_byte(0,caracter7_direccion[contador]);   //modo comando
lcd_send_byte(1,caracter7_datos[contador]);        // modo dato

}
lcd_send_byte(0,0x80);

for(contador=0;contador<8;contador++){
lcd_send_byte(1,contador); //modo dato
}
delay_cycles(1);
}

como ven las lineas

int const caracter0_direccion[8]={0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47};
int const caracter0_datos[8]={0b00000,0b00000,0b01010,0b00100,0b10001,0b01110,0b00000,0b0};

se posicionan en 0x40 en adelante y con tu distribucion empiezan en 80 Diego E. porque es asi en el codigo y que significa 0b0 ?

otra cosa es que si ago

int const caracter0_direccion[8]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87};
int const caracter0_datos[8]={0b00000,0b00000,0b01010,0b00100,0b10001,0b01110,0b00000,0b0};

no funciona ! perdón si no entiendo nada solo toco de oido ! :(

PD: y se me ocurrio algo! al que me conteste primero, le presento a mi hermana  :mrgreen: :D
// si quieres entender el universo, piensa en energia, frecuencia y vibración. Nikola Tesla.

// Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: alguien tiene un ejemplo de Como generar caracteres en lcd de 4 x 20 ?
« Respuesta #12 en: 02 de Mayo de 2013, 11:44:23 »
el compilador pcw trae una librería para el 4x20, se llama LCD420.C
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Mikro-77

  • PIC12
  • **
  • Mensajes: 93
Re: alguien tiene un ejemplo de Como generar caracteres en lcd de 4 x 20 ?
« Respuesta #13 en: 02 de Mayo de 2013, 11:54:46 »
si lo se en realidad estoy usando flex
// si quieres entender el universo, piensa en energia, frecuencia y vibración. Nikola Tesla.

// Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: alguien tiene un ejemplo de Como generar caracteres en lcd de 4 x 20 ?
« Respuesta #14 en: 02 de Mayo de 2013, 12:30:08 »
es bueno aclarar varios puntos, el código que genera el software cgram, utiliza la librería lcd.c y la librería lcd.c al igual que la flex son para pantallas de 2x16

si se mira el código de la función gotoxy de la librería lcd420.c, se notarán la inclusión de los renglones adicionales de la pantalla 4x20.

así pues, yo dudo que una librería que está escrita para pantallas de 2 filas por 16 caracteres visibles, vaya funcionar a plenitud para una pantalla de 4 filas por 20 caracteres visibles.
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek


 

anything