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

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

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #105 en: 23 de Abril de 2016, 08:08:57 »
Entonces hay que reacomodar lo de llamar para que lo haga 3 veces. Yo lo hice para que lo realize una sola ves.

Fijate como esta realizado lo de la llamada, intenta entenderle, fijate que entra cada 0.5s dentro de la interrupcion a aumentar 1 a ContadorLLamada, es decir cada ves que incremente 1 pasaron 0.5s, intenta modificarlo y pegarlo aca y luego vemos como vas y arreglamos las cosas.

PD: En las interrupciones NO podes poner delays!

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #106 en: 24 de Abril de 2016, 01:12:18 »
ok una pregunta mas que necesito entender cada vez que sale de un siclo la salida que es LLAMADA se apaga automáticamente ???? cuando termina el siclo o uno también la apaga

por eso ice esto según yo destroce el programa la verdad pero la intención es por ejemplo dar salida a llamada de ahí apagar la salida  de ahí que haya dado las timbradas del cel dar salida a colgar y luego apagar la salida de colgar por eso pregunto lo de arria
Código: C
  1. // Contador que maneja el timer de las llamadas
  2.  
  3. if(LLamadaActiva == 1)
  4.         {
  5.         if(ContadorLLamada < 26 )    //lo cambia de 26 a 27
  6.         {
  7.                 //ContadorLLamada++;
  8.                 if( (ContadorLLamada <= 1) || (ContadorLLamada == 9) || (ContadorLLamada == 18) )// Primera entrada presiona LLAMAR por 0.5s de 3 le puse 9
  9.         {                                                                       // Espera 0.5s y presiona LLAMAR de nuevo por 0.5s
  10.                         output_high(LLAMAR);
  11.         if ((ContadorLLamada ==2) || (ContadorLLamada == 10) || (ContadorLLamada == 19))
  12.          output_low(LLAMAR);
  13.          }
  14.         else if (( ContadorLLamada == 23 ) || (ContadorLLamada == 17) || (ContadorLLamada == 26))       // Pasan 10     segundos  desde que se llamo y se corta tenia 23
  15.                         {
  16.                                 output_high(COLGAR);
  17.             if ((ContadorLLamada ==24) || (ContadorLLamada == 18) || (ContadorLLamada == 27))
  18.             output_low(LLAMAR);
« Última modificación: 24 de Abril de 2016, 02:53:18 por nuevo mundo »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #107 en: 24 de Abril de 2016, 07:18:30 »
Espero que se entienda mejor con esta imagen que es lo que hago:


* signal.png
(12.13 kB, 1160x110 - visto 259 veces)



Arriba puse lo que es "contador LLamada" y con las flechas para arriba cuando es que suma. Por eso comienza de 1.
Si observas mi idea es que cuando esta en 1 y en 3 se de un pulso en LLAMADA, esto por que el primer pulso es para entrar a los telefonos que se llamaron ultimos, y el otro pulso es para realizar la llamada. Luego espera 20 interrupciones mas ( hasta llegar al 23 - 10 segundos ) y procede a dar un pulso de cortar.

Quedan 2 formas de agregar mas llamadas. La primera es agregar mas condiciones. Como ves puede que complique un poco las cosas.

Código: C
  1. if(ContadorLLamada < 255 )
  2.                 {
  3.  
  4.                         if( (ContadorLLamada == 1) || (ContadorLLamada == 3) || (ACA_AGREGAR_RESTANTES))
  5.                         {          
  6.                                 xxxx
  7.                         }
  8.                         else if ( (ContadorLLamada == 23) || (ACA_AGREGAR_RESTANTES) )
  9.                         {
  10.                                xxxx
  11.                         }
  12.                         else
  13.                         {
  14.                                xxxxx
  15.                         }
  16.                         ContadorLLamada++;
  17.                 }
  18.                 else {......}

Suponiendo que quisiera 3 llamadas, separadas por 10 segundos cada una ( 20 ContadorLLamada )
La primera termina a los 23 entrada de la interrupcion. la segunda deberia comenzar a los 43 el primer pulso y 45 el segundo, y cortar a los 65. La tercera comenzar a los 85, el segundo pulso a los 87 y cortar a los 107.
Esto te dejaria el if de activar llamada asi:

Código: C
  1. if( (ContadorLLamada == 1) || (ContadorLLamada == 3) || (ContadorLLamada == 43) || (ContadorLLamada == 45) || (ContadorLLamada == 85) || (ContadorLLamada == 87))
Y el else if asi:
Código: C
  1. else if ( (ContadorLLamada == 23) || (ContadorLLamada == 65) || (ContadorLLamada == 107))

Ademas deberias cambiar el primer if:

Código: C
  1. if(ContadorLLamada < 110 )

Ese if esta para que no cuente hasta 255 y pase a 0, llamando de nuevo. A partir de 110 no entra mas hasta que alguien pone a 0 a LlamadaActiva.

¿Un poquito largos los if verdad? ¿Y que tal si quiero 4/5 o 6 ? Seria un if gigante! y malo. Hay mejor solucion, o tal ves mas practica. Creemos un ContadorVecesLlamada.

Código: C
  1. if(ContadorLLamada < 44 )
  2.                 {
  3.  
  4.                         if( (ContadorLLamada == 1) || (ContadorLLamada == 3) )                  // Primera entrada presiona LLAMAR por 0.5s
  5.                         {                                                                       // Espera 0.5s y presiona LLAMAR de nuevo por 0.5s
  6.                                 xxxx
  7.                         }
  8.                         else if ( ContadorLLamada == 23 )                                       // Pasan 10 segundos desde que se llamo y se corta
  9.                         {
  10.                                xxxx
  11.                         }
  12.                         else if ( ContadorLLamada == 43 )
  13.                         {
  14.                                 if(ContadorVecesLLamada < 3)
  15.                                 {
  16.                                         ContadorLLamada = 0;
  17.                                 }
  18.                                 ContadorVecesLLamada++;
  19.                         }
  20.                         else
  21.                         {
  22.                                xxxxx
  23.                         }
  24.                         ContadorLLamada++;
  25.                 }
  26.                 else {......}

Obviamente con esto hay que modificar otras partes del programa, para que cuando LLamadaActiva se ponga a 0, tambien lo haga el ContadorVecesLLamada. En resumen en la parte del if que se ejecuta cuando LLamadaActiva es 0, ponele un ContadorVecesLLamada = 0; y ya estaria funcionando ( Exactamente dentro del if de ContadorLLamada !=0 )

Cambie 2 cosas del codigo, primero aumente el rango en que ContadorLLamada va a contar, ahora llega hasta 43 ( Ultimo corte + 10 segundos mas ), Cuando llega a 43 entra al nuevo else if, y pregunta cuantas llamadas se hicieron, ahi con solo modificar 1 numero cambias cuantas veces queres que te llame. Observa que no cambie nada mas de lo otro. Solo deberia agregar la linea que dije antes, pero es para cuando se desactiva LLamadaActiva.

Intenta hacerlo ahora con eso en mente y vemos
« Última modificación: 24 de Abril de 2016, 07:28:24 por KILLERJC »

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #108 en: 24 de Abril de 2016, 22:37:55 »
antes que nada de verdad muchas gracias por la ayuda y quiero que sepas que estoy muy agradecido por toda la ayuda  veo que eres una persona talentosa mi buen killerjc la y que conoces mucho de esto veo que me diste una catedra de cómo darle tiempos a los delay se que en el lenguaje de programador es claro un servidor poco a poco voy pensando como programador y en el grado que baya pensado como tal se que voy entendiendo cosas básicas, reglas, métodos, forma de escritura y lectura y hasta trucos que existe en este mundo tan basto de la programación gracias por compartir tus conocimientos 

y pasando al programa voy a leeer detenidamente lo que me dises e intentare hacerlo  :idea: :rayito:

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #109 en: 27 de Abril de 2016, 15:10:36 »
ya regrese se me rompio el cargador de la pc y pos hoy la compre continuare con el progra saludos  :mrgreen:

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #110 en: 28 de Abril de 2016, 21:57:33 »
Ya hice todas las modificaciones pero fíjate que madamas una vez se enciende LLAMAR Y no hace madamas as mecha cuando daré una buena   :5] no se por qué no funciona los diez segundos y que vuelva a llamar si logre compilarlo sin errores coloque la varible  los cambios pero no enciende ninguna ves colgar
« Última modificación: 28 de Abril de 2016, 22:18:42 por nuevo mundo »

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #111 en: 03 de Mayo de 2016, 01:58:18 »
estoy vivo le estoy moviendo al programa pero asta hoy nada saludos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #112 en: 03 de Mayo de 2016, 07:32:36 »
Dale, yo ultimamente no entre a linux donde abro mi correo, estuve con otras cosas y no dispongo demasiado tiempo. Pero si me enviaste algo luego lo veo. Sino lo pones aca y es mas facil xD

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #113 en: 03 de Mayo de 2016, 22:08:01 »
esta parte no entra niuna ves como ves

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);

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #114 en: 03 de Mayo de 2016, 22:19:26 »
Codigo completo :P

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #115 en: 03 de Mayo de 2016, 22:36:26 »
no se por qué no hace ni una ves el colgar y al querer meter un else if mas me marca error solo da salida el llamar ya las 3 veces de hay nada mas
Código: C
  1. if(LLamadaActiva == 1)
  2.         {
  3.                 if(ContadorLLamada < 44 )
  4.                 {
  5.                         ContadorLLamada++;
  6.                         if( (ContadorLLamada <= 1) || (ContadorLLamada == 3) || (ContadorLLamada == 23) ||(ContadorLLamada == 43) )                     // Primera entrada presiona LLAMAR por 0.5s
  7.                         {                                                                       // Espera 0.5s y presiona LLAMAR de nuevo por 0.5s
  8.                                 output_high(LLAMAR);
  9.                         }
  10.                           else if ( ContadorLLamada == 23)                                      // Pasan 10 segundos desde que se llamo y se corta  estaba en 43
  11.                         {
  12.                 output_high(COLGAR);
  13.          
  14.             if(ContadorVecesLLamada < 3)
  15.             {
  16.              ContadorLLamada = 0;
  17.             }
  18.              ContadorVecesLLamada++;
  19.          }

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #116 en: 03 de Mayo de 2016, 22:38:19 »
asi o mas jejeje  :mrgreen: te mando un pribado para que veas compilado ya jejeje pero claro en proceso
« Última modificación: 03 de Mayo de 2016, 22:40:32 por nuevo mundo »

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #117 en: 03 de Mayo de 2016, 22:43:23 »
ya lo mande me dises si lo puedes ver sino pues sigo poniendo codigo aqui

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #118 en: 03 de Mayo de 2016, 23:14:07 »
este es todo lo de la llamada

Código: C
  1. if(LLamadaActiva == 1)
  2.         {
  3.                 if(ContadorLLamada < 44 )
  4.                 {
  5.                         ContadorLLamada++;
  6.                         if( (ContadorLLamada <= 1) || (ContadorLLamada == 3) || (ContadorLLamada == 23) ||(ContadorLLamada == 43) )                     // Primera entrada presiona LLAMAR por 0.5s
  7.                         {                                                                       // Espera 0.5s y presiona LLAMAR de nuevo por 0.5s
  8.                                 output_high(LLAMAR);
  9.                         }
  10.                           else if ( ContadorLLamada == 23)                                      // Pasan 10 segundos desde que se llamo y se corta  estaba en 43
  11.                         {
  12.                 output_high(COLGAR);
  13.          
  14.             if(ContadorVecesLLamada < 3)
  15.             {
  16.              ContadorLLamada = 0;
  17.             }
  18.              ContadorVecesLLamada++;
  19.          }
  20.                         else                                                                    // En cualqier otro momento de tiempo que esten en 0 las salidas
  21.                         {
  22.                                 output_low(COLGAR);
  23.                                 output_low(LLAMAR);
  24.                         }
  25.           //  ContadorLLamada++;
  26.       }
  27.         }
  28.         else
  29.         {
  30.                 if(ContadorLLamada != 0)
  31.  
  32.       {
  33.                         // Si por alguna casualidad se desactiva la alarma mientras esta llamando esto va a colgar el celular aunque sea 1 ves
  34.                         output_low(LLAMAR);
  35.                         output_high(COLGAR);
  36.                         ContadorLLamada = 0;
  37.          ContadorVecesLLamada = 0;
  38.       }
  39.                 else
  40.                 {
  41.                         // Caso que no se presione nada, entonces me aseguro que ambos esten en 0
  42.                         output_low(LLAMAR);
  43.                         output_low(COLGAR);
  44.                 }
  45.         }

Desconectado nuevo mundo

  • PIC16
  • ***
  • Mensajes: 108
Re:lecturas y salidas (digitales y analogicas) en lengua c para pic
« Respuesta #119 en: 03 de Mayo de 2016, 23:15:41 »
solo llama las tres beses de hay nada ya vi que no te puedo enviar nada esta desactivado jejeje me lo mande yo mismo por error saludos
« Última modificación: 04 de Mayo de 2016, 01:31:01 por nuevo mundo »


 

anything