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

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
Manejo de interrupciones!!!! Help
« en: 29 de Septiembre de 2003, 19:09:00 »
Manejo de interrupciones!!!! Help[/b]

<

Desconectado marmatar

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1220
    • MSTools
RE: Manejo de interrupciones!!!! Help
« Respuesta #1 en: 25 de Noviembre de 2003, 14:54:00 »
Abago...
Creo que queda claro que no hace poco que estás en el foro... y si nadie te ayudó es porque no sabíamos que querías saber específicamente de las interrupciones.
Sería facil solo derivarte a un link de un  sitio donde esté la explicación, pero tu pediste ayuda... solo en el Asunto del subforo.
Creo que lo correcto hubiera sido especificar cual era la duda... porque creo que  la mayoría pensó que se te "escapó" el dedo al subir el mensaje sin contenido.
Creo que todos estamos para ayudarnos mutuamente, y que nadie hace las cosas con mala intensión.
Por otra parte... Luis quiso darte una mano, y de mas está decir que es un maestro de la didáctica... y no veo porqué reaccionas así con él... incluso después de que ya solucionaste tu problema él igualmente colocó la respuesta para otros foristas.
Creo que lo mismo deberías hacer tu... y no por ser "de cosecha propia" quedartelo hasta averiguar por ti mismo si es la mejor opción o era una guarrada que podría solucionarse de otra manera.
De los aciertos y errores propios y de los demás, aprendemos todos, de eso se trata el foro... por eso te recomiendo comentar como lo has solucionado... porque quizás es esa la manera de haberlo hecho desde el principio... colocar algo, y preguntar acerca de que falta, en que le estoy errando, como es?
No es mi intención acalorar la discusión, pero creo todo se debe a una falta de interpretación de un mensaje "vacío"...

Un gran abrazo a ambos... y a decir verdad, yo también tengo problemas con las interrupciones... recién estoy aprendiendo sobre ellas... pero prefiero leer algo mas antes de preguntar, porque apenas tengo una somera idea de que se trata, quizá cuando me surja alguna duda me podrías ayudar vos, no Abago?

marmatar
Lo posible ya está hecho, entonces hagamos lo imposible - Platón

Desconectado LuisFrino

  • Moderadores
  • PIC16
  • *****
  • Mensajes: 140
    • Electronica Microcontroladores Ilumunacion Decorativa
RE: Manejo de interrupciones!!!! Help
« Respuesta #2 en: 25 de Noviembre de 2003, 19:16:00 »
Que es una interrupcion ?
Cuando se utilizan interrupciones?
Se utilizan interrupciones cuando se programa para que el micro realice operaciones en tiempo real.
Una interrupcion es una directiva  que se da al microcontrolador para realice una tarea desde el programa fuente
y el micro deja de hacer lo que esta haciendo para atender un evento  
en forma inmediata o sea que se le da la orden de ir a determinado ((bit de un puerto  o pin del micro))
haga un chequeo determinado y dependiendo de la informacion que recoge en ese ((bit del puerto o pin del micro))
realice una determinada operacion
supongamos que estamos con un desarrollo donde actuan sensores por ejemplo de temperatura
y debemos mantener una temperatura estable a 70 grados
tenemos que tener en cuenta que deberemos tener algunos dispositivos externos al micro  

primero un elemento calefactor para subir la temperatura
segundo un elemento para enfriar el ambiente Forzador  o ventilador    
tercero un sensor de tempertatura para poder medir los grados
cuarto visualizar esa temperatura en un display

dentro del listado del programa hay que tener en cuenta cuales son las prioridades
para eso antes de comenzar un desarrollo hay que tener muy bien estudiado lo que queremos que el micro realice pues el micro es un dispositivo sin inteligencia o sea estupido tonto o como quieran llamarle  
solo hace lo que le indicamos,nosotros lo hacemos inteligente o mas tonto si no le damos las intrucciones precisas

volviendo al tema de las interrupciones
y el ejemplo del programa para mantener una temperatura constante
el micro tiene un solo contador de programa PC por lo tanto no puede realizar dos tareas a la misma vez

la primera orden es medir la tempertaura actual supongamos que es 20 grados
para los 70 grados estan faltando 50 grados entonces que hacemos?
activamos el calefactor y mientras tanto mostramos la temperatura en el display
cada determinado tiempo indicamos al micro que vuelva a leer el sensor  y despues mostrar
la nueva temperatura asi hasta que lleguemos al valor de 70 grados

cada vez que estamos enviando al micro a leer la temperatura con el sensor estamos realizando una interrupcion cada interrupcion debe estar contenida en un bucle o lopp
para que retorne y siga con las demas tareas asignadas
por ejemplo si llego a 70 grados cortar el calefactor volver a medir si supera los 70 grados
encender el enfriador volver a medir si sigue en 70 no hacer nada volver a medir
si bajo la temperatura volver a calefacionar volver a medir etc etc etc

cada una de esas directivas ES UNA INTERRUPCION  
     
Muchos de ustedes ya han trabajado con interrupciones y tal vez ni siquiera se han dado cuenta
lo que pasa es que pueden estar confundidos con el tema de que estan utilizando instrucciones en basic
una instruccion en basic contiene una o varias instrucciones en lenguaje ensamblador o assembler

cuando uno escribe el comando poe ejemplo PULSIN para basic  es una instruccion sola
pero el compilador tiene que realizar un llamado a un macro que interpreta la intruccion
y la adapta al codigo ensamblador y luego esta es pasada al formato intel .HEX

o sea que tiene que realizar multiples operaciones para lograr un lenguaje entendible por el micro y es por eso que al programar en basic el tamaño del archivo final :HEX generado en basic es mas extenso que el realizado en lenguaje ensamblador

ME CANSE DE ESCRIBIR MUCHOS SALUDOS
SI ME EQUIVOQUE EN ALGO MIL PERDONES
lUIS FRINO

     

Desconectado marmatar

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1220
    • MSTools
RE: Manejo de interrupciones!!!! Help
« Respuesta #3 en: 26 de Noviembre de 2003, 06:26:00 »
Luis... gracias por la explicación... hasta ahí mas o menos tenía idea, pero me confirmaste que había entendido bien.

Un abrazo...
marmatar
Lo posible ya está hecho, entonces hagamos lo imposible - Platón

Desconectado jorgeansuini

  • PIC18
  • ****
  • Mensajes: 340
RE: Manejo de interrupciones!!!! Help
« Respuesta #4 en: 26 de Noviembre de 2003, 07:45:00 »
Buenas:

No quisiera crear una polémica, pero el concepto de interrupción , a nivel micros ,por lo que yo entiendo tiene un funcionamiento diferente.-
Basicamente uno escribe un programa para que efectue una serie de tareas, pero, le interesa dar algún tipo de prioridad a otra tarea, ejemplo: estoy mostrando algún dato en display multiplexado ,y a su vez , en el caso de apretarse una tecla, necesito atender el teclado. Bueno en ese caso ,si tengo habilitadas las interrupciones del portb, cableo el teclado a ese puerto y cuando se produzca un cambio, el cotador del programa del micro saltara a la direccion de interrupción ,en el caso de los pic H004, y en esa zona ejecuta una rutina de atención del teclado y terminada retorna a la antigua dirección de programa.-
Lo mismo se aplica a timer interno,uart,grabación de la eeprom de datos ,etc.-

Espero haber sido claro en la explicación
Saludos
Jorge

Desconectado ejmc

  • PIC18
  • ****
  • Mensajes: 311
RE: Manejo de interrupciones!!!! Help
« Respuesta #5 en: 26 de Noviembre de 2003, 08:11:00 »
Hola a todos, ya que estan en el tema, si yo estoy en un for...next y se produce una interrupcion, esta es atendida o espera que termine el for....next. Otra cosita, si el programa se encuentra leyendo el valor logico de los pins del portb hasta que ocurre una interrupcion y esta es atendida, la ejecuta y regresa, como puedo hacer para que vaya a otra etiqueta, no se si se entendio
Saludos

Desconectado jorgeansuini

  • PIC18
  • ****
  • Mensajes: 340
RE: Manejo de interrupciones!!!! Help
« Respuesta #6 en: 26 de Noviembre de 2003, 08:19:00 »
Buenas:

