Foro de elhacker.net

Informática => Electrónica => Mensaje iniciado por: 16BITS en 13 Febrero 2014, 02:59 am



Título: Ayuda con un proyecto!
Publicado por: 16BITS en 13 Febrero 2014, 02:59 am
Hola amigos soy nuevo en la comunidad, ahora tengo una gran duda pues realizare un proyecto y tratando de salir un poco de lo rudimentario quisiera hacer algo inovador, quisiera poder programar un pic para poder usar diferentes rutinas al pulsar "push botons" por ejemplo el GIRO De UN MOTOR ACTIVARLO POR (Boton1) --> 5 min, BOTON 2 --> 10 min. ETC ETC y con que pic lo haria!   ( Eh manejado PIC16F84A y programaba con Pic Simulator!


Título: Re: Ayuda con un proyecto!
Publicado por: El Che Guevara en 13 Febrero 2014, 03:45 am
 :¬¬


Título: Re: Ayuda con un proyecto!
Publicado por: Meta en 13 Febrero 2014, 05:38 am
Hola amigos soy nuevo en la comunidad, ahora tengo una gran duda pues realizare un proyecto y tratando de salir un poco de lo rudimentario quisiera hacer algo inovador, quisiera poder programar un pic para poder usar diferentes rutinas al pulsar "push botons" por ejemplo el GIRO De UN MOTOR ACTIVARLO POR (Boton1) --> 5 min, BOTON 2 --> 10 min. ETC ETC y con que pic lo haria!   ( Eh manejado PIC16F84A y programaba con Pic Simulator!

Hola:

1. ¿Puedes decir que tipo de motor usas, si es un motor DC normalito, un motor pasp a paso (PAP)?

2.
¿Puedes explicar mejor paso a paso cuántos botones quieres para el PIC16F84A?

3. ¿También puedes explicar otras cosas más detallado para entenderte? POr ejemplo, dices que si pulsas un botón el motor gira. No entiendo que quieres decir 5 minutos y luego 10 minutos.

Un cordial saludo.


Título: Re: Ayuda con un proyecto!
Publicado por: 16BITS en 13 Febrero 2014, 05:46 am
Pues Es Un Motor DC, y pues la idea es programar un pic para poder hacer que gire por determinados tiempos, EJEMPLIFICANDO: 


Quisiera tener digamos 3 Pulsadores, con estos mismos poder accionar el motor en tiempos diferentes,

Pulsador1 - Que active el motor por 5 min

Pulsador2 - Que active el motor por 10 min

Pulsador3 - Que lo active por 20 min

Quiero saber como podria hacer eso! :C


Título: Re: Ayuda con un proyecto!
Publicado por: Meta en 13 Febrero 2014, 05:57 am
Buenas:

Te entiendo mejor, aún así te falta más información que te diré ahora. De entrada se puede hacer. No has dicho si lo vas hacer bajo ASM o en C o otro lenguaje.

Si tienes ya pulsado el botón 2 que dura 10 minutos el motor encendido. ¿Qué ocurre al PIC si pulsas otro botón si aún no se ha acabado el tiempo?

Lo pregunto porque en este sentido no has comentado nada.

Si pulsando el botón 2 se activa durante 10 minutos, luego me da por pulsar el botón 1. ¿Qué ocurre?

Pues depende como lo programes, en este caso no hace nada hasta que acabe los 10 minutos, o se interrumpe el tiempo ya empezado y empieza los 5 minutos desde cero del botón 1.

¿Cómo lo deseas?

Hay que indicar paso por paso lo que quieres realmente.

Otra cosa. ¿No has pensado en un 4º botón para cancelar los tiempos y detener el motor?

Un saludo.


Título: Re: Ayuda con un proyecto!
Publicado por: 16BITS en 13 Febrero 2014, 06:06 am
Bueno Tocaste un buen punto, pensandolo creo que seria factible que al oprimir un segundo boton mediante el proceso ya iniciado, estaria bien que se "sustituya el tiempo por el boton oprimido.

Puntos Claves.

Si Ya Se Inicio Una Rutina Podria Cambiar El Tiempo Oprimiendo Otro Botón.

Al Igual Que Contar Con Un RESETEO

Pretendo Programarlo En El Lenguaje Mas Noble (Debido A Que No Cuento Con Los Conocimientos Para Usar Uno Muy Complejo.

Quisiera Tambier Saber Como Poder Mover El Motor Con El Pic, Debido a que tiene sus salidas de 5V. y el motor es de 12V ? Necesito un integrado

Ya me di a la busqueda de tutoriales, y Mas.

De Antemano GRACIAS!


Título: Re: Ayuda con un proyecto!
Publicado por: Meta en 13 Febrero 2014, 07:47 am
Hola:

Quiero saber más información. ¿El motor solo irá en un sentido?

El motor necesita un driver o controlador, el mñas usado es este L293D o L293B. La diferencia son que el primero aguanta 0.6 A. y tiene los diodos de protecciónincluido, el otro aguanta 1 A. y los diodos tienes que usarlo al exterior como el 1N4007.

Aquí hay ejemplos.
(http://pic16f84a.org/images/stories/proteus/Fig2909_MotorDC.GIF)
http://pic16f84a.org/proteus.html#Proteus_Capitulo_29

Aquí un código en asm, para controlar motores está bien. No tiene nada que ver con tu propuesta, está bien para coger ideas.

Código
  1. ;************************************* MotorDC_01.asm **********************************
  2. ;
  3. ; ===================================================================
  4. ;  Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
  5. ;  E. Palacios, F. Remiro y L. López. www.pic16f84a.com
  6. ;  Editorial Ra-Ma.  www.ra-ma.es
  7. ; ===================================================================
  8. ;
  9. ; Programa de control para un motor de corriente continua en funcionamiento y sentido de
  10. ; giro. Con RA0=0, el motor se pone en marcha y su sentido de giro dependerá del valor
  11. ; que tenga RA4.
  12. ;
  13. ; ZONA DE DATOS **********************************************************************
  14.  
  15. LIST P=16F84A
  16. INCLUDE <P16F84A.INC>
  17. __CONFIG _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
  18.  
  19. #DEFINE  EntradaMarcha PORTA,0 ; Interruptor de puesta en marcha.
  20. #DEFINE  EntradaSentido PORTA,4 ; Interruptor de sentido de giro.
  21.  
  22. ; ZONA DE CÓDIGOS ********************************************************************
  23.  
  24. ORG 0
  25. Inicio
  26. bsf STATUS,RP0
  27. bsf EntradaMarcha ; Configura las líneas de entrada.
  28. bsf EntradaSentido
  29. clrf PORTB ; Las líneas del Puerto B configuradas como salida.
  30. bcf STATUS,RP0
  31. Principal
  32. clrw ; Con esta combinación se detiene el motor.
  33. btfsc EntradaMarcha ; Comprueba el estado del interruptor de funcionamiento.
  34. goto ActivaSalida
  35. movlw b'00010010' ; Gira en un sentido.
  36. btfsc EntradaSentido     ; Comprueba el sentido de giro deseado.
  37. movlw b'00010001' ; Gira en el otro sentido.
  38. ActivaSalida
  39. movwf PORTB
  40. goto Principal
  41.  
  42. END

Ya que has nombrado el Reset, pues otra propuesta fácil de hacer es. Si tienes pulsado el botón 2 a 10 minutos, si pulsas otro botó, por ejemplo el botón 1. No se interrumpirá el proceso hasta que acabes el tiempo exceptuando que pulses Reset. Se detendrá todo. Está bien como seguridad.

Pregunta opcional.
¿Para qué es este experimento?

Saludo.


Título: Re:
Publicado por: 16BITS en 13 Febrero 2014, 18:14 pm
Es para un proyecto de la escuela es para un prototipo de calentar carnes pero mediando tiempos.

Enviado desde mi XT1032 mediante Tapatalk


Título: Re: Ayuda con un proyecto!
Publicado por: Meta en 14 Febrero 2014, 07:53 am
Hola:

¿Qué es lo que dices, no lo encuentro por google?

En cuanto al código te lo haré, deja acabar. Luego lo pruebas. ¿Tienes para grabar el PIC?

¿Tienes el circuito montado?

Un saludo.


Título: Re:
Publicado por: 16BITS en 15 Febrero 2014, 02:20 am
Si tengo un cargador de pic

Enviado desde mi XT1032 mediante Tapatalk


Título: Re:
Publicado por: 16BITS en 15 Febrero 2014, 02:21 am
Y tengo el circuito armado.  No está en Google es pura innovación  o eso se pretende

Enviado desde mi XT1032 mediante Tapatalk


Título: Re: Ayuda con un proyecto!
Publicado por: Meta en 15 Febrero 2014, 15:02 pm
Hola:

Lo tengo medio terminado y estoy haciendo pruebas. Hay una cosa que aún no me has escrito,  ::)

Por ejemplo, ¿el motor DC siempre funciona en un sentido o hay cambios de sentido?
Si hay cambios de sentidos el esquema de abajo te vale.
(http://pic16f84a.org/images/stories/proteus/Fig2909_MotorDC.GIF)

Si solo tiene un sentido, con un transistor y un diodo de protección te irá bien com indica abajo.
(http://embedded-lab.com/blog/wp-content/uploads/2010/12/Circuit_SingleTransistorDCMotor.png)

Motorcito. Rercuerda, dime que tensión usa el motor.
(http://embedded-lab.com/blog/wp-content/uploads/2010/12/Img_DC_Motor.jpg)

(http://davidhunt.ie/wp-content/uploads/2012/08/Motor1.jpg)

Esperando tus respuestas.
Puedes poner fotos de tu proyecto.

Saludo.


Título: Re: Ayuda con un proyecto!
Publicado por: 16BITS en 15 Febrero 2014, 19:21 pm
Que tal compañero muchas gracias por el apoyo, bueno el motor si gira para un solo lado no cambia el sentido. (http://s2.subirimagenes.com/imagen/previo/thump_8815926captura.png)

 
Unas Fotos adjuntas de el proyecto, te agradeceria si me muestras un diagrama como irian los pulsadores y todo.


(http://s2.subirimagenes.com/imagen/previo/thump_8815927proyecto1.png)


Título: Re: Ayuda con un proyecto!
Publicado por: Meta en 16 Febrero 2014, 09:34 am
Buenas:

1) ¿Cómo hiciste ese dibujo? ¿Con AudoCAD?

2)
Voy a ponerme manos a la obra. Motor sin sentido, 4 pulsadores:
Pulsador 1 --> 5 minutos.
Pulsador 2 --> 10 minutos.
Pulsador 3 --> 20 minutos.
Reset --> Para detener los tiempos. Es como si fuera un STOP. En realidad resetea el PIC y lo pone en modo inicio, esperando que pulses un botón.

3) Haré un esquema eléctrico y te comento los componentes que necesitas.

4)
¿Cuántos voltios aguanta el motor y cuanto consume? (Lo comento proque el PIC agauanta 5V y el motor puede ser más, así que deberás usar dos fuentes alimetación. En este momento de lo que me digas, hay que usar ciertos componentes o no).

En cuanto a grabar el archivo compilado llamado archivo.hex del PIC16F84A, aquí dejo dos tutoriales de como hacerlo. Uno con el famoso y popular grabador IC-Prog y el otro WinPIC800:
http://electronica-pic.blogspot.com.es/2009/03/manual-ic-prog.html
http://electronica-pic.blogspot.com.es/2009/03/manual-basico-del-winpic800.html
:)


Título: Re: Ayuda con un proyecto!
Publicado por: skapunky en 16 Febrero 2014, 11:43 am
@Meta faltaría el reset del pic no? Ya que por el esquema que veo no se usa la interrupción ni el MCLR del pic.

Yo para hacer un reset de tiempo, mediante el MCLR se puede realizar ya que lo que se hace es un reset del programa (es como apagar y encender) aunque trabajando con motores lo ideal es hacerlo mediante interrupción, éste pic por lo que veo tiene una, la INT0.

Yo pondría un pulsador de reset en la INT0 donde pausara el contador de tiempo reseteandolo. Además puedes añadir algo mas de código por si te interesa hacer algo al cancelar la temporizacion.


Título: Re:
Publicado por: 16BITS en 16 Febrero 2014, 16:10 pm
El dibujo lo hize en Google Sketchup, El motor es de 12V. Muchas Gracias Por Apoyarme Con Esto Amigo!

Enviado desde mi XT1032 mediante Tapatalk


Título: Re: Ayuda con un proyecto!
Publicado por: Meta en 17 Febrero 2014, 18:21 pm
Hola:

Me habías respondido desde ayer y no me había dado cuenta que ya pasó a la página 2.

En cuanto al INT, lo puedo poner, pero no hará efecto, ya que los tiempos son mediante subrutinas (http://electronica-pic.blogspot.com.es/2012/02/retardos-para-pic12f-16f-y-18f.html) y el PIC queda como esclavo, es decir, no puedes interrumpir una tarea ya comenzada hasta que esta se acabe. Sirve si usas un Timer 0 con interrupción, lo malo que no alcanza los 20 minutos de tiempo para ello, pero si en las subrutinas. Gracias por aportar ideas.

Por lo que se ve, ahora es esto:
Pulsador 1 --> 5 minutos.
Pulsador 2 --> 10 minutos.
Pulsador 3 --> 20 minutos.
Reset --> Para detener los tiempos. Es como si fuera un STOP. En realidad resetea el PIC y lo pone en modo inicio, esperando que pulses un botón.

Motor DC 12V.
PIC16F84A 5V.

¿Qué tecnología te gusta o driver para controlarlo?
Con un transistor y resistencias o con un IC L293D.

Usted elige, antes de que empiece hacer el esquema y programarlo en asm. También haré adaptaciones a otros PIC como 16F627A, 16F628A, 16F648A y 16F88 por si en algún funturo te haga falta.

Un saludo.


Título: Re:
Publicado por: 16BITS en 17 Febrero 2014, 21:35 pm
Hay ahí de el driver no se mucho, preferiría eso a tu criterio. En cuanto a lo otro preferiría un IC L293D.

Enviado desde mi XT1032 mediante Tapatalk


Título: Re: Ayuda con un proyecto!
Publicado por: Meta en 18 Febrero 2014, 01:10 am
Hola:

Si prefieres el L293D (http://www.youtube.com/watch?v=j7loGQ-dYGU), es más fácil, no hay que calcular nada ya que este IC aguanta de 4.5V a 36V hacia ese driver.

(http://www.adafruit.com/adablog/wp-content/uploads/2012/05/L293.png)

Ver vídeo para que te hagas una idea como funcona el driver.
j7loGQ-dYGU

De los tres motores que ves arriba, se usará en la parte arriba derecha.

Ya voy a empezar a programar..............

¿Alguna otra pregunta?

Saludo.


Título: Re:
Publicado por: 16BITS en 18 Febrero 2014, 06:59 am
Es todo amigo muchisimas gracias!

Enviado desde mi XT1032 mediante Tapatalk


Título: Re: Ayuda con un proyecto!
Publicado por: Meta en 18 Febrero 2014, 14:07 pm
Hola

Para que no te sientas avandonado, estoy con el código. Por ahora te muesto uno incompleto y no útil, solo para que sepas que estoy trabajando.

Edito:
Ya he acabado.
(http://www.subeimagenes.com/img/router-zyxel-850060.png)

Saludo.


Título: Re: Ayuda con un proyecto!
Publicado por: Meta en 18 Febrero 2014, 19:59 pm
Hola de nuevo:

He acabado esquema como el código. Quiero saber si todo está correcto y eches un ojo a todo. Haz pedido el "esquema 1" lo mensionado antes.
(http://www.subeimagenes.com/img/router-zyxel-850049.png)

Mi otra propuesta es este "esquema 2" de abajo. Se ha incluido un pulsador más para el STOP, por ahora no es funcional, estoy en ello por si lo logro. Por ahora sigue siendo el Reset. Otra cosa que he incluido son 3 Led, para que en todo momento tengas la seguridad en que tiempo tienes activo el temporizador actualmente.
(http://www.subeimagenes.com/img/router-zyxel-850073.png)

Lista de componentes para el segundo esquema:

Citar
Resistencias:
R1, R2, R3, R4, R5 = 10 K - 1/4W.
R7, R8, R9 = 330 Ohm - 1/4 W.
R6 = 100 Ohm -  1/4 W.

Condensadores:
C1, C2 = 22 pF / 6V
C3 = 100 nF / 6V

Diodos:
D1, D2, D3 = Led de 3 ó 5 mm color rojo, verde o naranja. 2V/25 mA.

Oscilador de cuarzo:
X1 = 4 MHz

Circuitos integrados:
IC1 = PIC16F84A-04
IC2 = L293D

Otros componentes:
M1 = Motor DC 12 V.
5 micropulsadores.

Aunque montes el primer esquema, la programación es del 2º y te funcionan igual.

¿Alguna otra sugerencia, pregunta, ayuda?

un saludo.


Título: Re: Ayuda con un proyecto!
Publicado por: 16BITS en 18 Febrero 2014, 21:04 pm
Creo que te quedo todo perfecto, la programacion me la pasarias por mi correo o aqui mismo lo subirias es que quisiera montarlo ya que cuento con el cargador de PIC. Muchas Gracias Por Tu Ayuda!


Título: Re: Ayuda con un proyecto!
Publicado por: Meta en 18 Febrero 2014, 22:16 pm
Hola:

La programación está aquí.
Muchas suerte.

Quiero si es posible y tu tiempo lo permite que, cuando tengas montado aunque sea protoboard o PCB, muestres fotos reales del proyecto, y si incluye un vídeo, mejor que mejor. Con tu permiso, subiré esas fotos y vídeos a mi blog con el proyecto completo gracias a ti.


(http://www.subeimagenes.com/img/motor-dc-pic16f84a-2-850192.png)

El código fuente:
Código
  1. ; ZONA DE DATOS **********************************************************************
  2.  
  3. LIST P=16F84A        ; Procesador.
  4. INCLUDE <P16F84A.INC>   ; Definición de las etiquetas del PIC.
  5. __CONFIG _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
  6.    __IDlOCS    0001            ; Versión del programa.
  7.  
  8. Variables UDATA_SHR
  9. RAM     RES 1
  10. RAM_1   RES 1
  11. RAM_2   RES 1
  12. RAM_3   RES 1
  13. RAM_4   RES 1
  14. RAM_5   RES 1
  15. RAM_6   RES 1
  16. RAM_7   RES 1
  17. RAM_8   RES 1
  18. RAM_9   RES 1
  19. RAM_10  RES 1
  20. RAM_11  RES 1
  21. RAM_12  RES 1
  22. RAM_13  RES 1
  23. RAM_14  RES 1
  24. RAM_15  RES 1
  25. RAM_16  RES 1
  26. RAM_17  RES 1
  27.  
  28. #DEFINE Pulsador_1 PORTA,4 ; Pulsador conectado a RA4.
  29. #DEFINE Pulsador_2  PORTA,3     ; Pulsador conectado a RA3.
  30. #DEFINE Pulsador_3  PORTA,2     ; Pulsador conectado a RA2.
  31. #DEFINE Pul_STOP    PORTA,1     ; Pulsador de parada del motor.
  32. #DEFINE Motor PORTB,7 ; Línea donde se conecta el motor.
  33. #DEFINE Led_1       PORTB,6     ; Led 1.
  34. #DEFINE Led_2       PORTB,5     ; Led 2.
  35. #DEFINE Led_3       PORTB,4     ; Led 3.
  36.  
  37. ; ZONA DE CÓDIGOS ********************************************************************
  38.  
  39. ORG 0 ; El programa comienza en la dirección 0.
  40. Inicio
  41. bsf STATUS,RP0 ; Acceso al Banco 1.
  42. bsf Pulsador_1 ; La línea RA4 se configura como entrada.
  43. bsf Pulsador_2 ; La línea RA3 se configura como entrada.
  44. bsf Pulsador_3 ; La línea RA2 se configura como entrada.
  45. bsf Pul_STOP     ; La línea RA1 se configura como entrada.
  46. bcf Motor ; Se configura como salida.
  47.    bcf     Led_1               ; Led de aviso 5 minutos en activo.
  48.    bcf     Led_2               ; Led de aviso 10 minutos en activo.
  49.    bcf     Led_3               ; Led de aviso 20 minutos en activo.
  50. bcf STATUS,RP0 ; Acceso al Banco 0.
  51. bcf Motor ; En principio Motor apagado igual
  52.    bcf     Led_1               ; que los Leds.
  53.    bcf     Led_2
  54.    bcf     Led_3
  55.  
  56. Principal
  57. btfsc Pulsador_1 ; ¿Pulsador presionado?, ¿(Pulsador)=0?
  58. goto Fin ; No. Vuelve a leerlo.
  59. call Retardo20ms ; Espera que se estabilicen los niveles de tensión.
  60. btfsc Pulsador_1 ; Comprueba si es un rebote.
  61. goto Fin ; Era un rebote y sale fuera.
  62.    bsf     Motor               ; Activa el motor y
  63.    bsf     Led_1               ; enciende el Led 1 que significa
  64. call Retardo5m           ; los 5 minutos encendido.
  65.    bcf     Motor               ; Apaga el motor y
  66.    bcf     Led_1               ; el Led 1.
  67. EsperaDejePulsar_1
  68. btfss Pulsador_1 ; ¿Dejó de pulsar?. ¿(Pulsador)=1?
  69. goto EsperaDejePulsar_1 ; No. Espera que deje de pulsar.
  70. Fin
  71.  
  72. btfsc Pulsador_2 ; ¿Pulsador presionado?, ¿(Pulsador)=0?
  73. goto Fin2 ; No. Vuelve a leerlo.
  74. call Retardo20ms ; Espera que se estabilicen los niveles de tensión.
  75. btfsc Pulsador_2 ; Comprueba si es un rebote.
  76. goto Fin2 ; Era un rebote y sale fuera.
  77.    bsf     Motor               ; Activa el motor y
  78.    bsf     Led_2               ; enciende el Led 2 que significa
  79. call Retardo10m          ; los 10 minutos encendido.
  80.    bcf     Motor               ; Apaga el motor y
  81.    bcf     Led_2               ; el Led 2.
  82. EsperaDejePulsar_2
  83. btfss Pulsador_2 ; ¿Dejó de pulsar?. ¿(Pulsador)=1?
  84. goto EsperaDejePulsar_2 ; No. Espera que deje de pulsar.
  85. Fin2
  86.  
  87. btfsc Pulsador_3 ; ¿Pulsador presionado?, ¿(Pulsador)=0?
  88. goto Fin3 ; No. Vuelve a leerlo.
  89. call Retardo20ms ; Espera que se estabilicen los niveles de tensión.
  90. btfsc Pulsador_3 ; Comprueba si es un rebote.
  91. goto Fin3 ; Era un rebote y sale fuera.
  92.    bsf     Motor               ; Activa el motor y
  93.    bsf     Led_3               ; enciende el Led 3 que significa
  94. call Retardo20m          ; los 10 minutos encendido.
  95.    bcf     Motor               ; Apaga el motor y
  96.    bcf     Led_3               ; el Led 3.
  97. EsperaDejePulsar_3
  98. btfss Pulsador_3 ; ¿Dejó de pulsar?. ¿(Pulsador)=1?
  99. goto EsperaDejePulsar_3 ; No. Espera que deje de pulsar.
  100. Fin3    goto Principal
  101.  
  102. ; Subrutinas ****************************************************************
  103.  
  104. Retardo20ms
  105. ;199993 cycles
  106. movlw 0x3E
  107. movwf RAM_8
  108. movlw 0x9D
  109. movwf RAM_9
  110. Retardo20ms_0
  111. decfsz RAM_8, f
  112. goto $+2
  113. decfsz RAM_9, f
  114. goto Retardo20ms_0
  115.  
  116. ;3 cycles
  117. goto $+1
  118. nop
  119.  
  120. ;4 cycles (including call)
  121. return
  122.  
  123. Retardo5m
  124. ;299999995 cycles
  125. movlw 0x54
  126. movwf RAM_10
  127. movlw 0xA1
  128. movwf RAM_11
  129. movlw 0xFD
  130. movwf RAM_12
  131. movlw 0x02
  132. movwf RAM_13
  133. Retardo5m_0
  134. decfsz RAM_10, f
  135. goto $+2
  136. decfsz RAM_11, f
  137. goto $+2
  138. decfsz RAM_12, f
  139. goto $+2
  140. decfsz RAM_13, f
  141. goto Retardo5m_0
  142.  
  143. ;1 cycle
  144. nop
  145.  
  146. ;4 cycles (including call)
  147. return
  148.  
  149. Retardo10m
  150. ;599999992 cycles
  151. movlw 0xA9
  152. movwf RAM_4
  153. movlw 0x41
  154. movwf RAM_5
  155. movlw 0xFA
  156. movwf RAM_6
  157. movlw 0x04
  158. movwf RAM_7
  159. Retardo10m_0
  160. decfsz RAM_4, f
  161. goto $+2
  162. decfsz RAM_5, f
  163. goto $+2
  164. decfsz RAM_6, f
  165. goto $+2
  166. decfsz RAM_7, f
  167. goto Retardo10m_0
  168.  
  169. ;4 cycles
  170. goto $+1
  171. goto $+1
  172.  
  173. ;4 cycles (including call)
  174. return
  175.  
  176. cblock
  177. RAM
  178. RAM_1
  179. RAM_2
  180. RAM_3
  181. endc
  182.  
  183. Retardo20m
  184. ;1199999995 cycles
  185. movlw 0x54
  186. movwf RAM_14
  187. movlw 0x82
  188. movwf RAM_15
  189. movlw 0xF3
  190. movwf RAM_16
  191. movlw 0x08
  192. movwf RAM_17
  193. Retardo20m_0
  194. decfsz RAM_14, f
  195. goto $+2
  196. decfsz RAM_15, f
  197. goto $+2
  198. decfsz RAM_16, f
  199. goto $+2
  200. decfsz RAM_17, f
  201. goto Retardo20m_0
  202.  
  203. ;1 cycle
  204. nop
  205.  
  206. ;4 cycles (including call)
  207. return
  208.  
  209. END
  210.  
  211.  
  212.  

Espero que te vaya de maravilla, en el simulador me funciona bien, lo probaré también en realidad realidad. 

Suerete...


Título: Re:
Publicado por: 16BITS en 18 Febrero 2014, 23:48 pm
Me gustaría que me pasaras tu cuenta de PayPal para apoyarte por apoyarme compañero

Enviado desde mi XT1032 mediante Tapatalk


Título: Re: Ayuda con un proyecto!
Publicado por: xiruko en 18 Febrero 2014, 23:58 pm
Meta yo soy más de programación de PICs en C y toco poco de ASM, y me quedé impresionado del trabajo que hiciste sin llevarte nada a cambio a parte de las gracias. Espero que el usuario se moleste en hacer unas fotos y un vídeo una vez lo tenga montado...

Una posible mejora sería añadir control del motor por PWM para moderar la velocidad de giro a la que se asa la carne, aunque no sé si sería útil o es mejor hacerlo a una velocidad constante.

Otra sería añadir protección contra sobrecorriente del motor y así evitar quemarlo en el caso de que hubiera algún fallo. Se podría hacer fácilmente con un comparador e interrupciones, aunque no sé si ese modelo tiene comparadores la verdad.

En fin solo eran ideas para exprimir el PIC un poquito más.

EDITO: bueno retiro lo dicho ya que no vi que 16BITS había publicado... y yo también me quedo a la espera de ver el proyecto montado ;D

Un saludo!


Título: Re:
Publicado por: Meta en 19 Febrero 2014, 00:26 am
Me gustaría que me pasaras tu cuenta de PayPal para apoyarte por apoyarme compañero

Enviado desde mi XT1032 mediante Tapatalk

Hola campeón:

He tardado en hacerlo porque tuve que mirar los libros viejos para recordar ciertas cosas del asm, ejejjejeej. Al final, el circuito funciona. Gracias a los apoyos, puedomos conseguir recursos que la gente me pidan para hacer proyectos de este tipo y más complejos, incluido tutoriales.

No esperaba una donación tan pronto para este año y es de agradecer.  :)

El enlace está en el botón pequeño de donar, abajo.
http://electronica-pic.blogspot.com.es/2010/11/dona-y-ayudas-para-futuros-proyectos.html

Puede comentar cualquier cosa para el futuro. Ahhhhh, adaptaré para otros PIC similares del 16F84A para que la gente tenga más opción de montarlo si no encuentra el indicado. 16F27A/628A/648A, 16F87/88 y 16F886. Si una persona no encuentra uno en su tienda habitual, encuentra otro. Lo publicaré en el Blog (http://electronica-pic.blogspot.com.es/) las actuallizaciones.

Gracias de nuevo por seguir adelante con el proyecto sin que te canses. Me di cuenta que este tema, tiene muchos visitantes.

Meta yo soy más de programación de PICs en C y toco poco de ASM, y me quedé impresionado del trabajo que hiciste sin llevarte nada a cambio a parte de las gracias. Espero que el usuario se moleste en hacer unas fotos y un vídeo una vez lo tenga montado...

Una posible mejora sería añadir control del motor por PWM para moderar la velocidad de giro a la que se asa la carne, aunque no sé si sería útil o es mejor hacerlo a una velocidad constante.

Otra sería añadir protección contra sobrecorriente del motor y así evitar quemarlo en el caso de que hubiera algún fallo. Se podría hacer fácilmente con un comparador e interrupciones, aunque no sé si ese modelo tiene comparadores la verdad.

En fin solo eran ideas para exprimir el PIC un poquito más.

EDITO: bueno retiro lo dicho ya que no vi que 16BITS había publicado... y yo también me quedo a la espera de ver el proyecto montado ;D

Un saludo!

Hola Xiruko:

El C me estaba metiendo hace poco con CCS, ahora me dio por Arduino. Estoy aprendiendo y me queda mucho, ejejjejeje. El que sepa hacer este proyecto en C, es bienvenido, pruebo el código, hago pruebas en mi casa haber si sirve realmente que no sea simuladores, y lo subo al Blog si lo desean.

Le animo que muestre fotos y vídeos del proyecto si lo desea. Siento curiosidad, de todas maneras, en estos momentos, estoy adaptando el PIC16F84A al PIC16F88 porque es el que tengo ahora en este mismo momento.

En cuanto a exprimir el PIC un poquito más, más bien sería con el 16F88 que tiene más funciones. En cuanto a PWM, como es velocidad constante, no hace falta. Por cierto, se me olvidó poner el esquema, el condensador de protección del motor en paralelo. Lo actualizaré cuando pueda.

(http://2.bp.blogspot.com/-BpQusSXao7U/T5-4L-nEZ3I/AAAAAAAAAR4/bzB52rVzp2g/s1600/motor+cc+con+220nF.jpg)

Gracias por la sugerencia, gracias por seguir leyendo y aún así, me sorprende que en 5 días haya muchos visitante por este tema.

 ;)


Título: Re: Ayuda con un proyecto!
Publicado por: 16BITS en 19 Febrero 2014, 05:21 am
Muchas Gracias, Una PRegunta en que programa puedo montar la programacion para montarlo al pic :C


Ya Aporte Mi Donacion!


Título: Re: Ayuda con un proyecto!
Publicado por: Meta en 19 Febrero 2014, 07:12 am
(http://dangerousprototypes.com/wp-content/media/2011/12/21086.jpg)

Hola:

El MPLAP X lo puedes descargar en cualquier Sistema Operativo Windows, Linux y Mac en este enlace (http://www.microchip.com/pagehandler/en-us/family/mplabx/). Te viene con asm incluido. No olvidar que MPLAB X es un IDE.

Descarga directa pinchando aquí:

Windows:
MPLAB X v2.00 - DESCARGAR (http://www.microchip.com/mplabx-ide-windows-installer).

Linux:
MPLAB X v2.00 - DESCARGAR (http://www.microchip.com/mplabx-ide-linux-installer).

Mac:
MPLAB X v2.00 - DESCARGAR (http://www.microchip.com/mplabx-ide-osx-installer).

Muchos ánimos.

Edito:

He recibido donación para apoyar Blog (http://electronica-pic.blogspot.com.es/2010/11/dona-y-ayudas-para-futuros-proyectos.html).

Muchísimas gracias y a los demás también por las sugerencias.


Título: Re: Ayuda con un proyecto!
Publicado por: Meta en 19 Febrero 2014, 10:02 am
Hola de nuevo:

Dejo el esquema mejorado, ya que se ha incorporado un condensador en el L293D y en el propio motor.
(http://www.subeimagenes.com/img/esquema-proteus-motor-dc-16f84a-850726.png)

Lista de componentes:

Citar
Resistencias:
R1, R2, R3, R4, R5 = 10 K - 1/4W.
R7, R8, R9 = 330 Ohm - 1/4 W.
R6 = 100 Ohm -  1/4 W.

Condensadores:
C1, C2 = 22 pF / 6V
C3,C5 = 100 nF / 6V
C4 = 250 n / 16V

Diodos:
D1, D2, D3 = Led de 3 ó 5 mm color rojo, verde o naranja. 2V/25 mA.

Oscilador de cuarzo:
X1 = 4 MHz

Circuitos integrados:
IC1 = PIC16F84A-04
IC2 = L293D

Otros componentes:
Z1 = Zócalo de 18 pines.
Z2 = Zócalo de 16 pines.
M1 = Motor DC 12 V.
5 micropulsadores.

Cosas que debes tener en cuenta. Si es la misma fuente alimenteción de los 5V y 12V, no le pasará nada. Si son de fuentes diferenes conectado a la misma masa, no funcionará.
(http://www.subeimagenes.com/img/router-zyxel-850850.png)

Código más optimizado y corregido.
Código
  1. ; ZONA DE DATOS **********************************************************************
  2.  
  3. LIST P=16F84A        ; Procesador.
  4. INCLUDE <P16F84A.INC>   ; Definición de las etiquetas del PIC.
  5. __CONFIG _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
  6.    __IDlOCS    0001            ; Versión del programa.
  7.  
  8. Variables UDATA_SHR 0x0C
  9. RAM     RES 1
  10. RAM_1   RES 1
  11. RAM_2   RES 1
  12. RAM_3   RES 1
  13. RAM_4   RES 1
  14. RAM_5   RES 1
  15. RAM_6   RES 1
  16. RAM_7   RES 1
  17. RAM_8   RES 1
  18. RAM_9   RES 1
  19. RAM_10  RES 1
  20. RAM_11  RES 1
  21. RAM_12  RES 1
  22. RAM_13  RES 1
  23. RAM_14  RES 1
  24. RAM_15  RES 1
  25. RAM_16  RES 1
  26. RAM_17  RES 1
  27.  
  28. #DEFINE Pulsador_1 PORTA,4 ; Pulsador conectado a RA4.
  29. #DEFINE Pulsador_2  PORTA,3     ; Pulsador conectado a RA3.
  30. #DEFINE Pulsador_3  PORTA,2     ; Pulsador conectado a RA2.
  31. #DEFINE Pul_STOP    PORTA,1     ; Pulsador de parada del motor.
  32. #DEFINE Motor PORTB,7 ; Línea donde se conecta el motor.
  33. #DEFINE Led_1       PORTB,6     ; Led 1.
  34. #DEFINE Led_2       PORTB,5     ; Led 2.
  35. #DEFINE Led_3       PORTB,4     ; Led 3.
  36.  
  37. ; ZONA DE CÓDIGOS ********************************************************************
  38.  
  39. ORG 0 ; El programa comienza en la dirección 0.
  40. Inicio
  41. bsf STATUS,RP0 ; Acceso al Banco 1.
  42. bsf Pulsador_1 ; La línea RA4 se configura como entrada.
  43. bsf Pulsador_2 ; La línea RA3 se configura como entrada.
  44. bsf Pulsador_3 ; La línea RA2 se configura como entrada.
  45. bsf Pul_STOP     ; La línea RA1 se configura como entrada.
  46. bcf Motor ; Se configura como salida.
  47.    bcf     Led_1               ; Led de aviso 5 minutos en activo.
  48.    bcf     Led_2               ; Led de aviso 10 minutos en activo.
  49.    bcf     Led_3               ; Led de aviso 20 minutos en activo.
  50. bcf STATUS,RP0 ; Acceso al Banco 0.
  51. bcf Motor ; En principio Motor apagado igual
  52.    bcf     Led_1               ; que los Leds.
  53.    bcf     Led_2
  54.    bcf     Led_3
  55.  
  56. Principal
  57. btfsc Pulsador_1 ; ¿Pulsador presionado?, ¿(Pulsador)=0?
  58. goto Fin ; No. Vuelve a leerlo.
  59. call Retardo20ms ; Espera que se estabilicen los niveles de tensión.
  60. btfsc Pulsador_1 ; Comprueba si es un rebote.
  61. goto Fin ; Era un rebote y sale fuera.
  62.    bsf     Motor               ; Activa el motor y
  63.    bsf     Led_1               ; enciende el Led 1 que significa
  64. call Retardo5m           ; los 5 minutos encendido.
  65.    bcf     Motor               ; Apaga el motor y
  66.    bcf     Led_1               ; el Led 1.
  67. EsperaDejePulsar_1
  68. btfss Pulsador_1 ; ¿Dejó de pulsar?. ¿(Pulsador)=1?
  69. goto EsperaDejePulsar_1 ; No. Espera que deje de pulsar.
  70. Fin
  71.  
  72. btfsc Pulsador_2 ; ¿Pulsador presionado?, ¿(Pulsador)=0?
  73. goto Fin2 ; No. Vuelve a leerlo.
  74. call Retardo20ms ; Espera que se estabilicen los niveles de tensión.
  75. btfsc Pulsador_2 ; Comprueba si es un rebote.
  76. goto Fin2 ; Era un rebote y sale fuera.
  77.    bsf     Motor               ; Activa el motor y
  78.    bsf     Led_2               ; enciende el Led 2 que significa
  79. call Retardo10m          ; los 10 minutos encendido.
  80.    bcf     Motor               ; Apaga el motor y
  81.    bcf     Led_2               ; el Led 2.
  82. EsperaDejePulsar_2
  83. btfss Pulsador_2 ; ¿Dejó de pulsar?. ¿(Pulsador)=1?
  84. goto EsperaDejePulsar_2 ; No. Espera que deje de pulsar.
  85. Fin2
  86.  
  87. btfsc Pulsador_3 ; ¿Pulsador presionado?, ¿(Pulsador)=0?
  88. goto Fin3 ; No. Vuelve a leerlo.
  89. call Retardo20ms ; Espera que se estabilicen los niveles de tensión.
  90. btfsc Pulsador_3 ; Comprueba si es un rebote.
  91. goto Fin3 ; Era un rebote y sale fuera.
  92.    bsf     Motor               ; Activa el motor y
  93.    bsf     Led_3               ; enciende el Led 3 que significa
  94. call Retardo20m          ; los 10 minutos encendido.
  95.    bcf     Motor               ; Apaga el motor y
  96.    bcf     Led_3               ; el Led 3.
  97. EsperaDejePulsar_3
  98. btfss Pulsador_3 ; ¿Dejó de pulsar?. ¿(Pulsador)=1?
  99. goto EsperaDejePulsar_3 ; No. Espera que deje de pulsar.
  100. Fin3    goto Principal
  101.  
  102. ; Subrutinas ****************************************************************
  103.  
  104. Retardo20ms
  105. ;199993 cycles
  106. movlw 0x3E
  107. movwf RAM_8
  108. movlw 0x9D
  109. movwf RAM_9
  110. Retardo20ms_0
  111. decfsz RAM_8, f
  112. goto $+2
  113. decfsz RAM_9, f
  114. goto Retardo20ms_0
  115.  
  116. ;3 cycles
  117. goto $+1
  118. nop
  119.  
  120. ;4 cycles (including call)
  121. return
  122.  
  123. Retardo5m
  124. ;299999995 cycles
  125. movlw 0x54
  126. movwf RAM_10
  127. movlw 0xA1
  128. movwf RAM_11
  129. movlw 0xFD
  130. movwf RAM_12
  131. movlw 0x02
  132. movwf RAM_13
  133. Retardo5m_0
  134. decfsz RAM_10, f
  135. goto $+2
  136. decfsz RAM_11, f
  137. goto $+2
  138. decfsz RAM_12, f
  139. goto $+2
  140. decfsz RAM_13, f
  141. goto Retardo5m_0
  142.  
  143. ;1 cycle
  144. nop
  145.  
  146. ;4 cycles (including call)
  147. return
  148.  
  149. Retardo10m
  150. ;599999992 cycles
  151. movlw 0xA9
  152. movwf RAM_4
  153. movlw 0x41
  154. movwf RAM_5
  155. movlw 0xFA
  156. movwf RAM_6
  157. movlw 0x04
  158. movwf RAM_7
  159. Retardo10m_0
  160. decfsz RAM_4, f
  161. goto $+2
  162. decfsz RAM_5, f
  163. goto $+2
  164. decfsz RAM_6, f
  165. goto $+2
  166. decfsz RAM_7, f
  167. goto Retardo10m_0
  168.  
  169. ;4 cycles
  170. goto $+1
  171. goto $+1
  172.  
  173. ;4 cycles (including call)
  174. return
  175.  
  176. Retardo20m
  177. ;1199999995 cycles
  178. movlw 0x54
  179. movwf RAM_14
  180. movlw 0x82
  181. movwf RAM_15
  182. movlw 0xF3
  183. movwf RAM_16
  184. movlw 0x08
  185. movwf RAM_17
  186. Retardo20m_0
  187. decfsz RAM_14, f
  188. goto $+2
  189. decfsz RAM_15, f
  190. goto $+2
  191. decfsz RAM_16, f
  192. goto $+2
  193. decfsz RAM_17, f
  194. goto Retardo20m_0
  195.  
  196. ;1 cycle
  197. nop
  198.  
  199. ;4 cycles (including call)
  200. return
  201.  
  202. END
  203.  
  204.  
  205.  

Si quieres una sugerencia más, añado dos salidas, por si pones un altavoz o un zumbador piezoeléctrico. Cuando termine el tiempo, a parte de apagarse el motor, suena un pitido como el microondas. Ya me dirás si te interesa, lo programo ingernamente, aunque físicamente no lo vayas a usar, si en el futuro decides ponerlo, solo es ponerlo, ya que la programación está hecha.

Ya me dirás la respuesta.

Sigo mejorando si puedo por si acaso...

Muchas gracias de nuevo.

Edito:

Ya he sacado otro código con ayuda de amigos bajo el timer 0.  Te podrás ahorrar el pulsador y las resistencias del RESET. La nueva función funciiona tal como la querías desde el principio. Por ejemplo:

Si has pulsado el pulsador P2 de 10 minutos, mientras sigue el motor encendido, pulso cualquier pulsador, por ejeplo, el P1 de 5 minutos, ahora el temporizador empezará desce 0 y cuenta los 5 minutos. También tiene la posibilidad de pulsar el botón de Stop en cualquier momento, se detiene el proceso, puedes interrumpir el proceso y sin resetear el PIC.

Si al final lo quieres así, me avisas, preparo el código mejor para que se entienda.

Edito 2:


A parte del nuevo código de asm, también tengo el de C bajo XC8. Lo subiré después de revisarlos. ;)

Saludo.


Título: Re: Ayuda con un proyecto!
Publicado por: 16BITS en 19 Febrero 2014, 23:38 pm
Me Interesa el codigo que me comentas para poder, detenerlo y cambiar el tiempo, ademas el diagrama del zumbador, Suena Aun mejor. Otra cosa me podrias apoyar mostrandome como usar el MPLAB para hacer el proyecto y cargar el PIC.

De Verdad Que Muchas Gracias Compañero!


Título: Re: Ayuda con un proyecto!
Publicado por: Meta en 20 Febrero 2014, 13:18 pm
Hola:

Nuevo esquema. Se incluye un pequeño altavoz como los que usan los ordenadores o PC viejos o un zumbador piezo eléctrico. A pesar de que funcioinan los dos al mismo tiempo, a la hora de montar el circuito, decidirás mmontar físicamente un altavoz o un zumbador. El zumbador te puede dejar zumbado y funciona 5V directamente. El altavoz requiere un trasistor y una resistencia. Es tu elección final.

(http://www.subeimagenes.com/img/router-zyxel-852043.png)

Estoy con el programa nuevo para adaptor los códigos del altavoz y zumbador.
(http://www.fadishop.eu/WebRoot/StorePiensa/Shops/ec2286/4F82/B199/D3BB/A4BB/8FDE/AC10/1414/A686/SOUNDER.jpg)

Programando y haciendo un tutorial sobre el MPLAB con Word. Esto es trabajo de horas y como comprenderás, tardaré en publicarlo. Te daré el aviso cuando lo acabe.

Saludo.

Edito:
Hecho un minitutorial en pdf.
https://drive.google.com/file/d/0B6HKwsbbpgrLQTBUckNaUTMzYUU/edit?usp=sharing

Saludo.


Título: Re: Ayuda con un proyecto!
Publicado por: Meta en 26 Febrero 2014, 03:26 am
Holas:

El proyecto sigue en pie, probando bajo PIC16F88 con un motor de 5Vdc, para los lectores les dejo un montaje de prototipo.

(http://www.subeimagenes.com/img/router-zyxel-857849.png)

Gracias por visitar.


Título: Re: Ayuda con un proyecto!
Publicado por: Meta en 26 Febrero 2014, 21:40 pm
Hola

Ya que algunos usuarios me piden código, se los paso por ahora en asm para el PIC16F88. Ahor funciona todo. Cuando pueda, presento lomismo para el lenguaje C bajo XC8.

Código
  1. list    P=16F88        ; Procesador.
  2. include <p16F88.inc>   ; Definición de las etiquetas del PIC.
  3. __CONFIG _CONFIG1, _FOSC_INTOSCIO & _WDTE_OFF & _PWRTE_ON & _MCLRE_ON & _BOREN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CCPMX_RB3 & _CP_OFF
  4. __CONFIG _CONFIG2, _FCMEN_ON & _IESO_ON
  5. ;***************************************
  6. ;Declaracion de variables y constantes
  7. ;***************************************
  8. #define p1          PORTA,4     ; Pulsador 1.
  9. #define p2          PORTA,3     ; Pulsador 2.
  10. #define p3          PORTA,2     ; Pulsador 3.
  11. #define p4          PORTA,1     ; Pulsador 4.
  12. #define motor       PORTB,7     ; Motor DC.
  13. #define led1        PORTB,6     ; Diodo Led 1.
  14. #define led2        PORTB,5
  15. #define led3        PORTB,4
  16. #DEFINE Altavoz     PORTB,3     ; Altavoz.
  17. #DEFINE Zumbador    PORTB,2     ; Zumbador piezoeléctrico.
  18.  
  19. ctte_5_min     equ    .5         ; constante para 5 minutos
  20. ctte_10_min     equ    .10        ; constante para 10 minutos
  21. ctte_20_min     equ    .20        ; constante para 20 minutos
  22. ctte_min       equ    .60        ; para 1 minuto
  23. ctte_timer     equ    .16        ; para 1 segundo
  24. carga_timer     equ    .12        ;
  25.  
  26. variables       udata    0x20
  27. cont_timer      RES 1
  28. cont_seg        RES 1        ; contador de segundos
  29. cont_min        RES 1            ; contador de minutos
  30. tiempo_fijado   RES 1
  31. PDel0           RES 1
  32. PDel1           RES 1
  33. W_TEMP          RES 1
  34. STATUS_TEMP     RES 1
  35. PCLATH_TEMP     RES 1
  36. RAM             RES 1
  37. RAM_1           RES 1
  38. RAM_2           RES 1
  39. RAM_3           RES 1
  40. RAM_4           RES 1
  41. RAM_5           RES 1
  42. RAM_6           RES 1
  43. ;**************************************
  44.    org     0x00
  45.    goto    configuracion
  46.    org     0x04
  47. ;**********************************************************************
  48. ;    Rutinas de interrupciones
  49. ;**********************************************************************
  50. rutina_de_interrupcion
  51. PUSH
  52.    MOVWF   W_TEMP
  53.    SWAPF   STATUS,W
  54.    CLRF    STATUS
  55.    MOVWF   STATUS_TEMP
  56.    MOVF    PCLATH,W
  57.    MOVWF   PCLATH_TEMP
  58.    CLRF    PCLATH
  59.  
  60.    btfss   INTCON,TMR0IF        ;verifica si es interrupción temporizada
  61.    goto    salida_timer0        ;sale de la rutina de interrupción
  62.    movlw   carga_timer          ;
  63.    movwf   TMR0                 ;carga al timer0 para reiniciar cuenta
  64.    movfw   cont_timer           ;
  65.    xorlw   ctte_timer           ;compara si llego al segundo
  66.    btfss   STATUS,Z
  67.    goto    salida_timer0        ;sale de la rutina de interrupción si no es 1 segundo
  68.    clrf    cont_timer           ;
  69.    incf    cont_seg             ;se incrementa cada segundo
  70.    movfw   cont_seg
  71.    xorlw   ctte_min             ;compara si es un minuto
  72.    btfss   STATUS,Z
  73.    goto    salida_timer0        ;sale de la rutina de interrupción
  74.    clrf    cont_seg
  75.    incf    cont_min             ;se incrementa cada minuto
  76. salida_timer0
  77.    incf    cont_timer
  78.    bcf     INTCON,TMR0IF
  79. POP
  80.    MOVF    PCLATH_TEMP,W
  81.    MOVWF   PCLATH
  82.    SWAPF   STATUS_TEMP,W
  83.    MOVWF   STATUS
  84.    SWAPF   W_TEMP,F
  85.    SWAPF   W_TEMP,W
  86.    retfie
  87. ;***********************************************
  88. ;Subrutinas
  89. ;***********************************************
  90. reiniciar_tiempo
  91.    movlw   carga_timer
  92.    movwf   TMR0
  93.    clrf    cont_timer
  94.    clrf    cont_seg
  95.    clrf    cont_min
  96.    banksel OPTION_REG
  97.    bcf     OPTION_REG,T0CS    ; timer0 inicia la cuenta
  98.    banksel PORTA
  99.    bsf     INTCON,GIE         ; interrupciones habilitadas
  100.    bsf     motor
  101.    return
  102. ;*************************************************************
  103. pulsador1
  104.    call    retardo_10ms
  105.    btfsc   p1
  106.    return
  107.    ;***********************************************************
  108.    btfss   p1      ; espera hasta que se suelte el pulsador
  109.    goto    $-1     ;
  110.    ;***********************************************************
  111.    movlw   ctte_5_min
  112.    movwf   tiempo_fijado
  113.    clrf    PORTB
  114.    call    reiniciar_tiempo
  115.    call    PitidoCorto
  116.    bsf     led1
  117.    return
  118. ;*************************************************************
  119. pulsador2
  120.    call    retardo_10ms
  121.    btfsc   p2
  122.    return
  123.    ;***********************************************************
  124.    btfss   p2      ; espera hasta que se suelte el pulsador
  125.    goto    $-1     ;
  126.    ;***********************************************************
  127.    movlw   ctte_10_min
  128.    movwf   tiempo_fijado
  129.    clrf    PORTB
  130.    call    reiniciar_tiempo
  131.    call    PitidoCorto
  132.    bsf     led2
  133.    return
  134. ;*************************************************************
  135. pulsador3
  136.    call    retardo_10ms
  137.    btfsc   p3
  138.    return
  139.    ;***********************************************************
  140.    btfss   p3      ; espera hasta que se suelte el pulsador
  141.    goto    $-1     ;
  142.    ;***********************************************************
  143.    movlw   ctte_20_min
  144.    movwf   tiempo_fijado
  145.    clrf    PORTB
  146.    call    reiniciar_tiempo
  147.    call    PitidoCorto
  148.    bsf     led3
  149.    return
  150. ;*************************************************************
  151. pulsador4
  152.    call    retardo_10ms
  153.    btfsc   p4
  154.    return
  155.    ;***********************************************************
  156.    btfss   p4      ; espera hasta que se suelte el pulsador
  157.    goto    $-1     ;
  158.    ;***********************************************************
  159.    call    detener_tiempo
  160.    call    Pitido
  161.    return
  162. ;*************************************************************
  163. detener_tiempo
  164.    clrf    PORTB
  165.    banksel OPTION_REG
  166.    bsf     OPTION_REG,T0CS    ; timer0 detenido
  167.    banksel PORTA
  168.    bcf     INTCON,GIE        ; interrupciones desactivadas
  169. ;*************************************************************
  170. retardo_10ms
  171.    movlw   .8
  172.    movwf   PDel0
  173. PLoop1
  174.    movlw   .249
  175.    movwf   PDel1
  176. PLoop2
  177.    clrwdt
  178.    clrwdt
  179.    decfsz  PDel1,1
  180.    goto    PLoop2
  181.    decfsz  PDel0,1
  182.    goto    PLoop1
  183. PDelL1
  184.    goto    PDelL2
  185. PDelL2
  186.    clrwdt
  187.    return
  188. ;******************************************************
  189. ; Subrutinas "PitidoLargo", "Pitido" y "PitidoCorto"
  190. ;*******************************************************
  191. PitidoLargo
  192.    bsf     Altavoz
  193.    bsf     Zumbador
  194.    call    Retardo_500ms
  195. ;******************************************************
  196. Pitido
  197.    bsf     Altavoz
  198.    bsf     Zumbador
  199.    call    Retardo_200ms
  200. ;******************************************************
  201. PitidoCorto
  202.    bsf     Altavoz
  203.    bsf     Zumbador
  204.    call    Retardo_20ms
  205.    bcf     Altavoz
  206.    bcf     Zumbador
  207.    return
  208. ;**************************************************
  209. Retardo_500ms
  210.    movlw   0x03
  211.    movwf   RAM
  212.    movlw   0x18
  213.    movwf   RAM_1
  214.    movlw   0x02
  215.    movwf   RAM_2
  216. Retardo_500ms_0
  217.    decfsz  RAM, f
  218.    goto    $+2
  219.    decfsz  RAM_1, f
  220.    goto    $+2
  221.    decfsz  RAM_2, f
  222.    goto    Retardo_500ms_0
  223.    goto    $+1
  224.    return
  225. ;******************************************************
  226. Retardo_200ms
  227.    movlw   0x3E
  228.    movwf   RAM_3
  229.    movlw   0x9D
  230.    movwf   RAM_4
  231. Retardo_200ms_0
  232.    decfsz  RAM_3, f
  233.    goto    $+2
  234.    decfsz  RAM_4, f
  235.    goto    Retardo_200ms_0
  236.    goto    $+1
  237.    nop
  238.    return
  239. ;******************************************************
  240. Retardo_20ms
  241.    movlw   0x9E
  242.    movwf   RAM_5
  243.    movlw   0x10
  244.    movwf   RAM_6
  245. Retardo_20ms_0
  246.    decfsz  RAM_5, f
  247.    goto    $+2
  248.    decfsz  RAM_6, f
  249.    goto    Retardo_20ms_0
  250.    goto    $+1
  251.    nop
  252.    return
  253. ;**********************************************
  254. configuracion
  255. ;**********************************************
  256. ;   configuracion del oscilador interno
  257. ;**********************************************
  258.    banksel OSCCON  ;bank 1
  259.    movfw   OSCCON
  260.    iorlw   0x60    ;oscilador interno a 4Mhz
  261.    movwf   OSCCON
  262.    banksel PORTA   ;bank 0
  263. ;**********************************************
  264. ; Configuración de puertos de entrada y salida
  265. ;**********************************************
  266.    clrf    PORTA       ;porta=0
  267.    clrf    PORTB       ;portb=0
  268.    banksel ANSEL       ;bank 1
  269.    clrf    ANSEL       ;puertos i/o digitales
  270.    movlw   0xff        ;w=255
  271.    movwf   TRISA       ;porta como entradas
  272.    clrf    TRISB       ;portb como salidas
  273. ;***********************************************
  274. ;Configuraciond de las interrupcion temporizada
  275. ;***********************************************
  276.    movlw   b'11110111' ;prescaler asignado a timer0, prescaler=256
  277.    movwf   OPTION_REG
  278.    banksel INTCON
  279.    movlw   b'00100000' ;
  280.    movwf   INTCON      ;interrupciones globales desactivados e interrupción timer0 activado
  281.    clrf    TMR0
  282. ;**********************************************
  283.    clrf    cont_min
  284.    movlw   0xff
  285.    movwf   tiempo_fijado
  286. bucle
  287.    btfss   p1
  288.    call    pulsador1
  289.    btfss   p2
  290.    call    pulsador2
  291.    btfss   p3
  292.    call    pulsador3
  293.    btfss   p4
  294.    call    pulsador4
  295.    movfw   cont_min
  296.    xorwf   tiempo_fijado,W
  297.    btfss   STATUS,Z
  298.    goto    bucle
  299.    incf    cont_min
  300.    call    detener_tiempo
  301.    call    PitidoLargo         ;************************************
  302.    goto    bucle
  303. ;***********************************************************
  304.    end

Un saludo.