Autor Tema: Ayuda con Temporizador pic 12c508a  (Leído 6535 veces)

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

Desconectado Sat3llite5

  • PIC10
  • *
  • Mensajes: 8
Ayuda con Temporizador pic 12c508a
« en: 14 de Septiembre de 2011, 14:56:36 »
Que tal, estoy comenzando con esto de los pic, y me eh comprado este 12C508A, necesito hacer algo parecido a lo que haria un ne 555 solo que con el pic, la problematica seria:

al recibir un pulso en un pin hacer que otro pin lo sostenga por 4 min.


no se donde comenzar y esto es lo que llevo viendo otros codigos y que creo es lo que me funcionaria, agradeceria que me asesoraran con este proyecto.

list p=12c508a ;pic
#include <p12c508a.inc>
CONFIG _XT_OSC & _MCLRE_ON & _CP_OFF & _WDT_OFF & _LVP_OFF & _PWRTE_ON
;----------------------
cblock 0x0c ;memoria
endc
;----------------------
org 0 
goto inicio
;----------------------
;definimos las IO
TRISIO.0=1 ;GP0 COMO ENTRADA
TRISIO.1=1 ;GP1 COMO ENTRADA
TRISIO.2=0 ;GP2 COMO SALIDA
TRISIO.3=0 ;GP3 COMO SALIDA
TRISIO.4=1 ;GP4 COMO SALIDA SOLO SE PUEDE CONFIGURAR COMO SALIDA?
TRISIO.5=0 ;GP5 COMO SALIDA

Saludos y desde ya Gracias!!!

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Ayuda con Temporizador pic 12c508a
« Respuesta #1 en: 15 de Septiembre de 2011, 10:40:25 »
yo adquiri el 12f508 ya que puedes grabarlo muchas veces.si no me equivoco el 12c508a solo se puede gravar una vez.

respecto a los 4 minutos de temporizacion.deben de ser exactos o da igual.ya que se podria usar el oscilador interno.o un cristal externo.lo cual tendrias que privarte de 2 pin.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado Sat3llite5

  • PIC10
  • *
  • Mensajes: 8
Re: Ayuda con Temporizador pic 12c508a
« Respuesta #2 en: 15 de Septiembre de 2011, 21:36:26 »
no, me gustaria poder mandar un retardo de 3 minutos o 3 minutos 30 seg ya eh modificado lo anterior y tengo todo solo me falta ese retardo... dale un vistaso: aaaa y un retardo de 2 o 3 segundos mira:


;cencere
list p=12c508a ;micro
#include <p12c508a> ;libreria
CONFIG _XT_OSC & _MCLRE_ON & _CP_OFF & _WDT_OFF & _LVP_OFF & _PWRTE_ON
w      equ 0
f      equ 1
OUT1   equ 0 ;gp0
OUT2   equ 1 ;gp1
OUT3   equ 2 ;gp2
IN1    equ 3 ;gp3
OUT4   equ 4 ;gp4
IN2    equ 5 ;gp5
AUX1   equ 0 ;variable auxiliar
AUX2   equ 1 ;variable auxiliar
 movlw p'00000101'
 tris  GPIO
start
        bsf GPIO,OUT1  ;enciende led1
        call time_1    ;toma 3 seg
        bcf GPIO,OUT1  ;apaga led1
        call time_1    ;toma 3 seg
        bsf GPIO,OUT2  ;enciende led2
        call time_1    ;toma 3 seg
        bcf GPIO,OUT2  ;apaga led2
        call time_1    ;toma 3 seg
        btfss GPIO,IN1 ;revisa esta entrada si es1 salta una instruccion
        goto start
rel_on 
        call time_2    ;toma 3 o 4 minutos
        bsf GPIO,OUT3  ;activa relay
play
        bsf GPIO,OUT4  ;enciende led3
        call time_1    ;toma 3 seg
        bcf GPIO,OUT4  ;apaga led3
        call time_1    ;toma 3 seg
        btfss GPIO,IN2 ;revisa esta entrada si es1 salta una instruccion
        goto play
rel_off
        bcf GPIO,OUT3  ;desactiva relay
        goto start

time_1      ;rutina de retardo 3 seg
????????????????????????
time_2      ;rutina de retardo 3 a 4 minutos
????????????????????????
end



