Autor Tema: temporizador con el 16f84  (Leído 5914 veces)

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

Desconectado ASTERIX

  • PIC10
  • *
  • Mensajes: 44
temporizador con el 16f84
« en: 09 de Noviembre de 2006, 18:31:05 »
Hola a todos, no llevo mucho en esto pero mi mente va imaginando nuevos proyectos para mi con estos bichitos. Explico un poco mi idea por si alguien me puede hechar una mano.
Para empezar programo en asm y lo ago con el mplab,pero con muy poquita idea, mi proyecto es cuando introduzco un flanco de subida por la patita RA4\TOCKI ,me produzca por la salida RB1 un 1 pero con un retardo de 13segundos. la verdad no se como empezarlo. un saludo desde malaga.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: temporizador con el 16f84
« Respuesta #1 en: 10 de Noviembre de 2006, 00:25:44 »
Hola ASTERIX, en el sub foro de Almacén del Assembler podrás encontrar variedad de ejemplos que puedes tomar como punto de partida para iniciarte.

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 BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: temporizador con el 16f84
« Respuesta #2 en: 10 de Noviembre de 2006, 00:27:53 »
Hola.
Podrias empezar por esto que te arme, y modificarlo segun tus necesidades.

Código: ASM
  1. ;BrunoF www.todopic.com.ar/foros
  2. ;Calibrado para 4Mhz.
  3.  
  4.                 LIST            P=PIC16F84              ;Indicar PIC a utilizar
  5.                 #include        <P16F84.INC>            ;Incluir fichero para utilizar el nombre de los registros SFR del PIC y demas cosas.
  6.  
  7.  
  8.                 __CONFIG        _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC                ;Configuracion de fuses:
  9.  
  10.                 ERRORLEVEL      -302    ;Suprimir advertencias
  11.  
  12.  
  13. PDel0           EQU             0x0C
  14. PDel1           EQU             0x0D
  15. PDel2           EQU             0x0E
  16. SEGUNDOS        EQU             0x0F
  17.  
  18.                 org             0x00
  19.                 GOTO            INICIO
  20.  
  21.  
  22. INICIO
  23.                 bsf     STATUS,RP0      ;Banco 1
  24.                 movlw   0xFF           
  25.                 movwf   TRISA           ;PUERTO A TODO COMO ENTRADA<0:4>
  26.                 clrf    PORTB           ;PUERTO B TODO COMO SALIDA
  27.                 bcf     STATUS,RP0      ;Banco 0
  28.  
  29.                 ERRORLEVEL      +302    ;Restaurar advertencias
  30.  
  31.                 clrf    PORTB           ;PUERTOB todo en bajo
  32.  
  33.                 btfss   PORTA,4         ;Pregunta: ¿RA4 en alto?
  34.                 goto    $-1             ;No. Esperar
  35.  
  36.                 movlw   .13             ;Si. Cargar 13 segundos en demora
  37.                 call    DEMORA          ;Llamar a subrutina de demora
  38.                 bsf     PORTB,0         ;Pasados los 13 segundos, poner RB0 en alto.
  39.                 goto    $               ;Loop infinito(seguramente habra que modificar esto luego :D)
  40.  
  41. ;///Subrutinas/////
  42.  
  43. DEMORA
  44.         movwf   SEGUNDOS
  45. DemSeg  
  46.         movlw   .14
  47.         movwf   PDel0   ; 1 |
  48. PLoop0  movlw   .72     ; 1 set numero de repeticion  (B)
  49.         movwf   PDel1   ; 1 |
  50. PLoop1  movlw   .247      ; 1 set numero de repeticion  (A)
  51.         movwf   PDel2   ; 1 |
  52. PLoop2  clrwdt          ; 1 clear watchdog
  53.         decfsz  PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
  54.         goto    PLoop2    ; 2 no, loop
  55.  
  56.         decfsz  PDel1,  1 ; 1 + (1) es el tiempo 0  ? (B)
  57.         goto    PLoop1    ; 2 no, loop
  58.  
  59.         decfsz  PDel0,  1 ; 1 + (1) es el tiempo 0  ? (C)
  60.         goto    PLoop0    ; 2 no, loop
  61.  
  62.         decfsz  SEGUNDOS,F      ;Contar segundos
  63.         goto    DemSeg          ;Recargar variables
  64.  
  65. PDelL2  clrwdt              ; 1 ciclo delay
  66.         return              ; 2+2 Fin.
  67.  
  68.  
  69.         END

