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