Autor Tema: Problema con interrupcion y CAD  (Leído 2915 veces)

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

Desconectado piriots

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
Problema con interrupcion y CAD
« en: 25 de Agosto de 2005, 10:51:00 »
Bueno les cuento. Estoy usando un pic 16f877, usa la interrupcion del timer0 para capturar el valor de un encoder de un motor cada 2 segundos. Los pulsos que manda el encoder los meto en un contador dentro de la rutina de atencion a la interrupcion de RB5 y RB6, hasta aqui todo bien. El problema es que tambien tengo que leer 2 sensores de temperatura LM35, en la funcion que se encarga de leer la temperatura desactivo las interrupciones para que no interrupman la conversion. Esto hace que el resultado de los encoders pase de ser de 3600rpm del motor a poco mas de 200.

En la funcion principal del programa solo hay la conversion de temperaturas, la otra info se trata por interrupciones y esto hace que las interrupciones esten la mayor parte del tiempo desactivadas. Como puedo solucionar esto? Seria una solucion hacer la lectura de las sondas dentro de la rutina de interrupcion del timer?? es que si lo hago asin pierdo resolucion de los encoders...

Salu2 y gracias de antemano

Desconectado piriots

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
RE: Problema con interrupcion y CAD
« Respuesta #1 en: 26 de Agosto de 2005, 05:11:00 »
Nadie???Llorando

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: Problema con interrupcion y CAD
« Respuesta #2 en: 26 de Agosto de 2005, 08:38:00 »
Bueno las interrupciones están para eso, es decir, que el programa principal haga algo y la rutina de interrupción haga otra cosa sin interferir una en la otra.

No vas a interferir en el conversor si activas la interrupción del timer, simplemente, cuando salte la interrupción, capturarás el valor del encoder y cuando no, operas con el conversor.

Pon el sódigo aqui a ver como lo tienes hecho.

Desconectado piriots

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
RE: Problema con interrupcion y CAD
« Respuesta #3 en: 26 de Agosto de 2005, 14:46:00 »
Yo tenia entendido que si saltaba la interrupcion mientras se estaba usando el cad el valor de la conversion era erroneo. El programa estaria mejor en el foro de c pero bueno aqui dejo un trozo del programa.

[code]
///////////////////////////////////////////////////////////////////////////
//   Funcion de interrupcion para el tach de los ventiladores  //
///////////////////////////////////////////////////////////////////////////
#int_rb
void inter_rb()
{
short enc1,enc2;
static short ultim_enc1=1;
static short ultim_enc2=1;
enc1=input(pin_b5);
enc2=input(pin_b6);
if(ultim_enc1 && !enc1) tach1++;
if(ultim_enc2 && !enc2) tach2++;
ultim_enc1=enc1;
ultim_enc2=enc2;
}
///////////////////////////////////////////////////////////////////////////
//           Funcion de interrupcion del timer0                             //
///////////////////////////////////////////////////////////////////////////
#int_timer0
void inter_timer0()
{
static byte timer_0_count=0;
if (timer_0_count<31)timer_0_count++;
else
{
timer_0_count=0;
cont1=tach1;
cont2=tach2;
rpm1=(cont1/4)*60;
rpm2=(cont2/4)*60;
printf(lcd_putc,"fr1=%lu r2=%lu",rpm1,rpm2);
tach1=0;
tach2=0;
temp_int();
}
set_timer0 (8);
}

void temp_int()
{
disable_interrupts(global);              
set_adc_channel(0);                      
delay_ms(16);
temp1=read_adc();                          
set_adc_channel(1);                        
delay_ms(16);                              
temp2=read_adc();                          
enable_interrupts(global);                
}
[code]

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: Problema con interrupcion y CAD
« Respuesta #4 en: 27 de Agosto de 2005, 13:14:00 »
Con lo poco que se de C lo único que te puedo decir es que "parece" todo correcto.

Efectivamente, si salta una interrución el valor del CAD NO es erroneo. El CAD trabaja independientemente de lo que haga la CPU del PIC, por lo que no le afectan ni interrupciones, ni nada. Una vez activado, captura la señal analógica, la convierte y la almacena en los registros ADRESH y ADRESL. Lo único que puede afectar a esta operación, es que modifiques los valores de estos registros o de los ADCON0 y ADCON1 desde la rutina de interrupción.

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
RE: Problema con interrupcion y CAD
« Respuesta #5 en: 27 de Agosto de 2005, 21:50:00 »
Hola Piriots... por lo que veo, lees 3 temperaturas???, si es asi, en la tercera no le das tiempo de conversion, y activas las interrupciones... quizas esa sea la falla?...
(recien empiezo con el C, y aun no C nada je je je..)

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: Problema con interrupcion y CAD
« Respuesta #6 en: 28 de Agosto de 2005, 02:37:00 »
Hola, mira...Ese es el problema de las interrupciones, esta todo barbaro, hasta que le tienes que agregar otras tareas simultaneas al PIC y ZAZ! la interrupcion resulta ser una pesadilla.
Lo que dice Norberto puede ser, espero que te hayas fijado en eso.
Pregunta: ¿Por que utilizas la interrupcion y porque utilizas el timer0? ¿Acaso necesitas economizar energia? ¿No es mas simple y rapido hacer un loop que se fije si el CAD  termino  de escribir el valor? y luego pasar a leer los 3 sensores restantes?
Saludos y espero me expliques, porque por ahi entendi todo mal. O simplifique demasiado todo Giño
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: Problema con interrupcion y CAD
« Respuesta #7 en: 28 de Agosto de 2005, 06:46:00 »
Bueno chicos no se si estoy equivocado o es que en C la cosa cambia, pero en ASM creo que activar o no las interrupciones no afecta para nada al CAD.
Lo único que hay que hacer bien es salvar y restaurar los registros "w", "pclath", y "status".

Desconectado piriots

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
RE: Problema con interrupcion y CAD
« Respuesta #8 en: 28 de Agosto de 2005, 10:21:00 »
A ver, tengo la interrupcion del timer0 configurada para que salte cada dos segundos, con esto capturo los pulsos del encoder, que manda 2 por cada revolucion. Asin dividiendolo por 4 obtengo las rpm en un segundo lo miltiplico por 60 y ya tengo las rpm. Lo del CAD lo he metido dentro de la rutina de interrupcion porque si lo meto dentro del bucle principal las interrupciones estan desactivadas casi siempre.

Al final en c la interrupcion afecta al CAD o no?? Si no le afecta leo el cad dento del bucle principal y listos, pero es que me suena haver visto en algun lugar que si que afectaba, a lo mejor estoy equivocado....

Salu2


 

anything