Autor Tema: problema con una variable en un swicth  (Leído 1871 veces)

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

Desconectado iamdari

  • PIC10
  • *
  • Mensajes: 14
problema con una variable en un swicth
« en: 18 de Enero de 2011, 16:48:28 »
Hola a todos!!! a ver si me podeis echar una mano con esto:
¿como es posible que el valor de la variable "valor" se me vaya a -3?

#include <16f877.h>
#device adc=10
#fuses xt,nowdt
#use delay(clock=4000000)
#include <lcd.c>
#use standard_io(b)
#use standard_io(d)

void main(){
int16 q;
int16 j;
int l,bitaux,cont=0;
float p;

port_b_pullups(true);
setup_adc_ports(an0);
setup_adc(adc_clock_internal);
set_tris_b(0x00);
lcd_init();
for(;;){
set_adc_channel(0);
delay_us(20);
q=read_adc();//Valor ADC
p=5.0*q/1024.0;//Voltage


printf(lcd_putc,"\fcont= %6d",cont);
printf(lcd_putc,"\nVoltage= %01.2fV",p);
delay_ms(100);
if(cont<=0)
cont=0;
switch(cont){

case(0):
output_high(pin_d5);

if((input(pin_a1)==1)&&(input(pin_a2)==0)){
output_low(pin_d0);
delay_ms(500);
output_high(pin_d1);
cont++;
delay_ms(5);}

else
output_high(pin_d0);

break;

case(1):

if((input(pin_a1)==1)&&(input(pin_a2)==0)){
   output_low(pin_d0);
   delay_ms(500);
   output_high(pin_d2);
   cont++;
   delay_ms(5);}
  
else if((input(pin_a1)==0)&&(input(pin_a2)==1)){
   output_high(pin_d0);
   output_low(pin_d5);
   delay_ms(500);
   output_low(pin_d1);
   cont--;
   delay_ms(5);}

else{
   output_high(pin_d0);
   output_high(pin_d5);}
  

case(2):

if((input(pin_a1)==1)&&(input(pin_a2)==0)){
   output_low(pin_d0);
   delay_ms(500);
   output_high(pin_d3);
   cont++;
   delay_ms(5);}
  
else if((input(pin_a1)==0)&&(input(pin_a2)==1)){
   output_high(pin_d0);
   output_low(pin_d5);
   delay_ms(500);
   output_low(pin_d2);
   cont--;
   delay_ms(5);}

else{
   output_high(pin_d0);
   output_high(pin_d5);}
  
case(3):

if((input(pin_a1)==1)&&(input(pin_a2)==0)){
   output_low(pin_d0);
   delay_ms(500);
   output_high(pin_d4);
   cont++;
   delay_ms(5);}
  
else if((input(pin_a1)==0)&&(input(pin_a2)==1)){
   output_high(pin_d0);
   output_low(pin_d5);
   delay_ms(500);
   output_low(pin_d3);
   cont--;
   delay_ms(5);}

else{
   output_high(pin_d0);
   output_high(pin_d5);}

case(4):
  
if((input(pin_a1)==0)&&(input(pin_a2)==1)){
   output_high(pin_d0);
   output_low(pin_d5);
   delay_ms(500);
   output_low(pin_d4);
   cont--;
   delay_ms(5);}

else{
   output_high(pin_d0);
   output_high(pin_d5);}


}



}}

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: problema con una variable en un swicth
« Respuesta #1 en: 18 de Enero de 2011, 21:18:22 »
variable valor? no tienes ninguna variable declarada con el nombre de valor... no sera la variable q? si es asi, has probado a subir el retardo despues de selecionar el canal adc?
una pregunta... no creas un bucle infinito en el programa?lo haces con el for?

if((input(pin_a1)==1)&&(input(pin_a2)==0)) mejor ponlo asi....
if(input(pin_a1)&& !input(pin_a2)) mas abreviado
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado iamdari

  • PIC10
  • *
  • Mensajes: 14
Re: problema con una variable en un swicth
« Respuesta #2 en: 19 de Enero de 2011, 05:03:19 »
Perdon quería decir la variable "cont" solo fijaos en el swicht y en la variable cont, las salidas que se activan no lo tengais en cuenta.

el problema que tengo es que si meto un impulso para cambiar la variable valor de uno en uno me va bien, pero si dejo pulsao el interruptor para que me lo haga todo seguido, cuando esta en el estado 1 o en el 2 (switch(1) o switch(2)) se me va al estado -1 o -3, y lo raro es que no me pasa lo mismo al incrementar, que me funciona correctamente, del valor 4 no pasa que es lo que quiero yo, que se me quede entre 0 y 4.

Por favor echadme una mano, porque la verdad es que no entiendo lo que pasa.

Un saludoo!!

Desconectado iamdari

  • PIC10
  • *
  • Mensajes: 14
Re: problema con una variable en un swicth, por favor ayudadme!!
« Respuesta #3 en: 19 de Enero de 2011, 07:12:25 »
Os dejo aqui el circuito, es una simulación de una persiana con diodos led y un motor con un driver cuyas entradas son activas a nivel bajo.

Un saludo!

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: problema con una variable en un swicth
« Respuesta #4 en: 19 de Enero de 2011, 19:51:53 »
te faltan los break al final de cada opcion del switch.... si no lo haces pasara al siguente, y te restara , asi sucesivamente
despues te recomendaria que comprobaras las entradas de los pulsadores o interruptores y que hicieras la funcion de suma resta de la variable cont, asi como  apagado y encendido de las salidas
otra cosa que te diria es que crees una variable de tipo global, y utiliza el while(){} por lo menos a mi me da menos quebraderos de cabeza...
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...