desde ya muchas gracias hermano

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Ayuda con Temporizador pic 12c508a
« Respuesta #3 en: 18 de Septiembre de 2011, 14:02:43 »
hola Sat3llite5.he estado desarroyando tu programa.he tenido que cambiarte algunos pin.para aprobechar mejor el microcontrolador.
pero poco se puede hacer con este pic.ya que tiene muy pocas opciones.

lo mas que he podido es aprobechar GP0 para ahorrar una resistencia.y tener opcion a despertarlo.aunque el modo sleep no te sirve con el programa que has hecho.


no se exactamente lo que quieres hacer.pero te recomiendo que busques otro pic que use interrupciones.almenos si quieres usar el juego de luces de los led.
ya que tu programa no funciona con pulsadores.para activar el rele tienes que estar presionando los pulsadores durante 3 o 6 segundos.depende de que linea se este ejecutando en el momento que presionas el pulsador.en todo caso si prescindes de los led.podrias accionar el temporizador del rele mediante GP0.
estando el pic en modo sleep.pero tendrias que prescindir del juego de luces.para que tu programa temporizara con solo presionar el pulsador.

otra cosa. hay programas que te generan automaticamente el codigo para los retardos. yo uso el PDEL Ver SP1. solo que no usa el TMR0 para hacer el reardo.

Código: [Seleccionar]
; PROGRAMA : temporizador
; Funcion :  
;          
;  
;  Revision : 1.1        17/09/2011            Programa para : PIC12C508A
; CPU Clock : 4 MHz                     Reloj instruccion :
;       WDT : Deshabilitado                  Tipo de reloj : IntRC
; Code Prot : OFF          
;*****************************************************www.ingeniopic.com***************************************************
;FUNCIONAMIENTO DEL CIRCUITO:
;Para encender o apagar la luz se realizara una pulsacion breve sobre el pulsador.
;Si queremos entrar en el modo de regulacion,realizaremos una pulsacion larga (siempre que la luz este encendida)



      LIST   P=12C508A   ;Se indica el modo de procesador
      
      RADIX   HEX      ;Sistema de numeracion hexadecimal

      INCLUDE   "P12C508A.inc"  
      
               ;registros internos
      __CONFIG   _IntRC_OSC & _CP_OFF & _WDT_OFF & _MCLRE_OFF




CBLOCK    0x08 ;comienza el bloque de ram en la direccion 0x08

PDel0
PDel1
PDel2
PDel3
PDel4
PDel5
PDel6
PDel7
PDel8
ENDC ;fin del bloque de ram

#define OUT1   1 ;gp1
#define OUT2   2 ;gp2
#define OUT3   4 ;gp4
#define IN1     0 ;gp0
#define OUT4   5 ;gp5
#define IN2     3 ;gp3


;<<<<<<---------------------- VECTOR DE RESET ------------------------>>>>>>>
         ORG   0x00       ;Inicio en el Vector de Reset
     goto   INICIO       ;ir a la primera instruccion del programa

;<<<<<<----------------- INICIO PROGRAMA PRINCIPAL ------------------->>>>>>>
INICIO   movlw b'10000111' ;configura el divisor de TMR0 division , pull up enable,wake up disable.
option

movlw b'00001001'
tris GPIO ;configura le puerto
clrf GPIO ;borra todas las salidas






;<<<<<<<------------------------------------------------PROGRAMA PRINCIPAL---------------------------------------->>>>>>>>>>>>>>
PRINCIPAL goto start




;AUX1   equ 0 ;variable auxiliar
;AUX2   equ 1 ;variable auxiliar
 
start
         bsf GPIO,OUT1  ;enciende led1
         call time_1    ;toma 3 seg
         bcf GPIO,OUT1  ;apaga led1
         call time_1    ;toma 3 seg
         bsf GPIO,OUT2  ;enciende led2
         call time_1    ;toma 3 seg
         bcf GPIO,OUT2  ;apaga led2
         call time_1    ;toma 3 seg
         btfsc GPIO,IN1 ;revisa esta entrada si es1 salta una instruccion
         goto start
rel_on  
         call time_2    ;toma 3 o 4 minutos
         bsf GPIO,OUT3  ;activa relay
play
         bsf GPIO,OUT4  ;enciende led3
         call time_1    ;toma 3 seg
         bcf GPIO,OUT4  ;apaga led3
         call time_1    ;toma 3 seg
         btfsc GPIO,IN2 ;revisa esta entrada si es1 salta una instruccion
         goto play