Saludos
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado ASTERIX

  • PIC10
  • *
  • Mensajes: 44
Re: temporizador con el 16f84
« Respuesta #3 en: 11 de Noviembre de 2006, 09:30:08 »
Gracias BrunoF  por el programa, he estado simulando en proteus y no me funciona, siempre queda la salida RB0  a nivel bajo aun pasado el tiempo de temporizacion, he estado revisandolo y no se lo que puede fallar, me podrias ayudar?. no entiendo por qué pones goto $-1, a donde se dirige este salto?.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: temporizador con el 16f84
« Respuesta #4 en: 11 de Noviembre de 2006, 13:06:44 »
Hola ASTERIX, goto $-1 significa que regresa hacia atras una posición del programa, por ejemplo:

Código: ASM
  1. btfss   PORTA,4         ;Pregunta: ¿RA4 en alto?
  2. goto    $-1             ;No. Esperar

En este pedacito de código la primera instrucción verifica el pin A4, si este esta en alto se salta la instrucción goto y continúa con el resto del programa, pero si A4 esta en bajo la próxima instrucción es el goto, y este goto $-1 hace que el programa vuelva a la instrucción btfss.

Por lo tanto si es $-1 retorna una posición, si es $-2 retorna 2, si es $2 adelanta 2 posiciones, etc.

Con respecto al programa te recomendaría que uses este que te paso para que la simulación sea más visible, la única diferencia con el de BrunoF es que reemplacé la instricción "goto $" por "goto INICIO" para que se pueda realizar varias temporizaciones seguidas sin tener que resetear el PIC.

También le e agregado las instrucciones BSF y BCF para poner en alto y bajo el pin se salida, que en este caso es el port B0.

Código: ASM
  1. ;BrunoF www.todopic.com.ar/foros
  2. ;Calibrado para 4Mhz.
  3.  
  4.                 LIST            P=PIC16F84              ;Indicar PIC a utilizar
  5.                 #include        <P16F84.INC>            ;Incluir fichero para utilizar el nombre de los registros SFR del PIC y demas cosas.
  6.  
  7.  
  8.                 __CONFIG        _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC                ;Configuracion de fuses:
  9.  
  10.                 ERRORLEVEL      -302    ;Suprimir advertencias
  11.  
  12.  
  13. PDel0           EQU             0x0C
  14. PDel1           EQU             0x0D
  15. PDel2           EQU             0x0E
  16. SEGUNDOS        EQU             0x0F
  17.  
  18.                 org             0x00
  19.                 GOTO            INICIO
  20.  
  21.  
  22. INICIO
  23.                 bsf     STATUS,RP0      ;Banco 1
  24.                 movlw   0xFF           
  25.                 movwf   TRISA           ;PUERTO A TODO COMO ENTRADA<0:4>
  26.                 clrf    PORTB           ;PUERTO B TODO COMO SALIDA
  27.                 bcf     STATUS,RP0      ;Banco 0
  28.  
  29.                 ERRORLEVEL      +302    ;Restaurar advertencias
  30.  
  31.                 clrf    PORTB           ;PUERTOB todo en bajo
  32.  
  33.                 btfss   PORTA,4         ;Pregunta: ¿RA4 en alto?
  34.                 goto    $-1             ;No. Esperar
  35.  
  36.                 movlw   .13             ;Si. Cargar 13 segundos en demora
  37.                 bsf     PORTB,0         ;pongo en alto la salida
  38.                 call    DEMORA          ;Llamar a subrutina de demora
  39.                 bcf     PORTB,0         ;pongo en bajo la salida
  40.                 goto    INICIO          ;Loop infinito(seguramente habra que modificar esto luego :D)
  41.  
  42. ;///Subrutinas/////
  43.  
  44. DEMORA
  45.         movwf   SEGUNDOS
  46. DemSeg  
  47.         movlw   .14
  48.         movwf   PDel0     ; 1 |
  49. PLoop0  movlw   .72       ; 1 set numero de repeticion  (B)
  50.         movwf   PDel1     ; 1 |
  51. PLoop1  movlw   .247      ; 1 set numero de repeticion  (A)
  52.         movwf   PDel2     ; 1 |
  53. PLoop2  clrwdt            ; 1 clear watchdog
  54.         decfsz  PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
  55.         goto    PLoop2    ; 2 no, loop
  56.  
  57.         decfsz  PDel1,  1 ; 1 + (1) es el tiempo 0  ? (B)
  58.         goto    PLoop1    ; 2 no, loop
  59.  
  60.         decfsz  PDel0,  1 ; 1 + (1) es el tiempo 0  ? (C)
  61.         goto    PLoop0    ; 2 no, loop
  62.  
  63.         decfsz  SEGUNDOS,F      ;Contar segundos
  64.         goto    DemSeg          ;Recargar variables
  65.  
  66. PDelL2  clrwdt              ; 1 ciclo delay
  67.         return              ; 2+2 Fin.
  68.  
  69.  
  70.         END

