⚡ Descuentos en cursos en video - Lleva tu aprendizaje técnico al siguiente nivel y aprovecha precios especiales antes de que termine la oferta. 🔥 Aprovechar oferta ahora 🔥
Microcontroladores y sistemas digitales

Marcador telefónico con PIC16F84A

etma
etma
21
hace 18 años
hace 18 años
Hola amigos: 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
nocx
nocx
1.104
hace 18 años
hace 18 años
que sistema de alarma estas utilizando??... las alarmas traen funciones de reporte para distintos cambios en el sistema... son capaces de reportar cuando armas el sistema, cuando desarmas, cuando hay alarma, cuando se interrumpe una zona aun que no este armada, etc etc etc... 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
nocx
nocx
1.104
hace 18 años
hace 18 años
Si las entradas son de consulta por nivel bajo (0) pone una resistencia desde el terminal hasta +Vcc en todas las entradas... si son de consulta por nivel alto (1), pon la misma resistencia pero hacia GND.... saludos
etma
etma
21
hace 18 años
hace 18 años
Hola nocx 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
nocx
nocx
1.104
hace 18 años
hace 18 años
Ok, te recomiendo poner las resistencias Pull-up en las entradas del discador... 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
mammuky
mammuky
640
hace 18 años
hace 18 años
Ok. Primero: estaria bien que nos des un poco mas de detalle de tu circuito ya que aparecen conectores (IN1-IN4) que no se saben a donde van. Segundo: hay que ver el codigo para ver si esta bien programada la secuencia que vos mencionas y Tercero: cuando la linea telefonica se encuentra en estado normal (colgado) el voltaje de linea es de aprox. 48V cuando se levanta el auricular (descolgado) es de aprox 10V, por lo tanto la resistencia R1(1k/2W) que queda en paralelo con la linea al activarse el rele es para simular que el telefono esta descolgado de tal forma que la central vea una impedancia equivalente a la que presenta le tel cuando esta descolgado; igual te aconsejo colocarle una R de 560 ohms.- 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.-
mammuky
mammuky
640
hace 18 años
hace 18 años
Ok. Tu problema no esta en el circuito. 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.-
etma
etma
21
hace 18 años
hace 18 años
Hola mammuky 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
mammuky
mammuky
640
hace 18 años
hace 18 años
Ok. Como dice nocx puedes agregar dichas resistencias aqui te adjunto el diagrama, y si no puedes probar la otra configuarcion que tambien te adjunto la que deberas repetir para cada entrada. Prueba primero con una sola poniendo el resto a +5v.- Comenta los resultados.-
etma
etma
21
hace 18 años
hace 18 años
Hola amigos: 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.
mammuky
mammuky
640
hace 18 años
hace 18 años
Ok.Bien bien!!!! me alegro que tu problema se haya solucionado suerte y nos mantenemos en contacto.-
etma
etma
21
hace 18 años
hace 18 años
Hola mammuky: 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

¿Conoces una solución?

¡Aprende a reparar con estos cursos YoReparo!

4.87
(15)

Curso Diseño de Amplificadores de Máxima Fidelidad

Maximiliano Resch
$ 29 USD
$ 13 USD
4.94
(16)

Curso Refrigeración Comercial Aplicado a Diagnóstico y Reparación

Ing. Georga Melgarejo
$ 40 USD
$ 13 USD
4.71
(7)

Curso TV OLED y QLED con el Ing. Picerno

Ing. Alberto H. Picerno
$ 29 USD
$ 10 USD
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos?
Regístrate gratis