Regístrate gratis para participar de los foros, o si ya estás registrado haz login.
| comentario del autor | Mar Jun 05, 2007 9:53 pm | |
|
He conseguido este marcador telefónico en la web el cual utiliza el PIC16F84A. Este lo conecté a la alarma de mi domicilio la cual tiene un terminal para tal efecto. Hasta ahora todo bien referente a efectuar el llamado telefónico a celular o fijo, pero se me presenta el siguiente problema para lo cual quisiera contar con vuestra gran ayuda: En oportunidades el discador comienza a funcionar en el momento que comienzo a ingresar el código de activación de la alarma, entonces debo repetir la operación hasta que este se estabilice y no se dispare solo, pienzo que podría ser problema de filtraje, pero a pesar de agregar algunos en la entrada y salida de la alimentación sigue igual el problema. Dejo aquí el circuito para que le peguen una mirada haber si encuentran alguna opción para eleminar el problema. Un cordial saludo MarcadorTelef.jpg (46,49 KB) ![]() |
||
| asistió a la solución | Mar Jun 05, 2007 10:24 pm | |
|
Obs 1:Cualquier conexion que hagas entre un pic y la linea es aconsejable que utilices optoacopladores.- Obs 2: En cualquier sistema basado en microcontroladores una parte fundamental para la evaluacion o testeo del desempeño del circuito es su programa asi que no se olviden de agregarlos.- Espero que te sirva, cualquier cosa pregunta.- |
||
| comentario del autor | Mar Jun 05, 2007 11:48 pm | |
|
Gracias por contestar. Bueno, la conexión del microcontrolador a los interruptores que dispararán la alarma y pondrán en marcha el proceso de llamar al número prefijado, se realiza a través de las líneas RB4 a RB7, que corresponderán respectivamente a las entradas IN1 a IN4. Así, cada interruptor se conectará entre una de estas entradas y masa (GND). Cuando uno de estos interruptores está abierto, la correspondiente línea del micro queda puesta a +5V mediante una resistencia de pull-up incluida en el propio micro, con lo que esa línea será leída como un 1. Por el contrario, si el interruptor se cierra, la línea correspondiente queda conectada a 0V, y será leída por el micro como un 0. El programa contenido en el micro, se asegura de que éste permanezca en stand-by mientras no haya cambios en las líneas RB4 a RB7, y se “despierte” cuando haya un cambio en cualquiera de ellas, aprovechando la posibilidad de configurar “interrupt on change” del port B. Entonces comprobará el estado de esas líneas y llevará a cabo las acciones programadas, es decir, llamarnos por teléfono el número de veces que hayamos configurado y demás. Bien, el funcionamiento general del programa es bastante simple. Cuando se alimenta el micro, el programa configura los puertos, activa las resistencias de pull-up del port B y alguna cosa más, habilita la salida de stand-by por cambio en el port B, y pasa a stand-by. El micro permanecerá en ese estado mientras no se produzca un cambio en el estado de alguna de las entradas. Cuando esto ocurre, el micro vuelve a estado normal, comprueba qué entrada es la que ha cambiado, y si ha sido un cambio momentáneo o permanece activa durante unos segundos. Si las entradas han vuelto a su estado inactivo, el micro vuelve a stand-by, si no, actúa de acuerdo con los parámetros configurados que lee en su EEPROM, es decir, marca el teléfono prefijado, y se mantiene durante un minuto señalando unos “clics” seguidos de un silencio. El número de clics entre silencio y silencio corresponde a la entrada que ha provocado el aviso (si son varias, la primera de ellas). Si se ha configurado que las llamadas cesen cuando las entradas vuelven a inactividad, el micro lo comprobará, y si es así, volverá a stand-by. Si no, esperará el tiempo prefijado (si es 0 minutos no espera) y volverá a llamar. Este proceso se repetirá tantas veces como se haya configurado, y después de la última llamada, el micro volverá a stand-by. Como se ve, el definir e introducir correctamente la configuración del avisador es imprescindible para que el circuito esté completo y pueda funcionar. Por tanto, pasaremos a detallar cuáles son esos datos. En primer lugar hay que definir el número de teléfono al que queremos que llame el avisador. Este número se introduce en las direcciones h00 a h1F (d0 a d31). El formato es muy simple, una cifra en cada dirección, acabando con el valor hFF, en la dirección inmediatamente posterior a la última cifra del número de teléfono. Si durante la marcación se necesita un tiempo de espera entre dos cifras (por ejemplo, después de marcar la cifra de llamada exterior en una centralita), se puede intercalar el valor h0A. Así, si por ejemplo, queremos que marque un 9, espere dos segundos, y marque 091, las siete primeras direcciones de la EEPROM deberían contener: 09, 0A, 0A, 00, 09, 01, FF. La dirección h21 de la EEPROM permite configurar dos cosas. La primera cifra (en hexadecimal) será 0 si queremos que el avisador deje de llamarnos si las entradas vuelven a su estado inactivo, y deberá se 1 si queremos que el avisador realice todas las llamadas configuradas aunque las entradas hayan vuelto a su estado inactivo. La segunda cifra configura el número de veces que el avisador repetirá la llamada. Así, por ejemplo, si queremos que el avisador nos llame 5 veces al detectar que una entrada se ha activado, y que las haga aunque dicha entrada se desactive antes de terminar de hacerlas, tendremos que poner en la dirección de la EEPROM h21 el valor 15. Por último, el valor que pongamos en la dirección h22 de la EEPROM corresponderá al intervalo entre llamadas, en minutos. Lógicamente, si hemos configurado que sólo se haga una llamada, este dato carece de importancia. Por otro lado, si ponemos el valor 00, la repetición de llamadas se hará sin esperar nada (en realidad, la espera antes de volver a llamar será de 3 segundos). Para intervalos menores que 10 minutos (de 00 a 09) el valor en hexadecimal coincide con el valor en decimal, así que no habrá problema. Para intervalos mayores, veremos cómo introducir en ICPROG un valor decimal. Veremos ahora, con un ejemplo práctico, los pasos que hay que dar para grabar el PIC, incluida la configuración. Asumiremos que se dispone de un programador que funciona, y que ICPROG está correctamente configurado. Supondremos que queremos la siguiente configuración: Nº de teléfono: 1234567890.Para celular hay que anteponer al Nº el 08 o 09 Ejemplo: 09-977993607 quedaría asi en la eeprom: 00 09 09 07 07 09 09 03 06 00 07 Entradas: IN1 = normalmente cerrado, IN2 = normalmente cerrado, IN3 y IN4 normalmente cerrado. Nº de llamadas: 3, si antes no se desactivan las entradas. Intervalo entre llamadas: 5 minutos. Con estos datos, el proceso para programar el PIC se compone de los siguientes pasos: 1º. Pinchar el PIC16F84 en la posición correcta en el zócalo del programador y conectarlo, mediante el cable adecuado, al ordenador. 2º. Abrir el programa ICPROG, y en el menú “Ajustes - Dispositivo - Microchip PIC” elegir el PIC16F84 ó PIC16F84A (según sea el modelo que hemos comprado). 3º. En el menú “Archivo - abrir datos...” escoger el fichero TELEF2.HEX. Veremos que las ventanas “Código de programa” y “Datos EEPROM” han cambiado, pues ahora contienen los datos que se van a grabar en el PIC. 4º. Situamos el cursor sobre la primera dirección (h00) de la EEPROM y vamos rellenando esta y las sucesivas direcciones con las cifras del número de teléfono en la forma 01, 02, 03... hasta 00. En la dirección siguiente ponemos FF. 5º. Buscamos en la tabla el valor correspondiente a nuestra configuración de entradas, en este caso, DF. Situamos el cursor sobre la dirección h20 (d32) de la EEPROM y escribimos DF. 6º. Calculamos el valor que tenemos que introducir en la dirección h21 (d33). La primera cifra será 0, puesto que queremos que el avisador no siga llamando si se desactivan las entradas. La segunda cifra será 3, puesto que queremos que repita la llamada 3 veces. Situamos el cursor en la siguiente casilla de la EEPROM, y escribimos el valor 03. 7º. Falta introducir el valor de la dirección h22 (d34) que corresponde al intervalo entre llamadas, y que queremos que sea 15. El problema es que tendríamos que convertirlo a hexadecimal. Para quien no sepa hacerlo, ICPROG permite otra forma de entrar los datos. Sólo hay que pulsar dos veces el botón izquierdo del ratón sobre la casilla que queramos introducir, en este caso la h22 de la EEPROM, y se desplegará una ventanita en la que podemos introducir el valor en decimal, hexadecimal o ASCII. Escribiremos el número 5 en la casilla decimal y pulsaremos OK, y el valor correspondiente aparecerá en la casilla de la EEPROM en hexadecimal (05). Subo el código fuente para ver la programación Un cordial saludo telef2.rar (2,88 kb) - |
||
| asistió a la solución | Mie Jun 06, 2007 2:33 am | |
|
Por lo que puedo apreciar por lo que comentas de su funcionamiento el problema esta en la conexion que hay entre tu alarma y dicho circuito. Lo que esta pasando es que cuando tu ingresas el codigo (antes de que la alarma este activada) la misma esta haciendo disparar el circuito. Para aclarar las cosas pongamos un ejemplo general que puede ser o no tu caso: Si tu tienes una alrma con un teclado en la entrada principal de tu casa y a su vez tienes un sensor de movimiento o de puerta que detecta tu entrada o presencia, cuando tu quieras ingresar el codigo para activarla o desactivarla va a detectar tu presencia por lo tanto se lo va a informar a la alrma y esto es lo que posiblemente este haciendo disparar tu circuito.- Por lo tanto: Tendrias que verificar sin en las entradas In1-In4 hay un cambio de nivel cuando tu intentas conectar la alarma introduciendo tu codigo (que creo que es lo mas probable) . Con respecto al Codigo lo he mirado y he hecho la simulacion en Proteus y anda todo ok.- Bueno espero que te sirva y cualquier cosa comenta o pregunta.- Si necesistas algun circuito con microcontroladores no dudes en consultar.- Suerte y saludos amigo.- |
||
| asistió a la solución | Mie Jun 06, 2007 3:42 pm | |
|
creo que tu problema va por ahi!!.... Te sería mucho mas facil, conectar un RELÉ a la salida de sirena de tu alarma, y utilizando el contacto NO del rele, puedes disparar el discador saludos |
||
| comentario del autor | Mie Jun 06, 2007 7:40 pm | |
|
Nuevamente te agradezco muchísima tu colaboración con este problemita. Estuve revisando con mucho cuidado el comportamiento de este dispositivo y he descubierto que el problema viene por el lado de captación de ruido o interferencias desde la alarma, luego para descartar lo saque y lo lleve al banco de trabajo para verificar todo, gran sorpresa, el dispositivo es tan sensible al ruido que con solo accionar el interruptor de mi lámpara o de las luces del taller este se dispara. Luego lo coloqué nuevamente en la alarma sin conectar la entrada IN1 y se dispara igual al presionar la primera tecla del sistema de alarma. Ya está claro que es el discador telefónico que se dispara solo, que podría hacer para eliminar este fallo?.. te agradecería cualquier sugerencia. Un cordial saludo |
||
| asistió a la solución | Mie Jun 06, 2007 7:49 pm | |
|
si son de consulta por nivel alto (1), pon la misma resistencia pero hacia GND.... saludos |
||
| comentario del autor | Mie Jun 06, 2007 7:56 pm | |
|
Gracias por contestar. Ok. La alarma utilizando es una AEI HA871 alarma digital, te dejo una imagen de ella. Tienes razón tambien de poder hacer la conexión que me indicas, per ya he descubierto que es el discador que es muy sensible al ruido y espero tener ayuda por ese lado ahora. Un cordial saludo |
||
| asistió a la solución | Mie Jun 06, 2007 8:05 pm | |
|
ademas fijar todos los pines de entrada salida a masa (GND), y ademas en el firmware los fijas como salida... serían 2 tecnicas para evitar molestias en las entradas... tambien debes poner cun condensador de 0.1uF en el terminal Vcc del PIC, y masa, lo mas cercano posible al pin de alimentación del PIC.. esto se hace para filtrar ruidos en la alimentación... mas que todo lo que te acabo decir... tu problema me tinca mas por la falta de resistencias Pull-up en las entradas... saludos |
||
| solución | Mie Jun 06, 2007 8:22 pm | |
|
Prueba primero con una sola poniendo el resto a +5v.- Comenta los resultados.- |
||
| comentario del autor | Vie Jun 08, 2007 3:52 pm | |
|
Finalmente logré solucionar el problema gracias a la importante ayuda de mammuky y nocx que dedicaron parte de su tiempo en entregarme sugerencias. Para solicionar el problema truve que realizar lo siguiente. 1. Colocar resistencia Pull-up en IN1. 2. Conectar a GND IN2 IN4. 2. Programar por software IN1 como NO a nivel lógico 1 (+5V) 3. IN2 a IN4 como NC a nivel lógico bajo (0V) 4. Colocar estos datos en direcciones de la eeprom. Todo esto porque donde se coloca IN1 en la alarma está siempre en nivel alto, hasta que se produce la activación de los sectores 1, 2, 3 o 4, donde pasa a nivel bajo activando la alarma y porsupuesto el puerto RB4 (IN1) del micro tambien cambia y esto se traduce en el inicio de su programa que es marcar el téléfono previamente fijado. Gracias amigos. |
||
| asistió a la solución | Vie Jun 08, 2007 6:12 pm | |
|
|
||