Autor Tema: lecturas y salidas (digitales y analogicas) en lengua c para pic  (Leído 13058 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #120 en: 05 de Mayo de 2016, 12:36:57 »
creo que no as podido er el progrma

Código: C
  1. #include <16f877A.h>        //el pic a utilizar es por que solo requiero de pocos recursos para la alarma
  2. #use delay(clock=4000000)   //tiempo del cristal 4 MG
  3. #fuses xt                   //utiliza cristal
  4. #fuses NOWDT                //proteccion perro guardian of
  5. #fuses PUT                  //proteccion para esperar que se estabilise la alimentacion del pic
  6. #use FAST_IO(B)             //utilizo el puerto B
  7. #use FAST_IO(D)             //utilizo el puerto D
  8.  
  9. #define E_ON_OF PIN_B0      //se define que E-ON-OF es el PIN_B0    y  (E-ON-OF) significa Entrada Ensendido Apagad)
  10. #define S_MOV_PAD PIN_B1    //se define que S-MOV-PAD es el PIN_B1  y  (S-MOV-PAD) significa sensor de movimiento patio delantero)
  11. #define S_MOV_PAT PIN_B2    //se define que S-MOV-PAT es el PIN_B2  y  (S-MOV-PAT) significa sensor de movimiento patio trasero)
  12. #define S_MOV_PUD PIN_B3    //se define que S-MOV-PUD es el PIN_B3  y  (S-MOV-PUD) significa sensor de movimiento puerta delantera)
  13. #define S_MOV_PUT PIN_B4    //se define que S-MOV-PUT es el PIN_B4  y  (S-MOV-PUT) significa sensor de movimiento puerta trasera)
  14. #define S_MAG_PUD PIN_B5    //se define que S-MAG-PD es el PIN_B5   y  (S-MAG-PD) significa sensor magnetico puerta delantera)
  15. #define S_MAG_PUT PIN_B6    //se define que S-MAG-PT es el PIN_B6   y  (S-MAG-PT) significa sensor magnetico puerta trasera)
  16. #define LUZ_PAD PIN_D0      //se define que LUZ-PAD es el PIN_D0    y  (LUZ-PAD) significa luz patio delantero
  17. #define LUZ_PAT PIN_D1      //se define que LUZ-PAT es el PIN_D1    y  (LUZ-PAD) significa luz patio trasero
  18. #define SIRENA PIN_D2       //se define que SIRENA es el pin_D2     y  (SIRENA) es la bocina la bulla
  19. #define LLAMAR PIN_D3       //se define que LLAMAR es el pin_D3     y  (LLAMAR) es una salida para realisar una llamada a un cel
  20. #define COLGAR PIN_D4       //se define que COLGAN es el pin_D4     y  (COLGAR) es una salida para colgar la llamada
  21. #define LED_ON_OF PIN_D5    //se define que LED-ON-OF PIN_D5        y  (LED-ON-OF)significa led ensendido apagado
  22.  
  23.  
  24. unsigned int8   ContadorLuz = 0;
  25. unsigned int8   ContadorLlamada = 0;
  26. unsigned int16  ContadorParaReset = 0;
  27. volatile int1   LuzActiva = 0;
  28. volatile int1   LLamadaActiva = 0;
  29. volatile int1   SirenaActiva = 0;
  30. volatile int1  ContadorVecesLLamada = 0;
  31.  
  32. #int_timer1
  33. void time_1(void)
  34. {
  35.         set_timer1(3036);
  36.  
  37.  
  38.         // Contador que maneja el Timer de la luz
  39.  
  40.         if(LuzActiva == 1)
  41.         {
  42.                 output_high(LUZ_PAD);
  43.                 ContadorLuz++;
  44.                 if(ContadorLuz == 60)                                   // 30 seg = 60 entradas
  45.                 {
  46.                         output_low(LUZ_PAD);                            // Corregi aca
  47.                         ContadorLuz = 0;
  48.                         LuzActiva = 0;
  49.                 }
  50.         }
  51.         else
  52.         {
  53.                 output_low(LUZ_PAD);
  54.                 ContadorLuz = 0;
  55.         }
  56.  
  57.  
  58.         // Contador que maneja el timer de las llamadas
  59.  
  60.         if(LLamadaActiva == 1)
  61.         {
  62.                 if(ContadorLLamada < 44 )
  63.                 {
  64.                         ContadorLLamada++;
  65.                         if( (ContadorLLamada <= 1) || (ContadorLLamada == 3) || (ContadorLLamada == 23) ||(ContadorLLamada == 43) )                     // Primera entrada presiona LLAMAR por 0.5s
  66.                         {                                                                       // Espera 0.5s y presiona LLAMAR de nuevo por 0.5s
  67.                                 output_high(LLAMAR);
  68.                         }
  69.                           else if ( ContadorLLamada == 23)                                      // Pasan 10 segundos desde que se llamo y se corta  estaba en 43
  70.                         {
  71.                 output_high(COLGAR);
  72.  
  73.             if(ContadorVecesLLamada < 3)
  74.             {
  75.              ContadorLLamada = 0;
  76.             }
  77.              ContadorVecesLLamada++;
  78.          }
  79.                         else                                                                    // En cualqier otro momento de tiempo que esten en 0 las salidas
  80.                         {
  81.                                 output_low(COLGAR);
  82.                                 output_low(LLAMAR);
  83.                         }
  84.           //  ContadorLLamada++;
  85.       }
  86.         }
  87.         else
  88.         {
  89.                 if(ContadorLLamada != 0)
  90.  
  91.       {
  92.                         // Si por alguna casualidad se desactiva la alarma mientras esta llamando esto va a colgar el celular aunque sea 1 ves
  93.                         output_low(LLAMAR);
  94.                         output_high(COLGAR);
  95.                         ContadorLLamada = 0;
  96.          ContadorVecesLLamada = 0;
  97.       }
  98.                 else
  99.                 {
  100.                         // Caso que no se presione nada, entonces me aseguro que ambos esten en 0
  101.                         output_low(LLAMAR);
  102.                         output_low(COLGAR);
  103.                 }
  104.         }
  105.  
  106.  
  107.         // Contador que maneja el timer de la sirena y su reset a los 30minutos
  108.  
  109.         if( SirenaActiva == 1 )
  110.         {
  111.                 output_high(SIRENA);
  112.                 ContadorParaReset++;
  113.                 if ( ContadorParaReset >= 240 )         // 30 Minutos = 1800 segundos = 3600 entradas de 0.5s  OJO OJO cambia  3600  por 240 para 2 min y pueda ver si recetea
  114.                 {
  115.                         output_low(SIRENA);
  116.                         SirenaActiva = 0;
  117.                         LLamadaActiva = 0;
  118.                         ContadorParaReset = 0;
  119.                 }
  120.         }
  121.         else
  122.         {
  123.                 output_low(SIRENA);
  124.                 ContadorParaReset = 0;     // OJO OJO esto lo puse yo segun yo vi que le asia falta
  125.         }
  126. }
  127.  
  128. void main(void)
  129. {
  130.  
  131.         // Aca el setup de pines/modulos/etc
  132.  
  133.         set_tris_B(0b11111111);         //asigno todo el puerto B como entradas y lo puse en binario para que lo tenga presente
  134.         set_tris_D(0b00000000);         // asigno todo el puerto D como salidas
  135.         output_D(0b00000000);
  136.  
  137.  
  138.         setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
  139.         set_timer1 (3036);
  140.         enable_interrupts(int_timer1);
  141.         enable_interrupts(global);
  142.  
  143.         // Comienzo del programa principal
  144.  
  145.         while(true)
  146.         {
  147.                 if(input(E_ON_OF)==1)                   // Pregunto si la entrada del pin B0 es igual a 0
  148.                 {
  149.                         delay_ms(10);                   // Espero 10ms por si la llave esta rebotando (variando entre 1 y 0 )
  150.                         while(input(E_ON_OF)==1);       // Espero que suelte el boton, observa el ; al final, es decir un while(){}
  151.                         output_toggle(LED_ON_OF);       // Cambio el valor del pin
  152.  
  153.                 }
  154.  
  155.                 if(input(LED_ON_OF)==1)
  156.                 {
  157.                         if((input(S_MOV_PAD)==1)||(input(S_MOV_PUD)==1)||(input(S_MAG_PUD)==1))      //OJO OJO lo puse yo estaba asi if((input(S_MOV_PAD)==1))
  158.                         {
  159.                                 LuzActiva = 1;
  160.                                 ContadorLuz = 0;                //Asi no se apaga
  161.                         }
  162.                         if((input_b() & 0b01111110) != 0) // Es decir se activo algun sensor interno, entonces active la sirena y la llamada. OJO OJO tenia 0b01111000)
  163.                         {
  164.  
  165.                                 SirenaActiva = 1;
  166.                                 LLamadaActiva = 1;
  167.             ContadorVecesLLamada =1;
  168.                         }
  169.                 }
  170.                 else
  171.                 {
  172.                         LuzActiva=0;
  173.                         SirenaActiva = 0;
  174.                         LLamadaActiva = 0;
  175.                         ContadorParaReset = 0;
  176.          ContadorVecesLLamada =0;
  177.         }
  178.         }
  179. }

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #121 en: 05 de Mayo de 2016, 12:39:53 »
esto no lo lee no entra a esta parte

Código: C
  1. else if ( ContadorLLamada == 23)  // Pasan 10 segundos desde que se llamo y se corta  estaba en 43
  2.            {
  3.      output_high(COLGAR);
« Última modificación: 05 de Mayo de 2016, 12:42:42 por nuevo mundo »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #122 en: 05 de Mayo de 2016, 17:48:28 »
Acabo de verlo, hiciste una mezcla de las 2 opciones que te di. Luego escribo el programa, edito esta respuesta y lo probas, ahora no poseo tiempo, no hace falta que respondas al mensaje este, yo voy a editarlo y lo vas a tener

Código: C
  1. #include <16f877A.h>        //el pic a utilizar es por que solo requiero de pocos recursos para la alarma
  2. #use delay(clock=4000000)   //tiempo del cristal 4 MG
  3. #fuses xt                   //utiliza cristal
  4. #fuses NOWDT                //proteccion perro guardian of
  5. #fuses PUT                  //proteccion para esperar que se estabilise la alimentacion del pic
  6. #use FAST_IO(B)             //utilizo el puerto B
  7. #use FAST_IO(D)             //utilizo el puerto D
  8.  
  9. #define E_ON_OF PIN_B0      //se define que E-ON-OF es el PIN_B0    y  (E-ON-OF) significa Entrada Ensendido Apagad)
  10. #define S_MOV_PAD PIN_B1    //se define que S-MOV-PAD es el PIN_B1  y  (S-MOV-PAD) significa sensor de movimiento patio delantero)
  11. #define S_MOV_PAT PIN_B2    //se define que S-MOV-PAT es el PIN_B2  y  (S-MOV-PAT) significa sensor de movimiento patio trasero)
  12. #define S_MOV_PUD PIN_B3    //se define que S-MOV-PUD es el PIN_B3  y  (S-MOV-PUD) significa sensor de movimiento puerta delantera)
  13. #define S_MOV_PUT PIN_B4    //se define que S-MOV-PUT es el PIN_B4  y  (S-MOV-PUT) significa sensor de movimiento puerta trasera)
  14. #define S_MAG_PUD PIN_B5    //se define que S-MAG-PD es el PIN_B5   y  (S-MAG-PD) significa sensor magnetico puerta delantera)
  15. #define S_MAG_PUT PIN_B6    //se define que S-MAG-PT es el PIN_B6   y  (S-MAG-PT) significa sensor magnetico puerta trasera)
  16. #define LUZ_PAD PIN_D0      //se define que LUZ-PAD es el PIN_D0    y  (LUZ-PAD) significa luz patio delantero
  17. #define LUZ_PAT PIN_D1      //se define que LUZ-PAT es el PIN_D1    y  (LUZ-PAD) significa luz patio trasero
  18. #define SIRENA PIN_D2       //se define que SIRENA es el pin_D2     y  (SIRENA) es la bocina la bulla
  19. #define LLAMAR PIN_D3       //se define que LLAMAR es el pin_D3     y  (LLAMAR) es una salida para realisar una llamada a un cel
  20. #define COLGAR PIN_D4       //se define que COLGAN es el pin_D4     y  (COLGAR) es una salida para colgar la llamada
  21. #define LED_ON_OF PIN_D5    //se define que LED-ON-OF PIN_D5        y  (LED-ON-OF)significa led ensendido apagado
  22.  
  23.  
  24. unsigned int8   ContadorLuz = 0;
  25. unsigned int8   ContadorLlamada = 0;
  26. unsigned int16  ContadorParaReset = 0;
  27. volatile int8   ContadorVecesLLamada = 0;
  28. volatile int1   LuzActiva = 0;
  29. volatile int1   LLamadaActiva = 0;
  30. volatile int1   SirenaActiva = 0;
  31.  
  32. #int_timer1
  33. void time_1(void)
  34. {
  35.         set_timer1(3036);
  36.  
  37.  
  38.         // Contador que maneja el Timer de la luz
  39.  
  40.         if(LuzActiva == 1)
  41.         {
  42.                 output_high(LUZ_PAD);
  43.                 ContadorLuz++;
  44.                 if(ContadorLuz == 60)                                   // 30 seg = 60 entradas
  45.                 {
  46.                         output_low(LUZ_PAD);                            // Corregi aca
  47.                         ContadorLuz = 0;
  48.                         LuzActiva = 0;
  49.                 }
  50.         }
  51.         else
  52.         {
  53.                 output_low(LUZ_PAD);
  54.                 ContadorLuz = 0;
  55.         }
  56.  
  57.  
  58.         // Contador que maneja el timer de las llamadas
  59.  
  60.         if(LLamadaActiva == 1)
  61.         {
  62.                 if(ContadorLLamada < 44 )
  63.                 {
  64.                         ContadorLLamada++;
  65.                         output_low(COLGAR);
  66.                         output_low(LLAMAR);
  67.                         switch(ContadorLLamada)
  68.                         {
  69.                         case 1:
  70.                         case 3:
  71.                                 output_high(LLAMAR);
  72.                                 break;
  73.                         case 23:
  74.                                 output_high(COLGAR);
  75.                                 break;
  76.                         case 43:
  77.                                 if(ContadorVecesLLamada < 3)
  78.                                 {
  79.                                         ContadorLLamada = 0;
  80.                                 }
  81.                                 break;
  82.                         default:                               
  83.                                 break;
  84.                         }
  85.                 }
  86.         }
  87.         else
  88.         {
  89.                 output_low(LLAMAR);
  90.                 ContadorVecesLLamada = 0;
  91.                 if(ContadorLLamada != 0)
  92.                 {
  93.                         // Si por alguna casualidad se desactiva la alarma mientras esta llamando esto va a colgar el celular aunque sea 1 ves
  94.                         output_high(COLGAR);
  95.                         ContadorLLamada = 0;
  96.                 }
  97.                 else
  98.                 {
  99.                         // Caso que no se presione nada, entonces me aseguro que ambos esten en 0
  100.                         output_low(COLGAR);
  101.                 }
  102.         }
  103.  
  104.  
  105.         // Contador que maneja el timer de la sirena y su reset a los 30minutos
  106.  
  107.         if( SirenaActiva == 1 )
  108.         {
  109.                 output_high(SIRENA);
  110.                 ContadorParaReset++;
  111.                 if ( ContadorParaReset >= 240 )         // 30 Minutos = 1800 segundos = 3600 entradas de 0.5s  OJO OJO cambia  3600  por 240 para 2 min y pueda ver si recetea
  112.                 {
  113.                         output_low(SIRENA);
  114.                         SirenaActiva = 0;
  115.                         LLamadaActiva = 0;
  116.                         ContadorParaReset = 0;
  117.                 }
  118.         }
  119.         else
  120.         {
  121.                 output_low(SIRENA);
  122.                 ContadorParaReset = 0;     // OJO OJO esto lo puse yo segun yo vi que le asia falta
  123.         }
  124. }
  125.  
  126. void main(void)
  127. {
  128.  
  129.         // Aca el setup de pines/modulos/etc
  130.  
  131.         set_tris_B(0b11111111);         //asigno todo el puerto B como entradas y lo puse en binario para que lo tenga presente
  132.         set_tris_D(0b00000000);         // asigno todo el puerto D como salidas
  133.         output_D(0b00000000);
  134.  
  135.  
  136.         setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
  137.         set_timer1 (3036);
  138.         enable_interrupts(int_timer1);
  139.         enable_interrupts(global);
  140.  
  141.         // Comienzo del programa principal
  142.  
  143.         while(true)
  144.         {
  145.                 if(input(E_ON_OF)==1)                   // Pregunto si la entrada del pin B0 es igual a 0
  146.                 {
  147.                         delay_ms(10);                   // Espero 10ms por si la llave esta rebotando (variando entre 1 y 0 )
  148.                         while(input(E_ON_OF)==1);       // Espero que suelte el boton, observa el ; al final, es decir un while(){}
  149.                         output_toggle(LED_ON_OF);       // Cambio el valor del pin
  150.                 }
  151.  
  152.                 if(input(LED_ON_OF)==1)
  153.                 {
  154.                         if((input(S_MOV_PAD)==1)||(input(S_MOV_PUD)==1)||(input(S_MAG_PUD)==1))      //OJO OJO lo puse yo estaba asi if((input(S_MOV_PAD)==1))
  155.                         {
  156.                                 LuzActiva = 1;
  157.                                 ContadorLuz = 0;                //Asi no se apaga
  158.                         }
  159.                         if((input_b() & 0b01111110) != 0) // Es decir se activo algun sensor interno, entonces active la sirena y la llamada. OJO OJO tenia 0b01111000)
  160.                         {
  161.  
  162.                                 SirenaActiva = 1;
  163.                                 LLamadaActiva = 1;
  164.                         }
  165.                 }
  166.                 else
  167.                 {
  168.                         LuzActiva = 0;
  169.                         SirenaActiva = 0;
  170.                         LLamadaActiva = 0;
  171.                         ContadorParaReset = 0;
  172.                         ContadorVecesLLamada = 0;
  173.                 }
  174.         }
  175. }
« Última modificación: 07 de Mayo de 2016, 09:55:40 por KILLERJC »

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #123 en: 08 de Mayo de 2016, 23:53:41 »
ok enterado saludos le hago  la lucha jejeje es mi primer intento de hacer un programa  :mrgreen:

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #124 en: 12 de Mayo de 2016, 19:24:55 »
Hola mi buen killer jc me podrías decir por favor que debo de leer primero para intentar hacer un programa para un control remoto infrarrojo lo requiero para anexárselo a este programa recuerdas que tiene un on/of y me gustaria que fuera mas seguro y que reacciones de acuerdo a la entrada necesito leer para saber cómo empezar saludos gracias abriré un nuevo tema para cuando lea del tema y tengo idea de cómo se hace para leer la entrada de unos pulsos con pic  :mrgreen:

Pos data e investigado algunas tecnologías que me gustaría compartir contigo te las mandare saludos   

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #125 en: 12 de Mayo de 2016, 20:35:22 »
Apartir de aca estas solo, pero yo buscaria algo mas como RF, mas que infrarrojo. Ya que no se si los controles siguen usando los mismos protocolos como NEC y RC-5, Ademas es algo comun a todos los controles asi que seguridad ahi no tendrias para nada.


Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #126 en: 12 de Mayo de 2016, 22:34:14 »
ok enterado gracias por el apoyo ya investigo muy amable  :-/  entonses este tema queda resuelto  ((:-))
« Última modificación: 12 de Mayo de 2016, 22:36:20 por nuevo mundo »