TODOPIC

Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: dogflu66 en 08 de Octubre de 2006, 15:31:15

Título: Automatismo para ventilador de WC con PIC12F675
Publicado por: dogflu66 en 08 de Octubre de 2006, 15:31:15
hola amigos aqui dejo un proyectino que puede que sea util para alguno.... (http://img68.imageshack.us/img68/6100/tfr1db3nc0.gif) :mrgreen:

El propósito general de este automatismo es el de controlar un ventilador, usado como extractor para cuarto de baño.

El circuito tiene que cumplir dos requisitos básicos:

1º el automatismo cuando esta en reposo no puede tener consumo alguno.
2º el circuito será controlado por un PIC enano, el PIC12F675

La función que realizara el circuito se llevara a cabo de la siguiente forma:

Al suministrar energía del mismo circuito eléctrico de la lámpara del WC, el circuito hará un contaje de 30Seg. (ventilador a on), si la alimentación no es interrumpida el circuito  entrara en una temporizacion obligatoria de 2 minutos aunque se desconecte la alimentación (ventilador a on), después de este tiempo durante 10 Seg. (ventilador a on) comprobara la alimentación de la lámpara, si esta apagada el circuito se desconectara (ventilador a off), y si esta activada entrara de nuevo en el bucle de los 2 minutos obligatorios (ventilador a on) y así sucesivamente.

El esquema

http://img521.imageshack.us/img521/2894/twc10qn2.png

Una foto

(http://img238.imageshack.us/img238/7760/pict04641xs5.jpg)

El programa

Código: Visual Basic
  1. '***************************************************************************************
  2. 'NOMBRE: Temporizador_WC_10
  3. 'MICRO: PIC12f675
  4. 'DESCRIPCION: Automatismo par el control de un ventilador de WC
  5. 'FECHA/AUTOR: By COS, 09/06
  6. 'Version 1.0
  7. 'oscilador interno a 4Mhz
  8. '***************************************************************************************
  9. ' ************************ Declaracion de variables ************************************
  10. Dim timer_base As Word  'base patron para los timer
  11. Dim timer_base_aux As Word      'tiempo en mSeg, en el que se basaran los timer
  12. Dim contador As Byte    'controla la fase en la que se encuentran las temporizacines
  13. Dim timer1_sg As Word   'primera base de tiempos, para el control de rutinas
  14. Dim timer1 As Word      'indica el tiempo para la base timer_sg
  15. Dim led_flash As Byte   'permite que se ejecute la rutina del parpadeo de los led
  16. Dim flash As Byte       'indica el proximo estado de los led, apagado o encendido
  17. ' ************************* Asignacion de valores de las variables *******
  18. timer_base = 0
  19. timer_base_aux = 1000
  20. contador = 0
  21. timer1_sg = 0
  22. timer1 = 30
  23. led_flash = 0
  24. flash = 0
  25. ' ************************ Inicializacion de registros generales y de E/S **************
  26. VRCON = 0x00    'vref off(power off the comparator voltage)
  27. ANSEL = 0x00    'off ADC
  28. TRISIO = 0x00   'tri-state pins, are outputs
  29. GPIO = 0x00             'clear port
  30. CMCON = 0x07    'comparator off
  31. ' ********************** Estado inicial de los dispositivos a controlar ****************
  32. Gosub off_rele  'desconecta el rele
  33. Gosub on_ledverde  'activa el led verde
  34. Gosub off_ledrojo  'apaga el led rojo
  35. WaitMs 1000  'pausa de 1Seg.
  36. ' *********** habilitacion de interrupciones y programacion del timer1 *****************
  37. INTCON.PEIE = 1  'bit de habilitacion de interrupciones de perifericos
  38. T1CON.TMR1ON = 1  'bit de habilitacion del temporizador timer1
  39. T1CON.TMR1CS = 0        'bit de seleccion de reloj para el timer1, interno Fosc/4
  40. T1CON.T1CKPS0 = 0       'bit de seleccion del prescaler para el reloj del timer1
  41. T1CON.T1CKPS1 = 0       'bit de seleccion del prescaler para el reloj del timer1
  42. TMR1H = 0xfc    'carga el byte alto del registro del tiemr1 (1mSeg)
  43. TMR1L = 0x18    'carga el byte bajo del registro del timer1 (1mSeg)
  44. PIE1.TMR1IE = 1 'activa la interrupcion del timer1
  45. Enable  'INTCON.GIE habilita las interrupciones generales
  46.  
  47.  
  48. ' ************* Rutina del programa ****************************************************
  49. main:
  50.         If contador = 0 Then    'primera fase del control de tiempos y maniobras
  51.                 If timer1_sg >= timer1 Then  'si terminan los 30Seg., base tiempos 120Seg
  52.                         contador = 1   
  53.                         timer1 = 120
  54.                         timer1_sg = 0
  55.                         Gosub off_ledverde 'desconecta rele, y luz apagada, circuito off
  56.                         Gosub on_ledrojo
  57.                         Gosub on_rele                  
  58.                 Endif
  59.         Endif
  60.         If contador = 1 Then    'segunda fase del control de tiempos y maniobras
  61.                 If timer1_sg >= timer1 Then 'pasan los 120Seg, reconfigura para 10Seg.
  62.                         contador = 2
  63.                         timer1 = 10
  64.                         timer1_sg = 0
  65.                         Gosub off_rele  'rele off y luz apagada, el circuito queda off
  66.                         led_flash = 1   'activa el parpadeo de los led
  67.                 Endif
  68.         Endif
  69.         If contador = 2 Then    'tercera fase del control de tiempos y maniobras
  70.                 If timer1_sg >= timer1 Then     'pasan los 10seg. reconfigura a 120seg
  71.                         led_flash = 0   'desactiva el parpadeo de los led
  72.                         contador = 1    'se cambia la fase de temporizacion
  73.                         timer1 = 120    'base tiempos timer1_sg, para que cuente 2 minutos
  74.                         timer1_sg = 0   'activa el contaje de la base de tiempos timer1_sg
  75.                         Gosub on_rele   'activa el rele
  76.                         Gosub on_ledverde       'activa el led verde
  77.                         Gosub on_ledrojo        'activa el led rojo
  78.                 Endif
  79.         Endif
  80. Goto main
  81. End
  82. '********************* Subrutinas del programa ****************************************
  83. on_ledverde:    'prende el led verde
  84.         GPIO.5 = 0
  85. Return
  86. off_ledverde:   'apaga el led verde
  87.         GPIO.5 = 1
  88. Return
  89. on_ledrojo:     'enciende el led rojo
  90.         GPIO.4 = 0
  91. Return
  92. off_ledrojo:    'apaga el led rojo
  93.         GPIO.4 = 1
  94. Return
  95. on_rele:        'activa el rele
  96.         GPIO.0 = 1
  97.         GPIO.1 = 0
  98. Return
  99. off_rele:       'desactiva el rele
  100.         GPIO.0 = 0
  101.         GPIO.1 = 1
  102. Return
  103. off_todo:       'todos los elementos a off
  104.         GPIO.5 = 1
  105.         GPIO.4 = 1
  106.         GPIO.0 = 0
  107.         GPIO.1 = 1
  108. Return
  109.  
  110.  
  111. '*********************** Rutina de las interrupciones***********************************
  112. On Interrupt  'Comienzan las rutinas de las interrupciones, desactiva las interrupciones
  113.         Save System  'Guarda los valores del sistema
  114. '--------------------------------------RUTINA TIMER_1-----------------------------------
  115.         If PIR1.TMR1IF = 1 Then  'comprueba interrupcion activa (solo hay una)
  116.                 timer_base = timer_base + 1     'incrementa con cada desbordamiento timer1
  117.                 If timer_base >= timer_base_aux Then  'control del numero desbordamientos
  118.                         If timer1_sg < timer1 Then timer1_sg = timer1_sg + 1 'base tiempos
  119.                         If led_flash > 0 Then   'hace que los led se vuelvan intermitentes
  120.                                 If flash = 0 Then       'desconecta los led
  121.                                         GPIO.5 = 0
  122.                                         GPIO.4 = 0
  123.                                         flash = 1       'permite que se conecten los led
  124.                                 Else
  125.                                         GPIO.5 = 1      'conecta los led
  126.                                         GPIO.4 = 1
  127.                                         flash = 0       'permite que se desconecten los led
  128.                                 Endif
  129.                         Endif
  130.                         timer_base = 0  'reinicializa el valor de la base de tiempos patron
  131.                 Endif
  132.         Endif
  133.         TMR1H = 0xfc    'carga el registro del timer1, para que desborde cada 1mSeg.
  134.         TMR1L = 0x18
  135.         PIR1.TMR1IF = 0  'borra el flag de salto del tmr1
  136. Resume  'activa las interrupciones y retorna al programa
  137. END ' **********************************

y aqui podeis descargar el articulo completo

http://www.freewebs.com/glafebre/extractordeolores.htm
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: LordLafebre en 08 de Octubre de 2006, 16:18:27
Hola:

Maistro, un útil proyecto para despuers de ir al baño, mas aun si se ha cenado frijoles  :D :D :D , gracias por permitirlo colgar en mi web.  :mrgreen: :-/
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: dogflu66 en 08 de Octubre de 2006, 16:23:48
Gracias a ti pana.

Ya tenia gana de abrir un hilo en el que se hiciera referencia al... (http://img68.imageshack.us/img68/6100/tfr1db3nc0.gif)  :D :D
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: LordLafebre en 08 de Octubre de 2006, 16:27:09
Hola:

ya era hora maistro, alli te pasas casi todo el dia  ja ja ja ja :D :D :D , creo que te es de mucha utilidad el proyecto ja ja ja  :D :D :D
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: dogflu66 en 08 de Octubre de 2006, 16:30:19
no puedo decir que no, maistro, ya que tengo dos instalados en mi casa...  :D :D :D :D :mrgreen:
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: LordLafebre en 08 de Octubre de 2006, 16:31:57
Hola:

Bien maistro, ya lo armare para estrenarlo  :D :D :-/ :-/
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: RedPic en 08 de Octubre de 2006, 16:56:24
Seguro que a mi esposa le interesa, ya que dice no se qué de mí cuando salgo del baño ... ja ja ja  :D  :D  :D

Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: PAOLA09 en 08 de Octubre de 2006, 18:01:55
Ya sabia yo que tanta alusión al baño era por algo, hasta que subiste el proyecto :D :D.

Asi puedes entretenerte con tus 5 minutos  :D :D :D :D :D :D.
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: dogflu66 en 08 de Octubre de 2006, 18:28:52
Unos cinco minutos bien ventilados....  :D :D :D

Red no le enseñes este hilo a tu mujer o te veo construyendo alguno...   :mrgreen:
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: Nocturno en 09 de Octubre de 2006, 01:49:00
Bonito e higiénico proyecto, querido Carlos.

He mirado el esquema y no entiendo cómo funciona la parte de la lámpara, la alimentación 220V y el interruptor doble ese. ¿Puedes explicarlo?
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: Chaly29 en 09 de Octubre de 2006, 08:00:41
Hola Nocturno, el "interruptor doble " que mencionas no es manual, si no que es un relay doble inversor y trabaja de la siguiente manera:

* Cuando el vetilador y la lampara estan apagados el relay se encuentra en estado de reposo, tal como se ve en el esquema.

* Al energizar la lampara tambien estas alimentando el circuito y este alimenta el relay, de tal forma todo el temporizador pasa a estar alimentado directamente de la linea de 220Vca, entonces por mas que se apage la lampara el temporizador sigue en funcionamiento.

* Cuando el tiempo necesario a transcurrido (2 min), el PIC corta la alimentación del relay, este pasa al estado de reposo, si la lampara esta apagada el circuito pierde la alimentación y todo regresa al punto inicial, y si la lampara sigue encendida el PIC luego de un tiempo prudencial vuelve a accionar el relay alimentando nuevamente el relay, de esta forma asta que la lampara se apague.

Ahora lo que sí no entiendo es el doble transistor para accionar el relay, y le haría una pequeña reforma al circuito y ya que estamos usando un PIC con A/D detectaría si hay caída de tensión en el sector de 12V para que el tiempo que esté el relay en estado de reposo sea mínimo y no perturbar mucho la alimentación del PIC, también de esta forma eliminamos la posibilidades de falla por caer en el tiempo muerto que posee el circuito, pero esto solo es una opinión personal. Seguro tal como esta les será de utilidad a más de uno  :mrgreen:

Un saludo a todos.

Atte. CARLOS.
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: dogflu66 en 09 de Octubre de 2006, 20:14:00
Muy buena Carlos, pegare la explicación directamente en la memoria del proyectito..  quiero mas como esta... (http://img170.imageshack.us/img170/9480/jijicb3.gif)

No tengo nada que añadir con respecto a lo que dijo Carlos, tan solo decir que el rele no se activa hasta pasados 30Seg después de encender la luz del cuarto de baño... por lo que durante esos primeros segundos el circuito dependerá del interruptor de encendido de la lámpara del wc (para visitas rápidas al wc).

Marcare mejor el rele y añadiré un esquema con el conexionado eléctrico en bloques.

El doble transistor es por utilizar dos señales opuestas para activar el rele, se usa en industrial cuando quieres dar algo mas de seguridad al control del rele, ya sea porque se traspase un transistor, o quede bloqueado el micro o le pueda caer a alguien algo encima (si quieres llámalo una manía mía tambien de (http://img170.imageshack.us/img170/7985/locokd7.gif)jejeje).

El tiempo muerto?, que tiempo muerto?... jejeje, el estado inestable del circuito lo aprovecho para que el circuito pase a un estado estable, tan estable que deja de funcionar.. mas estable que eso no creo... jajaja.

Y me desvelaste el resto del hilo con el tema del ADC.... (http://img117.imageshack.us/img117/3185/lloraryr8.gif)

Pd. Estoy preparando un .pdf, con todos mis proyectitos, asi que cualquier critica, correccion.... etc, es bienvenida, gracias panas.

otro Pd. Gracias Carlos.
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: Chaly29 en 09 de Octubre de 2006, 23:24:43
Hola dogflu66, bueno me alegra haber estado vastante hacertado en el tema del temporizador  :D

El punto muerto del que hablo esta producido por el hecho de que tú no usas ningun tipo de detección de la tensión de la linea proveniente de la lampara, y solo te vales en el hecho de que cuando la lampara este apagada el circuito dejará de funcionar, y es así, pero ete aquí que si fracciones de segundos antes de que el relay pase a conectar la linea del WC para sensar la alimentación de la misma y justo en ese intervalo de tiempo la alimentación del PIC cae por debajo de la permitida, este no tendrá el tiempo suficiente de reconectar los 220Vca directos y se producirá el apagado del sistema siendo que debería permanecer encendido por lo menos 2 min más.

Entonces la solución es medir la tensión de los 12V inmediatamente despues del rectificador, si la lampara del WC esta apagada y mides tensión en un intervalo de tiempo X podrás determinar si la misma decae o permanece estable, si decae es indicativo de que la lampara esta apagada, entonces tienes tiempo de conmutar el relay y continuar los 2 min extras con la tensión de 220Vca directa y cumpliendo con los requisitos que as mencionado.

Esto te lo comento ya que si estas usando un 12F675 puedes aprovechar el A/D de manera muy sencilla con solo colocar 2 resistencias y conseguiras un funcionamiento mucho más seguro (ya que trabajamos con terminos industriales :mrgreen:)

Bueno, espero que entiendas mi explicación, si te interesa el tema y no entiendes algo solo pregunta, OK.

Un saludo.

Atte. CARLOS.
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: 5GTT en 10 de Octubre de 2006, 01:15:45
El unico fallo que le veo, es que ahora con el zumbido del ventilador seria mas complicado la concentracion. Digo esto por que supongo que mas de uno le ocurrira lo que a mi, que me estoy estudiando la carrera un 50% en la biblioteca y el otro 50 en el baño xD.

Eso si la utilidad del invento es indiscutilble, solo falta un añadido que suelte fragancia y ya es perfecto.

Saludos y gracias por compartir tu ingenio.
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: dogflu66 en 10 de Octubre de 2006, 10:30:13
En términos industriales noooooo, soy muy joven todavía para morir tan pronto... (http://img170.imageshack.us/img170/999/jajanm6.gif)
Gracias Carlos.
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: dogflu66 en 18 de Octubre de 2006, 20:23:49
Ya termine el articulo sobre el automatismo, el que quiera echar un vistazo para comentar, corregir, criticar o cualquier cosa lo puede descargar provisionalmente de aquí
http://www.mytempdir.com/1001086

Espero que si no les sirve para nada por lo menos se divirtieran tanto como yo...
Le quise dar un toque de humor al hilo, con eso me conformo... (http://img117.imageshack.us/img117/4213/happypg7.gif)

que ustedes lo disfruten (http://img170.imageshack.us/img170/5693/wcdk2.gif)

PD. (http://img170.imageshack.us/img170/999/jajanm6.gif)
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: dogflu66 en 18 de Octubre de 2006, 21:17:49
Ya quedo alojada la nueva versio del articulo, Gracias Lord.

http://www.freewebs.com/glafebre/extractordeolores.htm
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: dogflu66 en 26 de Octubre de 2006, 18:33:14
Una nueva version de soft la 1.3
active el watchdog al 12f675
en el programita solo hay una instruccion en asm a ver si la encuentras...

Código: Visual Basic
  1. '*********************************************************************************************
  2. 'NOMBRE: Temporizador_WC_13
  3. 'MICRO: PIC12F675
  4. 'DESCRIPCION: Automatismo para el control de un ventilador de WC, deteccion por entrada digital
  5. 'FECHA/AUTOR: By COS, 09/06, 10/06
  6. 'Version 1.0
  7. 'oscilador interno
  8. 'versión 1.1 soft, versión 1.1 hard, compatible versión 1.0 de soft con versión 1.1 de hard
  9. 'Cambio del soft para emplear una entrada que detecta perdida de alimentación en la lámpara
  10. 'simplificación del disparo del rele
  11. 'modificación del sistema de control de las salidas
  12. 'Versión 1.3
  13. 'se activa el WDT
  14. 'se cambia la rutina del control de flash de los led para hacerlos independientes uno del otro
  15. '**********************************************************************************************
  16. ' ************************ Declaración de variables ******************
  17. Dim timer_base As Word 'base patrón para los timer
  18. Dim timer_base_aux As Word 'establece el tiempo en mSeg, en el que se basaran los timer
  19. Dim contador As Byte 'variable que controla la fase en la que se encuentran las temporizaciones
  20. Dim timer1_sg As Word 'primera base de tiempos, para el control de rutinas
  21. Dim timer1 As Word 'indica el tiempo para la base timer_sg
  22. Dim led_flash_verde As Byte 'permite que se ejecute la rutina que se
  23.                                   'se encarga del parpadeo del led verde
  24. Dim led_flash_rojo As Byte 'permite que se ejecute la rutina que se
  25.                                   'sencarga del parpadeo del led rojo
  26. Dim flash_verde As Byte 'indica dentro de la rutina si el próximo
  27.                                   'estado del led apagado o encendido, verde
  28. Dim flash_rojo As Byte 'indica dentro de la rutina si el próximo
  29.                                  'estado del led apagado o encendido, rojo
  30. Dim rele As Bit 'controla el estado del rele
  31. Dim ledverde As Bit 'controla el estado del led verde
  32. Dim ledrojo As Bit 'controla el estado del led rojo
  33. ' ************************* Asignación de valores de las variables *******
  34. timer_base = 0 'inicializa el timer_base
  35. timer_base_aux = 1000 'establece el desbordamiento de timer_base, 1Seg
  36. contador = 0 'establece la fase cero del programa main
  37. timer1_sg = 0 'inicializa el timer1_sg
  38. timer1 = 30 'establece el desbordamiento de timer1_sg, 30Seg
  39. led_flash_verde = 1 'flash del led verde habilitado
  40. led_flash_rojo = 0 'flash del led rojo deshabilitado
  41. flash_verde = 0 'estado inicial del flash del led verde
  42. flash_rojo = 0 'estado inicial del flash del led rojo
  43. rele = 0 'estado inicial del rele, off
  44. ledverde = 1 'estado inicial del led verde, on
  45. ledrojo = 0 'estado inicial del led rojo, off
  46. ' ************************ Inicialización de registros generales y de E/S *********
  47. VRCON = 0x00 'vref off (power off the comparator voltage)
  48. ANSEL = 0x00 'off ADC
  49. TRISIO = 0x00 'tri-state pins, are outputs
  50. GPIO = 0x00 'clear port
  51. GPIO.5 = 1 'pin a 1, maniobra invertida, activa a cero
  52. GPIO.4 = 1 'pin a 1, maniobra invertida, activa a cero
  53. GPIO.1 = 1 'para mantener la compatibilidad con la ver. 1.0 de hard
  54. TRISIO.2 = 1 'GP2 pin, is input
  55. CMCON = 0x07 'comparator off
  56. WaitMs 10 'pausa de 10mSeg.
  57. ' *********** habilitación de interrupciones y programación del timer1 ****
  58. INTCON.PEIE = 1 'bit de habilitación de interrupciones de periféricos
  59. T1CON.TMR1ON = 1 'bit de habilitación del temporizador timer1
  60. T1CON.TMR1CS = 0 'bit de selección de reloj para el timer1, interno Fosc/4
  61. INTCON.T1IE = 1 'bit de habilitación de interrupción de TMR1 por rebose
  62. T1CON.T1CKPS0 = 0 'bit de selección del prescaler para el reloj del timer1
  63. T1CON.T1CKPS1 = 0 'bit de selección del prescaler para el reloj del timer1
  64. TMR1H = 0xfc 'carga el byte alto del registro del tiemr1 (1mSeg)
  65. TMR1L = 0x18 'carga el byte bajo del registro del timer1 (1mSeg)
  66. PIE1.TMR1IE = 1 'activa la interrupción del timer1
  67. OPTION_REG.T0CS = 0 'selecciona reloj interno para el WDT
  68. OPTION_REG.PSA = 1 ' asigna el prescales al WDT
  69. OPTION_REG.PS0 = 1 ' bit de la selección del factor de división para el WDT
  70. OPTION_REG.PS1 = 1 ' bit de la selección del factor de división para el WDT
  71. OPTION_REG.PS2 = 1 ' bit de la selección del factor de división para el WDT
  72. INTCON.T0IE = 0 ' deshabilito interrupción por el trm0
  73. Enable 'INTCON.GIE habilita las interrupciones generales
  74. ' ************* Rutina del programa ***************************************
  75. main:
  76.   ASM: clrwdt 'reinicializa el WDT antes que se desborde
  77.  If contador = 0 Then 'primera fase del control de tiempos y maniobras
  78.    If timer1_sg >= timer1 Then 'si pasan los primeros 30Seg.
  79.      contador = 1 'permite la siguiente fase
  80.      timer1 = 0 'configura la base de tiempos con un nuevo valor 0Seg
  81.      timer1_sg = 0 'activa la base de tiempos
  82.      led_flash_verde = 0 'desconecta el parpadeo del led verde
  83.      led_flash_rojo = 1 'conecta el parpadeo del led rojo
  84.      ledverde = 0 'apaga el led verde
  85.      ledrojo = 1 'prende el led rojo
  86.      rele = 0 'desconecta el rele
  87.    Endif
  88.   Endif
  89.   If contador = 1 Then 'segunda fase del control de tiempos y maniobras
  90.    If timer1_sg >= timer1 Then 'cuando termina la base de tiempos
  91.                                          'según el ultimo valor del timer1
  92.      If GPIO.2 = 0 Then 'comprueba que hay alimentación en la fuente
  93.        contador = 2 'permite la siguiente fase
  94.        timer1 = 120 'carga la base de tiempos para que cuente 2minutos
  95.        timer1_sg = 0 'activa la base de tiempos
  96.        flash_verde = 1 'sincroniza el destello con el led rojo
  97.        flash_rojo = 1 'sincroniza el destello con el led verde
  98.        led_flash_verde = 1 'permite el parpadeo del led verde
  99.        led_flash_rojo = 1 'permite el parpadeo del led rojo
  100.        ledverde = 1 'prende el led verde
  101.        ledrojo = 1 'prende el led rojo
  102.        rele = 1 'energiza la bobina del rele
  103.      Endif
  104.     Endif
  105.   Endif
  106.   If contador = 2 Then 'tercera fase del control de tiempos y maniobras
  107.    If timer1_sg >= timer1 Then 'cuando pasan los 120seg.
  108.      contador = 1 'se cambia de fase
  109.      timer1 = 1 'se prepara la base de tiempos timer1_sg, para que cuente 1Seg.
  110.      timer1_sg = 0 'activa el contaje de la base de tiempos timer1_sg
  111.      rele = 0 'desconecta el rele
  112.      flash_verde = 1 'encendido alternativo del led verde con respecto al rojo
  113.      flash_rojo = 0 'encendido alternativo del led rojo con respecto al verde
  114.      led_flash_verde = 1 'permite el parpadeo del led verde
  115.      led_flash_rojo = 1 'permite el parpadeo del led rojo
  116.      ledverde = 1 'activa el led verde
  117.      ledrojo = 1 'activa el led rojo
  118.    Endif
  119.   Endif
  120. Goto main
  121. End
  122. On Interrupt 'Comienzan las rutinas de las interrupciones, desactiva las interrupciones
  123.  Save System 'Guarda los valores del sistema
  124. '-------------------------------------- control salidas -----------------------------------------
  125.  If ledverde = 1 Then 'controla el estado de la salida del led verde
  126.    GPIO.5 = 0 'prende led verde
  127.  Else
  128.     GPIO.5 = 1 'apaga led verde
  129.  Endif
  130.   If ledrojo = 1 Then 'controla la salida del led rojo
  131.    GPIO.4 = 0 'prende led rojo
  132.  Else
  133.     GPIO.4 = 1 'apaga led rojo
  134.  Endif
  135.   If rele = 1 Then 'controla la salida del rele
  136.    GPIO.0 = 1 'energiza rele
  137.    GPIO.1 = 0 'energiza rele, compatibilidad con la ver. 1.0 de hard
  138.  Else
  139.     GPIO.0 = 0 'desconecta el rele
  140.    GPIO.1 = 1 'desconecta el rele, compatibilidad con la ver. 1.0 de hard
  141.  Endif
  142. '-------------------------------------- bases de tiempos y flash diodos-----------------------------------------
  143.  If PIR1.TMR1IF = 1 Then 'comprueba que es esta la interrupción activa
  144.                                   '(por costumbre, en este caso solo hay una)
  145.    timer_base = timer_base + 1 'se incrementa con cada desbordamiento del timer1
  146.    If timer_base >= timer_base_aux Then 'control del numero de desbordamientos 'según el valor de timer_base_aux
  147.      If timer1_sg < timer1 Then timer1_sg = timer1_sg + 1 'base de tiempos timer1
  148.      If led_flash_verde > 0 Then 'se encarga de hacer el led verde intermitente
  149.        If flash_verde = 0 Then 'controla el parpadeo del led verde
  150.          ledverde = 0 'conecta el verde
  151.          flash_verde = 1 'variable de control, permite que se conecte el verde
  152.        Else
  153.           ledverde = 1 'desconecta el verde
  154.          flash_verde = 0 'variable de control, controla el parpadeo
  155.        Endif
  156.       Endif
  157.       If led_flash_rojo > 0 Then 'se encarga de hacer el led rojo intermitente
  158.        If flash_rojo = 0 Then 'controla el parpadeo del rojo
  159.          ledrojo = 0 'conecta el led rojo
  160.          flash_rojo = 1 'variable de control, permite que se conecten los led
  161.        Else
  162.           ledrojo = 1 'desconecta el led rojo
  163.          flash_rojo = 0 'variable de control, controla el parpadeo
  164.        Endif
  165.       Endif
  166.       timer_base = 0 'se reinicialaza el valor de la base de tiempos patrón
  167.    Endif
  168.   Endif
  169.   TMR1H = 0xfc 'carga el registro del timer1, para que desborde cada 1mSeg.
  170.  TMR1L = 0x18
  171.   PIR1.TMR1IF = 0 'borra el flag de salto del tmr1
  172. Resume 'activa las interrupciones y retorna al programa
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: Chaly29 en 26 de Octubre de 2006, 22:48:09
Hola dogflu66, creo que es esta :mrgreen:

ASM: clrwdt 'reinicializa el WDT antes que se desborde

Ahora hablando de premios ¿que me e ganado?  :D :D :D :D

Un saludo.

Atte. CARLOS.
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: LordLafebre en 27 de Octubre de 2006, 00:23:10
Hola:

Chaly, yo creo que te ganaste una ida a (http://img170.imageshack.us/img170/5693/wcdk2.gif)

 :D :D :D :D :D :D :D :D

PD: no lo tomes a mal, es una bromita :D
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: Chaly29 en 27 de Octubre de 2006, 00:51:43
Hola LordLafebre, es el premio por haber ganado en este post :D :D :D :D, pero no tengo el ventilador instalado :mrgreen:

Un saludo.

Pda. y por supuesto que no me enojo, ni lo tomo mal, claro esta dadas las circunstancias.
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: dogflu66 en 27 de Octubre de 2006, 19:19:29
pues si no tienes ventilador te toca pasar el rato depurando el aire respirando profundamente y rapido...(http://img170.imageshack.us/img170/9480/jijicb3.gif)
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: dogflu66 en 27 de Octubre de 2006, 19:36:53
Premio?.. que premio?.. donde hay un premio?.. yo lo quieeeroooo...  :mrgreen:
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: dogflu66 en 09 de Noviembre de 2006, 20:05:08
Ya podeis descargar la ultima version del articulo

Version 1.3 (http://www.freewebs.com/glafebre/extractordeolores.htm)
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: dogflu66 en 18 de Noviembre de 2006, 12:13:28
tengo una duda que mas que duda es curiosidad, yo inserto la linea de abajo en mi codigo de lenguaje de alto nivel, esta linea mi compilador la interpretara como codigo nemotecnico ya que esta escrita en assembler el mal llamado ASM.

ASM: clrwdt 'reinicializa el WDT antes que se desborde

bien, esto funciona perfectamente. Si no coloco esta linea en mi programa, el micro esta continuamente reseteandose.

pues aqui esta la duda "clrwdt" tiene que ir siempre precedida de la seleccion del banco de memoria en assembler segun tengo entendido?, asi que mi programa funciona simplemente por coincidencia o mi compilador me hizo un arreglo.. por supuesto esto lo puedo ver desensamblando el programa, pero solo les pido su opinion.
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: Chaly29 en 18 de Noviembre de 2006, 18:49:54
Hola dogflu66, clrwdt no tiene que estar precedida por nada, donde te guste ponerla dentro del programa ella funcionará, es sencillamente una instrucción que borra tanto el contador como el prescaler del watchdog.

Un saludo.

Atte. CARLOS.
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: dogflu66 en 18 de Noviembre de 2006, 19:03:07
Gracias carlos, una duda resuelta.
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: jucemoar en 20 de Noviembre de 2006, 13:56:56
hola<  a to2
1- que todole  comento  que  no se  programar  en C  solo en asm  y estoy buscando desde  hace  ratoo como colocar  ese  RTC   en un circuito pero  que  se  vea  en display de  7seg. si alguien me puedr  aydar les estar  muy agradecidi atte  julio c.. mail-  jucemoar@hotmail.com  gracias  a  to2 :-/ :-/ :-) :lol: :)
Título: Re: Automatismo para ventilador de WC con PIC12F675
Publicado por: dogflu66 en 20 de Noviembre de 2006, 21:58:20
jejeje, eso queda un poco fuera de lugar aqui, pero de todas formas mira por aqui
http://www.oshonsoft.com/picexamples.html

apenas he trabajado con rtc y display 7seg. pero de seguro que si utilizas el buscador del foro te saldran infinidad de temas sobre eso, ya que son temas muy populares en el foro.