Autor Tema: Manejo de interrupciones!!!! Help  (Leído 13162 veces)

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

25javier

  • Visitante
RE: Manejo de interrupciones!!!! Help
« Respuesta #60 en: 16 de Enero de 2004, 11:52:00 »
hola!!tengo unproblema con las interrupciones, encontre algo bastante extraño,en el programa que les mando genero una interrupcion por RBO ,intento prender y apagar un led cuando esto sucede pero parece no hacerme caso al delay(que hay entre el encendido y el apagado),el delay lo cheque afuera de la rutina de interrupcion y anda bien...
Cuando hay una interrupcion por RBO el programa entra bien en la rutina de interrupcion pero no me respeta el delay ,me prende el led mientras mientras esta presente la interrupcion y tendria que prenderlo ,esperar el delay y apagarlo ...bueno...ahi les mando el codigo a ver quien me puede dar una mano,saludos
Javier
pd:en el programa principal prendo y apago otro led(led2)

Define INTHAND _INTERRUPCION
SALVAW var byte bank0 system
SALVASTATUS var byte bank0 system
SALVAPCL var byte bank0 system
FLIP1 VAR BYTE bank0 system   "FLIP 1,FLIP2,FLIP3 VARIABLES USADAS PARA EL DELAY
FLIP2 VAR BYTE bank0 system
FLIP3 VAR BYTE bank0 system
led1 var porta.3              "LED 1
led2 var porta.2              "LED 2  
cont var byte
OPTION_REG=%10000000  "DESABILITO PULL UP,FLANCO DECRECIENTE RBO
INTCON=%10010000  "HABILITO INTERRUPCIONES GLOBAL,HABILITO INTERRUP RBO
trisa=0           "porta salidas
led2=0
led1=0
cont=0
FLIP1=0
FLIP2=0
FLIP3=0
goto Programa_principal

INTERRUPCION: "**********************

asm
 bcf INTCON,GIE ;desactivo interrup
 bcf INTCON,INTF ;borro bandera rbo
 bsf _led1      ;prendo led      
 call delay     ;llamo retardo aprox 1 seg  
 bcf _led1       ;apago led
 movf SALVAPCL,W ; Restore PCLATH, STATUS and W registers
 movwf PCLATH
 swapf SALVASTATUS,W ;Invierte STATUS --> W
 movwf STATUS ;Restaura STATUS
 swapf SALVAW,F ;Invierte --> F
 swapf SALVAW,W ;Restaura W
 bsf INTCON,GIE ; Activa interrupciones generales
 retfie

delay                   ;DELAY aprox 1 SEGUNDO(cristal 4mhz)
       MOVLW .5
       MOVWF FLIP3
AHI    movlw .255
       movwf FLIP1
ALLI   movlw .255
       movwf FLIP2
       DECFSZ FLIP2,f
       GOTO $-1
       DECFSZ FLIP1,f
       GOTO ALLI
       DECFSZ FLIP3
       GOTO AHI
       return
endasm
Programa_principal:
led2=1
pause 1000
led2=0
pause 1000
goto Programa_principal
end


Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
RE: Manejo de interrupciones!!!! Help
« Respuesta #61 en: 18 de Enero de 2004, 12:29:00 »
Si utilizas PBP 2xx tienes que usar estos registros para restaurar al salir .

wsave var byte bank0 system
ssave var byte bank0 system
psave var byte bank0 system

perece todo bien .

un saludo

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
RE: Manejo de interrupciones!!!! Help
« Respuesta #62 en: 18 de Enero de 2004, 12:34:00 »
Fijate lo que hace al producirse una interrupcion.
Este codigo se genera solo .
Codigo:

* 1141   0004- 00A0                 movwf   wsave           ; Save the W register
* 1142   0005- 0E03                 swapf   STATUS, W
* 1143   0006- 0183                 clrf    STATUS          ; Point to bank 0
* 1144   0007- 00C1                 movwf   ssave           ; Save the STATUS register
* 1145   0008- 080A                 movf    PCLATH, W       ; Save PCLATH
* 1146   0009- 00BB                 movwf   psave
* 1147   000A- 3004                 movlw   ((INTHAND) >> 8)        ; Set PCLATH for jump
* 1148   000B- 008A                 movwf   PCLATH
* 1149   000C- 2CAE                 goto    INTHAND         ; Goto user interrupt handler



Si usamos otros registros no se que puede pasar .

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: Manejo de interrupciones!!!! Help
« Respuesta #63 en: 18 de Enero de 2004, 17:39:00 »
He migrado el codigo al 16f876... Y parece que de momento, no se resetea....
Ahora me toca pegarme con los registros, porque al restaurar las variable, creo que tengo algo mal....
Al hacer el hserout de la variable minutos y segundos, de vez en cuando el hiperterminal, parece que lee,  lo que le viene en gana, o que las variables cambian de valor...
Voy a ver...

Tnks

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: Manejo de interrupciones!!!! Help
« Respuesta #64 en: 18 de Enero de 2004, 18:22:00 »
Parece que ya funciona....
Haciendo caso a lo que nuestro querido amigo SISPIC, me comento anteriormente...
He retirado la parte de codigo que guardaba los registros antes de ejecutar el codigo de la interrupción... y todo parece que funciona bien....
Mañana os contaré, si no se ha resateado el pic...

Me resulta muy extraño, pero con el 16f84, si no guardaba estos registros... no funcionaba ni a palos.... y sin embargo, con el 16f876... es al contrario...

Bueno, en fin, que de momento todo funciona, y eso es lo que realmete queria... Asi que a seguir pensando para hacerle perrerias al circuito...

Saludos Para todos...
En particular a SISPIC...
TNKS...

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: Manejo de interrupciones!!!! Help
« Respuesta #65 en: 18 de Enero de 2004, 18:29:00 »
Escrito originalmente por Sispic
Si utilizas PBP 2xx tienes que usar estos registros para restaurar al salir .

wsave var byte bank0 system
ssave var byte bank0 system
psave var byte bank0 system

perece todo bien .

un saludo


Tiene razon sispic.. Yo cai en el mismo error...

Suerte!!!...

25javier

  • Visitante
RE: Manejo de interrupciones!!!! Help
« Respuesta #66 en: 19 de Enero de 2004, 16:45:00 »
Gracias por la ayuda!!!!!!;ahi estaba la metida de pata...les cuento que en el interin de resolver este problema,me meti por primera vez con el pbp plus y me anduvieron todas las interrupciones perfectamente sin hacer tantos "arreglos"
Saludos y  gracias!!
Javier

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: Manejo de interrupciones!!!! Help
« Respuesta #67 en: 24 de Enero de 2004, 14:43:00 »
Ahora una duda exixtencial.....
No me funcionan las interupciones perifericas en portb4.7
??? despues de migrar el proyecto a pic16f876...
Y lo que realmente me interesa...
COMO??? puedo leer el tiempo que esta pulsado el pin portb.0???
el tema esta en que pongo el portb0 an alto, y hasta que no lo paso a estado 0, no entra en la interrupción....
Mi idea, es usando la interrupción, poder discriminar el tiempo que ha estado pulsado el portb0 para usar este pin para mas de una función.
por ejemplo si pulso el portb0 durante 3 segundos, enciendo un led, y si lo pulso 10 segundos, el led parpadea.

Alguna idea???

Se puede hacer??

TNKS.

Desconectado PIC-A-SHU

  • PIC10
  • *
  • Mensajes: 30
Re: Manejo de interrupciones!!!! Help
« Respuesta #68 en: 06 de Julio de 2006, 17:56:23 »
HOLA, ME LLAMO ALEXIS Y SOY NUEVO EN ESTA SECCION DEL FORO. MI INTENSION ES APRENDER CON UDS. SIEMPRE Y CUANDO TENGAN LA AMABILIDAD DE AYUDARME EN LO QUE SE PUEDA.

YO ESTOY REALIZANDO UN CONTROL DE 2 SERVOMOTORES CON EL PIC 16F873 Y PROGRAMANDO EN PBP. SE MUY POCO DE PROGRAMACION, PERO CON AYUDA E LOGRADO HACER ALGO. YA LOGRO CONTROLARLOS DESDE UN PC MEDIANTE VB.
ADEMAS DEBO REALIZAR UN CONTADOR DE PULSOS, EL CUAL ME DEBE ENTRAGAR LAS RPM DE GIRO DE UN MOTOR. A LO MEJOR MI ERROR FUE HACER LOS PROGRAMAS POR SEPARADOS, POR QUE A LA HORA DE UNIRLOS NO ME FUNCIONAN. SE SUPONE QUE EL PIC DEBE REALIZAR AMBAS TAREAS AL MISMO TIEMPO, LO CUAL CREO QUE ES POSIBLE, POR LO MISMO ME HAN ACONSEJADO QUE UTILICE INTERRUPCIONES, PERO ESE ES MI PROBLEMA NO SE DE QUE SE TRATA. LEI EL APUNTE DE PBP, PERO REALMENTE NO ENTENDI MUCHO. ES POSIBLE QUE COLOQUE EN EL FORO MIS PROGRAMAS Y ALGUIEN ME PUEDA AYUDAR CON MI TAREA?????

DE ANTE MANO MUCHAS GRACIAS POR SU TIEMPO Y OJALA HAYA QUEDADO CLARO MI PROBLEMA, ESPERO TENER UN PRONTO CONTACTO Y OJALA CON BUENAS NOTICIAS. ADIOS.-
« Última modificación: 06 de Julio de 2006, 17:58:23 por ALEXIS_25 »

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: Manejo de interrupciones!!!! Help
« Respuesta #69 en: 06 de Julio de 2006, 19:00:08 »
Hola.

