Autor Tema: cambiar delay_ms(1000) por medio de pulsadores o alguna variable  (Leído 7779 veces)

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

Desconectado underwol2

  • PIC12
  • **
  • Mensajes: 53
mi pregunta consiste en lo siguiente quiero cambiar la velocidad de un delay _ms(10); por medio de pulsadores ya estando montado en una placa  sin tener que grabarlo de nuevo.
el código puede ser cualquiera  en pic c todo es para hacer practica el objetivo de este tema es poder graduar a traves de pulsadores  le velocidad por ejemplo en un led se enciende y se apaga sin tener que volver a programar el pic de nuevo
una pista mas es parecido como un temporizador al cual le podemos cambiar el tiempo por medio de pulsadores

el siguiente es un código pequeño solo de idea

#INCLUDE <16F873A.H>
#FUSES XT,NOWDT,NOPROTECT,NOPUT,NOLVP
#USE DELAY(CLOCK=4m)

main()
{
int o;
for(o=0;o<256;o++)
{
delay_ms(500);
output_c(o);

}
}

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: cambiar delay_ms(1000) por medio de pulsadores o alguna variable
« Respuesta #1 en: 12 de Abril de 2010, 23:15:01 »
Hola underwol2, en la ayuda de CCS aparece la funcion delay_ms la cual se puede usar con numeros fijos ejemplo tus 500, o una variable que puede ser int8 o int16 por ejemplo:

int16 pausa = 0;

do{
output_high(pin_B0);
delay_ms(pausa);
output_low(pin_B0);
delay_ms(pausa);
pausa += 10;
}while (true);

La variable la puedes modificar de varias maneras, pulsadores, rs232, leer posiiones de memoria, etc.
Usa esa porcion de codigo, montala y veras el efecto que se crea
Espero te sirva.

saludos.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado underwol2

  • PIC12
  • **
  • Mensajes: 53
Re: cambiar delay_ms(1000) por medio de pulsadores o alguna variable
« Respuesta #2 en: 13 de Abril de 2010, 00:16:48 »
hola KALLITOS gracias por la respuesta podría pedirte un favor aun soy bastante novato en el tema de los pic me podrías  el código con la parte donde se puede cambiar la variable pausa atrabes de los pulsadores no lo ago por pereza es falta de conocimiento sobre el tema por eso pido ayuda en el tema  te agradezco que me pudieras completar el código listo para simular en proteos y grabarlo para mi placa de desarrollo que ensamble

Desconectado MarkKnopfler81

  • PIC12
  • **
  • Mensajes: 64
    • PICs, Electrónica y Robótica
Re: cambiar delay_ms(1000) por medio de pulsadores o alguna variable
« Respuesta #3 en: 13 de Abril de 2010, 07:11:50 »
Sería mas o menos así

Código: [Seleccionar]
if(input(Pin_A0)) {
  delay_ms(100);
  if(input(Pin_A0)) Pausa++;
}

if(input(Pin_A1)) {
  delay_ms(100);
  if(input(Pin_A1)) Pausa--;
}

De esa forma aumentaría o disminuiría la variable Pausa en 10 cada segundo que se mantuviera pulsado RA0 o RA1 respectivamente.

Si quieres ponerle limites (inferior y/o superior) sería así:

Código: [Seleccionar]
if (Pausa>200)Pausa=200;
if (pausa>250)Pausa=0;          //para un unsigned int8 cuando vale 0 y se le resta 1 pasa a 255.

Conectas un extremo de una resistencia de 10K a RA0 y el otro extremo a GND.
Conectas un extremo de un pulsador a RA0 y el otro a VCC.
Lo mismo haces con RA1, eso es una resistencia Pull-down para que cuando no esté activado el pulsador, RAn valga 0.

saludos.

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: cambiar delay_ms(1000) por medio de pulsadores o alguna variable
« Respuesta #4 en: 13 de Abril de 2010, 08:15:33 »
Hola underwol2, en la ayuda de CCS aparece la funcion delay_ms la cual se puede usar con numeros fijos ejemplo tus 500, o una variable que puede ser int8 o int16 por ejemplo:

int16 pausa = 0;

do{
output_high(pin_B0);
delay_ms(pausa);
output_low(pin_B0);
delay_ms(pausa);
pausa += 10;
}while (true);

La variable la puedes modificar de varias maneras, pulsadores, rs232, leer posiiones de memoria, etc.
Usa esa porcion de codigo, montala y veras el efecto que se crea
Espero te sirva.

saludos.
Hola Kallito!
yo he estado experimentando con pulsadores para controlar salidas de 0Voltio a 5voltio, osea dimmer, con 2 pines, uno para incrementar y el otro decrementar, pero tengo entendido que se debe usar el timer de pic? o se puede hacer sin el timer solo usando Delay? otras cosas como seria entonce el Debounce, al pulsar la tecla, queria saber si se podia usar 8 teclas de incremento,8 teclas decremento y asi controlar 8 salidas independiente, osea 2 teclas por cada salida. me podria poner un ejemplo con dos tecla y una salida? para si orientarme?
gracias por tu amabilidad  :P
Saludos

Desconectado underwol2

  • PIC12
  • **
  • Mensajes: 53
