So schalten Sie die LED mit der Taste auf dem dsPIC33- und dsPICDEM MCLV-2-Entwicklungsboard um

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 */
Beginnen Sie mit diesem Fehler: Nur weil LATDbits.LATD6 = 1;eingerückt ist, ist es noch lange kein Teil der while(S3)Schleife. Vielleicht sollten Sie geschweifte Klammern um diese eingerückten Zeilen setzen.
Ich sehe keinen Ort, an dem Sie den LED-Pin niedrig einstellen.

Antworten (1)

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.

Weißt du zufällig, wie man auf analoge Pins wie das Potentiometer auf dem Entwicklungsboard zugreift? Ich möchte die Ausgabe des Pots lesen, kann aber nicht herausfinden, wie genau dies aufgerufen werden soll. Ich weiß, dass ich ADC verwenden muss, habe aber keine Ahnung, welche Funktionen ich verwenden soll. Wenn Sie mich auf die Dokumentation hinweisen oder beim Starten helfen könnten, wäre das großartig
Ja, Sie müssen dafür einen A/D-Wandler verwenden. Normalerweise wird in PIC-MCs das ADCON-Register zum Einstellen des A/D verwendet. Abgesehen davon müssen Sie die maximale und minimale Vref-Spannung bereitstellen. Die Referenzspannung wird vom Mikrocontroller verwendet, um die höchsten und niedrigsten digitalen Werte einzustellen. Dann müssen Sie die Eingabe V geben. Kalibrieren Sie es, um den genauen Wert zu erhalten. Nicht so schwierig. Sie können nach A/D-Codes und Schaltungen für PIC-ICs suchen. Die Dinge werden ähnlich sein, mit Ausnahme der Registerbits, der Pin-Nummer usw.
Ich weiß Ihr Feedback wirklich zu schätzen. Ich habe einen Code zum Laufen gebracht, in dem ich den Simulator verwende, um einen Spannungswert an analogen Pins festzulegen und den Wert beim Laufen lesen zu können. Ich bin mir jedoch nicht sicher, wie ich dies auf dem physischen Potentiometer der Platine implementieren soll. Wie gebe ich die Eingangsspannung an das Potentiometer? Danke noch einmal
Stellen Sie sicher, dass sich der Ausgang Ihres Potentiometers in der sicheren Grenze des Eingangs befindet. (Wenn Sie die Referenzspannung finden können, schließen Sie +5 Volt an Vref und 0 an -Vref an). versuche es mit dem gleichen Code. Um die tatsächlichen Werte zu erhalten, müssen Sie eine Kalibrierung durchführen. Weitere Informationen finden Sie in diesem Beispiel. youtube.com/watch?v=hcxOs4dKE_E