Autor Tema: ayuda con PRINTF()....  (Leído 2176 veces)

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

Desconectado wofer

  • PIC12
  • **
  • Mensajes: 50
ayuda con PRINTF()....
« en: 27 de Abril de 2004, 17:25:00 »
por ke en esta funcion:

 long int GRADOS
 int DECIMALES

 PRINtF("GRADOS =%lu,%1u
",grados,decimales);

.....los decimales me aparecen todos,osea,yo le indico ke solo me envie un numero,y me envia los tres(el valor total del registro),sin embargo con "grados" si ke funciona bien.
  "Decimales" es el modulo de una division,aunke no creo ke tenga nada ke ver porke si le cargo a "decimales" el valor 222,me sigue funcionando igual de mal.


P.D:me he fijado ke al indicar el numero de caracteres a enviar,estos los envia  de derecha a izkierda,por ejemplo,si le indicas de solo envie 1 caracter de una variable con valor 123,solo enviara el 3,si le dices ke envie 2 caracteres,enviara el 23..etc
Mi pregunta es,¿se puede elegir el caracter a enviar?o¿se puede cambiar el orden en el ke los envia haciendo ke empieze por la izkierda?



Saludos!!!

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: ayuda con PRINTF()....
« Respuesta #1 en: 28 de Abril de 2004, 00:30:00 »
Vamos a ver wofer, a tí que te gustaría que se representara, por ejemplo 12.234 grados (con punto decimal y la palabra grados).

Pon un ejemplo concreto, con números, de lo que deseas que te salga y lo que en realidad sale.

Un saludo

Desconectado wofer

  • PIC12
  • **
  • Mensajes: 50
RE: ayuda con PRINTF()....
« Respuesta #2 en: 28 de Abril de 2004, 17:05:00 »
lo ke intento hacer es un sensor de temperatura con el LM35,el cual te da una salida de 10mV por cada grado C,osea,para 35ºC te sacara 350mV,para 110ºC te dara 1,1V...etc.,y luego representar el valor en el ordenador,pero con 1 solo digito decimal.La interrupcion ADC es la siguiente :

#INT_AD
analog(){

long int grados;
float resultado_ana;
int decimales;

IF(ADRESH== 0)RESULTADO_ANA = ADRESL;
IF(ADRESH== 1)RESULTADO_ANA = 256 + ADRESL;
IF(ADRESH== 2)RESULTADO_ANA = 512 + ADRESL;
IF(ADRESH== 3)RESULTADO_ANA = 768 + ADRESL;

grados = (RESULTADO_ANA*150)/307; //esto es una regla de
//3 en la ke 150 son los 1,5V (valor maximo ke llega el LM35),
//y 307 es el valor analogico ke le corresponde a los 1,5V
//en el registro del pic.

decimales = resultado_ana*150;
decimales %= 307;


PRINtF("GRADOS =%lu,%1u C
",GRADOS,decimales);
}

.......lo he intentado hacer poniendo ke "grados" sea una "float",pero no me va bien,cuando la V de entrada es 1,5V me da un valor desorbitado de mas de 9000 ke no se corresponde para nada,y a partir de esa V en adelante,da valores totalmente erroneos y aleatorios.

Podria hacer ke funcionase como kiero poniendo lo siguiente encima de la funcion printf():

decimales /=100;

....pero lo ke me tiene moskeado es ke me envie todos los caracteres de "decimales" cuando yo le estoy indicando ke solo me envie 1.


Saludos!!!!

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: ayuda con PRINTF()....
« Respuesta #3 en: 29 de Abril de 2004, 05:34:00 »
Je, je me dá la impresión que vienes del ensamblador y estas intentando aplicar la filosofía de los registros al C. Se puede hacer pero te recomiendo que te olvides de los registros, el Compilador sabe como se llaman y donde se encuentran.

Yo lo haría así:

long Valorconversor;
float Temperatura,Resolucion;

Temperatura=Valorconversor*Resolucion*100;

No hace mucho le puse un ejemplo de un voltímetro a un forista ... voy a buscarlo y te lo muestro.

Un saludo

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: ayuda con PRINTF()....
« Respuesta #4 en: 29 de Abril de 2004, 05:36:00 »

Desconectado wofer

  • PIC12
  • **
  • Mensajes: 50
RE: ayuda con PRINTF()....
« Respuesta #5 en: 29 de Abril de 2004, 16:35:00 »
Ahora si!!!...ahora si ke me va la captura analogica hecha completamente en c.Ya lo habia intentado por mi mismo,pero no me funcionaba bien porke no habia puesto lo de "#device adc=10".
Pocher...¿de donde sacais toda esa informacion?porke en el manual del ccs no esta!
 Por ejemplo,para inicializar la captura,lei en un programa ke habia por el foro ke se ponia lo siguiente:

 read_adc(ADC_START_ONLY);

...eso en la explicacion ke hay sobre la funcion "read_adc()" en el manual no esta!!aunke tambien he visto ke en tu programa del voltimetro no lo pones...¿te funciona sin eso???A mi desdeluego no!.......¿eske hay otro manual o cosa parecida ke se ma ha pasado?


Saludos!!!




Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: ayuda con PRINTF()....
« Respuesta #6 en: 30 de Abril de 2004, 00:26:00 »
- El read_adc(ADC_START_ONLY);  no tienes porqué ponerlo, por omisión hace tanto un START como un READ.

- No te vienen estas cosas en tu manual porque son funciones que han sacado posteriormente. Agénciate una versión superior.

- Si, si que funciona sin el START.

Un saludo

Desconectado wofer

  • PIC12
  • **
  • Mensajes: 50
RE: ayuda con PRINTF()....
« Respuesta #7 en: 30 de Abril de 2004, 09:24:00 »
Ahora ya esta claro....no me funcionaba antes porke yo utilizaba la funcion "read_adc()",solo para leer el resultado analogico,y al tenerla dentro le la "#int_adc" pues nunca se ponia en marxa.

En cuanto a lo de la version,a cual te refieres,a la del ccs o a la del manual....yo del ccs utilizo la ke pone "IDE version 3.28"....¿de donde puedo sacar algo mejor?

Gracias por tu ayuda,pocher!!!


Saludos!!