Re: cambiar delay_ms(1000) por medio de pulsadores o alguna variable
« Respuesta #5 en: 13 de Abril de 2010, 10:00:56 »
gracias por las respuestas comensare  apracticar con los ejemplos que medieron :-/

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: cambiar delay_ms(1000) por medio de pulsadores o alguna variable
« Respuesta #6 en: 13 de Abril de 2010, 13:42:30 »
STK creo q esta es la idea de lo que buscas, que tal seguimos ahi para plantear la posibilidad de hacer un dimmer con mas cargas y 1 pic?
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: cambiar delay_ms(1000) por medio de pulsadores o alguna variable
« Respuesta #7 en: 13 de Abril de 2010, 15:14:51 »
STK creo q esta es la idea de lo que buscas, que tal seguimos ahi para plantear la posibilidad de hacer un dimmer con mas cargas y 1 pic?
Gracias Jhozate!
mas o menos es, pero no quiero usar Triac, es que tengo ya un circuito que se controla con colector abierto 5 voltio TTl, este circuito es de 64 canales y quiero solo usar minimos 16 de ellos, aunque tenga que hacer con 2 pic, interesante seria Infrarrojo, que tambien me lo estoy estudiando.
ya posteare mis avance y asi me ayuda  :mrgreen:
Gracias

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: cambiar delay_ms(1000) por medio de pulsadores o alguna variable
« Respuesta #8 en: 13 de Abril de 2010, 20:51:44 »
Hola stk500, un honor ayudarle.

Bueno el codigo que posteo a continuación, esta utilizando el tiempo de 20ms generado por la interrpcion del timer 1 mas los flags como antirebotes.

Código: C
  1. #include <16f873.h>
  2. #fuses XT
  3. #use delay(clock=4000000)
  4. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
  5.  
  6. #use fast_io(A)
  7. #use fast_io(B)
  8.  
  9. #byte porta = 5
  10. #byte portb = 6
  11. #byte portc = 7
  12.  
  13. int1 flag_timer1 = 0;
  14. int1 tecla_1 = 0;
  15. int1 tecla_2 = 0;
  16. int1 tecla_3 = 0;
  17. int1 tecla_4 = 0;
  18.  
  19. int   cifra_1 = 0;
  20. int   cifra_2 = 0;
  21.  
  22.  
  23.  
  24. #int_timer1
  25. void timer_o(void)
  26. {
  27. set_timer1(55536);      ///tiempo de 10ms
  28. flag_timer1 = 1;
  29. }
  30.  
  31. void main(){
  32.  
  33. set_tris_a (255);
  34. set_tris_b (0);
  35.  
  36. setup_timer_1 (T1_INTERNAL|T1_DIV_BY_1);
  37. enable_interrupts(INT_TIMER1);
  38. enable_interrupts(GLOBAL);
  39.  
  40. printf("cifra_1 = %u\r\n",cifra_1);
  41. printf("cifra_2 = %u\r\n",cifra_2);
  42.  
  43. do
  44. {
  45.  
  46.    if(flag_timer1)        
  47.       {
  48.       flag_timer1 = 0;
  49.  
  50.       if(!input(pin_A0))
  51.          {
  52.          if(!tecla_1)
  53.             {
  54.             tecla_1 = 1;
  55.             cifra_1++;
  56.             printf("cifra_1 = %u\r\n",cifra_1);    
  57.             }
  58.          }
  59.       else
  60.          {
  61.          tecla_1 = 0;
  62.          }
  63.  
  64.       if(!input(pin_A1))
  65.          {
  66.          if(!tecla_2)
  67.             {
  68.             tecla_2 = 1;
  69.             cifra_1--;
  70.             printf("cifra_1 = %u\r\n",cifra_1);
  71.             }
  72.          }
  73.       else
  74.          {
  75.          tecla_2 = 0;
  76.          }
  77.  
  78.       if(!input(pin_A2))
  79.          {
  80.          if(!tecla_3)
  81.             {
  82.             tecla_3 = 1;
  83.             cifra_2++;
  84.             printf("cifra_2 = %u\r\n",cifra_2);
  85.             }
  86.          }
  87.       else
  88.          {
  89.          tecla_3 = 0;
  90.          }
  91.  
  92.       if(!input(pin_A3))
  93.          {
  94.          if(!tecla_4)
  95.             {
  96.             tecla_4 = 1;
  97.             cifra_2--;
  98.             printf("cifra_2 = %u\r\n",cifra_2);
  99.             }
  100.          }
  101.       else
  102.          {
  103.          tecla_4 = 0;
  104.          }
  105.  
  106.       }
  107. }while(true);
  108. }

Y el diagrama de trabajo es el siguiente:





Para variar las cifras que desee es solo cuestion de aumentar teclas a los pines de entrada y variables.
Disculparan que no comento el codigo, pero estoy de salida con la familia, pero creo esta entendible  :lol:.
Saludos


A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: cambiar delay_ms(1000) por medio de pulsadores o alguna variable
« Respuesta #9 en: 13 de Abril de 2010, 21:23:22 »
Muchas gracias Kallitos, mañana voy a practicar con el y te comento, que ya me voy a domir.
Que lo pase bien con la familia  :P
Saludos


 

anything