Autor Tema: Timer en PBP  (Leído 5032 veces)

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

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Timer en PBP
« en: 05 de Octubre de 2005, 04:43:00 »
Como puedo hacer en PBP que una rutina se me ejecute cada x veces por segundo empleando ON Interrup.?
Saludos desde Granada, España.

Desconectado Artifox

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 455
    • Quadbot
RE: Timer en PBP
« Respuesta #1 en: 05 de Octubre de 2005, 08:42:00 »
Hola, yo para unsar timers lo configuro directamente  en el INTCON, OPTION_REG, etc para usar el timer0, timer1 y timer2.... Pero al momento que quiero que se registre una interrupcion del timer, no uso el ON INTERRUPT porque este espera a que termine la ultima instruccion para atender la interrupcion, lo que hace que no tenga tiempos exactos entre interrupciones, en cambio si lo hago en asembler el tiempo entre interrupcion e interrupcion es exacto.

Bueno, no se si sera lo que necesites, pero por lo menos te cuento como lo uso yo....

Un abrazo Rebotado
Video Quadbot
Saludos desde mi querido Perú.
Si realmente queremos que el mundo cambie debemos empezar por nosotros mismos... ;)

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
RE: Timer en PBP
« Respuesta #2 en: 05 de Octubre de 2005, 11:03:00 »
Gracias Artifox, asi es como lo hago con mi version de basic.
Pero yo tenia la esperanza que funcionando el micro a 20mhz y eliminando los pause el pbp fuese suficientemente rapido para gestionar esta tarea, sin tener que recurrir al asm ya que no se requiere mucha precisión.
En mi sistema cuando utilizo la interrup. Hago un save system, pero en pbp no sabria exactamente que registros guardar ya que es un poco complejo.
Si tuvieras un par de programitas basicos para ver como ejemplos tanto en int. reales (asm) como las normales del pbp para generar una base de tiempos te estaria muy agradecido.
Saludos desde Granada, España.

Desconectado gemur3x

  • PIC10
  • *
  • Mensajes: 8
RE: Timer en PBP
« Respuesta #3 en: 05 de Octubre de 2005, 15:18:00 »
.acum var byte

.        OPTION_REG = %11010101        

.        On Interrupt Goto intr
.        INTCON = %10100000            

       
.        acum= 0
       
.loop:   pauseus 1
             
.        Goto loop              



.        Disable                
.intr:  acum= acum+1
.        if acum=75 then        
           
.           acum= 0
.        endif
.        INTCON.2 = 0            
.        Resume                  
.        Enable

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
RE: Timer en PBP
« Respuesta #4 en: 05 de Octubre de 2005, 15:56:00 »
Gracias gemur3x, esto es lo que queria, yo entiendo el codigo aunque soy nuevo en el pbp, pero si pudieras comentar un poco el codigo para la gente que no esta habituada a utilizar el pbp de esta forma..... Sonrisa

PD: Porque las interrup. no son faciles de comprender.
Saludos desde Granada, España.

Desconectado josemyzm

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 309
RE: Timer en PBP
« Respuesta #5 en: 05 de Octubre de 2005, 18:25:00 »
Yo no acabo de pillarlo del todo.
Tenemos el progama en un bucle infinito (ejecutando pauseus 1); OK
y cuando se produce una interrupcion se salta a "intr";  OK

Pero DISABLE y ENABLE no deberían estar entre  intr y resume ???,  tal y como yo lo veo estas dos instrucciones no se ejecutan y se podria producir el atender una nueva interrupcion sin finalizar la anterior.


algo como


.intr:
. Disable
. acum= acum+1
. if acum=75 then

. acum= 0
. endif
. INTCON.2 = 0
. Enable
. Resume



Un saludo.

Saludos desde Logroño (España)

Desconectado Artifox

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 455
    • Quadbot
RE: Timer en PBP
« Respuesta #6 en: 06 de Octubre de 2005, 00:00:00 »
A ver aca te dejo una fuente q uso para hacer mis interrupciones, a mi nunca me ha fallado, es totalmente efectiva, y si quieres lo puedes combinar con basic....

Codigo:
DEFINE   OSC   20      " Para trabajr con un cristal de 20MHz
wsave  VAR     BYTE $20 system   " Guarda el registro W
ssave   VAR     BYTE bank0 system   " Guarda el registro STATUS
psave   VAR     BYTE bank0 system   " Guarda el registro PCLATH
" Aca van las demas variables a usar

