Autor Tema: Ayuda con interrupciones externas  (Leído 1986 veces)

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

Desconectado eduard001

  • PIC10
  • *
  • Mensajes: 3
Ayuda con interrupciones externas
« en: 20 de Mayo de 2014, 02:31:40 »
Hola que tal?, soy nuevo programando pic y e tratado de controlar mi timer por medio de interrupciones externas pero no lo e conseguido. Lo que quiero lograr es:
Al tener una int_ext, inicie mi timer1 desbordándose una y otra ves. Contar las veces que se a desbordado y que al existir una nueva interrupción externa se detenga el conteo de desbordamientos e imprima el total de veces que se desbordo el timer entre una interrupción y otra.
Espero que alguien pueda ayudarme con algún ejemplo se lo agradeceria, saludos y gracias.
 
« Última modificación: 20 de Mayo de 2014, 12:16:31 por MGLSOFT, Razón: Cambiado el titulo, me hace mal a la vista !! »

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4917
Re: Ayuda con interrupciones esternas
« Respuesta #1 en: 20 de Mayo de 2014, 03:38:56 »
Hola Eduardo001,
porque nos dice en que lenguaje usa? y el micro tambien. sabiendo eso, usa nuestros buscador en el foro de acuerdo a tus dudas, porque usar interrupciones externas se ha hablados muchos aqui en todos los lenguajes y seguro que encuentra ejemplos , es solo cuestion de usar el buscador.
Saludos

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Ayuda con interrupciones esternas
« Respuesta #2 en: 20 de Mayo de 2014, 07:58:40 »
Totalmente de acuerdo con stk500, tenemos que saber algunas cosas como que compilador usas, que pic, frecuencia de trabajo etc, antes de ponerse en el tema, también es bueno poner un pequeño esquema del circuito para evitar posibles fallos en el hardware
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado eduard001

  • PIC10
  • *
  • Mensajes: 3
Re
« Respuesta #3 en: 20 de Mayo de 2014, 12:01:10 »
Aaaa lo siento mucho claro que si.
Estoy utilizando un PIC16F877, y de momento lo uso a 4Mhz. Uso CCS Compiler para programarlo, el circuito es realmente simple solo comprende dos swich o push button para efectuar la interrupción externa con sus resistencias de pull up.
 Y con mis muy escasos conocimientos e hecho este codigo.

#include <16F877.h>
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B4,rcv=PIN_B5,bits=8)
#include <stdlib.h>

int16 conteo=0;
int escape=0;

#INT_EXT
IntRB0(){
   escape++;                             /**incrementa el valor para usarlo como
                                            condicion**/
   while(escape==1) {
   set_timer1 (131);                     //recarga del TMR1
   conteo++;                             /**Se incrementa cada ves que se desborda
                                          timer1**/
   printf("El conteo es: %Lu\r",conteo);
   }
  
 }

#INT_RB
IntRB1(){
printf("El conteo2 es: %Lu\r",conteo);
}

void main() {

    ext_int_edge(L_TO_H);
    clear_interrupt(INT_EXT);
    enable_interrupts(int_ext);            
            
    ext_int_edge(L_TO_H);
    clear_interrupt(INT_RB);
    enable_interrupts(int_rb);    
    
    enable_interrupts(global);
      
while(TRUE);
    
 }


Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1696
Re: Ayuda con interrupciones externas
« Respuesta #4 en: 20 de Mayo de 2014, 12:24:19 »
lo mejor que puedes hacer es activar una bandera al ingresar a la interrupción externa y hacer todo en el main, no uses la función printf dentro de la interrupción.
te recomiendo que busques en el foro acerca de las interrupciones, hay muchos hilos
como bien lo indicas, la interrupción externa activa y desactiva el timer, y en el código estas usando la Int_rb  que es otro tipo de interrupcion.
 
 
« Última modificación: 20 de Mayo de 2014, 12:41:21 por jhozate »
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Ayuda con interrupciones externas
« Respuesta #5 en: 20 de Mayo de 2014, 13:59:49 »
Hola, si lo que quieres es contar cuantas veces se desborda la interrupción del timer, deberías de activar esta misma, ya que de esta forma puedes saber cuantas veces se ha desbordado.

en este caso con la interrupción externa solo activarías o desactivarías el timer, pero el incremento sería cada que se desborde el timer


como bien te recomienda jhozate, puedes buscar mas información sobre interrupciones en el foro.

Saludos
"Nada es imposible, no si puedes imaginarlo"

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Ayuda con interrupciones externas
« Respuesta #6 en: 20 de Mayo de 2014, 14:10:14 »
Código: [Seleccionar]
while(escape==1) {
   set_timer1 (131);                     //recarga del TMR1
   conteo++;                             /**Se incrementa cada ves que se desborda
                                          timer1**/
   printf("El conteo es: %Lu\r",conteo);
   }

Ahí creo que tenés un error. Una vez que escape llegue a 1, el programa va a entrar en un bucle infinito. Tal vez quisiste usar un if en lugar de un while.

Saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado eduard001

  • PIC10
  • *
  • Mensajes: 3
Re: Ayuda con interrupciones externas
« Respuesta #7 en: 20 de Mayo de 2014, 17:16:48 »
Gracias gera, es una gran observacion pero en realidad deje el:

Citar
while(escape==1) {
   set_timer1 (131);                     //recarga del TMR1
   conteo++;                             /**Se incrementa cada ves que se desborda
                                          timer1**/
   printf("El conteo es: %Lu\r",conteo);
   }
Para ocasionar un bucle infinito hasta que ocurra la interrupción  :oops: aunque no se refleja en la programación, de momento intentare hacerlo por flancos como menciona jhozate. De todos modos cualquier consejo o sugerencia es mas que bien venido.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1696
Re: Ayuda con interrupciones externas
« Respuesta #8 en: 20 de Mayo de 2014, 19:41:01 »
podrias intentar algo de la siguiente forma usando solo la int_ext y la int_rtcc,  podría servir
Código: [Seleccionar]
#int_ext
void intExt_isr()
{
//Aqui condicionas el stop/inicio timer
// Des-activacion de flag
}

#int_rtcc
void intRtcc_isr()
{
//contador de desbordamiento
}

void main()
{
while(true)
  {
    if(flag==1)
       {
        printf("El conteo es: %u\r",conteo);
        }
  }
}
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA