Cómo inicializar el módulo Comp_E MSP430FR5969

1

He intentado implementar un sensor de temperatura basado en resistencia en un MSP430 FR5969. La Guía del usuario es bastante sencilla en este punto. Configuré todos los registros de acuerdo con la guía del usuario, pero desafortunadamente no puedo hacer funcionar el comparador. Justo después de iniciar el comparador, se produce una interrupción incluso si no hay ningún sensor conectado. Supongo que hay un error en mi método de inicialización.

Espero que alguien pueda ayudar con este problema.

Aquí está el método de inicialización

    //Komperator beenden
stop_COMP();

CECTL0 &= 0x0000;
CEINT &= 0x0000;

// Pinbelegung konfigurieren
connect_input();

switch_pin_to_high_impedance_input(R_SENS_PORT, R_SENS_PIN, -1);
switch_pin_to_high_impedance_input(R_REF_PORT, R_REF_PIN, -1);




CECTL1 &= ~(CEMRVS); //Set to VREF0
CECTL2 &= CERSEL;


/*
 *  If CEREFLx is changed from a non-zero value to another
 *  non-zero value, the interrupt flags may show unpredictable behavior. It is recommended to set CEREFLx
 *  = 00 prior to changing the CEREFLx settings.
 */

CECTL1 |= CEPWRMD_2; // Ultra-low-Power mode
CECTL1 &= ~CEOUTPOL; // nicht invertierender Ausgang
CECTL1 &= ~CEEX;     // Eingänge des Komperators nicht vertauschen


CECTL1 |= CEF; // Ausgang  filtern
CECTL1 |= CEFDLY_1; // RC Glied mit 900 ns als Zeitkonstante
CECTL1 &= ~CEIES; // Rising Edge triggert Interrupt


CECTL2 |= CEREFACC; // Clocked (low power, low accuracy) mode

/*
*   If CEREFLx is changed from a non-zero value to another
*   non-zero value, the interrupt flags may show unpredictable behavior. It is recommended to set CEREFLx
*   = 00 prior to changing the CEREFLx settings.
*/


CECTL2 |= CERS_1; //Vcc with resistor ladder



CECTL2 &= ~CEREFL_3;
CECTL2 |= CEREFL_0; // Referenzspannung: 2.5V
CECTL2 |= CERSEL; // Referenzspannung an negativen Eingang des Komperators legen


CECTL3 |= CEPD4;

setupTimerForMeasurement();

Código para la inicialización de pin

    //Komparatoreingang
    P1DIR &= ~COMP_PIN;         //Port1.COMP_PIN  als Eingang definieren
    P1SEL0 |= COMP_PIN;         // Aktivieren der Tertiärenfunktion (Komperatoreingang)
    P1SEL1 |= COMP_PIN;
    P1OUT &= ~COMP_PIN;         // Ausgang auf Low setzen

    // RSensPin
    P3DIR |= R_SENS_PIN;            //Port3.R_SENS_PIN  als Ausgang definieren
    P3SEL0 &= ~R_SENS_PIN;          // Aktivieren der Hauptfunktion (GPIO)
    P3SEL1 &= ~R_SENS_PIN;
    P3OUT &= ~R_SENS_PIN;           // Ausgang auf Low setzen

    // RRefPin
    P3DIR |= R_REF_PIN;         //Port3.R_Ref_PIN  als Ausgang definieren
    P3SEL0 &= ~R_REF_PIN;       // Aktivieren der Hauptfunktion (GPIO)
    P3SEL1 &= ~R_REF_PIN;
    P3OUT &= ~R_REF_PIN;        // Ausgang auf Low setzen

    // Konfigurieren des Komperators
    CECTL0 &= ~CEIMEN;          // - Eingang des Komperators auf interne Ref.-Spannung legen

    CECTL0 = CEIPEN | CEIPSEL_4;            // + Eingang des Komperators nicht auf interene Ref.-Spannung legen
                // Kanal 4 (Pin COMP_PIN) an Eingang legen

    CECTL3 |= 1 << CEIPSEL_4;       // Input Buffer deaktvieren, um Energie zu sparen
    //CECTL2 |= CERSEL; //Set Vref to go to (-) terminal


    CECTL2 = CERS_1 | CERSEL | CEREF04;
    
pregunta LBoe

2 respuestas

1

Puede que falte en el código, pero no veo que el módulo COMP_E se esté activando con el bit CEON del registro CECTL1. (página 708 de SLAU367F)

    
respondido por el mattfarley
0

Los comentarios son peores que inútiles: algunos están mal, por lo que no puedes confiar en ninguno de ellos.

Hay configuraciones de campo de registro que están duplicadas o anuladas por una asignación posterior; esto hace que sea difícil determinar cuál es realmente el valor final de la configuración. Así que no voy a intentarlo.

De todos modos, el problema es que si no hay un sensor conectado, la entrada está flotando y podría leer cualquier valor. (PxREN se aplica solo a los pines configurados como E / S digitales.)

    
respondido por el CL.

Lea otras preguntas en las etiquetas