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

0 Usuarios y 2 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 #75 en: 10 de Abril de 2016, 04:26:29 »
Bueno continuamos primero explico la lógica que quiero que haga esta alarma lo he pensado que sea de 3 etapas la forma de persuadir al rata al activar (S_MOV_P AD) alarma es luminosa que es hasta donde esta ahorita pero si continua dentro del patio y se para cerca de (S_MOV_PUD) que lo trate de persuadir ahora con la SIRENA  y la última etapa es si la LUZ  y la SINERA  no es suficiente y abre la puerta que es (S_MAG_PUD) pues que realice la llama como ves me paso verdad jejejej lo complico mucho
1.Si (S_MOV_PAD) =1 encender (LUZ_PAD) parpadean hasta que (LED_ON_OF)=0 esto está hecho
2.Si (S_MOV_PAD)=1 + (S_MOV_PUD)=1 dar salida a 1 (LUZ_PAD) pero parpadeando mas (SIRENA)=1
3.Si (S_MOV_PAD)=1 + (S_MOV_PUD)=1+(S_MAG_PUD)=1 dar salida (LUZ_PAD) pero parpadeando+(SIRENA)+(LLAMAR) y luego colgar

Para la segunda opción  sería así verdad

 if((input(S_MOV_PAD)==1) && (input(S_MOV_PUD)==1))
output_high (SIRENA);

output_high (LUZ_PAD);//se que estos mal por que ya lo hase aora ya parpadea y a esto le falta un delay para que parpadee jejeje

Bueno la duda es como tener una segunda opción de condición en mi mente lo veo que tiene que ser independiente??????
cuál sería la variable que checaría su estado (SalidaActiva) o (S_MOV_PAD) para sumarle una segunda condición


Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #76 en: 10 de Abril de 2016, 04:32:32 »
fijate que encontre esto la verdad que es muy tarde son las 2:30am pero sirve de aporte al fora la encontre como libreia de control de pines la verdad no la revise toda ni la analise por que ya tengo sueño pero la ponder aqui


Módulo IO y manipulación de pines

Muestra las funciones para poder trabajar con los pines del PIC.

   #include <pinio.h>
      

output_high_slow

Establece un PIN a un estado alto de voltaje. Verifica el estado del tris.

   void output_high_slow(   BYTE puerto,
            BYTE pin);
   ejemplo:
   output_high_slow(PIN_B0);

      

output_high_fast

Establece un PIN a un estado alto de voltaje. No verifica el estado del tris.

   void output_high_fast(   BYTE puerto,
            BYTE pin);
   ejemplo:
   output_high_fast(PIN_B0);

      

output_high

Establece un PIN a un estado alto de voltaje. La verificación del estado del tris depende de habilitar el macro SLOW_IO como TRUE o FALSE.

Por defecto, si no se escribe #define SLOW_IO TRUE , SLOW_IO tiene el valor de TRUE.

   #define SLOW_IO TRUE

   void output_high(   BYTE puerto,
            BYTE pin);
   ejemplo:
   output_high(PIN_B0);

      

output_low_slow

Establece un PIN a un estado bajo de voltaje. Verifica el estado del tris.

   void output_low_slow(   BYTE puerto,
            BYTE pin);
   ejemplo:
   output_low_slow(PIN_B0);

      

output_low_fast

Establece un PIN a un estado bajo de voltaje. No verifica el estado del tris.

   void output_low_fast(   BYTE puerto,
            BYTE pin);
   ejemplo:
   output_low_fast(PIN_B0);

      

output_low

Establece un PIN a un estado bajo de voltaje. La verificación del estado del tris depende de habilitar el macro SLOW_IO como TRUE o FALSE.

Por defecto, si no se escribe #define SLOW_IO TRUE , SLOW_IO tiene el valor de TRUE.

   #define SLOW_IO TRUE

   void output_low(   BYTE puerto,
            BYTE pin);
   ejemplo:
   output_low(PIN_B0);

      

input_slow

Devuelve el estado de un pin. puede ser 1 o 0. Verifica el estado del tris.

   BYTE input_slow(   BYTE puerto,
            BYTE pin);
   ejemplo:
   input_slow(PIN_B1);

      

input_fast

Devuelve el estado de un pin. puede ser 1 o 0. No verifica el estado del tris.

   BYTE input_fast(   BYTE puerto,
            BYTE pin);
   ejemplo:
   input_fast(PIN_B1);

      

input