En teoría,si se produce una interrupción,saldria del for-next para atender la rutina.-
Por otro lado,para que vaya a otra etiqueta, tendrias que ver algun tipo de variable "testigo" que sea cambiada dentro de la rutina de inerrupción ,para que cuando retorne a la rutina normal,de alguna manera testearla a ver si cambió.-

Hay que ver un poco que queres hacer con el programa.-
Saludos
Jorge

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
RE: Manejo de interrupciones!!!! Help
« Respuesta #7 en: 26 de Noviembre de 2003, 09:31:00 »
Las interrupciones en PBP no se manejan igual que en assembler, lean bien el manual de Luis y veran que instrucciones como PAUSE o SERIN, hacen esperar hasta terminarlas antes de otorgar el permiso de atencion de interrupcion, pueden llevarse una sorpresa.

Yo hago temporizaciones con ciclos While  Wend, metiendo el valñor de una variable como condicion, la que se actualiza por interrupciones del timer0 cada 1 Mseg, por ejemplo.
Esto me permite trabajar con tiempos exactos y mantener la interrupcion OK, para atender la interrupcion de la USART sin demoras, sino agarro un caracter por la mitad y ya no sincronizo mas....

Detalles..je..je..
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado jorgeansuini

  • PIC18
  • ****
  • Mensajes: 340
RE: Manejo de interrupciones!!!! Help
« Respuesta #8 en: 26 de Noviembre de 2003, 09:44:00 »
Bueno Luis:

El hecho es que ya sea explicado a tu manera o a la mia, el resto de la gente lo entienda, y por supuesto, que luego se las arreglen solos y se guarden el código. porque como les costo hacerlo ,no tienen porqué compartirlo.-

Lo que si propongo es abrir un subforo para clarividentes, cosa que solo leyendo el título del tema, ya sepan adivinar de que se trata.-
Saludos
Jorge

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
RE: Manejo de interrupciones!!!! Help
« Respuesta #9 en: 26 de Noviembre de 2003, 12:53:00 »
Demostremos mas de lo que nos muestran...
Pongamos la otra mejilla...
Hace mas de 2000 años alguien nos quiso enseñar esto.

Este foro hasta el momento no tuvo grandes encontronazos entre los foristas, porque habriamos ahora a empezar a pelearnos?

Solo porque alguien dice haber hecho una experiencia y dudamos que sea asi, por la forma de actuar suya?

Me parece poco cabal que quienes empiecen en el foro, encuentren este tema, que seguramente nos habra partido la cabeza a varios en su momento, y ni bien empieza a leer para meterse en tema, se encuentre conque los foristas \"viejos\" se estan peleando entre ellos solo por......  falta de una explicacion????

Encendamos las neuronas , muchachos, y pongamos aqui nuestras experiencias, sin importar el como empezo el post, que no deja de ser interesante para todos.

Recuperemos el espiritu del FORO !!!!
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
RE: Manejo de interrupciones!!!! Help
« Respuesta #10 en: 26 de Noviembre de 2003, 13:22:00 »
Se puede ?????
Si me permitís un comentario sobre interrupciones en picbasic usando ON INTERRUPT GoTo INTERRUPCION es un autentico desastre por el despilfarro de de memoria y de velocidad que se pierde .
Picbasic tiene algunos comandos muy bien hechos y estudiados creo que incluso obras maestras que no envidian a los hechos en asm .
Usando este comando lo que hace picbasic es poner debajo de cada comando es esto :

Lcdout “12”
bcf     STATUS, RP0
clrf   PCLATH
call    L00001
A=0
bcf     STATUS, RP0
clrf   PCLATH
call    L00001
A=A+1
bcf     STATUS, RP0
clrf   PCLATH
call    L00001

y la label L0001 es esta :

L00001  btfsc   INTCON, GIE
 return
bsf     PCLATH, 3
 bcf     PCLATH, 4
goto    INTERRUPCION

