Autor Tema: imprimir carateres en display 16x2  (Leído 9463 veces)

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

Desconectado hernanutn

  • PIC16
  • ***
  • Mensajes: 117
imprimir carateres en display 16x2
« en: 30 de Diciembre de 2012, 16:51:07 »
hola mi consulta si alguien sabe como mandar caracteres sin convertir previamente en asccii como por ej en el pic usan esto:
  printf(lcd_putc,"%1.2f voltios", voltios ); es decir quiero mandar numeros mayores a 9. uso el keil uvision 4 para programar. gracias

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: imprimir carateres en display 16x2
« Respuesta #1 en: 30 de Diciembre de 2012, 17:08:15 »
y que librería para manejo de LCD usas?

Saludos
-
Leonardo Garberoglio

Desconectado hernanutn

  • PIC16
  • ***
  • Mensajes: 117
Re: imprimir carateres en display 16x2
« Respuesta #2 en: 30 de Diciembre de 2012, 17:10:47 »
y que librería para manejo de LCD usas?

Saludos

 esta libreria:

#include "lcd.h"
#include "lpc21xx.h"
//#include "lpc210x.h"

  #define lcd_line_two 0x40

void lcd_wait(){
      int loop=5000;  //more than enough
      //busy loop
      while(loop--);
}

void lcd_out_data4(unsigned char val){
     IOCLR0 |= (LCD_DATA);
     IOSET0 |= (val<<4);
}

 void lcd_write_nibbles(unsigned char val){

     //higher-order byte
     lcd_en_set();
     lcd_out_data4((val>>4)&0x0F);
     lcd_en_clr();

     lcd_wait();

     //lower-order byte
     lcd_en_set();
     lcd_out_data4((val)&0x0F);
     lcd_en_clr();
     
     lcd_wait();
}

void lcd_write_control(unsigned char val){
     lcd_rs_clr();
     lcd_write_nibbles(val);
}

void lcd_init(){

      PINSEL0 &= (~LCD_GPIO_SEL0);
      PINSEL1 &= (~LCD_GPIO_SEL1);
        /* we only work on OUTPUT so far */
        IODIR0 |= LCD_IOALL;
       
        /* IO init complete, init LCD */

       /* init 4-bit ops*/
       lcd_rs_clr();
       lcd_rw_clr();
       lcd_en_clr();


       //wait VDD raise > 4.5V
       lcd_wait();
       
       //dummy inst
       lcd_write_nibbles(0x30);
       lcd_write_nibbles(0x30);
       lcd_write_nibbles(0x30);

       //FUNCTION SET
       //001DL  N F XX
       //DL=1: 8bit
       //DL=0: 4bit
       //N=0: 1 line display
       //N=1: 2 line display
       //F=0: 5x7 dots
       //F=1: 5x10 dots

       //our case:
       //0010 1000
       lcd_en_set();
       lcd_out_data4(0x2);
       lcd_en_clr();
       lcd_wait();

       lcd_write_nibbles(0x28);
       
       //LCD ON
       lcd_write_nibbles(0x0E);

       //Clear Display
       lcd_write_nibbles(0x01);

       //Entry mode
       lcd_write_nibbles(0x06);

}

void lcd_putchar(unsigned char c){

      lcd_rs_set();
         switch (c) {
     case '\f'   : lcd_write_control(0x01);         //borra la pantalla
                  // delay_ms(2);
                                           break;
     case '\n'   : lcd_gotoxy(1,2);        break;   //   Salta al comienzo de la segunda línea.
     case '\b'   : lcd_write_control(0x10);  break;     // Retrocede una posición.
     default     :   lcd_write_nibbles(c);   break;
     }
       
       
}

void lcd_print(unsigned char *str)
{
      int i;


      //limit 1 line display for prints
        for (i=0;i<32 && str!=0;i++){
                lcd_putchar(str);
        }

}

 
   
     
void lcd_gotoxy( unsigned char x, unsigned char y) {
   char address;   
  if(y!=1)
    address=lcd_line_two;
  else
    address=0;
  address+=x-1;
  lcd_write_control(0x80|address);
}



Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: imprimir carateres en display 16x2
« Respuesta #3 en: 30 de Diciembre de 2012, 17:19:37 »
Mi error... el tema es la funcion printf, es esa la que se encarga de formatear la cadena cambiando %f1.2 con el contenido de voltios y la cadena resultante enviarla a la funcion lcd_putc.
Podrías probar de declarar un array de char y luego hacer:
printf(mi_array_de_char,"%1.2f voltios", voltios );

si en mi_array_de_char obtienes la cadena formateada, entonces debería funcionar bien. Sino, sería un problema de printf y deberías ver como hacer para que funcione. en uvision no sé como sería, yo uso CodeRed y las librerías CMSIS y la verdad... nunca use el printf...
tambien puedes investigar el sprintf

Me interesa si encuentras la forma, sino puedes avisa que veo si puedo probar algo....

Saludos
-
Leonardo Garberoglio

Desconectado hernanutn

  • PIC16
  • ***
  • Mensajes: 117
Re: imprimir carateres en display 16x2
« Respuesta #4 en: 30 de Diciembre de 2012, 17:26:00 »
Mi error... el tema es la funcion printf, es esa la que se encarga de formatear la cadena cambiando %f1.2 con el contenido de voltios y la cadena resultante enviarla a la funcion lcd_putc.
Podrías probar de declarar un array de char y luego hacer:
printf(mi_array_de_char,"%1.2f voltios", voltios );

