Autor Tema: SISTEMAS DE PROTECCIÓN DE CIRCUITOS CON PIC  (Leído 4047 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Epi

  • PIC10
  • *
  • Mensajes: 13
SISTEMAS DE PROTECCIÓN DE CIRCUITOS CON PIC
« en: 27 de Febrero de 2008, 13:05:04 »
Microcontrolador PIC16F84A, sistemas de protección de circuitos
Con un microcontrolador PIC16F84A se desea diseñar un programa de protección del pic. Por ejemplo:
PortA como entradas.
PortB como salidas.
RA0..RA2, sensores.
RA3, tiene que estar en pulso alto, si desconecta la pila se pone a pulso bajo o 0 y en la eeprom se guarda el valor  “d” o 64h.
RA4, si detecta pulso bajo a 0,  guarda en su eeprom interna un valor en una dirección de memoria. Por ejemplo:
En la dirección 0x2100 se guarda un valor llamado 61h que en ASCII es una “a” nada más arrancar el pic, es decir, desde que pongas la pila o lo grabe desde el grabador ic-prog o winpic800. Le llega pulso alto (1). Esta “a” significa activado. Si por cualquier motivo en la entrada RA4 detecta pulso bajo (0), el pic entrará en una parte de programación donde se desactivará las entradas y salidas, es decir, que el pic no responda y entre en modo Sleep y que no pueda salir de él. Antes de ello, guarda en la eeprom interna del pic en la posición 0x2100 la letra en “d” en ASCII que en hexadecimal se llama 64h.
Por mucho que vuelvas a poner   0 ó 1 en la entrada RA4 o quites y vuelvas a poner la batería, el pic quedará siempre en Sleep. La única manera de que funcione es grabar otra vez el pic con el grabador. Digamos que hay un sensor conmutador de tres patas, que al quitar la tapa de la caja se ponga a 1 en al entrada RA4 y si pones la tapa de la caja en la entrada RA4 se pone a 0 con lo cual en la eeprom ya grabaría la letra “d” y el circuito no funciona.
Si pensamos bien, aún faltan cosas. El funcionamiento ideal sería que si quitas la batería, en la eerpom guarde la “d”. Pero si la quitas, el pic se apaga y no da tiempo de guardar la letra “d” en la eeprom, así  que si vuelves a conectar la pila, el circuito funciona, la idea es dejar de funcionar quitando la pila y poner a 0 la entrada RA0.
¿Cuál es la solución?
Incluir un circuito temporizador que cuando la pila se desconecta, el temporizador dure unos 3 segundos para guardar en la eeprom la letra “d”. Una vez que guarde la letra “d”, el pic ya sabe que si vuelve a conectar la pila, lo primero que hace es comprobar si hay una “a” de activado o una letra “d” de desactivado. La única manera de hacer funcionar el circuito es, volver a grabar el pic16f84a.


Funcionamiento general
Diseñar un circuito y programa mediante ensamblador con el microcontrolador pic16f84a. Este circuito es para un control de riego por goteo en un jardín particular. Dejar el circuito en la pared dentro de un cuarto de aperos. Se utiliza un sistema de seguridad que al manipular la caja se desactive el circuito bien abriendo la caja o quitando la fuente de alimentación. En una salida del puerto b se activa un led y un altavoz o zumbador piezoeléctrico como aviso de alarma al mismo tiempo que el pic se pasa a estado Sleep (sueño). Cuando se queda en estado Sleep el circuito se queda inoperativo y no hay forma de volver a funcionar aunque vuelva a cerrar la tapa de la caja del circuito o vuelva a conectar la fuente de alimentación.
Funcionamiento interno
Cuando se conecte el circuito a la fuente de alimentación, el pic16f84a graba en la eeprom interna un valor 61h o “a”, el pic o circuito completo funciona correctamente.
Si en las entradas RA3 y/o RA4 se detecta pulso bajo, el pic16f84a graba el dato que hay en la dirección 0x2100 donde está la 61h “a” que significa activado y lo sustituye por el 64h “d” en la misma posición de memoria.
Si volvemos a poner la caja o la fuente de alimentación, el pic comprueba en la eeprom si en la dirección 0x2100 que dato hay. Como ha sido modificado, el pic encontrará el dato 64h “d” y el circuito no funcionará. La única manera de hacerlo funcionar es volver a grabar el pic con el grabador que es la opción A. Opción B, sería esperar una media hora desde que conecte la pila. Opto por la opción A, ya que quiero más seguridad.

;************************************ Proteccion_01.asm *************************************
;
; El Puerto B, que actúa como salida es controlado por el bit 0 del Puerto A, que actúa como
; entrada. De manera tal que:
;    -   Si el bit 0 del PORTA es "1", se encienden todos los diodos LED de salida.
;    -   Si el bit 0 del PORTA es "0", se encienden los LED del nibble alto y se apagan los bajo.
;
; ZONA DE DATOS *********************************************************************

   LIST      P=16F84A
   INCLUDE      <P16F84A.INC>
   __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

; ZONA DE CÓDIGOS ********************************************************************

   ORG    0               ; El programa comienza en la dirección 0.
Inicio
   bsf      STATUS,RP0         ; Acceso al Banco 1.
   clrf   TRISB            ; Las líneas del Puerto B se configuran como salida.
   movlw   b'00011111'         ; Las 5 líneas del Puerto A se configuran como entrada.
   movwf   TRISA
   bcf      STATUS,RP0         ; Acceso al Banco 0.
Principal                  ; Supone que el bit de entrada estará a "1" y por
   movlw   b'10000000'         ; tanto se van encender el LED del bit 7, RB7.
   btfss   PORTA,0            ; ¿Bit 0 del PORTA es "1"?
   goto   Cuelgue            ; No. Bloqueo hacia Sleep.
   movlw   b'00000000'         ; Sí.
   movwf   PORTB            ; Resultado se visualiza por el puerto de salida.
   goto    Principal         ; Crea un bucle cerrado e infinito.
Cuelgue
   movlw   b'10000000'
   movwf   PORTB            ; Se muetra 0 en las salidas.
   Sleep                  ; Se que en estado Sleep (Sueño) y no sale de ahí. Con lo cual,
                        ; queda el pic inoperativo.
                        ; Para volver a hacer funcionar el pic, hay que volve a grabar el pic.
                        ; La entrada RA0 tiene que estar a 1, desde que se ponga a 0 entra en
                        ; estado Sleep.

   END                     ; Fin del programa.
Sistemas de protección de circuitos con pic

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: SISTEMAS DE PROTECCIÓN DE CIRCUITOS CON PIC
« Respuesta #1 en: 01 de Marzo de 2008, 20:56:13 »
Esto ... ¿lo has sacado de algún libro?
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Epi

  • PIC10
  • *
  • Mensajes: 13
Re: SISTEMAS DE PROTECCIÓN DE CIRCUITOS CON PIC
« Respuesta #2 en: 02 de Marzo de 2008, 03:55:56 »
Los ejemplos de un libro, la idea y la explicación es mía y este mismo ejemplo es mio pero sin terminar, me falta lograr que no se hacerlo es lo de la EERPOM.

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: SISTEMAS DE PROTECCIÓN DE CIRCUITOS CON PIC
« Respuesta #3 en: 05 de Marzo de 2008, 15:19:01 »
Creo que cuando los post son demasiado largos no invita mucho a leer y peor cuando dejan un programa para revisarlo y este tiene montones de lineas.

Bueno creo que estas necesitando una forma de grabar un dato a la eeprom al momento de desconectar la alimentación (o todo es una especie de tutorial que vas comentando la problematica y luego en los siguientes post's daras su respectiva solución, no entiendo bien) ... a tu fuente DC que alimenta al pic colocale un diodo en serie con un capacitor grandecito a tierra para que cuando se desconecte la fuente el diodo no permitirá que el voltaje del capacitor se regrese a la fuente y se derive todo al pic y al ser un valor grandecito hará que la descarga sea lenta, tanto como para que le de tiempo al pic para grabar un byte en la eeprom interna, tiempo que no sobrepasa los 5mS asi que suficiente con un capacitor de 1000uF o menos aun dependiendo de la carga que tenga tu circuito. Para detectar el corte de fuente desde el anodo del diodo conectalo a la base de un transistor con una R y del colector a 5V con otra R y de este colector al pic asi detectas cuando cortaron la fuente.

Javicho.