TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: fastyx en 25 de Enero de 2006, 13:20:00
-
Amigos:
no se como redactar lo siguiente:
tengo una variable int que es x , y necesito que esa variable vaya aumentando
cada 500 ms de 10 en 10 hasta que encuentre que llego a 100,momento en el cual debe bajar de 10 en 10 hasta 0 y asi recomenzar en un bucle infinito...
gracias
-
Hola ...
algo asi podria ser:
short status; // 1=> up_count 0=> down_count
int valor=0;
void incremento() {
for (i=0;i<10;i++) {
valor+=10;
delay_ms(500);
}
status=0; //Despues del incremento debe ir el decremento
}
void decremento() {
for (i=0;i<10;i++) {
valor-=10;
delay_ms(500);
}
status=1 //Despues del decremento debe ir el incremento
}
void main() {
valor=0; //Valor inicial
status=1; //Primedo incrementamos
while(1) {
switch(valor) {
case (!=100 & status==1): incremento();
case ( 100 & status==0): decremento();
}
No lo he simulado, solo es un intento rapido, no está verificado, pero seria una opcion a estudiar..
Chavela
-
gracias ...lo pruebo y te cuento!!!
-
short status; // 1=> up_count 0=> down_count
int valor=0;
void incremento() {
for (i=0;i<10;i++) {
valor+=10;
delay_ms(500);
}
status=0; //Despues del incremento debe ir el decremento
}
void decremento() {
for (i=0;i<10;i++) {
valor-=10;
delay_ms(500);
}
status=1 //Despues del decremento debe ir el incremento
}
void main() {
valor=0; //Valor inicial
status=1; //Primedo incrementamos
while(1) {
switch(valor) {
case (!=100 & status==1): incremento(); ////aca me tira error de compilacion
//////me dice expresion must be evaluated to a constant????
case ( 100 & status==0): decremento();
}
-
Prueba esto:
short status; // 1=> up_count 0=> down_count
int valor=0;
void incremento() {
for (i=0;i<10;i++) {
valor+=10;
delay_ms(500);
}
status=0; //Despues del incremento debe ir el decremento
}
void decremento() {
for (i=0;i<10;i++) {
valor-=10;
delay_ms(500);
}
status=1 //Despues del decremento debe ir el incremento
}
void main() {
valor=0; //Valor inicial
status=1; //Primedo incrementamos
while(1) {
switch(status) {
case 1: incremento():break;
case 0: decremento();break;
} //switch
} //while
} //main
Podrias probar enviar en valor de "valor" al puerto rs232 usando un putc("valor) por éjemplo, a modo de debugger. Sin embafrgo, hay que considerar que esta funcion ocupa ciclos y por tanto el requermiento de los 500ms se pierde...podrias contar cuantos ciclos genera el compilador y restarlo a los retardos, o bien, y creo la mejor solucion, es usar el TMR0 para efetcos de temporización, lo que te da realmente los 500 ms....claro que con ajustes en el valor de carga del tmr0...
Cuentanos como te va
-
tengo una duda:en el comienzo de la funcion decremento,no tendriamos que inicializar a valor con el numero 100 para que pueda restarse y obtener 90,80 etc hasta llegar a 0
void incremento() {
for (i=0;i<10;i++) {
valor+=10;
delay_ms(500);
}
status=0; //Despues del incremento debe ir el decremento
}
//////////////////////////// iria aqui/////////////////////////////////////////////////////////////////
void decremento() {
for (i=0;i<10;i++) {
valor-=10;
delay_ms(500);
}
status=1 //Despues del decremento debe ir el incremento
}
-
void main() {
set_tris_c(0000000);
setup_timer_2 (T2_DIV_BY_16,127,1);
setup_ccp1 (CCP_PWM);
valor=0; //Valor inicial
status=1; //Primero incrementamos
while(1) {
switch(status)
{
case 1: incremento();break;
case 0: decremento();break;
set_pwm1_duty(valor); //// este esta bien puesto????(para que el duty baile
segun el valor de la variable valor
(en el proteus asi no anda)
} //switch
} //while
} //main
-
Escrito originalmente por fastyx
void main() {
set_tris_c(0000000);
setup_timer_2 (T2_DIV_BY_16,127,1);
setup_ccp1 (CCP_PWM);
valor=0; //Valor inicial
status=1; //Primero incrementamos
while(1) {
switch(status)
{
case 1: incremento();break;
case 0: decremento();break;
set_pwm1_duty(valor); //// este esta bien puesto????(para que el duty baile
segun el valor de la variable valor
(en el proteus asi no anda)
} //switch
} //while
} //main
Hola de nuevo
A ver...tu estamento de seteo de pwm1 está entro del switch, y no se si se ejecute pues creo el switch se trata de evaluar la expresion entre ()...de modo que tu set_pwm1 provocaria un comportamiento en el "limbo"...favor si alguien sabe que ocurre en este caso sería bueno lo aclare....
Seri aaconsejable que puedas setear el pwm dentro de cada funcion de decremento o incremento....
Por otro lado, cuando incremento() termina de ejecutarse, la variable "valor" tiene el valor de 100...valor es una variable global, de modo que decremento() toma el valor inicial de 100....
Saludos
-
ok lo de la variable lo entendi.por lo demas voy a probar colocar el seteo de pwm
en distintos lugares a ver que pasa...
gracias por la ayuda!!!!