rel_off
         bcf GPIO,OUT3  ;desactiva relay
         goto start


;-------------------------------------------------------------
; Generado con PDEL ver SP  r 1.0  el 18/09/2011 Hs 16:39:02
; Descripcion: Delay 3000000 ciclos
;-------------------------------------------------------------
time_1      ;rutina de retardo 3 seg
   movlw     .67       ; 1 set numero de repeticion  (C)
        movwf     PDel0     ; 1 |
PLoop10  movlw     .91       ; 1 set numero de repeticion  (B)
        movwf     PDel1     ; 1 |
PLoop11  movlw     .122      ; 1 set numero de repeticion  (A)
        movwf     PDel2     ; 1 |
PLoop12  clrwdt              ; 1 clear watchdog
        decfsz    PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop12    ; 2 no, loop
        decfsz    PDel1,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop11    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (C)
        goto      PLoop10    ; 2 no, loop
PDelL11  goto PDelL12         ; 2 ciclos delay
PDelL12  clrwdt              ; 1 ciclo delay
        retlw 0              ; 2+2 Fin.
;-------------------------------------------------------------

time_2      ;rutina de retardo 3 a 4 minutos
;-------------------------------------------------------------
; Generado con PDEL ver SP  r 1.0  el 18/09/2011 Hs 18:05:29
; Descripcion: Delay 240000000 ciclos
;-------------------------------------------------------------
time_2      ;rutina de retardo 3 a 4 minutos  
movlw     .231      ; 1 set numero de repeticion  (C)
        movwf     PDel0     ; 1 |
PLoop0  movlw     .223      ; 1 set numero de repeticion  (B)
        movwf     PDel1     ; 1 |
PLoop1  movlw     .245      ; 1 set numero de repeticion  (A)
        movwf     PDel2     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  goto PDelL3         ; 2 ciclos delay
PDelL3  goto PDelL4         ; 2 ciclos delay
PDelL4  goto PDelL5         ; 2 ciclos delay
PDelL5  goto PDelL6         ; 2 ciclos delay
PDelL6  goto PDelL7         ; 2 ciclos delay
PDelL7  goto PDelL8         ; 2 ciclos delay
PDelL8  clrwdt              ; 1 ciclo delay
        decfsz    PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel1,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (C)
        goto      PLoop0    ; 2 no, loop
PDelL9  goto PDelL110        ; 2 ciclos delay
PDelL110 goto PDelL11        ; 2 ciclos delay
PDelL111
        retlw 0             ; 2+2 Fin.




end





















Uploaded with ImageShack.us
« Última modificación: 18 de Septiembre de 2011, 14:15:02 por groundman »
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado Sat3llite5

  • PIC10
  • *
  • Mensajes: 8
Re: Ayuda con Temporizador pic 12c508a
« Respuesta #4 en: 21 de Septiembre de 2011, 15:34:33 »
hola groundman muchas gracias por rersponder no sabia de los generadores de retardos, basicamente este programa lo que hace es al recibir un pulso constante en in1 (ignicion de un vehiculo) espera 3 minutos para activar el relay que desactivara el sistema de combustible, es solo un complemento para una alarma, y al detectar otro pulso constante desactivarlo.

este pic lo compre por barato para hacer pruebas, hasta despues me entere de que no era regrabable, aun asi pienso que despues de varias pruebas y tener afinado el programa, deveria funcionar bien con este pic, estoy abierto a sugerencias, tambien considerando que no debo gastar mucho en esto.

De antemano te agradesco la ayuda que me proporcionas, asi como la informacion de los generadores de retardos, voy a investigar cuales funcionan en debian ya que lo estoy haciendo desde el piklab.


Gracias y Saludos!!!

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Ayuda con Temporizador pic 12c508a
« Respuesta #5 en: 22 de Septiembre de 2011, 19:34:35 »
Hola, aqui tienes el programita para generar demoras en ensamblador...   :mrgreen:
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado Sat3llite5

  • PIC10
  • *
  • Mensajes: 8
Re: Ayuda con Temporizador pic 12c508a
« Respuesta #6 en: 23 de Septiembre de 2011, 13:00:37 »
Hola todopic.


Muchas gracias por el programita, terminando el codigo lo pongo aqui para que me ayuden a validar que ...en cierta manera funcione, ya estoy buscando el 12c508 que es regrabable para las pruebas.

Saludos y Gracias!

