Как переключать светодиод с помощью кнопки на dsPIC33 и dsPICDEM MCLV-2 devboard

Я новичок в микроконтроллерах и dsPIC33 и хочу написать простую программу, прежде чем приступить к чему-то более сложному (хотя это уже кажется мне очень сложным...). Я пытаюсь переключить светодиод на моей плате разработки dsPICDEM MCLV-2, используя мой микроконтроллер dsPIC33EP256MC506. Прямо сейчас мой код просто заставляет светодиод гореть без нажатия кнопки. Может ли кто-нибудь помочь мне найти, что не так с моим кодом?

Если кто-нибудь знает какие-либо примеры программ, которые я могу запускать и играть с ними, это также будет очень полезно!

Компилятор: MPLAB X

Программист/Отладчик: REAL ICE

Микроконтроллер: dsPIC33EP256MC506

Совет разработчиков: 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
    }
}
}

пользователь.ч

#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 */
Начните с этой ошибки: то, что LATDbits.LATD6 = 1;он имеет отступ, не делает его частью while(S3)цикла. Возможно, у вас должны быть фигурные скобки вокруг этих линий с отступом.
Я не вижу места, где бы вы установили низкий уровень на выводе светодиода.

Ответы (1)

Попробуйте это. убедитесь, что S3 является правильным определением макроса для кнопки, которую вы нажимаете, похоже, вы неправильно прокомментировали ее в коде.

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--);  }

}

Это не будет проверять устранение дребезга кнопок (если это работает, вы можете попробовать устранение дребезга). В некоторых микроконтроллерах есть отдельные биты, связанные с выводами GPIO, которые могут проверять устранение дребезга кнопок. Если он доступен, просто включите его для проверки устранения дребезга.

Вы случайно не знаете, как получить доступ к аналоговым контактам, таким как потенциометр на макетной плате? Я хочу прочитать вывод банка, но не могу понять, как именно это сделать. Я знаю, что должен использовать АЦП, но понятия не имею, какие функции использовать. Если вы можете указать мне на документацию или помочь с запуском, это было бы здорово
Да, для этого вам придется использовать аналого-цифровой преобразователь. Обычно в PIC MC регистр ADCON используется для настройки аналого-цифрового преобразователя. Кроме того, вам нужно будет обеспечить максимальное и минимальное напряжение Vref. Опорное напряжение используется микроконтроллером для установки наибольшего и наименьшего цифровых значений. Затем вам нужно будет ввести V . Откалибруйте его, чтобы получить точное значение. Не так сложно. Вы можете искать коды a/d и схемы для микросхем PIC. Все будет похоже, за исключением битов регистра, номера контактов и т. Д.
Очень ценю ваши отзывы. У меня есть работающий код, в котором я использую симулятор для установки значения напряжения на аналоговых выводах и могу считывать значение во время работы. Я не уверен, как реализовать это на физическом потенциометре платы. Как подать входное напряжение на потенциометр? еще раз спасибо
убедитесь, что выход вашего потенциометра находится в безопасном пределе входного сигнала (если вы можете найти опорное напряжение, подключите + 5 вольт к vref и 0 к -vref). попробуйте с тем же кодом. для получения реальных значений вам придется выполнить калибровку. См. этот пример для получения дополнительной информации. youtube.com/watch?v=hcxOs4dKE_E