Autor Tema: Automatismo para ventilador de WC con PIC12F675  (Leído 10408 veces)

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

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Automatismo para ventilador de WC con PIC12F675
« Respuesta #15 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...

que ustedes lo disfruten

PD.
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Automatismo para ventilador de WC con PIC12F675
« Respuesta #16 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
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Automatismo para ventilador de WC con PIC12F675
« Respuesta #17 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
Saludos desde Granada, España.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Automatismo para ventilador de WC con PIC12F675
« Respuesta #18 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.
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Automatismo para ventilador de WC con PIC12F675
« Respuesta #19 en: 27 de Octubre de 2006, 00:23:10 »
Hola:

Chaly, yo creo que te ganaste una ida a

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

PD: no lo tomes a mal, es una bromita :D

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Automatismo para ventilador de WC con PIC12F675
« Respuesta #20 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.
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Automatismo para ventilador de WC con PIC12F675
« Respuesta #21 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...
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Automatismo para ventilador de WC con PIC12F675
« Respuesta #22 en: 27 de Octubre de 2006, 19:36:53 »
Premio?.. que premio?.. donde hay un premio?.. yo lo quieeeroooo...  :mrgreen:
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Automatismo para ventilador de WC con PIC12F675
« Respuesta #23 en: 09 de Noviembre de 2006, 20:05:08 »
Ya podeis descargar la ultima version del articulo

Version 1.3
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Automatismo para ventilador de WC con PIC12F675
« Respuesta #24 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.
Saludos desde Granada, España.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Automatismo para ventilador de WC con PIC12F675
« Respuesta #25 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.
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Automatismo para ventilador de WC con PIC12F675
« Respuesta #26 en: 18 de Noviembre de 2006, 19:03:07 »
Gracias carlos, una duda resuelta.
Saludos desde Granada, España.

Desconectado jucemoar

  • PIC10
  • *
  • Mensajes: 24
Re: Automatismo para ventilador de WC con PIC12F675
« Respuesta #27 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: :)

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Automatismo para ventilador de WC con PIC12F675
« Respuesta #28 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.
Saludos desde Granada, España.