Espero te sea de ayuda.

Un saludo.

Atte. CARLOS.
« Última modificación: 11 de Noviembre de 2006, 13:14:58 por Chaly29 »
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado ASTERIX

  • PIC10
  • *
  • Mensajes: 44
Re: temporizador con el 16f84
« Respuesta #5 en: 11 de Noviembre de 2006, 14:12:38 »
Gracias carlos, cuando tenga un ratito de lugar lo probare y volveras a tener noticias mias. ya he entendido lo de $-1 volvere a poner nuevas preguntas. por cierto,hay alguna manera de pasar un programa en .HEX al ya mencionado .ASM?. Seria mucho pedirte que me enviaras el adjunto del nuevo programa que has hecho?. UN SALUDO DE PEPE.
« Última modificación: 11 de Noviembre de 2006, 14:16:44 por ASTERIX »

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: temporizador con el 16f84
« Respuesta #6 en: 11 de Noviembre de 2006, 14:17:58 »
si hay, de llaman desensambladores, buscalos en la web, son gratuitos.
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: temporizador con el 16f84
« Respuesta #7 en: 11 de Noviembre de 2006, 14:53:38 »
Hola ASTERIX, el programa lo tienes en pantalla, no se que adjunto me pides.

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 ASTERIX

  • PIC10
  • *
  • Mensajes: 44
Re: temporizador con el 16f84
« Respuesta #8 en: 12 de Noviembre de 2006, 08:05:41 »
Perdon ha sido un fallo tecnico mio, he estado practicando con él y funciona, pero al contrario de como yo queria,éste se enciende al pulsar y se apaga transcurrido el tiempo, el que yo digo pulsas y se enciende cuando transcurre ese mismo tiempo. he estado modificandolo y me funciona como queria.He modificado lo siguiente:
Código: ASM
  1. movlw   .13             ;Si. Cargar 13 segundos en demora
  2.                 bcf             PORTB,0
  3.                 call    DEMORA          ;Llamar a subrutina de demora
  4.                 bsf             PORTB,0         ;Pasados los 13 segundos, poner RB0 en alto.
  5.                 call    DEMORA
  6.                 goto    INICIO          ;Loop infinito(seguramente habra que modificar esto luego :D)

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: temporizador con el 16f84
« Respuesta #9 en: 12 de Noviembre de 2006, 14:57:20 »
Hola ASTERIX.
Bueno, me alegro que te funcione. Yo lo habia hecho asi porque no habias especificado que era lo que deseabas que hiciera una vez transcurridos los 13 segundos y puesto en alto RB0.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado eec

  • PIC10
  • *
  • Mensajes: 2
Re: temporizador con el 16f84
« Respuesta #10 en: 23 de Mayo de 2013, 21:33:40 »
hola soy nuevo en esto y rstoy haciendo un proyecto en el cual se realice una temporizacion de onda rectangular de 30' y 15' ... todo esto en .asm y con pic16fxxx...
el problema es q solo he realizado tempo utilizando el tmr0 y un contador auxiliar, es decir he realizado pequeñas temporizacione de hasta 1s... necesitaria si algioen tiene algun progranma ya hecho con este tipo de caracteristicas, asi lo tomo de referencia y m doy cuenta de como se hace .... desde ya gracias!!!