TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: loverman24 en 01 de Marzo de 2006, 12:30:00
-
Hola a todos, tengo problemas con una aplicacion hecha en VB6. En la aplicacion, los datos que me envia el pic los trato como string, y resulta que tengo problemas con los numeros que envia el pic, me los sustituye por caracteres "raros", por asi decirlo, pero sin embargo, los char que envio no tengo problemas. Ya que no veo la forma de corregir este error desde Vb, quiero dar un pequeño rodeo, e intentar enviar los numeros, q son de tipo float como string, a ver si asi logro q funcione.
Por tanto mi pregunta es, como puedo convertir los float a string?
El pic me envia de la siguiente manera
printf ("%c%c%1.2f V
",modo, canal, tensionm);
la idea es que la variable tensionm, q es de tipo float, pasarla a string, para ver si asi la aplicacion en VB no me da problemas.
Espero vuestra ayuda
Gracias
Un saludo
-
Los maestros, y sin embargo amigos, Nocturno y Migsantiago lo contestan en este Hilo
-
Vaya se me paso, muchas gracias
-
Hola, he vuelto a mirar el post q me indicas, pero no puedo acceder a el. me sale un mensaje diciendo
"El tema no es valido o ha sido eliminado"
Solo me pasa a mi o es que no esta?
-
iCosas del foro!, ahora funciona perfectamente ese post.
-
Ja, ja, ja El Foro Loco Ataca de Nuevo

-
Bueno, despues de mirar los ejemplos y de hacerlos tal como dicen, no se que hago mal q no funciona.
He reprogramado mi codigo, he puesto el sprintf como ( creo q esta bien puesto) dicen los ejemplos, y a la hora de ver como funciona por el hyperterminal, tanto el del proteus como el real, no me aparece la salida de sprintf, si la del printf. Donde deberia aparecer la salida del sprintf no me aparece nada. Os pongo el codigo completo, la parte del sprintf es la final:
//Programa que realiza una conversion de un potenciometro
#include <16f877A.h> //PIC q se usa
#device adc=10 //Resolucion del convertidor, 10 bits
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD //Establece los distintos bits de configuración del micro
#use delay (clock= 4000000) //Frecuencia de reloj
#use rs232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_C6, RCV=PIN_C7) //Configuracion de la comunicacion serie
void main() {
float const resoluc= 5.00/1023.00; //Resolución del convertidor, 4.92 es la tension de alimentacion
//pero uso 5V
float corriente0= 10.00/10860.00; //Diferentes corrientes dependientes de la resistencia calibracion
float corriente1= 10.00/10860.00;
float corriente2= 10.00/10890.00;
float corriente; //Valor de corriente que se usa para calcular el v_ohmico
float tension, tensionm, tensiont, tensionp; //Diferentes valores de tension previos a utilizar
float valor; //Numero de pasos de la medida
float v_ohmico, v_ohmicom, v_ohmicot; //Diferentes valores ohmicos a utilizar, v_ohmicot es el definitivo
int i, j, k; //Contadores usados en el programa
char canal, modo; //Variables que indicaran el canal de medida y el modo, calibracion, medicion
char string[20]; //o caida de tension en el potenciometro
setup_adc_ports (ALL_ANALOG); //Todas las entradas del covertidor son analogicas
setup_adc (ADC_CLOCK_INTERNAL); //Selecciono reloj interno del pic
for (;
{ //Bucle principal
for (k= 0; k<3; k++) { //Bucle que indica donde colocar los datos obtenidos, es decir, en calibracion
switch (k) { //en medicion o en la etiqueta de caida de tension
case 0: modo= "a"; break;
case 1: modo= "b"; break;
case 2: modo= "c"; break;
}
for (j= 0; j<3; j++) { //Bucle que elige los canales del pic que se usan para realizar la adquisicion
tensionm= 0;
tensiont= 0;
tensionp= 0;
v_ohmicom= 0;
v_ohmicot= 0;
set_adc_channel (j);
switch (j) {
case 2: canal= "A"; //Grupo1= A, Grupo2= B, Grupo3= C
corriente= corriente0;
break;
case 1: canal= "B";
corriente= corriente1;
break;
case 0: canal= "C";
corriente= corriente2;
break;
}
for (i= 1; i<101; i++) {
delay_us(100);
valor= read_adc();
tension= valor*resoluc;
v_ohmico= (2*tension)/corriente;
v_ohmicot= (v_ohmicot+v_ohmico);
tensiont= (tensiont+tension);
}
v_ohmicom= v_ohmicot/100;
tensionm= tensiont/100;
tensionp= 2*tensionm;
if (modo=="a") {
printf("%c%c", modo, canal);
sprintf (string, "%1.2f V
", tensionm);
}
if (modo== "b") {
printf ("%c%c", modo, canal);
sprintf (string, "%1.2f Ohms
", v_ohmicom);
}
if (modo== "c") {
printf ("%c%c", modo, canal);
sprintf (string, "%1.2f V
", tensionp);
}
delay_ms(100);
}
}
}
}
Se puede ver como declaro una variable char string[20] y como el sprintf (string, "%1.2f V
", tensionp); esta bien puesta, o al menos eso creo.
Espero vuestra ayuda
Gracias
Un saludo
-
Claro, es que no debes ver nada. Lo que hace el sprintf es volcar sobre la variable string lo que venga detrás. Si quieres ver el contenido de esa variable, tendrás que hacer un printf con ella.
-
Aaaaaaaaaaaaaaaa vale, siento la pregunta chorra


