TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: black_flowers en 20 de Mayo de 2006, 20:49:16

Título: interrupcion externa en 16f84a
Publicado por: black_flowers en 20 de Mayo de 2006, 20:49:16
hola, ¿cómo debo configurar el hardware para trabajar con la interrupcion externa (rb0) en el 16f84? Quiero producir la interrupcion por un flanco de subida. Entonces ¿debo conectar al guna resistencia a la rb0? Ademas tengo la duda de que tension debo meter en el pin para hacer esto. Yo supongo que gnd para 0 y vcc para 1, pero no estoy muy seguro de como hacerlo para que funcione bien. Alguien me podría decir como debo hacerlo? Gracias y un saludo.

 :-)
Título: Re: interrupcion externa en 16f84a
Publicado por: Chaly29 en 20 de Mayo de 2006, 23:07:19
Hola black_flowers, la señal para la entrada de RB0 debes ser una del tipo diguital con solo dos niveles posibles 0V y 5V, ahora si el circuito externo que disparara la interrupción no posee esas señales tendras que adaptarlas.

Por el tema de como se configuran las interrupciones, deberias decirnos que lenguaje de programación usas, o si nó puedes entrar al subforo de tu lenguaje y de seguro encontraras muchos ejemplos de como usar las interrupciones.

Un saludo.

Atte. CARLOS.

Título: Re: interrupcion externa en 16f84a
Publicado por: Toph en 20 de Mayo de 2006, 23:24:55
Citar
hola, ¿cómo debo configurar el hardware para trabajar con la interrupcion externa (rb0) en el 16f84? Quiero producir la interrupcion por un flanco de subida. Entonces ¿debo conectar al guna resistencia a la rb0? Ademas tengo la duda de que tension debo meter en el pin para hacer esto. Yo supongo que gnd para 0 y vcc para 1, pero no estoy muy seguro de como hacerlo para que funcione bien. Alguien me podría decir como debo hacerlo? Gracias y un saludo.

 :) correcto, para que sea uno, 5 V y para que sea cero, 0V, con respecto al hardware se recomienda no ponerle al pin directamente los 5 V, si no ponerle un arreglo de resistencias y aveces hasta un diodo antes del pin
 ¿quien dara ese flanco ¿se dara con un switch? o ese pin se conectara a una señal que le va estar dando diferentes flancos?
Título: Re: interrupcion externa en 16f84a
Publicado por: vszener en 21 de Mayo de 2006, 06:26:30
¿Que lenguaje de programacion vas a usar para dicha interrupcion?


Suerte!!! :wink:
Título: Re: interrupcion externa en 16f84a
Publicado por: Mario en 21 de Mayo de 2006, 17:55:41
Coincido con los demás.

Por favor dínos qué lenguaje utilizarás para programar.
Título: Re: interrupcion externa en 16f84a
Publicado por: Mario en 22 de Mayo de 2006, 00:44:05
Como este foro es iniciación supondré que lo que quieres es en ensamblador.

Vete aquí y busca el ejemplo 6.3: http://www.mikroelektronika.co.yu/english/product/books/PICbook/6_chapter.htm

Ahora, también puedes realizar una búsqueda aqui en los foros; si deseas algún lenguaje en particular selecciona qué foro quieres (ensamblador, Basic, C, etc).

Espero te sirva.
Título: Re: interrupcion externa en 16f84a
Publicado por: Mario en 22 de Mayo de 2006, 01:10:08
Se me olvidó.

Este es para un 16F84, no un 84A pero funciona igual.

Otra cosa:
Está para interrupción en flaco negativo, para positivo solo cambia el BCF  OPTION_INTEDG

por BSF OPTION_INTEDG.

Otra situación:

Los de la serie 16FXX y X no son capaces de almacenar los registros STATUS y W, tu debes hacerlo. Esto lo haces para que después de la interrupción regreses a las mismas condiciones que tenías antes de la misma (alo mejor ya lo sabías, si no, ya lo sabes).

El programa que viene en la página no trae esta parte pero aqui te la pongo:


MOVWF W_TEMP          ;copy W to temp register,
                                  ;could be in either bank
SWAPF STATUS,W        ;swap status to be saved into W
BCF STATUS,RP0         ;change to bank 0 regardless
                                  ;of current bank
MOVWF STATUS_TEMP ;save status to bank 0
                                  ;register

: aqui va la rutina de interrupción.
: (ISR) 
: En el programa dice ISR también, coloca tu rutina en medio de esto.

SWAPF STATUS_TEMP,W ;swap STATUS_TEMP register
                                    ;into W, sets bank to original
                                    ;state
MOVWF STATUS             ;move W into STATUS register
SWAPF W_TEMP,F           ;swap W_TEMP
SWAPF W_TEMP,W          ;swap W_TEMP into W

Sigue con lo demás desde aqui (Labl en el caso del programa de la página que te mencioné).

Una cosa mas:
Tu debes nombrar esas variables STATUS_TEMP y W_TEMP en tu programa como cualquier otra variable para que funcione (las primeras veces no recordaba eso y me daba de golpes porque siempre se me olvidaba  :D)

