Autor Tema: ayuda con la modificacion de una variable  (Leído 2527 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
ayuda con la modificacion de una variable
« 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

Desconectado lovando

  • PIC16
  • ***
  • Mensajes: 193
RE: ayuda con la modificacion de una variable
« Respuesta #1 en: 25 de Enero de 2006, 14:07:00 »
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

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
RE: ayuda con la modificacion de una variable
« Respuesta #2 en: 25 de Enero de 2006, 14:12:00 »
gracias ...lo pruebo y te cuento!!!

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
RE: ayuda con la modificacion de una variable
« Respuesta #3 en: 25 de Enero de 2006, 14:22:00 »
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();
}

Desconectado lovando

  • PIC16
  • ***
  • Mensajes: 193
RE: ayuda con la modificacion de una variable
« Respuesta #4 en: 25 de Enero de 2006, 16:00:00 »
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






Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
RE: ayuda con la modificacion de una variable
« Respuesta #5 en: 25 de Enero de 2006, 18:14:00 »
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
}

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
RE: ayuda con la modificacion de una variable
« Respuesta #6 en: 25 de Enero de 2006, 18:33:00 »
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

Desconectado lovando

  • PIC16
  • ***
  • Mensajes: 193
RE: ayuda con la modificacion de una variable
« Respuesta #7 en: 25 de Enero de 2006, 19:12:00 »
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

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
RE: ayuda con la modificacion de una variable
« Respuesta #8 en: 25 de Enero de 2006, 19:24:00 »
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!!!!


 

anything