Autor Tema: input capture with dedicated timer  (Leído 1766 veces)

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

Desconectado danifiguerola

  • PIC10
  • *
  • Mensajes: 24
input capture with dedicated timer
« en: 25 de Julio de 2015, 08:12:38 »
Hola,

Estoy intentando implementar la lectura de un anemómetro con un pic24fj64gb002.

El anemómetro funciona con un reed switch. Funciona a través de un campo magnético de manera que cada vuelta cierra el switch 2 veces (equivale a enviar dos pulsos). El anemómetro tiene dos salidas. Una se conecta a tierra y la otra se conecta al pin del pic a la vez que a la tensión (a través de una resistencia).

En definitiva, la teoría es que normalmente en el pin del pic hay Vdd excepto cuando se cierra el switch que lo lleva a 0. El resultado es que a la entrada del pic hay un tren de pulsos a una frecuencia proporcional a la velocidad del viento (la relación la indica el fabricante del anemómetro).

Mi idea era realizar la medida utilizando el módulo input capture con timer dedicado.

El problema que me encuentro es que cuando conecto el anemómetro al pic, aunque el switch esté abierto, este me lleva la señal a 0 (sin conectar al pic en el extremo de la salida del anemómetro tengo Vdd, una vez lo conecto me baja a 0).

Imagino que no tendré bien configurado el puerto, pero me lo he estado mirando y no encuentro la razón.

Utilizo el pin RB3, he puesto todo el puerto digital (AD1PCFG = 0xffff), el trisb3 a '1' (salida) y por si a caso (aunque creo que no hace falta al tratarse de una salida) el _CN3PUE a '0' (pull-up interno desconectado) y el _ODB3 a '0' (salida no open drain).

Las parlabras de config

Código: [Seleccionar]
_CONFIG1 (JTAGEN_OFF & FWDTEN_OFF);                     //Mòdul JTAG deshabilitat (RB5-RB9 i/o digitals) i WDT desactivat
_CONFIG2 (POSCMOD_NONE & OSCIOFNC_ON & FNOSC_FRC);      //Oscil·lador primari desactivat, RA3 i/o digital, Oscil·lador FRC seleccionat (8MHz)
_CONFIG3 (SOSCSEL_IO);                                  //RA4 i RB4 i/o digitals
_CONFIG4 (RTCOSC_LPRC);                                 //Es selecciona el LPRC intern com a rellotge de referència del mòdul RTCC

El codigo de config:
Código: [Seleccionar]
  AD1PCFG = 0xffff;                           // Tots els ports digitals
    CNEN1 = 0x0000;                             // Totes les interrupcions per CN deshabilitades
    CNEN2 = 0x0000;
    _TRISB3 = 1;                                // RP3 (RB0) entrada
 
    _CN3PUE = 0;                                // Desactiva pull-up interna
    CNPU1 =0x0000;
    CNPU2 = 0x0000;

y la assignación del pin al módulo input capture 1
Código: [Seleccionar]
// Configurar Input Capture IC1

    __builtin_write_OSCCONL(OSCCON & 0xbf);     // Macro que realitza seqüencia de desbloquejament per assignació de RPn
    RPINR7 = 0x0003;                            // IC1 associat al port RP3 (RB3)
    __builtin_write_OSCCONL(OSCCON | 0x40);     // Macro que realitza seqüencia de bloquejament per assignació de RPn

    IC1CON1 = 0X1002;                           // Selecciona TIMER1, interrupció per cada event amb event a cada flanc descendent
    IC1CON2 = 0X0000;                           // No sincronitzat amb cap altre mòdul

// Configurar Timer1

    T1CON = 0x0010;                             // Timer en preescaler 1:1 (a 8MHz incrementa cada 0,25us)
    PR1 = 0xffff;
    _TON = 1;                                   // Activa timer1
    _IC1IF = 0;
    _IC1IE = 1;

No se, me lo estoy mirando pero no veo lo que no hago bien

Alguien sabe donde fallo?

Gracias

Desconectado danifiguerola

  • PIC10
  • *
  • Mensajes: 24
Re: input capture with dedicated timer
« Respuesta #1 en: 25 de Julio de 2015, 11:20:51 »
Ei, ya está solucionado.

Nada, que tenia incluida una librería para controlar el LCD y en ella configuraba todo el puerto B como salida, por eso me bajaba a 0 la señal.

Gracias.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: input capture with dedicated timer
« Respuesta #2 en: 25 de Julio de 2015, 11:57:58 »
Ei, ya está solucionado.

Nada, que tenia incluida una librería para controlar el LCD y en ella configuraba todo el puerto B como salida, por eso me bajaba a 0 la señal.

Gracias.

Cosas que pasan :), al menos lograste solucionarlo y no te tomo mucho tiempo


 

anything