Punto flotante en PIC16F
2 participantes
Página 1 de 1.
Punto flotante en PIC16F
Buenas gente,
Estuve haciendo unas pruebas, que si bien muchos podrán decir que carecen de sentido, son sólo a modo experimental. Hice un programita muy sencillo en C (compilado con SDCC) que utiliza las librerías de punto flotante y corre en un PIC16F887.
Los resultados fueron positivos siempre que los números float sean positivos; por ejemplo:
float x;
unsigned char p;
x = 0;
while(1) {
p = x;
PORTD = p;
x= (x + .01);
if (x > 255)
x = 0;
}
Este ejemplo funciona correctamente, pero el siguiente no:
float x, y;
unsigned char p;
x=-128;
while(1) {
y = x + 128;
p = y;
PORTD = p;
x = (x + .01);
if (x > 127)
x = -128;
}
Ciertamente el programa compila pero no funciona bien cuando las variables definidas como 'float' contienen un valor negativo.
Si alguien tiene experiencia o alguna idea, toda sugerencia es bienvenida.
Gracias, saludos...
Estuve haciendo unas pruebas, que si bien muchos podrán decir que carecen de sentido, son sólo a modo experimental. Hice un programita muy sencillo en C (compilado con SDCC) que utiliza las librerías de punto flotante y corre en un PIC16F887.
Los resultados fueron positivos siempre que los números float sean positivos; por ejemplo:
float x;
unsigned char p;
x = 0;
while(1) {
p = x;
PORTD = p;
x= (x + .01);
if (x > 255)
x = 0;
}
Este ejemplo funciona correctamente, pero el siguiente no:
float x, y;
unsigned char p;
x=-128;
while(1) {
y = x + 128;
p = y;
PORTD = p;
x = (x + .01);
if (x > 127)
x = -128;
}
Ciertamente el programa compila pero no funciona bien cuando las variables definidas como 'float' contienen un valor negativo.
Si alguien tiene experiencia o alguna idea, toda sugerencia es bienvenida.
Gracias, saludos...
sigmaorion- Nuevo Usuario
- Mensajes : 6
Fecha de inscripción : 01/03/2009
Re: Punto flotante en PIC16F
Hola sigmaorion.
La verdad es que no he utilizado operaciones con punto flotante en SDCC y tampoco tengo idea de como trabaja el tema, pero puestos a entrar en el tema hay una cosa que sería bueno que explicaras: cuando dices que el segundo ejemplo no funciona correctamente, a que te refieres exactamente?... osea cuales son los resultados que obtienes?
Saludos.
La verdad es que no he utilizado operaciones con punto flotante en SDCC y tampoco tengo idea de como trabaja el tema, pero puestos a entrar en el tema hay una cosa que sería bueno que explicaras: cuando dices que el segundo ejemplo no funciona correctamente, a que te refieres exactamente?... osea cuales son los resultados que obtienes?
Saludos.
arcachofo- Participante Activo
- Mensajes : 91
Fecha de inscripción : 26/11/2008
Re: Punto flotante en PIC16F
Hola Arcachofo,
No he logrado hacer un debbug del programa pero pareciera que cuando una variable definida como float tiene un valor negativo las operaciones no se realizan correctamente. En el ejemplo de abajo x = (x + 0.01) en realidad nunca incrementa la variable, sólo se incrementa si el salto es mayor a 0.5, o sea algo como x = (x + 0.5). Creería que las operaciones con float en números negativos siempre se redondean.
En la red no encontré nada, la verdad, un misterio...
Saludos...
No he logrado hacer un debbug del programa pero pareciera que cuando una variable definida como float tiene un valor negativo las operaciones no se realizan correctamente. En el ejemplo de abajo x = (x + 0.01) en realidad nunca incrementa la variable, sólo se incrementa si el salto es mayor a 0.5, o sea algo como x = (x + 0.5). Creería que las operaciones con float en números negativos siempre se redondean.
En la red no encontré nada, la verdad, un misterio...
Saludos...
sigmaorion- Nuevo Usuario
- Mensajes : 6
Fecha de inscripción : 01/03/2009
Temas similares
» Proyecto: crear librerías para SDCC PIC16F
» ADC para PIC16F*, driver y ejemplo.
» SDCC: Driver para LCD. PIC16F*
» Libreria LCD 4Bit , para Pic16f
» LCD 44780 4-bits para PIC16F, driver y ejemplo.
» ADC para PIC16F*, driver y ejemplo.
» SDCC: Driver para LCD. PIC16F*
» Libreria LCD 4Bit , para Pic16f
» LCD 44780 4-bits para PIC16F, driver y ejemplo.
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|