Devuelve el estado de un pin. puede ser 1 o 0. La verificación del estado del tris depende de habilitar el macro SLOW_IO como TRUE o FALSE.

Por defecto, si no se escribe #define SLOW_IO TRUE , SLOW_IO tiene el valor de TRUE.

   #define SLOW_IO TRUE

   BYTE input(   BYTE puerto,
         BYTE pin);
   ejemplo:
   input(PIN_B1);

      

set_pin_to_slow

Establece el estado de un pin a 1 o 0. Verifica el estado del tris.

   void set_pin_to_slow(   BYTE puerto,
            BYTE pin,
            BYTE X);

   ejemplo:
   set_pin_to_slow(PIN_C1,1);//el pin C1 ahora tiene un estado alto
   set_pin_to_slow(PIN_C1,0);//el pin C1 ahora tiene un estado bajo
      

set_pin_to_fast

Establece el estado de un pin a 1 o 0. No verifica el estado del tris.

   void set_pin_to_fast(   BYTE puerto,
            BYTE pin,
            BYTE X);

   ejemplo:
   set_pin_to_fast(PIN_C1,1);//el pin C1 ahora tiene un estado alto
   set_pin_to_fast(PIN_C1,0);//el pin C1 ahora tiene un estado bajo
      

set_pin_to

Establece el estado de un pin a 1 o 0.

La verificación del estado del tris depende de habilitar el macro SLOW_IO como TRUE o FALSE.

Por defecto, si no se escribe #define SLOW_IO TRUE , SLOW_IO tiene el valor de TRUE.

   #define SLOW_IO TRUE

   void set_pin_to(   BYTE puerto,
            BYTE pin,
            BYTE X);

   ejemplo:
   set_pin_to(PIN_C1,1);//el pin C1 ahora tiene un estado alto
   set_pin_to(PIN_C1,0);//el pin C1 ahora tiene un estado bajo
      

set_pin_tris_to

Establece el TRIS de un pin a 1 o 0.

   void set_pin_tris_to(   BYTE puerto,
            BYTE pin,
            BYTE X);

   ejemplo:
   set_pin_tris_to(PIN_C1,1);//el TRIS C1 ahora tiene un estado alto
   set_pin_tris_to(PIN_C1,0);//el TRIS C1 ahora tiene un estado bajo
      

set_porta_as_digital

Establece el puerto A como DIGITAL.

   #define set_porta_as_digital() ADCON1=0x06

   ejemplo:
   set_porta_as_digital();
      

set_pullup_portb

Habilita o deshabilita las resistencias de pull-up del puerto B.

Para habilitar las resistencias de pull-up X= 1 o TRUE.

Para deshabilitar las resistencias de pull-up X= 0 o FALSE.

   void set_pullup_portb(BYTE X);
      

Ejemplo de PinIO

Para compilar necesitas los siguientes comandos.

Ejemplo de compilacion : ./compila.sh ej_pinio 16f877a
      

ej_pinio.c

#include <pic/p16f877a.h>

#define FOSC_HZ 20000000

#include <pinio.h>
#include <delayms.h>

int main (void)
{
   delayms(100);

   while(TRUE)
   {
      delayms(50);
      output_high(PIN_C2);
      delayms(50);
      output_low(PIN_C2);

      if(input(PIN_A4)==1) output_high(PIN_B7);
      else                 output_low (PIN_B7);
   }
   return 0;
}
      

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #77 en: 10 de Abril de 2016, 05:52:57 »
Respecto a la libreria pinio.h pienso que es agregar mas problema a lo que ya existe, con las funciones que trae de base CCS se puede hacer tranquilamente. Y lo unico que tenes que optar es por poner FAST_IO o no al comienzo.

