Hola compa�er@s de nuevo!!!
Antes de todo decir que no lo puedo compilar porque no tengo el CCS
, pero bueno teoricamente puede ser que el siguiente codigo te funcione.
Nota: Coloco en
negrita los cambios realizados, que creo que son convenientes para solucionar el problema.
/***************************************************************/
#include <16f877.h>
#device adc=10
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD
#use delay (clock= 4000000)
#use rs232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_C6, RCV=PIN_C7)
void main() {
float const resoluc= 5.0/1024.000; //Resoluci�n del convertidor
float corriente= (2*5.0)/11000.000;
float tension; //Valor tension sacada
float valor; //Numero de pasos de la medida
float v_ohmico, v_ohmicom, v_ohmicot; //Valor ohmico del potenciometro
int i; //Indice que vamos a utilizar
setup_adc_ports (ALL_ANALOG); //Todas las entradas del covertidor son analogicas
setup_adc (ADC_CLOCK_INTERNAL); //Selecciono reloj interno del pic
for ( ; ; ) { //Bucle infinito
v_ohmicom = 0; //Inicializo variables (valor ohmico medio)
v_ohmicot = 0; //Inicializo variables (valor ohmico total)
for (i= 1; i<11; i++) { //Bucle que va obteniendo
10 valores de tension
set_adc_channel (0); //Elige el canal 0
delay_us(20); //Retardo para que de tiempo de cargarse el condensador del adc
valor= read_adc(); //Obtiene el valor del adc
tension= valor*resoluc; //Calcula la tension
v_ohmico= (2*tension)/corriente; //Calculo valor ohmico de los potenciometros
v_ohmicot= (v_ohmicot+v_ohmico); //Va sumando los valores ohmicos de los 10 datos
}
v_ohmicom= v_ohmicot/10; //Media del valor ohmico
printf ("%1.4f ", v_ohmicom); //Saca a hyperterminal valor ohmico
delay_ms(20); //Retraso de 20ms y vuelta a empezar
}
}
/***************************************************************/
Los problemas que he encontrado a simple vista son:
1º.- Los valores de v_ohmicom y v_ohmicot, los tendras que inicializar a 0
2º.- Al poner el for
for (i= 1; i<12; i++) se repite 11 veces
3º.- Y más importante, es el de
tension= valor*resoluc; , puesto que:
float = long int * float const; , por eso he declarado la variable
valor como
float.
Si quieres que
valor sea
long int, podrias colocarlo como
tension= (float) (valor) * resoluc;, y declarar valor como
long intSi decides declararlo como float, pero solo quieres la parte entera puedes redondearlo hacia arriba o hacia abajo utilizando math.h, las instrucciones ceil o floor, segun el gusto
Bueno un saludo para tod@s!!! Espero que te sirva, sino pues a ver que puedo hacer sin ese compilador para ayudar.