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
¿Realmente quieres cerrar esta reparación?
Sí
No
¿Realmente quieres reabrir esta reparación?
Sí
No
¿Realmente quieres borrar este post?
Sí
No