Respecto al programa entiendo lo que queres hacer. Pone el programa como lo tenes realizado y de ahi vemos.

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #78 en: 10 de Abril de 2016, 12:40:49 »
asta aqui va 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_B5    //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.     int cont = 0;
  24.     volatile int1 SalidaActiva = 0;
  25.  
  26.     #int_timer1
  27.     void time_1(void)
  28.     {
  29.             set_timer1(3036);
  30.             if(SalidaActiva==1)
  31.             {
  32.                     cont++;
  33.                     if(cont==8)
  34.                     {
  35.                             output_toggle(LUZ_PAD);
  36.                             cont=0;
  37.                     }
  38.             }
  39.             else
  40.             {
  41.                     output_low(LUZ_PAD);
  42.             }
  43.     }
  44.  
  45.     void main(void)
  46.     {
  47.  
  48.             // Aca el setup de pines/modulos/etc
  49.  
  50.             set_tris_B(0b11111111);         //asigno todo el puerto B como entradas y lo puse en binario para que lo tenga presente
  51.             set_tris_D(0b00000000);         // asigno todo el puerto D como salidas
  52.             output_D(0b00000000);
  53.  
  54.  
  55.             setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
  56.             set_timer1 (3036);
  57.             enable_interrupts(int_timer1);
  58.             enable_interrupts(global);
  59.  
  60.             // Comienzo del programa principal
  61.  
  62.             while(true)
  63.             {
  64.                     if(input(E_ON_OF)==1)                   // Pregunto si la entrada del pin B0 es igual a 0
  65.                     {
  66.                             delay_ms(10);                   // Espero 10ms por si la llave esta rebotando (variando entre 1 y 0 )
  67.                             while(input(E_ON_OF)==1);       // Espero que suelte el boton, observa el ; al final, es decir un while(){}
  68.                             output_toggle(LED_ON_OF);       // Cambio el valor del pin
  69.  
  70.                     }
  71.  
  72.                     if(input(LED_ON_OF)==1)                  //pregunto si (LED_ON_OF)==1 si es verdad pasa a la siguiente linea
  73.                     {
  74.                             if((input(S_MOV_PAD)==1) || (input(S_MOV_PUD)==1)) //pregunto si el valor del pin (S_MOV_PAD)==1) o (S_MOV_PUD)==1
  75.                             {
  76.                                     SalidaActiva=1;
  77.                             }
  78.                     }
  79.                     else
  80.                     {
  81.                             SalidaActiva=0;
  82.                     }
  83.             }
  84.     }

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #79 en: 10 de Abril de 2016, 14:04:06 »
Para la segunda opción  sería así verdad

Código: C
  1. if((input(S_MOV_PAD)==1) && (input(S_MOV_PUD)==1))
  2. output_high (SIRENA);

Código: C
  1. output_high (LUZ_PAD);//se que estos mal por que ya lo hase aora ya parpadea y a esto le falta un delay para que parpadee jejeje

Bueno la duda es como tener una segunda opción de condición en mi mente lo veo que tiene que ser independiente??????
cuál sería la variable que checaría su estado (SalidaActiva) o (S_MOV_PAD) para sumarle una segunda condición

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #80 en: 10 de Abril de 2016, 14:18:10 »
1.Si (S_MOV_PAD) =1 encender (LUZ_PAD) parpadean hasta que (LED_ON_OF)=0 esto está hecho
2.Si (S_MOV_PAD)=1 + (S_MOV_PUD)=1 dar salida a 1 (LUZ_PAD) pero parpadeando mas (SIRENA)=1
3.Si (S_MOV_PAD)=1 + (S_MOV_PUD)=1+(S_MAG_PUD)=1 dar salida (LUZ_PAD) pero parpadeando+(SIRENA)+(LLAMAR) y luego colgar

Vamos por parte... La primera esta realizada.
La 2da mi pregunta es... necesitas que la sirena se active y desactive cada cierto tiempo (Algo asi como la luz) o simplemente necesitas que este en 1 siempre hasta que obviamente se desactive la alarma.

La 3era la pregunta es la misma. Sirena + LLamar y luego colgar, deben respetar algun tiempo ? Por ejemplo llamar debe estar activo por 10segundos y luego colgar activo 2 segundos mas.

Defini exactamente como es que queres que funcione, con tiempos, que ocurriria si por ejemplo se desactiva una de las entradas, esto para cada caso, pensa en todos los posibles opciones que puede ocurrir. Luego vemos si es necesario agregar otras cosas al timer, Ya que siguiendo tu logica con 3 ifs bastaria, en ves de lo ya realizado.
Imaginate que pasaria si el primer sensor ( S_MOV_PAD ) no detecta nada y los demas si ?

Código: C
  1. if(S_MOV_PAD==1)
  2. {
  3.  
  4.         //Caso de S_MOV_PAD solo
  5.  
  6.         if(S_MOV_PUD==1)
  7.         {
  8.  
  9.                 //Caso de S_MOV_PAD + S_MOV_PUD
  10.  
  11.                 if(S_MAG_PUD==1)
  12.                 {
  13.  
  14.                         //Caso de S_MOV_PAD + S_MOV_PUD + S_MAG_PUD
  15.  
  16.                 }
  17.         }
  18. }

