Autor Tema: interrupcion pic12f683  (Leído 3220 veces)

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

Desconectado modelo75

  • PIC10
  • *
  • Mensajes: 28
interrupcion pic12f683
« en: 09 de Junio de 2005, 17:36:00 »
hola, estoy usando el pic12f683 y ccs 3.222, el siguiente programa funciona bien
#include <12F683.h>
#device adc=8
#use delay(clock=4000000, restart_wdt)
#fuses WDT,INTRC_IO, NOCPD, NOPROTECT, NOMCLR, NOPUT, NOBROWNOUT, NOIESO, NOFCMEN
#use rs232(baud=9600,parity=N,xmit=PIN_A0,rcv=PIN_A1,bits=8,restart_wdt,errors)//DISABLE_INTS
#ROM 0x7FF={0x3400}
#priority   CCP1                

long rise;
//--------------------------------
#int_CCP1
CCP1_isr()
{
   putc("X");
}
/*si hay señal en el pin,, imprime una "X", sino imprime PER=0 cada 2 seg.*/
//---------------------------------
void Init (void);

void main()
{
restart_wdt();
printf("start
"Giño;
Init ();
while (1)
{
   restart_wdt();
   printf("PER: =%lu

", rise);
   delay_ms(2000);
   rise=0;
}
}
//-----------------------------------------------
void Init (void)
{
restart_wdt();
set_tris_a(0b001110);
   #ASM
   movlw   0x8f// OSCCON
   movwf   0x04
   movlw   0b1100101// 4M, intternal clock, stable
   movwf   0x00
   
   movlw   0x90// OSCTUNE – OSCILLATOR TUNING
   movwf   0x04
   movlw   0b00000 //
   movwf   0x00

   movlw   0x81   // OPTION REG
   movwf   0x04
   movlw   0b11001000   // pull up dis,prescaler a wdt
   movwf   0x00

   movlw   0x10         //T1CON
   movwf   0x04
   movlw   0b00001001      
   movwf   0x00
   #ENDASM
   set_timer1(0);
   rise=0;
   setup_adc_ports(0);
   setup_adc(ADC_OFF);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_CAPTURE_RE);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts(INT_CCP1);
   enable_interrupts(GLOBAL);
}
 
Ahora si en la fc que maneja la interrupcion cambio
#int_CCP1
CCP1_isr()
{
    rise = get_timer1();
    set_timer1(0);
}
Cuando se produce la interrupcion obtengo caracteres raros, como si cambiase la velocidad del clock. Como estoy usando el osc interno, creeria que al usar el timer1 se produce algun error. Puede ser por ahi el tema o alguien ve otra causa??

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: interrupcion pic12f683
« Respuesta #1 en: 09 de Junio de 2005, 23:52:00 »
¿No te faltará en el main el setup_timer_1(....);  ?

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: interrupcion pic12f683
« Respuesta #2 en: 10 de Junio de 2005, 04:11:00 »
Pienso lo mismo que Pocher, salvo que este trozo de ASM haga lo mismo que el setup_timer_1();

movlw 0x10 //T1CON
movwf 0x04
movlw 0b00001001
movwf 0x00

¿Qué hace concretamente?

Desconectado modelo75

  • PIC10
  • *
  • Mensajes: 28
RE: interrupcion pic12f683
« Respuesta #3 en: 10 de Junio de 2005, 07:59:00 »
Si nocturno,
en el main llamo a la fc init que inicializa los seteos y el trozo de ASM al que te refieres, le da al registro 10h (T1CON) el valor 0b00001001, que lo setea como interno, sin prescaler, estable; que es lo mismo que la intruccion setup_timer_1( T1_INTERNAL | T1_DIV_BY_1 );
, pero en asembler tiene un par mas de parametros.
He probado de las dos formas y nada.
Tambien probe usar la interrupcion del timer1 y funciona.  Pero no puedo tomar el valor del timer.
Sigo buscando, cualquier ayuda es bienvenida.
saludos

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: interrupcion pic12f683
« Respuesta #4 en: 10 de Junio de 2005, 12:30:00 »
Te lo he estado probando en el simulador para un 16F876 y va bien. Eso sí debes quitar rise=0 del while, de lo contrario no verás el valor capturado del TMR1.

Un saludo

Desconectado modelo75

  • PIC10
  • *
  • Mensajes: 28
RE: interrupcion pic12f683
« Respuesta #5 en: 10 de Junio de 2005, 17:32:00 »
gracias pocher, yo tambien lo he probado en el 16f876A y funciona bien, salvo que en este uso oscilador externo, pero en el 12f683 con oscilador interno no funciona. Probe medir el periodo de una señal leyendo un pin (sin interupcion) y funciona, asi que adios a la interrupcion.
saludos


 

anything