Cómo cambiar el LED con el botón en dsPIC33 y dsPICDEM MCLV-2 devboard

1

Soy nuevo en los microcontroladores y en el dsPIC33 y quiero escribir un programa simple antes de entrar en algo más complejo (aunque esto ya me parece muy complejo ...). Estoy intentando encender un LED en mi placa de desarrollo dsPICDEM MCLV-2 usando mi microcontrolador dsPIC33EP256MC506. En este momento, mi código solo hace que el LED permanezca encendido sin que yo presione el botón. ¿Puede alguien ayudarme a encontrar qué hay de malo con mi código?

¡Si alguien sabe de algún programa de ejemplo que pueda ejecutar y jugar, también sería muy útil!

Compilador: MPLAB X

Programador / Depurador: REAL ICE

Microcontrolador: dsPIC33EP256MC506

Dev Board: dsPICDEM MCLV-2

main.c

int16_t main(void)
{

/* Configure the oscillator for the device */
ConfigureOscillator();
/* Initialize IO ports and peripherals */
InitApp();

TRISDbits.TRISD6 = 0; //set LED as output 
TRISGbits.TRISG6 = 1; //set Button as input, port unknown 

while(1)
{
    if(S3 == 0) { //start/stop switch
        uint32_t N = 21000000;
        while(S3) //debounce            
            while(N--);
            LATDbits.LATD6 = 1; //make LED pin high
    }
}
}

usuario.h

#define S3  !PORTGbits.RG6  //S2 button
#define S2  !PORTGbits.RG7  //S3 button

#define D2  !PORTDbits.RD6  //D2 LED  

#define DEBOUNCE_DELAY  30  //push button debounce delay, expressed in millisecond

/******************************************************************************/
    /* User Function Prototypes                                                   */
    /******************************************************************************/
    /* TODO User level functions prototypes (i.e. InitApp) go here */
    void InitApp(void);         /* I/O and Peripheral Initialization */
    
pregunta KP123

1 respuesta

1

Prueba esto. Asegúrate de que el S3 sea la definición de macro correcta para el botón que estás presionando, parece que lo comentaste mal en el código.

while(1)
{
   uint32_t N = 21000000;
   uint32_t T = 21000000;

    if(S3 == 1) {
            LATDbits.LATD6 = 1; //make LED pin high
            while(N--); 
                        }
         else {  LATDbits.LATD6 = 0; //make LED pin low
               while(T--);  }

}

Esto no comprobará la eliminación de rebotes del botón, (si esto funciona, puede probar la eliminación de rebotes) En algunos microcontroladores hay bits individuales asociados con los pines GPIO que pueden verificar la eliminación de rebotes del botón. Si está disponible, simplemente habilítalo para verificar el rebote.

    
respondido por el Arun Joe

Lea otras preguntas en las etiquetas