Ich bin neu bei Mikrocontrollern und dem dsPIC33 und möchte ein einfaches Programm schreiben, bevor ich mich mit etwas Komplexerem befasse (auch wenn mir das schon sehr komplex erscheint ...). Ich versuche, eine LED auf meinem dsPICDEM MCLV-2-Entwicklungsboard mit meinem dsPIC33EP256MC506-Mikrocontroller umzuschalten. Im Moment sorgt mein Code dafür, dass die LED an bleibt, ohne dass ich die Taste drücke. Kann mir jemand helfen, was an meinem Code falsch ist?
Wenn jemand Beispielprogramme kennt, die ich ausführen und mit denen ich spielen kann, wäre das auch sehr hilfreich!
Compiler: MPLAB X
Programmierer/Debugger: REAL ICE
Mikrocontroller: dsPIC33EP256MC506
Entwicklungsboard: dsPICDEM MCLV-2
Haupt 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
}
}
}
Benutzer.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 */
Probieren Sie es aus. Stellen Sie sicher, dass der S3 die richtige Makrodefinition für die Taste ist, die Sie drücken. Es scheint, als hätten Sie ihn im Code falsch kommentiert.
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--); }
}
Dadurch wird die Entprellung der Schaltfläche nicht überprüft (wenn dies funktioniert, können Sie die Entprellung ausprobieren). In einigen Mikrocontrollern sind den GPIO-Pins einzelne Bits zugeordnet, die die Entprellung der Schaltfläche überprüfen können. Wenn es verfügbar ist, aktivieren Sie es einfach, um die Entprellung zu überprüfen.
krambo
LATDbits.LATD6 = 1;
eingerückt ist, ist es noch lange kein Teil derwhile(S3)
Schleife. Vielleicht sollten Sie geschweifte Klammern um diese eingerückten Zeilen setzen.Peter Bennett