Y no se termina aquí pero para que os hagais una idea de la perdida de tiempo que se produce .
Quien use este sistema es una gozada , no hay que preocuparse por nada , pero que sepais lo que hace .
Podeis hacer la prueba en un codigo un poco largo de simplemente quitar la linea  ON INTERRUPT GoTo , os dareis cuneta que los words de programa bajan cosiderablemente . en codigos no muy exigentes no hay problema en usarlo , pero......

Yo siempre utilizo Define  INTHAND interrupcion , esto dice al compilador simplemente que en org4 ponga el salto a la rutina que utilizamos , ademas se ancarga de salvar ya algunos registros y solo tenemos que restaurarlos al salir .

De esta manera en la rutina interrupción con el código escrito no podemos pasarnos como con el otro sistema , es mejor escribirla en asm preferiblemente, solo la precaución de salvar y restaurar los registros afectados y no se pierde ni una pistonada .

Buenooo... saludaros a todos despues de tanto rollo
sisco


Desconectado marmatar

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1220
    • MSTools
RE: Manejo de interrupciones!!!! Help
« Respuesta #11 en: 26 de Noviembre de 2003, 13:23:00 »
Totalmente de acuerdo MGL...  creo que tus palabras no hacen mas que confirmar todo lo ya dicho, la única intensión es que se faciliten las cosas y no crear polémica.
Por ese motivo se sugiere una consulta bien hecha, o mostrar el código, (no por desconfianza)... principalmente porque el foro es compartir experiencias, erradas o acertadas... en las correcciones está la lección., además se hace mas facil para los que quieran ayudar.
Todos sabemos que hay muchas maneras de hacer lo mismo en lo que respecta a la programación de PICs... por eso sería interesante ver como soluciona los problemas cada uno, creo yo que es la mejor manera de aprender.
No es porque uno lo haga mejor que otro, sino para enterarnos de alguna otra manera que nos pudiera ser útil en uno u otra situación.
Si en éste momento vé ése tema un nuevo forista, solo verá que somos humanos... y que hay diferencias... nos equivocamos y corregimos nuestros errores... y además aprenderá como se hace una consulta correctamente.
Cuando envié mi primer mensaje, lo envié llenando solo el asunto, sin contenido... como le ha sucedido a mas de uno... y tube la suerte de encontrarme con un forista que me explicó la modalidad de trabajo , entre ellas, hacer las preguntas claras, puntuales y que tengan relación con el tema donde se coloca.

Finalmente, como tu dices, aclaraciones mediante, mejor sigamos con el tema de  las interrupciones.

Un gran abrazo a tod@s, y creo que sonó el gong...último round... ganador, el Foro.

marmatar
Lo posible ya está hecho, entonces hagamos lo imposible - Platón

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
RE: Manejo de interrupciones!!!! Help
« Respuesta #12 en: 26 de Noviembre de 2003, 13:31:00 »
Genial lo tuyo SISPIC!!
En adelante voy a copiarte, con tu permiso..
Habia observado como aumenta el codigo utilizando On Interrupt, pero no sabia bien como resolverlo.

Pregunta:
Que pasa si aparece una interrupcion, la estas utilizando en assembler y justo esta en una instruccion como Pause o Serin??

La atiende o solo espera igual que utilizando On Interrupt??


Marmatar:
Gracias por tus conceptos, entiendo que todos no pueden ser perfectos ni saber de todo, como yo....

je..je..es una joda.
Nadie nacio sabiendo y nos metimos en este foro para aprender...

Un abrazo.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
RE: Manejo de interrupciones!!!! Help
« Respuesta #13 en: 26 de Noviembre de 2003, 13:35:00 »
Perdon, me quedo algo en el tintero para Sispic...

El codigo en la rutina de interrupcion debe ser assembler o puede ser en basic??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado ejmc

  • PIC18
  • ****
  • Mensajes: 311
RE: Manejo de interrupciones!!!! Help
« Respuesta #14 en: 27 de Noviembre de 2003, 08:40:00 »
Hola a todos, si yo no uso ese ON INTERRUPT GOTO ETIQUETA, y si por ejemplo habilito la interrupcion del RB0/INT, cuando una interrupcion ocurra.....¿para donde saltara el programa?.....
(este careto no se donde aplicarlo,pero lo pongo para integrarlo nomas)


 

anything