Desconectado Sat3llite5

  • PIC10
  • *
  • Mensajes: 8
Re: Ayuda con Temporizador pic 12c508a
« Respuesta #7 en: 24 de Septiembre de 2011, 14:22:57 »
bueno aqui esta ya terminado, aun no lo simulo ni nada ya que estoy batallando con el gpsim, aparte que no soporta este pic, espero sus comentarios para encontrar algun problema en el, Muchas Gracias....

Código: [Seleccionar]
; -----------------------------------------------------------------------
; Plantilla generada por Piklab
    #include <p12c508a.inc>

; -----------------------------------------------------------------------
; Bits de configuración: adapte los parámetros a su necesidad
        __CONFIG _IntRC_OSC & _WDT_OFF & _CP_OFF & _MCLRE_ON

; -----------------------------------------------------------------------
     CBLOCK   0x08    ;bloque de ram en la direccion 0x08 para los retardos
     PDel0
     PDel1
     PDel2
     PDel3
     PDel4
     PDel5
     PDel6
     PDel7
     PDel8
     ENDC             ;termina bloque de la ram
#define  OUT0        0;gp0
#define  OUT1        1;gp1
#define  OUT2        2;gp2
#define  IN0           3;gp3
#define  OUT3        4;gp4
#define  IN1           5;gp5
     ORG 0 
     MOVLW b'00101'
     TRIS GPIO
start
     BSF GPIO,OUT0   ;enciende led
     CALL TIME0        ;espera 3 seg
     BCF GPIO,OUT0   ;apaga led
     CALL TIME0        ;espera 3 seg
     BTFSS GPIO,IN0  ;revisa entrada0 si es 1 salta una intruccion
     GOTO start         ;comienza de nuevo
relon
     CALL TIME1        ;espera 3 minutos
     BSF GPIO,OUT1   ;activa relay
playy   
     BSF GPIO,OUT0   ;enciende led
     CALL TIME0        ;espera 3 seg
     BCF GPIO,OUT0   ;apaga led
     CALL TIME0        ;espera 3 seg
     BTFSS GPIO,IN1  ;revisa entrada1 si es 1 salta una instruccion
     GOTO playy        ;comienza en esta etiqueta
     BCF GPIO,OUT1   ;apaga relay
     GOTO start         ;comienza de nuevo
TIME0                        ;retardo 3 seg
         movlw     .67       ; 1 set numero de repeticion  (C)
         movwf     PDel0     ; 1 |
PLoop10  movlw     .91       ; 1 set numero de repeticion  (B)
         movwf     PDel1     ; 1 |
PLoop11  movlw     .122      ; 1 set numero de repeticion  (A)
         movwf     PDel2     ; 1 |
PLoop12  clrwdt              ; 1 clear watchdog
         decfsz    PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
         goto      PLoop12   ; 2 no, loop
         decfsz    PDel1,  1 ; 1 + (1) es el tiempo 0  ? (B)
         goto      PLoop11   ; 2 no, loop
         decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (C)
         goto      PLoop10   ; 2 no, loop
PDelL11  goto PDelL12        ; 2 ciclos delay
PDelL12  clrwdt              ; 1 ciclo delay
         retlw 0            ; 2+2 Fin.
TIME1                       ;retardo 3 a 4 minutos
        movlw     .231      ; 1 set numero de repeticion  (C)
        movwf     PDel0     ; 1 |
PLoop0  movlw     .223      ; 1 set numero de repeticion  (B)
        movwf     PDel1     ; 1 |
PLoop1  movlw     .245      ; 1 set numero de repeticion  (A)
        movwf     PDel2     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  goto PDelL3         ; 2 ciclos delay
PDelL3  goto PDelL4         ; 2 ciclos delay
PDelL4  goto PDelL5         ; 2 ciclos delay
PDelL5  goto PDelL6         ; 2 ciclos delay
PDelL6  goto PDelL7         ; 2 ciclos delay
PDelL7  goto PDelL8         ; 2 ciclos delay
PDelL8  clrwdt              ; 1 ciclo delay
        decfsz    PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel1,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (C)
        goto      PLoop0    ; 2 no, loop
PDelL9  goto PDelL110        ; 2 ciclos delay
PDelL110 goto PDelL11        ; 2 ciclos delay
PDelL111
        retlw 0             ; 2+2 Fin.
        END


esta genial el PDel.

Saludos!


 

anything