Autor Tema: Libreria para LCD con 3 pines y AVRStudio  (Leído 2703 veces)

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

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Libreria para LCD con 3 pines y AVRStudio
« en: 01 de Febrero de 2015, 18:57:02 »
Buenas,

estoy traduciendo una libreria  que encontré en el foro para PIC, a lenguaje C de AVRStudio, y ocurre lo que comento ahora.

Si en el Main pongo esto, funciona:

Código: [Seleccionar]
lcd_gotoxy(1,  1);
lcd_putc('\f');
lcd_putc('H');
lcd_putc('o');
lcd_putc('l');
lcd_putc('a');
lcd_putc('!');
lcd_putc('!');
lcd_putc('!');
lcd_putc('\n');
lcd_putc('M');
lcd_putc('u');
lcd_putc('n');
lcd_putc('d');
lcd_putc('o');

Pero si hago uso de printf, no funciona:

Código: [Seleccionar]
printf(lcd_putc,"\f-LCD 3 pin Mode-\n* !.|.|..|.|.! *");

Dejo adjuntas las dos librerias (original y la modificada) y el proyecto en VS.

Saludos!!!
« Última modificación: 01 de Febrero de 2015, 19:53:19 por micro_pepe »
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Libreria para LCD con 3 pines y AVRStudio
« Respuesta #1 en: 01 de Febrero de 2015, 19:58:31 »
2 cosas para decir....

Puede que tu "printf" no sea el mismo "printf" que el otro compilador.
Buscando por el printf de stdio.h

int printf ( const char * format, ... );

es decir no se le pasa una funcion. ahi debe estar el problema.
proba hacer:

int8_t variable = printf(lcd_putc,"\f-LCD 3 pin Mode-\n* !.|.|..|.|.! *");

Y fijate el valor de variable.
Citar
On success, the total number of characters written is returned.
If a writing error occurs, the error indicator (ferror) is set and a negative number is returned.

Mi segunda cosa a decir es que a pesar que pide definir el tipo de lcd ( me refiero a la cantidad de lineas ) no hay restriccion en el gotoxy, es decir podes seleccionar para 1 linea, pero si por casualidad pones un gotoxy a la segunda linea, va a intentar grabar en la segunda, creo que con un ifdef/ifndef podrias salvarlo o preguntando por la constante, total luego el compilador al optimizarlo va a sacar el codigo.

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: Libreria para LCD con 3 pines y AVRStudio
« Respuesta #2 en: 01 de Febrero de 2015, 20:33:17 »
2 cosas para decir....

Puede que tu "printf" no sea el mismo "printf" que el otro compilador.
Buscando por el printf de stdio.h

int printf ( const char * format, ... );

es decir no se le pasa una funcion. ahi debe estar el problema.
proba hacer:

int8_t variable = printf(lcd_putc,"\f-LCD 3 pin Mode-\n* !.|.|..|.|.! *");

Y fijate el valor de variable.
Citar
On success, the total number of characters written is returned.
If a writing error occurs, the error indicator (ferror) is set and a negative number is returned.


Pues retorna -1, parece que no se puede usar de esa forma.

Mi segunda cosa a decir es que a pesar que pide definir el tipo de lcd ( me refiero a la cantidad de lineas ) no hay restriccion en el gotoxy, es decir podes seleccionar para 1 linea, pero si por casualidad pones un gotoxy a la segunda linea, va a intentar grabar en la segunda, creo que con un ifdef/ifndef podrias salvarlo o preguntando por la constante, total luego el compilador al optimizarlo va a sacar el codigo.

Lo tendré en cuenta.

Saludos!!!
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Libreria para LCD con 3 pines y AVRStudio
« Respuesta #3 en: 02 de Febrero de 2015, 06:01:24 »
Puede que sirva...

https://github.com/adamcohen/uart-printf/blob/master/UART%20Printf/tinyprintf.c

No posee flotante, lo cual seria bueno implementarlo es agregar un nuevo case y transformar la variable de flotante a un numero legible, creo que hay codigos dentro de todos cortos para eso.
Y la otra modificar el puts de cada funcion dentro por alguna que tengas o realizar un nuevo puts

Por si se presentan dudas sobre que es el va_arg/va_start

Citar
void va_start (va_list ap, paramN);
Initialize a variable argument list
Initializes ap to retrieve the additional arguments after parameter paramN.

Citar
type va_arg (va_list ap, type)
Retrieve next argument

En fin dejo eso... Estuve viendo la libreria de TI y posee un codigo similar, nomas que agrega la posibilidad de tener un %%

Código: C
  1. case '%':
  2.                 {
  3.                     //
  4.                     // Simply write a single %.
  5.                     //
  6.                     UARTwrite(pcString - 1, 1);
  7.  
  8.                     //
  9.                     // This command has been handled.
  10.                     //
  11.                     break;
  12.                 }

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: Libreria para LCD con 3 pines y AVRStudio
« Respuesta #4 en: 02 de Febrero de 2015, 14:35:51 »
OK, muchas gracias  ;-) con ese codigo para hacer nuestro printf a medida funciona bien, lo dejo adjunto.

Faltaria hacer el float, y lo que me comentaste del lcd_gotoxy no lo tengo muy claro, he puesto ifndef, pero creo que no van por hay los tiros.

Saludos!!!
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