Autor Tema: FUNCION  (Leído 9108 veces)

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

Desconectado pikman

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 682
RE: FUNCION
« Respuesta #15 en: 28 de Mayo de 2003, 12:55:00 »
Hola Pocher!,

Bueno, como tu dices, me convenciste funciono ahora de maravillas, solo tengo un detalle,

vos decis

printf(LCD_PUTC,"x=%4.3f",x); // Manda al LCD un número de al menos
// 4 caracteres con 3 posiciones deci-
// males (saca 15.619)

4 caracteres y tres decimales, pero no lo hace si pones 5 carateres deberia reservar uno pero no lo hace,

resulta que me despaza todo a la izquierda cuando el valor es inferior a 1 ( por ejemplo 0.95 bar ) anteriormente cuando yo ponia %lu me hacia lo mismo pero se arreglo cuando le puse la cantidad de caracteres que pretendia mostrar, por lo que veo en el manual cuando lo variable a mostrar es float no es posible decir cuatos caracteres usar, pues pongas lo que pongas siempre usa lo mismo, lo que si varian son los decimales despues de la coma, bueno muchas gracias por tu ayuda, no se como puedo ayudarte pero estoy tus ordenes,

saludos

PikMan
Ariel




saludos
PikMan

Desconectado lu6vg

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 313
RE: FUNCION
« Respuesta #16 en: 28 de Mayo de 2003, 19:07:00 »
Hola

Una pequeña correccion para obviar variables

// LCDfloat: Envio de variables decimales (15.62) a la LCD

#include <16f84.h>

#include <lcd2.c>

main()
{

int32 value=512;

float presion;

presion=(float)((value*25)/819;

while(1)
{
lcd_init(); // Comandos de inicialización del LCD.

lcd_enviar(LCD_COMANDO,LCD_CURSOR_BLINK); // Envía comando al LCD

printf(LCD_PUTC,"x=%4.3f",presion); // Manda al LCD un número de al menos
// 4 caracteres con 3 posiciones deci-
// males (saca 15.619)

sleep();
}
}

Saludos

Luis

Desconectado pikman

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 682
RE: FUNCION
« Respuesta #17 en: 29 de Mayo de 2003, 12:02:00 »
Hola, Luis, Felix y Pocher,

                                       Bueno queria agradecerles la ayuda, finalmente pude obtener la lectura 14,96 Bars, si bien funciona bien poniendo la variable como float, decidi finalmente estudiar un poco el ejemplo que posteo Luis y pude hacer que funcione correctamente, y asi ahorro 200 palabras de memoria que me ocupa el hecho de utilizar variables del tipo float, no se si necesitan el codigo tal cual quedo, para mi realmente ha sido una muy buena experiencia incial.
En uno de los ejemplos de CCS esta uno que envia un mail estatico, son un modem que llama s7600, alguien tiene idea de donde se consigue, yo esoy usando el mx614 pero por lo que veo en el codio parece ser algo mas complejo aunque creo que es posible poner el mx614 el tema es que este es halfduplex y no se si me permitira  realizar la comunicacion contra el server, bueno si saben algo,

un saludo cordial.

Ariel

saludos
PikMan

Desconectado lu6vg

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 313
RE: FUNCION
« Respuesta #18 en: 30 de Mayo de 2003, 20:37:00 »
Ariel

Fijate si podes adaptar mi ejemplo. Sino a mi regreso lo charlamos

Saludos

Luis

Cita:

Hola, LUIS,
                 Bueno, te hago una consulta, mas arriba pegaste un ejemplo de como convertir la variable en una cadena, si bien esta funcionando como yo queria, el solo hecho de definir variables float incremento el programa 200 palabras mas de memoria de programa, me gustaria que me des un ejemplo de como hacer la conversion y mandarla al LCD, creo que esto ademas de darme la posibilidad de poner la coma donde yo quiera, creo que ocupara menos cantidad de memoria, bueno de C no te puedo enseñar nada, pero llevo 10 años usando microntroladores PIC, no se si hay algo que necesites o si te puedo ayudar cuenta con ello.

saludos

Ariel


Desconectado pikman

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 682
RE: FUNCION
« Respuesta #19 en: 30 de Mayo de 2003, 21:00:00 »
Luis, ya lo hice andar....., lo que pasa es que no se porque quedo el post donde te pedia el ejemplo de nuevo, disculpas, anda como float e imprimiendo en una cadena, es mas en el manual hay un ejemplo similar lo que justifica porque no exixte la funcion ITOA en CCS,

un saludo nos leemos a tu regreso.

saludos

Ariel


Escrito originalmente por lu6vg
Ariel

Fijate si podes adaptar mi ejemplo. Sino a mi regreso lo charlamos

Saludos

Luis

Cita:

Hola, LUIS,
                 Bueno, te hago una consulta, mas arriba pegaste un ejemplo de como convertir la variable en una cadena, si bien esta funcionando como yo queria, el solo hecho de definir variables float incremento el programa 200 palabras mas de memoria de programa, me gustaria que me des un ejemplo de como hacer la conversion y mandarla al LCD, creo que esto ademas de darme la posibilidad de poner la coma donde yo quiera, creo que ocupara menos cantidad de memoria, bueno de C no te puedo enseñar nada, pero llevo 10 años usando microntroladores PIC, no se si hay algo que necesites o si te puedo ayudar cuenta con ello.

saludos

Ariel


saludos
PikMan

Desconectado lu6vg

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 313
RE: FUNCION
« Respuesta #20 en: 30 de Mayo de 2003, 21:24:00 »
Recien leo lo del mx614. Yo compre un CMX867 que es un modelo mas moderno de la misma compania. No lo he hecho funcionar todavia. Mas adelante cambiaremos informacion al respecto

Saludos

Luis

Desconectado pikman

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 682
RE: FUNCION
« Respuesta #21 en: 03 de Junio de 2003, 11:42:00 »
Hola!,
         Bueno, buscando alternativas para la convertion de un entero a cadena, con el fin de poner la coma enontre que en el driver del ltc128.c que incluye el CCS para el converor a/d de 12 bits hay algo parecido que es esto:

void convert_to_volts( long int data, char volts[6]) {
   byte i, d, div_h, div_l;
   long int temp,div;

   div=0x3330;

   for(i=0;i<=4;i++) {
     temp=data/div;
     volts=(byte)temp+"0";
     if(i==0) {
       volts[1]=".";
       i++;
     }
     temp=div*(byte)temp;
     data=data-temp;
     div=div/10;
   }
   volts="";
}


como pueden ver lo que hace es primero dividir por para ajustar el valor leido al la escala de voltage ( eso entiendo) pero despues no entiendo que hace en esta linea:

volts=(byte)temp+"0";

Esto lo probe usando el conversor del 877 que es de 10 bits y funciona pero no asi como esta, bueno espero que puedan entenderlo, pues ni siquiera usa la funcion sprintf,

saludos

Ariel
saludos
PikMan

Desconectado lu6vg

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 313
RE: FUNCION
« Respuesta #22 en: 07 de Junio de 2003, 21:36:00 »
Hola

No analice el codigo, pero te comento que cuando pones de sumar "0" lo que hace es sumar el valor ASCII del caracter. Creo que en este caso es 30 y pico. Si fuera una A por ejemplo seria 65 el valor.

Saludos

Luis