Autor Tema: OPERACIONES MATEMÁTICAS EN PIC 16F628A  (Leído 1245 veces)

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

Desconectado LuisAlexander

  • PIC10
  • *
  • Mensajes: 10
OPERACIONES MATEMÁTICAS EN PIC 16F628A
« en: 13 de Abril de 2017, 22:39:03 »
Hola Foro, un saludo antes que todo;
les comento que tengo muchos problemas con una simple instrucción que quiero realizar
lo que quiero es tener un delay en ms que cambie cada vez que presiono un botón -
esto con el fin de variar el tiempo de activación de un led

ejemplo ---  P=1000/ p es igual a  1 segundo y quiero que se reste y se sume  100 de acuerdo al boton pero que su tope sea 1000 y su minimo 0
                    if(input(PIN_B0)==1){P} / cuando se presiona el botón quiero que se sume  100 al valor de p si esta en 400 sumara 500
                    if(input(PIN_B2)==1){P}  / cuando se presiona el botón quiero que se reste  100 al valor de p si esta en 1000 restara 900
                    output_high(PIN_B1);delay_ms(10);/ este valor es fijo 10ms
                    output_low(PIN_B1);delay_ms(P);/ quiero que el valor P se modifique de acuerdo a las pulsaciones


Porfavor espero puedan ayudarme Saludos desde Perú
                   

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:OPERACIONES MATEMÁTICAS EN PIC 16F628A
« Respuesta #1 en: 13 de Abril de 2017, 23:16:38 »
Te propongo 2 formas:

- Usando una tabla

Código: C
  1. int16 tabla[11] = {0,100,200,300,400,500,600,700,800,900,1000};
  2. int8 indice = 0
  3.  
  4.  
  5.         if(input(PIN_B0)==1)
  6.         {
  7.                 if(indice<10) { indice++;}
  8.         }
  9.         if(input(PIN_B2)==1)
  10.         {
  11.                 if(indice>0) { indice--;}
  12.         }
  13.         output_high(PIN_B1);
  14.         delay_ms(10);
  15.         output_low(PIN_B1);
  16.         delay_ms(tabla[indice]);

- Usando un for:

Código: C
  1. int8 cantidad = 0
  2.  
  3.         if(input(PIN_B0)==1)
  4.         {
  5.                 if(cantidad<11) {cantidad++;}
  6.         }
  7.         if(input(PIN_B2)==1)
  8.         {
  9.                 if(cantidad!=0) { cantidad--;}
  10.         }
  11.         output_high(PIN_B1);
  12.         delay_ms(10);
  13.         output_low(PIN_B1);
  14.         for(i=0;i!=cantidad;i++)
  15.         {
  16.                 delay_ms(100);
  17.         }

Eso si.. en el ultimo no van a ser 100ms exactos sino que va a haber una pequeña diferencia de unos microsegundos, pero no creo que eso te afecte en nada.

Y vas a tener que agregarle proteccion a los botones para que no los tome 2 veces seguidas.

Desconectado LuisAlexander

  • PIC10
  • *
  • Mensajes: 10
Re:OPERACIONES MATEMÁTICAS EN PIC 16F628A
« Respuesta #2 en: 13 de Abril de 2017, 23:44:01 »
Gracias por el apoyo amigo Un saludo