TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: gaston en 14 de Febrero de 2008, 15:19:46
-
Estimados,
he leido muy poco de las bondades que brinda CCS a travez de su sentencia Printf de texto formateado,
todos conocemos que printf es usado para "sacar datos " por RS232, pero
como usarlo con un LCD?
cuales son los parametros definitivos y sus funciones especificas? /n /t %.....
diferencias si hay con cout >> <<, etc
en fin, a los que saben, y que son muchos y ademas Saben enseñar muy bien,
por ahi conocen enlaces, - incluso del foro mismo, postean ejemplos y comentarios, experiencias y porque no frustaciones jajaja.
quien se anima a agregar comentarios que nos permitan armar información de lo versatil de Printf en CCS
muchas gracias
-
Hola, efectivamente printf es muy versátil. Para mandar información al LCD utilizamos un parámetro de printf que permite definir una función a la que se mandará la cadena formateada. Por ejemplo si en nuestra librería LCD tenemos la función LCD_char(): envía un carácter al LCD, lo utilizaríamos así:
printf(LCD_char,"Valor de la variable: %u",variable);
Como se pude observar utilizamos una función que envia un solo carácter al LCD, la función printf se encarga de enviar carácter a carácter a la función LCD_char para que se visualice toda la cadena.
El resto del printf se utiliza de la forma habitual.
Un saludo
-
Gaston, retornando a la discusicón en otro post de la standarización del CSS este es un claro ejemplo, el standart define a la funcion printf de la sgte. manera:
int printf( const char *args, ... );
Cuando quieras llevar tu fuente a otro compilador seguramente tendras problemas, porque el parametro extra no esta incluido en la declaracion ( el puntero a funcion de la función que escupe )
A mi modesto entender, la función printf, deberia dejarse tal cual, y para estos casos donde yo quiero cambiar el standart output ( que es la función que se encarga de escupir caracter a caracter como muy bien explica jfh900 ) le pondria otro nombre, nose por ejemplo Customprintf, en este caso todo tu codigo hace referencia a esta función y se deberias cambiar de compilador, solo tendrias que implementarla de nuevo, pero ahora todo tu codigo compilaria sin problemas y con poco esfuerzo de portabilidad.
Salu2!
-
Muchas gracias jfh900 por tu respuesta, ahora en CCS no encontre la funcion LCD_char que expones, ni tampoco se como se llama la libreria que maneja la LCD y si tienes alguna informacion sobre los parametros %u que citas o los demas, /n etc, y la puedes postear te agrederia, o al menos algun enlace de donde leerlo,
es que recien empiezo con C, vengo del querido assembler y casi extraños nuestras propias bibliotecas de funciones jajajaja
gacias de nuevo
ojala tengamos mas opiniones al respecto :-)
-
Gracias RICHI777
es decir la funcion printf tal cual lo implementa CCS no es compatible con ANSI C, es decir hace todo lo que la funcion printf ANSI hace, y algo mas, que sereia este punto, que si bien agiliza las cosas, tal como se habla en el otro post pierde compatibilidad con el standard.
es interesante el punto de vista, y el hecho de agregar una funcion intemedia como propoes tiene sentido,
gracias de nuevo
-
Gaston, te explico brevemente:
printf(LCD_char,"Valor de la variable: %u",variable);
- LCD_char es un puntero a la función que escupe caracter a caracter, nose si esta implementada o hay que implementarla uno.
- Todo lo que va dentro de la comillas se interpreta como texto
- La exepecion a lo anterior es lo que empieza con %
- Algunos caracteres de escape ( asi se llaman ) empiezan con \, ejemplo las comillas \", el fin de linea ( 0x0A ) \n, el carriage return ( 0x0D ) \r
- Lo que sigue despues del % es el tipo de variable a formatear: c char, d int, u unsigned, l long, s string
- Tambien existe %X o %x que permite sacar un hexadecimal
- Si ademas queres padear con algo lo pones adelante del tipo, ejemplo %04X sacara cuatro digitos hexa, si el valor de la variable es 1 saldra 0001
- Las variables se colocan a continuacion una tras otra en la medida como fue especificada en el formato
Existen mas formatos ( floats, double ) pero escapa a este post...
Salu2!
-
En CCS creo que la libría es lcd.c. En este foro tienes la librería flex_lcd que la puedes localizar con el buscador y que te permite cambiar los pines como quieras. Dentro de esta librería está definida la función void lcd_putc(char c) que es la que puedes utilizar para enviar información al LCD con printf.
Un saludo
-
Muchas gracias a los dos,
para agregar la libreria simplemente agregas el archivo al proyecto? y luego algun include que la llame?
por ej, con esta flex_lcd
pondrias algo asi como:
#include <flex_lcd.c>
-
Si, tienes que utilizar el #include para añadir la librería como tienes especificado, pero ojo:
#include <flex_lcd.c> => Busca en el directorio de librerías del CCS.
#include "flex_lcd.c" => Busca en el directorio del proyecto.
Un saludo.
-
Gracias jfh900 y perdon por hacer preguntas un poco simples
conoces algun lugar donde pueda bajar algun libro o manual de C para pics?
gracias de nuevo
-
Hay un manual en español de CCS que lo puedes buscar por el foro. Pero lo que verdaderamente te puede enseñar son los minitutoriales sobre C que hay en este hilo (aquí tienes el índice):
http://www.todopic.com.ar/foros/index.php?topic=14634.msg89357#msg89357
Un saludo y no dudes en preguntar lo que te haga falta para eso estamos.
-
gracias amigo, al igual que todos aqui, sos muy gentil