si en mi_array_de_char obtienes la cadena formateada, entonces debería funcionar bien. Sino, sería un problema de printf y deberías ver como hacer para que funcione. en uvision no sé como sería, yo uso CodeRed y las librerías CMSIS y la verdad... nunca use el printf...
tambien puedes investigar el sprintf

Me interesa si encuentras la forma, sino puedes avisa que veo si puedo probar algo....

Saludos

voy a probar, pero lo que quiero es por eje imprimir el 15 y lo debo convertir en ascii ala decena y la unidad cargarlo a un vector y mandarlo con lcd_print pero lo q busco mandarlo de una.

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: imprimir carateres en display 16x2
« Respuesta #5 en: 30 de Diciembre de 2012, 17:33:02 »
y que problema te da ese printf? error de compilacion? o de ejecucion?
-
Leonardo Garberoglio

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: imprimir carateres en display 16x2
« Respuesta #6 en: 30 de Diciembre de 2012, 17:39:22 »
-
Leonardo Garberoglio

Desconectado hernanutn

  • PIC16
  • ***
  • Mensajes: 117
Re: imprimir carateres en display 16x2
« Respuesta #7 en: 30 de Diciembre de 2012, 17:56:51 »
fijate en esto:

http://www.keil.com/support/man/docs/ca/ca_sprintf.htm


use esto y anda:
 sprintf(subir,"%d",t);
   lcd_print(subir); 
donde "subir" lo declare como array de 3 elementos y "t" como char, es para q mediante un pulsador voy incrementando la variable q en este caso es "t" y lo imprimo en el lcd para preseleccionar una temperatura x y utilizarlo con un sensor. gracias por la ayuda

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: imprimir carateres en display 16x2
« Respuesta #8 en: 30 de Diciembre de 2012, 19:38:43 »
Muy bueno que haya funcionado!

Seré curioso, que micro estas utilizando? o es una placa de desarrollo?

Saludos!
-
Leonardo Garberoglio

Desconectado hernanutn

  • PIC16
  • ***
  • Mensajes: 117
Re: imprimir carateres en display 16x2
« Respuesta #9 en: 30 de Diciembre de 2012, 19:58:41 »
Muy bueno que haya funcionado!

Seré curioso, que micro estas utilizando? o es una placa de desarrollo?

Saludos!

el micro nxp lpc2114

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: imprimir carateres en display 16x2
« Respuesta #10 en: 30 de Diciembre de 2012, 20:01:37 »
y estas haciendo todo el hardware? podría saber de que se trata el proyecto?

Saludos!
-
Leonardo Garberoglio

Desconectado hernanutn

  • PIC16
  • ***
  • Mensajes: 117
Re: imprimir carateres en display 16x2
« Respuesta #11 en: 30 de Diciembre de 2012, 20:27:01 »
y estas haciendo todo el hardware? podría saber de que se trata el proyecto?

Saludos!

es un kit echo en la utn de cordoba : http://ciii.frc.utn.edu.ar/TecnicasDigitalesII/WebHome/HerramientasProgramacion/PlacasARM
son 2 sensores de temp, q mediante pulsadores configuro una temp y cuando el sensor sobrepase dicha temp q configure se activa por ej para refrigerar una habitacion o calentar la misma.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: imprimir carateres en display 16x2
« Respuesta #12 en: 30 de Diciembre de 2012, 21:25:34 »
En keil uvision para redireccionar es sencillo:

Código: C
  1. #include "stdio.h"
  2. struct __FILE {int handle;};
  3. FILE __stdout;
  4.  
  5.  
  6. int fputc(int ch, FILE *f){    
  7.        
  8.         // Aquí llamar a la función correspondiente, en este caso seria:
  9.         return(lcd_putchar(ch));
  10.  
  11. }

Así usas printf directamente.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: imprimir carateres en display 16x2
« Respuesta #13 en: 30 de Diciembre de 2012, 22:00:00 »
y estas haciendo todo el hardware? podría saber de que se trata el proyecto?

Saludos!

es un kit echo en la utn de cordoba : http://ciii.frc.utn.edu.ar/TecnicasDigitalesII/WebHome/HerramientasProgramacion/PlacasARM
son 2 sensores de temp, q mediante pulsadores configuro una temp y cuando el sensor sobrepase dicha temp q configure se activa por ej para refrigerar una habitacion o calentar la misma.

Que interesante la placa!

Para programar el micro usan un LPC-Link o tienen una placa propia?

Saludos!
-
Leonardo Garberoglio

Desconectado hernanutn

  • PIC16
  • ***
  • Mensajes: 117
Re: imprimir carateres en display 16x2
« Respuesta #14 en: 31 de Diciembre de 2012, 00:20:22 »
y estas haciendo todo el hardware? podría saber de que se trata el proyecto?

Saludos!

es un kit echo en la utn de cordoba : http://ciii.frc.utn.edu.ar/TecnicasDigitalesII/WebHome/HerramientasProgramacion/PlacasARM
son 2 sensores de temp, q mediante pulsadores configuro una temp y cuando el sensor sobrepase dicha temp q configure se activa por ej para refrigerar una habitacion o calentar la misma.

Que interesante la placa!

Para programar el micro usan un LPC-Link o tienen una placa propia?

Saludos!

ahi en el link la placa del 2010 es la q uso, una es la placa base con el micro y las salidas y la otra va montada sobre la anterior para grabarla


 

anything