Hola a todos,
Estoy intentando implementar la lectura de un anemómetro con un pic24fj64gb0002.
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
El codigo de config:
y la assignación del pin al módulo input capture 1
No se, me lo estoy mirando pero no veo lo que no hago bien
Alguien sabe donde fallo?
Gracias
Estoy intentando implementar la lectura de un anemómetro con un pic24fj64gb0002.
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:
_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:
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:
// 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