A ver Alexis:

Las interrupciones son algo sencillas de utilizar y si tienes el PBP instalado verás que el la carpeta de "samples" viene un programa llamado ASMINT.BAS y ONINT.BAS. Revisa esos programas.
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado PIC-A-SHU

  • PIC10
  • *
  • Mensajes: 30
Re: Manejo de interrupciones!!!! Help
« Respuesta #70 en: 06 de Julio de 2006, 19:50:30 »
MARIO, MUCHAS GRACIAS POR TU RESPUESTA, NO SE ME HABIA OCURRIDO BUSCAR UN EJEMPLO AHI.
LO ESTOY REVISANDO Y OJALA ME SIRVA PARA LO QUE QUIERO, PERO CUALQUIER COSA, PUEDO CONTAR CON TU AYUDA????

YA, MUCHAS GRACIAS, ADIOS

Desconectado PIC-A-SHU

  • PIC10
  • *
  • Mensajes: 30
Re: Manejo de interrupciones!!!! Help
« Respuesta #71 en: 10 de Julio de 2006, 14:25:06 »
HOLA AMIGOS DEL FORO. LES CUENTO QUE TODAVIA TENGO PROBLEMAS CON MIS PROGRAMAS, NO SE QUE HACER.
TENGO DESARROLLADO 2 PROGRAMAS, UNO QUE ME CONTROLA 2 SERVOS, Y ES EL SIGUIENTE:

include "MODEDEFS.BAS"
define osc 4
A var word
B var word
C var word
R var word
A1 var word
B1 var word
C1 var word
PORTB=0

inicio:
R=0
serin portb.1,n9600,A,B,C
LOOKDOWN A, ["0123456789"],A1
LOOKDOWN B, ["0123456789"],B1
LOOKDOWN C, ["0123456789"],C1
R=(A1*100+B1*10+C1)
pulsout portb.2,R
pulsout portb.4,R
goto inicio

ES ALGO SENCILLO, PORQUE MEDIANTE UNA PANTALLA DE CONTROL REALIZADA EN VB YO LE INGRESO DATOS Y MUEVO LOS SERVOS.

Y EL OTRO PROGRAMA ES EL QUE ME CUENTA PULSOS, PARA OBTENER RPM Y ES EL SIGUIENTE:



include "MODEDEFS.BAS"
define osc 4
w1 var word
w2 var word
a var word
b var word


inicio:

count portc.0,1000,w1
count portc.2,1000,w2
a=60*w1
b=60*w2
serout portc.1,t9600,["MOTOR1 :",#a," ","MOTOR2 :",#b]

goto inicio


NECESITO JUNTAR AMBOS PROGRAMAS AL PIC 16F873, PERO EL PROBLEMA ES QUE AL JUNTARLOS SOLO ME FUNCIONA UNO DE ELLOS. QUIEN ME PUEDE ACONSEJAR QUE HACER O AYUDARME DIRECTAMENTE CON LA PROGRAMACION.

LA TAREA ES LA SIGUIENTE: LOS SERVOS LOS ESTOY CONTROLANDO PARA MENEJAR LA VELOCIDAD DE 2 MOTORES DE COMBUSTION DE AEROMODELISMO Y EL CONTADOR ME DEBE ENTREGAR LA VELOCIDAD A LA QUE GIRAN LOS MOTORES Y ASI PODER REALIZAR UN CONTROL DEL SISTEMA MEDIANTE UN PC. ES POR ESO QUE UTILIZARE VB, EN DONDE DEBO INGRESAR DATOS Y LEE DATOS DIRECTAMENTE DEL PIC.

OJALA HAYA QUEDADO CLARO, ME DESPIDO ESPERANDO UNA GRAN AYUDA URGENTE, ADIOS.- 

Desconectado PIC-A-SHU

  • PIC10
  • *
  • Mensajes: 30
Re: Manejo de interrupciones!!!! Help
« Respuesta #72 en: 24 de Julio de 2006, 16:57:38 »
HOLA, COMO ESTAN.
NECESITO UNA PEQUEÑA AYUDA QUE ME TIENE MEDIO COMPLICADO. NECESITO DESHABILITAR UNA INTERRUPCION, COMO LO HAGO??

GRACIAS SI LOGRAN AYUDARME, ADIOS.-

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: Manejo de interrupciones!!!! Help
« Respuesta #73 en: 24 de Julio de 2006, 20:08:31 »
Hola.


He estado ocupado y no he podido responder.


Si no recuerdo mal cada interrupción puede desabilitarse con sus correspondientes bits de control.

Creo que están en los registros INTCON1 o 2 (depende de tu µicro) y en los registros PIE (1,2, etc. depende de tu µicro).
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee