duda variables

hola a todos!! os explico he hecho un programa en C18 en el que simplemente visualizo por un lcd el valor de la conversion ad con un 18f4550, pero tengo un problema y creo que es con las variables, porque a ver, utilizo alineacion a izquierdas, para asi solo utilizar el registro ADRESH y lo multiplico por 4. el caso es que si la multiplicacion la hago en la misma instruccion que envio el dato al lcd, si que me muestra hasta 1020, pero si lo hago en una variable, llega a 255 y luego vuelve a empezar. os pongo el codigo:
Código:
 while(1){
		 ADCON0bits.GO=1;
		 do{}
	 	 while(ADCON0bits.GO==1);
		 voltios=ADRESH;// si la hago aqui no funciona
		 itoa(voltios*4, medida);
		 WriteCmdXLCD(0x01);
		 BusyXLCD();
		 putsXLCD(medida);
		} 
	
	 }
la variable voltios es del tipo unsigned int asi que no deberia tener problemas de espacio porque son 16bits no? y yo solo utilizo 10 o me equivoco? la conversion se que la hace perfectamente porque sino no lo sacaria de esa forma. gracias por adelnatado.
luego queria tmb preguntar una cosa, como estoy actualizando constantemente el valor, en el lcd se produce un parpadeo (por lo menos en proteus) deberia poner ahi un latch para mantener el valor? me podeis decir la referencia de algun circuito que haga eso?
Un saludoo!!!
 
Para que no parpadee podes guardar el valor y si este cambia lo actualizas, sino dejas el anterior que seria el mismo.. :)
 
asi lo hago pero es como si no cupiera y cuando llega a 255 vuelve a 1, a ver te explico de nuevo a ver si asi se entiende, está la variable voltios que es un unsigned int (16bits), y luego esta la variable medida que es un char, esta la utilizo para poder escribir el valor en el lcd. Vamos con la variable voltios, ahi almaceno el valor de ADRESH multiplicaod por 4, es decir
Código:
voltios=ADRESH*4;
, si lo hago asi pasa lo que he explicado antes, sin embargo si lo hago en la conversion de entero a string, esto:
Código:
itoa(voltios*4, medida);
, si que me lo hace bien, entonces por eso creo que el problema esta en las variables.
Otra cosa, si yo quiero mostrar un float en el lcd. . como lo hago? porque hay instrucciones para pasar de long a string, de entero a string(que es la que utilizo ahi). . pero no hay una de float a string. . . lo he probado con un sprintf pero no funciona, y a parte he leido por ahi que sprintf no admite floats. . como lo puedo solucionar?
Un saludo
 
si, yo la declaro como unsigned int que son 2 bytes, sin embargo solo llega hasta los 8 bits de menor peso. . . hace tiempo tambien me pasaba algo parecido al utilizar el modulo pwm. . . y entonces tampoco pude averiguar que podia ser. y lo de mostrar las variables float sabes como podria hacerlo?
Un saludo
 
Si llega a 255 te esta tomando unsigned char que es de 8 bits, prueba con unsigned long que es de 32 bits. Para mostrar un float se utiliza sprintf (output,"%5.2f",f);
 
Atrás
Arriba