Donar $20 Donar $50 Donar $100 Donar mensualmente
 


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
Duda envio datos display 16x2
Autor Mensaje
nutters Sin conexión
Profesor del Modulo A
Winter is comming!
*****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 332
Agradecimientos dados: 61
Agradecimientos: 381 en 18 posts
Registro en: Sep 2012
Mensaje: #1
Duda envio datos display 16x2 Dudas y recomendaciones Informática II (Electrónica)
Hola, estoy intentando enviar datos al display de 16x2 de la placa del kit de info 2... el tema es que no logro imprimir lo que quiero, siempre me salen geroglificos, por lo que deduzco estoy enviando mal los datos, el tema es que es de 4 bits el bus para los datos y no de 8 (que si fuera de 8 seria un golaso jaja). les paso el codigo de inicializacion (que segun estuve googleando tenes que indicar primero que se va a trabajar con 4 bits, y luego reconfirmar eso enviando una trama partida), tambien les paso el codigo para enviar el dato a imprimir. Espero alguien pueda ayudarme con esto, ya le di muchas vueltas al codigo. Saludos y gracias!

Funcion de inicializacion:




void init_lcd(void)
{
unsigned int i=0;

//Configuro pines como gpio
gpio_func(LCD_DATO_4,0);
gpio_func(LCD_DATO_5,0);
gpio_func(LCD_DATO_6,0);
gpio_func(LCD_DATO_7,0);
gpio_func(LCD_E,0);
gpio_func(LCD_RST,0);

//Configuro pines como salida
GPIOs[0].FIODIR |= (1<<5);
GPIOs[0].FIODIR |= (1<<10);
GPIOs[2].FIODIR |= (1<<4);
GPIOs[2].FIODIR |= (1<<5);
GPIOs[0].FIODIR |= (1<<4);
GPIOs[2].FIODIR |= (1<<6);

gpio_set(LCD_E, 0 );

//Los bits se leen de LCD_DATO_7 hasta LCD_DATO_4

// Configuracion en 4 bits ENVIO: 0010
gpio_set(LCD_DATO_4, 0 );
gpio_set(LCD_DATO_5, 1 );
gpio_set(LCD_DATO_6, 0 );
gpio_set(LCD_DATO_7, 0 );

gpio_set(LCD_RST, 0 );
gpio_set(LCD_E, 1 );
for(i=0; i<5; i++);//doy pequeña demora
gpio_set(LCD_E, 0 );


//Ahora se debe confirmar que el envio sera de 4 bits y se envia en 2 tramas: 00101000

gpio_set(LCD_DATO_4, 0 );
gpio_set(LCD_DATO_5, 1 );
gpio_set(LCD_DATO_6, 0 );
gpio_set(LCD_DATO_7, 0 );

gpio_set(LCD_RST, 0 );
gpio_set(LCD_E, 1 );
for(i=0; i<5; i++);//doy pequeña demora
gpio_set(LCD_E, 0 );

gpio_set(LCD_DATO_4, 0 );
gpio_set(LCD_DATO_5, 0 );
gpio_set(LCD_DATO_6, 0 );
gpio_set(LCD_DATO_7, 1 );

gpio_set(LCD_RST, 0 );
gpio_set(LCD_E, 1 );
for(i=0; i<5; i++);//doy pequeña demora
gpio_set(LCD_E, 0 );

//Inicializo valores del lcd
escribir_lcd(0x0E,0);//Enciendo, pongo cursor y desabilito parpadeo (00001110 = 0x0E)
escribir_lcd(0x38,0);
escribir_lcd(0x01,0);//clear
escribir_lcd(0x02,0);//pongo cursor en primera posicion

//Pruebo imprimir un caracter
escribir_lcd(0x30,1);
escribir_lcd(0x00,1);
}





Funcion para la escritura:




void escribir_lcd(uint32_t dato, unsigned int modo) //modo = 1 (DATOS) / modo = 0 (FUNCION)
{
unsigned int i=0;

if(modo != 0)
gpio_set(LCD_RST,1);
else
gpio_set(LCD_RST,0);

//Primero debo escribir los 4 bits mas significativos (los de la izquierda) y luego mandar los 4 bits menos significativos

//Mando la segunda trama de bits mas alta (los 4 primeros)
//lleno el dato en los pines para enviar
gpio_set(LCD_DATO_4, (dato>>4)&1 );
gpio_set(LCD_DATO_5, (dato>>5)&1 );
gpio_set(LCD_DATO_6, (dato>>6)&1 );
gpio_set(LCD_DATO_7, (dato>>7)&1 );
//abilito la lectura de los pines, doy una demora para dar tiempo a la lectura y la cierro
gpio_set(LCD_E,1);
for(i=0; i<5; i++);
gpio_set(LCD_E,0);

//Mando la primera trama de bits mas baja (los 4 ultimos)
//lleno el dato en los pines para enviar
gpio_set(LCD_DATO_4, (dato>>0)&1 );
gpio_set(LCD_DATO_5, (dato>>2)&1 );
gpio_set(LCD_DATO_6, (dato>>1)&1 );
gpio_set(LCD_DATO_7, (dato>>3)&1 );
//abilito la lectura de los pines, doy una demora para dar tiempo a la lectura y la cierro
gpio_set(LCD_E,1);
for(i=0; i<5; i++);
gpio_set(LCD_E,0);


}




[Imagen: 940c7f292a23ac2bfeb007a11ed0c.png]
22-09-2014 12:01
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
luchovl2 Sin conexión
Secretario General
Dígame, Ingeniero.
*******

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 992
Agradecimientos dados: 19
Agradecimientos: 249 en 226 posts
Registro en: May 2009
Mensaje: #2
RE: Duda envio datos display 16x2
Hola nutters. Ya sé que es más fácil hacer lo que hiciste, pero te recomiendo, si es posible en cuanto al hardware, que en lugar de las demoras (que por cierto, me parecen muy chicas), leas el pin que indica cuándo se libera el driver (¿era el RS?).

Por lo pronto, igualmente, probá agrandar las demoras. Aunque no revisé los datos que le estás mandando, porque no recuerdo cómo era.

Si no te anda, tengo por ahí un código que maneja uno de estos, pero no para este micro.
22-09-2014 12:25
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
nutters Sin conexión
Profesor del Modulo A
Winter is comming!
*****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 332
Agradecimientos dados: 61
Agradecimientos: 381 en 18 posts
Registro en: Sep 2012
Mensaje: #3
RE: Duda envio datos display 16x2
de cuanto me recomendas que sea la demora del for?

Logre que en un momento me imprima un "10" jaja, pero ahora que le saque los breakpoint no me imprime nada, supongo es por problema de los tiempos.

Ahi me agarro! le meti una demora de 5000 en la lectura para el for... igual mepa que con esto me van a hacer percha porque es "bloqueante", voy a consultar bien con mi profesor esto.

[Imagen: 940c7f292a23ac2bfeb007a11ed0c.png]
(Este mensaje fue modificado por última vez en: 22-09-2014 13:29 por nutters.)
22-09-2014 13:23
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
luchovl2 Sin conexión
Secretario General
Dígame, Ingeniero.
*******

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 992
Agradecimientos dados: 19
Agradecimientos: 249 en 226 posts
Registro en: May 2009
Mensaje: #4
RE: Duda envio datos display 16x2
Tendrías que fijarte en la hoja de datos, ahí habla de los tiempos. Si en tu sistema es crítico el tiempo de respuesta, querés esperar lo menos posible. Además, la demora con el for es difícil de determinar en segundos.
Repito la recomendación de leer el pin que indica que está listo para el siguiente comando.

http://www.alldatasheet.com/datasheet-pd...C780D.html

Ahí tenés la hoja de datos del driver. Por la página 12 fijate.
22-09-2014 13:36
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] luchovl2 recibio 1 Gracias por este post
nutters (22-09-2014)
nutters Sin conexión
Profesor del Modulo A
Winter is comming!
*****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 332
Agradecimientos dados: 61
Agradecimientos: 381 en 18 posts
Registro en: Sep 2012
Mensaje: #5
RE: Duda envio datos display 16x2
Dale, veré primero de ver lo del pin, pero al menos ya estoy tranquilo que me imprime todo bien jaja. Gracias por la ayuda!! El profesor y el ayudante por mail no responden nunca nada, son re chantas, dejan los mails para preguntar dudas y nunca responden.