Aunque falta que nombres todas las condiciones posibles.

EDIT: Me olvide decirte el codigo es de referencia. No va a funcionar un copy & paste.

Citar
Bueno la duda es como tener una segunda opción de condición en mi mente lo veo que tiene que ser independiente??????
cuál sería la variable que checaría su estado (SalidaActiva) o (S_MOV_PAD) para sumarle una segunda condición

No entendi que querias hacer, si lo podes explicar con simples palabras como es que queres que funcione seria mas facil.
« Última modificación: 10 de Abril de 2016, 20:27:56 por KILLERJC »

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #81 en: 10 de Abril de 2016, 22:12:07 »
Bueno continuamos primero explico la lógica que quiero que haga esta alarma lo he pensado que sea de 3 etapas la forma de persuadir al rata al activar (S_MOV_P AD) alarma es luminosa esta puede estar parpadeando asta que se apague la alarma eso no hace ruido que es hasta donde esta
ahorita pero si continua dentro del patio y se para cerca de (S_MOV_PUD) que lo trate de persuadir con LUZ y SIRENA y la última etapa es si la LUZ  y la SINERA  no es suficiente y abre la puerta que es (S_MAG_PUD)=1 pues que realice la llama como ves me paso verdad jejejej lo complico mucho

1.Si (S_MOV_PAD) =1 encender (LUZ_PAD) parpadean hasta que (LED_ON_OF)=0  o hasta un reseteado total de 30 minutos que se pondrá todo de nuevo en estado de alerta.

2.Si (S_MOV_PAD)=1 + (S_MOV_PUD)=1 dar salida a 1 (LUZ_PAD) pero parpadeando mas (SIRENA)=1 hasta que           (LED_ON_OF)=0  o hasta un reseteado total de 30 minutos que se pondrá todo de nuevo en estado de alerta.

3.Si (S_MOV_PAD)=1 + (S_MOV_PUD)=1+(S_MAG_PUD)=1 dar salida (LUZ_PAD) pero parpadeando+(SIRENA)+(LLAMAR) y luego (COLGAR)

Condición de llamar y colgar  if (((S_MOV_PAD)=1) && ((S_MOV_PUD)=1)&&((S_MAG_PUD)=1)) //espero que este bien ya ya aquí practico lo que me enseñaste de los paréntesis de hay dar salida en (LUZ_PAD) parpadeante y (SIRENA)=1 y (LLAMAR)=1 por un tiempo de 30 ms de hay (LLAMAR)=0 esperar 5 segundos y dar salida en (COLGAR)=1 por 30 ms de hay esperar 5 segundos e iniciar nuevamente esto por 4 veces para que llame 4 veces solo llamara 4 veces o antes si  (LED_ON_OF)=0  claro estará (LUZ_PAD) y sirena activas por 30 minuto hasta que se resetee todo y se coloque en esto de alerta otra ves
Nota como ves todas las condiciones estarán sujetas a apagarse si (LED_ON_OF)=0 y tendrá un reset general a los 30 minutos y se pondrá en estado de alerta otra ves

Veo con todo esto 2 condiciones que no se tome encuenta creo que hay que colocarse si por algún motivo (S_MOV_PAD) no detectara el intruso y llegara a la puerta donde tengo(S_MOV_PUD) no haría nada la alarma aunque este último lo detecte por como está condicionado a que tiene que estar en 1 el (S_MOV_PAD)=1 no hará nada por esta razón debe de tener 2 condiciones mas 1 en donde  si se activa solo (S_MOV_PUD) y la otra si (S_MAG_PUD)=1

4.-(S_MOV_PUD)=1  dar salida en (LUZ_PAD)=1 parpadeante y (SIRENA)=1 esto por 30 min o antes si (LED_ON_OF)=0  esto estará (LUZ_PAD) y sirena activas por 30 minuto hasta que se resetee todo y se coloque en esto de alerta otra vez

5.- .-(S_MAG_PUD)=1  dar salida en (LUZ_PAD) parpadeante y (SIRENA)=1 y [ (LLAMAR)=1 por un tiempo de 30 ms de hay (LLAMAR)=0 esperar 5 segundos y dar salida en (COLGAR)=1 por 30 ms de hay esperar 5 segundos e iniciar nuevamente esto por 4 veces para que llame 4 veces loso llamara 4 veces o antes si  (LED_ON_OF)=0  claro estará (LUZ_PAD)y sirena activas por 30 minuto hasta que se resetee todo y se coloque en esto de alerta otra ves] es la misma salida que la 3