Suerte.
Título: Re: interrupcion externa en 16f84a
Publicado por: black_flowers en 22 de Mayo de 2006, 21:33:39
gracias x todas las respuestas. de todas formas mi pregunta no es con respecto al software. Lo estoy programando en ensamblador en el mplab y creo que el software está más o menos bien. Mi duda es con respecto al hardware. Lo que quiero hacer es una interrupción de prueba (no viene de ninguna salida de otro circuito ni nada). Quiero hacer saltar la interrupción externa manualmente. La duda es como conectar eso. Se supone que si conecto la patilla rb0 a 5v manualmente (tocándole con un cable que esté conectado a 5v)  ya debería saltar la interrupción ¿no es así?
Título: Re: interrupcion externa en 16f84a
Publicado por: Toph en 23 de Mayo de 2006, 18:05:08
Citar
gracias x todas las respuestas. de todas formas mi pregunta no es con respecto al software

si me parecia curioso que todos te preguntaran por software cuando tu duda es por hardware, parece que solo yo lei bien el mensaje  :mrgreen:
Citar
Lo que quiero hacer es una interrupción de prueba (no viene de ninguna salida de otro circuito ni nada). Quiero hacer saltar la interrupción externa manualmente. La duda es como conectar eso. Se supone que si conecto la patilla rb0 a 5v manualmente (tocándole con un cable que esté conectado a 5v)  ya debería saltar la interrupción ¿no es así?
si, correcto,  :) ,  pero como te dije antes no es recomendable ponerle los 5 V directamente aqui te dejo un enlace donde esta un esquema electrico de un arreglo para provocar una interrupcion externa, claro este arreglo es para que al presionar el switch le llege un cero y la interrupcion ocurre al recibir el cero,  si te es posible seria mejor que la interrupcion se produzca cuando llegue un cero  :-/. sino avisame ya veremos como adaptar el circuito para que funcione al reves.
http://platea.pntic.mec.es/~lmarti2/practic3.htm (http://platea.pntic.mec.es/~lmarti2/practic3.htm)
si no puedes ver la imagen avisame y te la envio por correo
Título: Re: interrupcion externa en 16f84a
Publicado por: black_flowers en 23 de Mayo de 2006, 19:56:15
gracias x el link, lo del flanco descendente no es problema (sólo hay q cambiar el bit correspondiente en el option reg). Lo que sí es que me parece un esquema algo complicado para hacer la conexión de la interrupción. No es que no lo sepa hacer, pero me pregunto si no sería suficiente con conectar una resistencia. ¿conoces por casualidad algún otro esquema donde esté implementada la interrupción externa?

Un saludo y muchas gracias x tu ayuda!   :)
Título: Re: interrupcion externa en 16f84a
Publicado por: Toph en 24 de Mayo de 2006, 22:05:22
Citar
gracias x el link, lo del flanco descendente no es problema (sólo hay q cambiar el bit correspondiente en el option reg).
claro, yo te decia porque podria ser una tarea y uno las tiene que hacer como le dicen  :g)
con respecto al esquema si es complicado, ¿vistes el del reset?, el que esta conectado a MCLR, es menos complejo, estos esquemas los recomiendan los libros y los maestros para proteger los puertos lo mas posible, pero si quieres puedes usar el siguiente esquema, es el mas sencillo para un switch funciona perfecto, pero, el pin RB0 esta vulnerable si ocurre algun problema en la fuente que te da los 5 V. 
(http://www.iua.upf.es/~jlozano/interfaces/interfaces3_archivos/image003.gif)
ojo este interruptor, al presionarte te va dar los 5 V como lo querias al inicio  :)
                                                           
Título: Re: interrupcion externa en 16f84a
Publicado por: Mario en 25 de Mayo de 2006, 02:36:43
hola, ¿cómo debo configurar el hardware para trabajar con la interrupcion externa (rb0) en el 16f84?
 :-)



Hola.

La razón por la cual (creo  :?) que todos los demás preguntamos sobre el lenguaje de programación es por lo que se cita (al menos eso fue lo que yo entendí  :D).

Yo entendí que quería configurar los registros del µicro para activar la interrupción (que está en hardware dentro del µicro).


Lo importante aquí es que el problema se solucionó. :-/

Saludos.
Título: Re: interrupcion externa en 16f84a
Publicado por: black_flowers en 26 de Mayo de 2006, 01:59:59
ahá, ese esquema es justo lo que estaba buscando. Muchas gracias a to2.
voy a hacer una pregunta más sólo a modo de curiosidad: ¿por qué es necesaria la r de 10K y por qué debe ser de este valor en concreto (o me imagino que aproximado)?   De nuevo muchas gracias.

 ;-)
Título: Re: interrupcion externa en 16f84a
Publicado por: vszener en 26 de Mayo de 2006, 07:22:10
Es una resistencia de pull-down (http://www.acroname.com/howto/button/button.html) , es para poner en bajo(valor logico '0') el pin cuando el interruptor este abierto...


Suerte!!! :wink:
Título: Re: interrupcion externa en 16f84a
Publicado por: Toph en 26 de Mayo de 2006, 15:55:56
Citar
¿por qué es necesaria la r de 10K y por qué debe ser de este valor en concreto (o me imagino que aproximado)?
porque si no se pone de esa forma cuando el switch estuviera abierto al micro no le llegaria un cero siempre, ya que el pin estaria en el aire,  por lo que el pin del PIC se debe poner a tierra cuando el switch este abierto para que llegue un cero y se debe hacer con una resistencia  para que si se cierra el switch no ocurra un corto circuito, el valor de la resistencia debe ser relativamente alta (tipicamente entre 1K y 10K) para que cuando se cierre el switch la corriente se valla al pin del pic en lugar de la resistencia alta porque la resistencia del pin es menor que la resitencia que esta ahi, si se pone un valor mas bajo de 1K, el voltaje se dividiria, parte de la corriente se iria a la resistencia y otra parte al PIC.