[Imagen: 940c7f292a23ac2bfeb007a11ed0c.png]
22-09-2014 13:46
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Santi Aguito Sin conexión
Presidente del CEIT
Newtoniano
********

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 1.238
Agradecimientos dados: 229
Agradecimientos: 614 en 335 posts
Registro en: Oct 2012
Mensaje: #6
RE: Duda envio datos display 16x2
Hola nutters.

Si querés te puedo mandar mis funciones, o puedo pasarte el programa que usa mariano vedovato para probar el kit.

Con respecto a las demoras, yo curso con el jefe de cátedra. Cuando vimos LCD también lo hicimos con demoras. La mayoría de código que esta en la web se encuentra implementado así, y aunque no es el modo de trabajo que la cátedra busca ampliar, es el mas sencillo, y en cuanto a la aplicación sumándole el tipo de micro que usamos no es tan critico. Si nos recalcaron bien que sigue siendo un modo de laburo que no concuerda con la cátedra, pero que.puede ser aceptado.

Desde ya, no te van a tomar LCD en el parcial.

Hubo una clase con el ayudante, en la que usando maquina de estados pensamos como hacer las mismas rutinas con la ayuda del systick. Aunque No se llego a terminar, se puede hacer así.

Pero bueno, como te decía, el código que se encuentra subido por la cátedra, el que usamos durante la clase y el que usan para probar el kit, están hechos con demoras bloqueantes.

Busca la excelencia, el éxito llegará
(Este mensaje fue modificado por última vez en: 22-09-2014 18:55 por Santi Aguito.)
22-09-2014 18:54
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Santi Aguito recibio 1 Gracias por este post
nutters (22-09-2014)
nanohueso Sin conexión
Campeon del cubo Rubik
Thats what she said
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 194
Agradecimientos dados: 151
Agradecimientos: 15 en 11 posts
Registro en: Feb 2012
Mensaje: #7
RE: Duda envio datos display 16x2
el codigo de vedovato es para el kit 2013 o 2014 ?
22-09-2014 23:45
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Santi Aguito Sin conexión
Presidente del CEIT
Newtoniano
********

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 1.238
Agradecimientos dados: 229
Agradecimientos: 614 en 335 posts
Registro en: Oct 2012
Mensaje: #8
RE: Duda envio datos display 16x2
El que me paso por mail es el de la placa 2014.

En campus hay un soft de prueba también. No se bien para que versión es, ya que los paths de las imágenes dicen Infotronic 2014, pero las imágenes del tutorial son de la placa 2013. A menos, que, sirva para los dos.

Si necesitan la del año pasado mandenle un mail a vedovato que es re macanudo para responder.

Busca la excelencia, el éxito llegará
22-09-2014 23:55
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
nutters Sin conexión
Profesor del Modulo A
Winter is comming!
*****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 332
Agradecimientos dados: 61
Agradecimientos: 381 en 18 posts
Registro en: Sep 2012
Mensaje: #9
RE: Duda envio datos display 16x2
(22-09-2014 12:25)luchovl2 escribió:  Hola nutters. Ya sé que es más fácil hacer lo que hiciste, pero te recomiendo, si es posible en cuanto al hardware, que en lugar de las demoras (que por cierto, me parecen muy chicas), leas el pin que indica cuándo se libera el driver (¿era el RS?).

El RS lo que hace es indicarle al display si es un dato o una funcion que debe ejecutar. Asi que no creo que sea eso lo que indicas, y la placa tiene solo conectado el RS. El E (para prender la lectura) y creo que eso es todo, lo demas son los 4 pines del bus de datos.