Todo esto es para hacerlo lo ,as apegado a la realidad espero me haya explicado creo que con esto sería una alarma real 
Dejo un enlace para que veas lo del celular

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #82 en: 10 de Abril de 2016, 23:43:47 »
nohtml5=False

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #83 en: 11 de Abril de 2016, 04:52:54 »
Entiendo lo que queres hacer pero...

Citar
Todo esto es para hacerlo lo mas apegado a la realidad espero me haya explicado creo que con esto sería una alarma real 

Pero ahi te estas equivocando, lo mas cercano a la realidad es que si se detecta algo Si o Si se dispare la alarma que no depende de la luz por si es que debe disparar la alarma. Una ves disparada la alarma se procede a llamar, los sensores de movimiento que pueden disparar la alarma van dentro de la casa asi como los magneticos, si tenes uno afuera tal ves sea para la luz nomas, pero este no deberia influir en nada al funcionamiento de la alarma. Estas intentando crear algo complicado cuando es tan simple.

Entonces tenes que distinguir:

Sensores para la alarma y sensores para las luces.
Para la alarma van a ser sensores magneticos en puertas y ventanas + sensores de movimiento en todas las habitaciones.

Para las luces, van a ser sensores de movimiento solo para esas luces.

Otra de las cosas, encender y apagar la luz acortaria la vida de la luz rapidamente, especialmente ahora que casi todo posee lamparas bajo consumo fluorescentes ( LFC ), y hacer lo que pensas lo destruiria, mejor que este activo un tiempo y luego se corte, como toda luz exterior.

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #84 en: 11 de Abril de 2016, 14:37:49 »
Si es correcto lo que dices lo que pasa es que yo quería evitar una forma de persuadir a un intruso antes que cause un daño en la propiedad por eso los sensores afuera y en la puerta es que aquí los ratas le dan duro a las puertas o sea de golpes y a mi parecer asta podrian romperían los sensores magnéticos puesto en puertas o ventanas ok entera lo voy a analizar dame chance  saludos

tu me dises algo como esto pero mejorado jejejeje verdad 


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #85 en: 11 de Abril de 2016, 20:24:11 »
Si es correcto lo que dices lo que pasa es que yo quería evitar una forma de persuadir a un intruso antes que cause un daño en la propiedad por eso los sensores afuera y en la puerta es que aquí los ratas le dan duro a las puertas o sea de golpes y a mi parecer asta podrian romperían los sensores magnéticos puesto en puertas o ventanas ok entera lo voy a analizar dame chance  saludos

Ese video es un insulto a una alarma. Pero si. mejorado.

Con respecto a la forma de persuadir al intruso ...

- No podes guiarte por sensores de movimiento en el patio, ya que puede moverse cualquier cosa y tal ves disparar la alarma. Pero una luz no lastima a nadie.
- Si te rompen el sensor magnetico el cual primero deberian abrir si o si la puerta para hacerlo ya que suelen estar agregados al marco. Se dispararia antes la alarma.
- Si rompen la ventana pero no la abren, se usa el sensor de movimiento de adentro de la habitacion.

El tema es que vos estas pensando poner sensores de movimiento en espacios abiertos. Y no solo 1 , sino 2 o mas, y nada dentro de la casa.

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #86 en: 13 de Abril de 2016, 00:13:15 »
OK si e sierto ninguno jejeje parese que doy por hecho que no fallaran los de afuera verdad jejeje por lo menos dos dentro deverian de estar

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #87 en: 14 de Abril de 2016, 12:40:20 »
Continuamos con el programa killer jc ojala que pronto ya pueda pasar a la etapa de pruebas físicas  :mrgreen: veo que voy a tardar en terminar jejeje y segun yo que queria practicar con una criansa para pesese o para pollos cuando terminara jejejeje seguire practicando voy a buscar como se puede ver un progrma paso a paso en ccs para ver donde se queda el progrma exactamente y atacar esa parte saludos
« Última modificación: 14 de Abril de 2016, 12:45:40 por nuevo mundo »

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #88 en: 17 de Abril de 2016, 01:14:34 »
no alcanso a leer esto
Código: C
  1. if((input_b() & 0b01111000) != 0)
si la entrada del puesto b pero tengo duda por el paréntesis vacío y luego dice y las terminales del puerto b que estén en entradas y salidas luego un signo que significa complemento es igual a cero no lo comprendo

