TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: matias29 en 22 de Octubre de 2014, 23:34:39
-
hola tengo una pequeña duda, queria saber si se puede y como asignarle rangos a una variable. ejemplo que x trabaje con un rango de 0 a 1000.
el cual x sera el duty de un pwm. para que haci solo trabaje entre esos rangos.gracias
-
Podes ser mas especifico? con un ejemplo
-
Hola, sí se puede, sólo que en potencias de dos. Digamos que quieres una variable que mida de 0 a 1023:
typedef struct uint10_tag
{
unsigned int var : 10;
}uint10_t;
El rango final es de 0 a (2^10 - 1) por ser sin signo.
Y la usas así:
uint10_t dato;
dato.var = 333;
Si le pusieras un valor mayor al que puede guardar entonces se trunca como cualquier otro downcasting que ya existe; por ejemplo si guardas 0xABCD en un uint8_t, te queda 0xCD.
Saludos.
-
Podes ser mas especifico? con un ejemplo
Esta bastante claro el ejemplo que te dieron arriba. Su ejemplo se basa en que lee una entrada ( pin ) y actua de la manera que vos quieras.
if (input(PIN_X)==0) // Aca se fija si presionaste el boton para subir el el valor de X ( en este caso la variable se llama pwm )
{
if (pwm<=100) pwm++; // Si es menor o igual a 100, este es tu limite superior (en realidad seria 100 + el incremento), incrementas en la cantidad que vos quieras, aca en 1 solo.
delay_ms(25); // Un delay para que no se ejecute muchas veces, aunque hay mejores formas
}
// Esta parte es igual, detecta otro pin, y si esta presionado se asegura que no sea menor que uno y procede a restarlo dando como valor minimo pwm=0
if (input(PIN_X)==0)
{
if (pwm>=1) pwm--;
delay_ms(25);
}
Si tu chequeo no requiere el leer puertos o pines es mas simple
Si queres los valores esten siempre en valor exacto se me ocurre
if (input(PIN_X)==0)
{
if (pwm<=(100-incremento)) pwm++; // En este caso se incrementa 1, pero podes hacer que sea un incremento de a 10, y donde dice incremento pones 10
delay_ms(25);
}
// De la misma forma el caso de tu limite inferior