[Imagen: 940c7f292a23ac2bfeb007a11ed0c.png]
23-09-2014 15:15
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
luchovl2 Sin conexión
Secretario General
Dígame, Ingeniero.
*******

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 992
Agradecimientos dados: 19
Agradecimientos: 249 en 226 posts
Registro en: May 2009
Mensaje: #10
RE: Duda envio datos display 16x2
Ahí me fijé bien. El RS en cero, el R/W en 1 y ahí en leés en los bits de datos. El bit 7 es el BF (busy flag). Mientras esté en uno, está ocupado.
23-09-2014 15:59
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] luchovl2 recibio 1 Gracias por este post
nutters (23-09-2014)
nutters Sin conexión
Profesor del Modulo A
Winter is comming!
*****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 332
Agradecimientos dados: 61
Agradecimientos: 381 en 18 posts
Registro en: Sep 2012
Mensaje: #11
RE: Duda envio datos display 16x2
Ah excelente! lo voy a probar entocnes, ya que estamos te consulto una cosa, estoy intentando agregar un nuevo caracter a la cgram... se me esta complicando. Segun lo que pude ver en la hoja de datos, primero se selecciona la direccion de memoria, y luego se deberia mandar los datos de las 8 filas segun que bit esta encendido y cual no... te muestro el codigo que hice a ver si le ves la falla (porque no puedo hacer que imprima el caracter, o no me imprime nada, o me imprime basura):

De esta manera imprime basura:



escribir_lcd(0x28,0); //mando uno para setear cgram y la direccion de memoria a almacenar nuevo caracter. Almaceno dato en memoria 00001000 y mando 00010000 para setear valor cgram
//comienzo a escribir los datos. Con un 1 como segundo parametro indico que es dato, con un 0 indico al display que es una funcion a ejecutar
escribir_lcd(0x00,1);
escribir_lcd(0x04,1);
escribir_lcd(0x0E,1);
escribir_lcd(0x0E,1);
escribir_lcd(0x1F,1);
escribir_lcd(0x1F,1);
escribir_lcd(0x00,1);
escribir_lcd(0x00,1);



De esta otra no imprime nada:



escribir_lcd(0x28,0); //mando uno para setear cgram y la direccion de memoria a almacenar nuevo caracter. Almaceno dato en memoria 00001000 y mando 00010000 para setear valor cgram
//comienzo a escribir los datos. Con un 1 como segundo parametro indico que es dato, con un 0 indico al display que es una funcion a ejecutar
escribir_lcd(0x00,0);
escribir_lcd(0x04,0);
escribir_lcd(0x0E,0);
escribir_lcd(0x0E,0);
escribir_lcd(0x1F,0);
escribir_lcd(0x1F,0);
escribir_lcd(0x00,0);
escribir_lcd(0x00,0);



[Imagen: 940c7f292a23ac2bfeb007a11ed0c.png]
23-09-2014 16:18
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
nutters Sin conexión
Profesor del Modulo A
Winter is comming!
*****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 332
Agradecimientos dados: 61
Agradecimientos: 381 en 18 posts
Registro en: Sep 2012
Mensaje: #12
RE: Duda envio datos display 16x2
(23-09-2014 15:59)luchovl2 escribió:  Ahí me fijé bien. El RS en cero, el R/W en 1 y ahí en leés en los bits de datos. El bit 7 es el BF (busy flag). Mientras esté en uno, está ocupado.


Lamentablemente el pin de R/W no esta conectado al lpc, solo estan los 4 pines de datos + el E y el RS, asi que nada, van a tener que quedar los for jaja.

[Imagen: 940c7f292a23ac2bfeb007a11ed0c.png]
23-09-2014 18:45
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
luchovl2 Sin conexión
Secretario General
Dígame, Ingeniero.
*******

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 992
Agradecimientos dados: 19
Agradecimientos: 249 en 226 posts
Registro en: May 2009
Mensaje: #13
RE: Duda envio datos display 16x2
Ah, está bueno, te obligan a hacerlo de la forma que te dicen que está mal.

Bueno, lo de los caractares, nunca lo hice, pero parece que se escribe fila por fila. La dirección que pasás, es la fila en la que vas a escribir. O sea, un caracter tiene ocho filas (o diez), para cada una tenés que mandar dirección y dato.
Lo que no me queda claro es cómo lo asociás con la DRAM.
24-09-2014 11:42
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.