Código: C
  1. unsigned int8   ContadorLuz = 0;         //asigno una variable de tipo entero de 8 bay con el nombre de ContadorLuz y la inicializo en cero

y todo esto se lee asi como los comentarios que le puse a los comentarios

Código: C
  1. // Contador que maneja el Timer de la luz
  2.  
  3.         if(LuzActiva == 1)                     //si LuzActiva es igual a 1              
  4.         {
  5.                 ContadorLuz++;                      //aumenta variable ContadorLuz en 1
  6.                 if(ContadorLuz == 60)                                   // 30 seg = 60 entradas
  7.                 {
  8.                         output_low(LUZ_PAD);             //dar una salida baja en el pin D0 que esta asignado como LUZ_PAD          
  9.                         ContadorLuz = 0;                 //asigno un cero       ContadorLuz
  10.                         LuzActiva = 0;                   //asigno un cero     LuzActiva
  11.                 }
  12.         }

« Última modificación: 17 de Abril de 2016, 01:52:51 por nuevo mundo »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #89 en: 17 de Abril de 2016, 05:46:45 »
no alcanso a leer esto
Código: C
  1. if((input_b() & 0b01111000) != 0)
si la entrada del puesto b pero tengo duda por el paréntesis vacío y luego dice y las terminales del puerto b que estén en entradas y salidas luego un signo que significa complemento es igual a cero no lo comprendo

input_b() es una funcion, que no necesita ningun argumento, output_low(PIN_xx) es una funcion que necesita un argumento, esta funcion ( input_x() ) devuelve el valor de TODO el puerto y no solo de 1 pin, es decir si es input_c() me va a devolver 8 bits, los cuales cada uno corresponde a PIN_C0 , PIN_C1, etc.. Lo mismo ocurre con input_b() nomas que ahora pido que esa funcion me devuelta 8 bits ( 1 byte )

Respecto a las funciones, Por ejemplo cuando creas una funcion

Código: C
  1. void RevisarDatos(void)
  2. {
  3.        //Aca instrucciones
  4. }

Esta funcion al no recibir ningun argumento ( por eso el void dentro de los parentesis ) ni devolver ningun dato ( por eso el void del comienzo ) se debe llamar asi:

Código: C
  1. RevisarDatos();   //Correcto
  2. RevisarDatos(0x10);   //Incorrecto por que no recibe argumentos
  3. RevisarDatos() & 10;   //Incorrecto por que no devuelve nada
  4. Datos = RevisarDatos();   //Incorrecto por que no devuelve nada

Tambien podes tener alguna que devuelva un dato, y que ademas reciba un dato. Pero ejemplo recibir un numero de 16 bits ( 2 bytes ), y que devuelta solo los 8bit de menor peso ( es decir el byte de la derecha ).

Código: C
  1. int8 DevolverNumero( int16 Numero)
  2. {
  3.       return (int8)Numero;
  4. }

Entonces si tenes:

Código: C
  1. int8 dato;
  2. dato = DevolverNumero(0x1250);

Dato va a tener el valor 0x50.

Lo demas es una AND binaria &, lo cual corresponde que si el bit de la misma posicion es 0, la salida va a ser 0, y si ambos son 1, la salida es 1, esto me permite filtrar algunas entradas. Suponete ahora que por el puerto B tenes algo asi 10101010, y le hago una AND con 01111000, el resultado eso:

10101010
01111000
---------------
00101000

Es decir si te fijas donde estaban los 1 eso quedo como estaba. Y lo demas lo puse en 0 por que no me interesa, supuestamente si no tenes NINGUNA entrada activa todas deberian estar en 0, si es asi el resultado de esa AND va a ser 0, y cuando se compare va a dar falso.

!= no es complemento, es una operacion logica y quiere decir NO ES IGUAL A

SI (  (PuertoB AND 0b01111000) NO ES IGUAL A 0)

O con una mayor traduccion

SI (  (PuertoB pin de 3 a 6 ) NO ES IGUAL A 0)

Código: C
  1. unsigned int8   ContadorLuz = 0;         //asigno una variable de tipo entero de 8 bay con el nombre de ContadorLuz y la inicializo en cero

Eso se entiende como un entero ( int ) de 8 bits (por eso el 8, esto es unico de CCS OJO! ) y sin signo ( unsigned ) llamado ContadorLuz, y que al momento del arranque del micro, debe comenzar con un valor de 0.
« Última modificación: 17 de Abril de 2016, 05:49:41 por KILLERJC »