GOTO    Inicio
"********************* Vector de Interrupcion******************
DEFINE INTHAND Int_Vector           " Handler de Interrupcion
ASM
Int_Vector
    MOVWF   wsave                      ; Guardamos el registro W
    MOVF   STATUS,W
    CLRF   STATUS                     ; Guardamos el registro STATUS
    MOVWF      ssave
    MOVF       PCLATH,W      ; Guardamos el registro PCLATH
    MOVWF      psave
    CLRF       PCLATH
ENDASM
;*****************Codigo de interrupcion**********************

"Aca va el codigo de la interrupcion
"Debemos desactivar las interrupciones
" Y activarlas antes de que termine el codigo de la interrupcion



ASM   ;****** Fin de Interrupcion ***********
End_Int
    CLRF       STATUS
    MOVF       psave,W
    MOVWF      PCLATH                     ; Restauramos el registro PCLATH
    MOVF       ssave,W
    MOVWF      STATUS                     ; Restauramos el registro STATUS
    SWAPF      wsave,F
    SWAPF      wsave,W                    ; Restauramos el registro W
    RETFIE
ENDASM
"************************Inicio del Programa*************************
Inicio:

"Aca va el cuerpo de nuestro programa
" No debemos olvidar configurar el INTCON para poder atender las interrupciones
" Ademas de configurar la fuente de interrupcion.
 
END



Espero que te sirva... Un abrazo, nos vemos Rebotado
Video Quadbot
Saludos desde mi querido Perú.
Si realmente queremos que el mundo cambie debemos empezar por nosotros mismos... ;)

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
RE: Timer en PBP
« Respuesta #7 en: 06 de Octubre de 2005, 05:50:00 »
Josemyzm con tu aclaracion el codigo tiene mas sentido, espero que no sea una rareza del pbp y se tenga que colocar momo dice el compañero.

Artifox muy interesante el codigo para los que nos gusta tener el control absoluto del micro.

Gracias a todos por vuestra colaboracion, me habeis ahorrado un monton de trabajo.

Saludos desde Granada, España.

Desconectado RALF2

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2062
RE: Timer en PBP
« Respuesta #8 en: 06 de Octubre de 2005, 11:26:00 »
Que tal mi pana Dogflux66!

Mira con respecto a tu duda, te coloco el fragmento del programa.

 Disable
intr: acum= acum+1
 if acum=75 then

acum= 0
endif
INTCON.2 = 0
Resume
Enable

Mira la cosa funciona asi: Cuando se genera una interrupcion  pbp termina de ejecutar la instruccion en curso y luego salta a la etiqueta que definiste en caso de ocurrir una interrupcion, en este caso salta a intr, como puedes observar en el programa antes de la etiqueta int se coloca disable y luego de resume se coloca enable, bueno tanto DISABLE como ENABLE son directivas que utiliza el pbp para que cuando compiles el programa este desabilite el GIE (global interrupt enable) cuando entres a la rutina de interrupciones (intr) de forma tal que si ocurre una nueva interrupcion esta no se ejecute hasta tanto no finalices con la que estas tratando inicialmente.
Por esa razon se colocan antes y despues de la rutina de interrupcion, es una manera algo curiosa que utiliza el pbp, para desabilitar las interrupciones. y recuerda que son directivas y no las veas como una instruccion normal.

Las directivas DISABLE y ENABLE tambien las puedes utilizar en partes del programa que no quieras que se vean afectadas en caso de generarse una interrupcion, por ejemplo en un trozo del programa donde es vital que se ejecute sin interrupciones...

Para mayor informacion reviza el manual de pbp.

Saludos y un fuerte abrazo!

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
RE: Timer en PBP
« Respuesta #9 en: 06 de Octubre de 2005, 14:24:00 »
Hola mi pana Ralf2.... gracias por la puntualizacion. Muchas risas
Saludos desde Granada, España.

Desconectado josemyzm

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 309
RE: Timer en PBP
« Respuesta #10 en: 06 de Octubre de 2005, 15:33:00 »
Gracias por la aclaracion, la verdad es que se ve raro así.

Saludos desde Logroño (España)

Desconectado RALF2

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2062
RE: Timer en PBP
« Respuesta #11 en: 10 de Octubre de 2005, 14:19:00 »
Que mas mis panas!

Bueno la cosa es asi yo al principio tambien me confundia, pero despues de buscar mayor informacion en la pajina del pic basic pro y en el manual fue que lo comprendi.

Saludos


 

anything