Autor Tema: lecturas y salidas (digitales y analogicas) en lengua c para pic  (Leído 13062 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 #45 en: 03 de Abril de 2016, 04:23:03 »
jejee si verdad

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #46 en: 03 de Abril de 2016, 04:45:27 »
veo que poco a poco me acerco a la máquina de estado  en la cual cada opción hará una parte del programa dependiendo del sensor que se active
ya voy entendiendo para que es  :shock:

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #47 en: 03 de Abril de 2016, 05:10:59 »
Donde lo estas probando ? el codigo parece correcto, lo unico que no veo correctamente son los FUSES

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #48 en: 03 de Abril de 2016, 13:04:57 »
es que no se como subir el archivo aqui ya lo intente dos veses y dise que no lo puedo haser por que no es la extencion te mande un correo te llego

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #49 en: 05 de Abril de 2016, 19:04:52 »
cual fuse ves que no esta bien killerjc

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #50 en: 05 de Abril de 2016, 19:55:16 »
Estoy parado sin ayuda en estos momentos no avanzó mucho pero si estoy en chinga aunque no lo pueda destrabar fíjate que imagine hacer tres programas de control de led cada uno con una acción de la alarma
la #1 seria encender un led que simula  (LUZ-PAD PIN) cuando se acciona  (S-MOV-PAD ) pero que esto lo aga por 20 min
la #2 seria encender dos led que simula LUZ-PAD PIN y SIRENA cuando se accione ( S-MOV-PUD PIN)
la #3 seria cuando se acciona (S_MAG_PUD) lo anterior mas llamar y colgar
Según yo  jejeje luego se podría mandar a llamar como función aunque serian tres mas pero iguales solo se cambiaría todo pero para la parte trasera  la verdad que si quiero terminar esto estoy en la lucha saludos
Esta que estoy trabado seria la #2


Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #51 en: 05 de Abril de 2016, 20:18:21 »
es es el codigo que tengo pero aun no jala no sensa los sensores por que era
#include <16f877A.h>         //el pic a utilizar es por que solo requiero de pocos recursos para la alarma
#use delay(clock=4000000)   //tiempo del cristal 4 MG
#fuses NOWDT                //proteccion perro guardian of
#fuses PUT                  //proteccion para esperar que se estabilise la alimentacion del pic
#use FAST_IO(B)             //utilizo el puerto B
#use FAST_IO(D)             //utilizo el puerto D

#define E_ON_OF PIN_B0      //se define que E-ON-OF es el PIN_B0    y  (E-ON-OF) significa Entrada Ensendido Apagad)
#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)
#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)
#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)
#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)
#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)
#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)
#define LUZ_PAD PIN_D0      //se define que LUZ-PAD es el PIN_D0    y  (LUZ-PAD) significa luz patio delantero
#define LUZ_PAT PIN_D1      //se define que LUZ-PAT es el PIN_D1    y  (LUZ-PAD) significa luz patio trasero
#define SIRENA PIN_D2       //se define que SIRENA es el pin_D2     y  (SIRENA) es la bocina la bulla
#define LLAMAR PIN_D3       //se define que LLAMAR es el pin_D3     y  (LLAMAR) es una salida para realisar una llamada a un cel
#define COLGAR PIN_D4       //se define que COLGAN es el pin_D4     y  (COLGAR) es una salida para colgar la llamada
#define LED_ON_OF PIN_D5    //se define que LED-ON-OF PIN_D5        y  (LED-ON-OF)significa led ensendido apagado

//int1 E-OF-ON=0;        //declaro la variable (E-ON-OF) a O Y Significa                                (Entrada Ensendido Apagado)
//int1 S_MOV_PAD=0;      //declaro la variable (S-MOV-D) Y le asigno que empiece en O Y Significa       (sensor de Movomiento Delantero)
//int1 S_MOV_PAT=0;      //declaro la variable (S-MOV-T) Y le asigno que empiece en O Y Significa       (sensor de Movomiento Trasero)
//int1 S_MOV_PUD=0;      //declaro la variable (L-D) Y le asigno que empiece en 1 Y Significa           (Laser Delantero)
//int1 S_MOV_PAT=0;      //declaro la variable (L-T) Y le asigno que empiece en 1 Y Significa           (Laser Trasero)
//int1 S_MAG_PUD=1;      //declaro la variable (S-MAG-D) Y le asigno que empiece en 1 Y Significa       (Sensor Magnetico Delantero)
//int1 S_MAG_PUT=1;      //declaro la variable (S-MAG-T) Y le asigno que empiece en 1 Y Significa       (Sensor Magnetico Tracero)
//int1 LUZ_PUD=0;        //declaro la variable (L-PD)  Y le asigno que empiece en O Y Significa         (Luz Patio Delantero)
//int1 LUZ_PUT=0;        //declaro la variable (L-PT)  Y le asigno que empiece en O Y Significa         (Luz Patio Trasero)
//int1 SIRENA=0;         //declaro la variable (SIRENA)  Y le asigno que empiece en O Y Significa       (SIRENA)
//int1 LLAMAR=0;         //declaro la variable (LLAMAR)  Y le asigno que empiece en O Y Significa       (LLAMAR)
//int1 COLGAR=0;         //declaro la variable (COLGAR)  Y le asigno que empiece en O Y Significa       (COLGAR)
//int1 LED_ON_OF=0;      //declaro la variable (LED-ON-OF)  Y le asigno que empiece en O Y Significa    (SIRENA)


 void main(void){
  output_low(S_MOV_PAD); //esto lo puse por al simular seme ensendian los pines
  output_low(S_MOV_PAT);
  output_low(LUZ_PAD);

            set_tris_B(0b11111111);   //asigno todo el puerto B como entradas y lo puse en binario para que lo tenga presente
            set_tris_D(0b00000000);  // asigno todo el puerto D como salidas
            output_low(E_ON_OF);    //coloco eel pin B0 a cero

            while(1)
            {
                    if(input(E_ON_OF)==0)                   // Pregunto si la entrada del pin B0 es igual a 0
                    {
                            delay_ms(10);                   // Espero 10ms por si la llave esta rebotando (variando entre 1 y 0 )
                            while(input(E_ON_OF)==0);       // Espero que suelte el boton, observa el ; al final, es decir un while(){}
                            output_toggle(LED_ON_OF);       // Cambio el valor del pin

                    }

                    if(input(LED_ON_OF)==1)                  //pregunto si (LED_ON_OF)==1 si es verdad pasa a la siguiente linea
                    {
                            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

                            {
                                    output_high(LUZ_PAD); //ensiendo luz patio trasero                             
                                    output_high(SIRENA);  //enciende sirena
                            }
                            else
                            {
                                    output_low(LUZ_PAD); //de lo contrario apaga luz patio trasero
                                    output_low(SIRENA);  //de lo contrario apaga sirena
                            }
                    }
                    else
                    {
                            output_low(LUZ_PAD);  //apagando luz patio delantero
                            output_low(SIRENA);   //apagando sirena
                    }
            }
    }



Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #52 en: 05 de Abril de 2016, 21:05:58 »
cual fuse ves que no esta bien killerjc

No veo que esten los fuses del oscilador y faltan varios mas.

Citar
es es el codigo que tengo pero aun no jala no sensa los sensores por que era

Si podes pasar una imagen del circuito como lo estas probando mejor.

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #53 en: 05 de Abril de 2016, 21:59:06 »
Apagar luz patio trasero  quisiera subir el archivo de proteus pero no e podido una porque la extensión no la acepta y la otra porque lo compacto pero en win rad y tampoco acepta ese archivo lo subiré como imagen pero creo que solo se podrá ver no simular nada

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #54 en: 05 de Abril de 2016, 22:13:49 »
te mandare el archivo para ver si lo puedes suvir tu por por aya

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #55 en: 05 de Abril de 2016, 23:35:08 »
Por la forma de tu circuito, se queda estancado aca:

Código: C
  1. while(input(E_ON_OF)==0);

cambialo la condicion del if y el while a 1, es decir

Código: C
  1. if(input(E_ON_OF)==1);
  2. {
  3.        //Aca delay
  4.        while(input(E_ON_OF)==1);

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #56 en: 06 de Abril de 2016, 01:16:58 »
es cierto funciono  ((:-)) pero vi que al pulsar el botón correspondiente  (S_MAG_PAD) o (S_MAG_PUD) pero al soltarlo se apaga  (LUZ_PAD  y SIRENA)  de hay le puse un delay pero no funciono mi idea porque hay se quedaba realizando el delay Y mientras que estaba en el delay pulsaba el botón ON_OF no lo respeta supongo que es porque hasta que salga del delay continua realizando el programa que es apagar (LUZ_PAD) Y (SIRENA)  y asi es
Deduzco que debe de ver algún truco de programación o algún método para corregir esto me puede decir que es para que estudie sobre eso y poder anexarlo para que cuando este en el delay si acciono el botón ON_OF se apague la alarma

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #57 en: 06 de Abril de 2016, 02:25:33 »
Intenta explicar como queres que funcione.

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #58 en: 06 de Abril de 2016, 03:12:53 »
ok lo que quiero es que según sensor magnético se dispara con solo dispararse se debe tomar acción esto es que la luz parpadee en forma de flas por lo menos unos 20 minutos hasta que alguien apague la alarma y la sirena encendida continuamente por 20 minutos pero si yo vengo con mi control y aun solo paso 5 min de activada la alarma pues se apague si pulso el ON-OF
nota si es difícil lo de parpadear un led lo dejamos fijo el mismo tiempo que la sirena y el parpadeo lo tendré que hacer con electrónica aunque me quisiera ahorrar la electrónica que utilizare para parpadear la luz con programar esa parte pero si es complicado ni modo tendré que compra la electrónica para que parpadee

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #59 en: 06 de Abril de 2016, 04:24:15 »
Todo se puede hacer pero para no complicarla demasiado, mejor aprender a usar el timer, asi que create un programa simple ( si uno nuevo por ahora ) que encienda un led cada 0.5s (o 1segundo mejor) aproximadamente, el programa te quedaria algo asi:

Código: C
  1. void main(void)
  2. {
  3.          Configura salidas/entradas
  4.          Configura el Timer.
  5.          Activa las interrupciones
  6.  
  7.          while(1) {};
  8. }
  9.  
  10. #INT_TIMER1
  11. void  TIMER1_isr(void)
  12. {
  13.           set_timer1(0x0000);        //Cargar el timer 1 con el valor correspondiente
  14.           output_toggle(PIN_D0)
  15. }

De seguro que hay ejemplos realizados por internet, Pero primero hace eso y luego se lo incorporamos a lo que tenes.

Y si no sabes como calcular el tiempo del timer, hay herramientas que te permiten mover el tiempo, preescaler, frecuencia del oscilador para que sepas que frecuencia y tiempo conseguis:

http://eng-serve.com/pic/pic_timer.html

Procura usar el timer1 que es el de 16bits

EDIT:

Algo de lectura:
http://www.aquihayapuntes.com/indice-practicas-pic-en-c/uso-del-tmr1-como-temporizador.html
« Última modificación: 06 de Abril de 2016, 04:32:07 por KILLERJC »