реклама на сайте
подробности

 
 
> Проблема с dspic33FJ128MC706A, не работает в Release режиме опрос PORTB
Cursedsmite
сообщение Aug 19 2013, 14:28
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 21-09-11
Пользователь №: 67 320



Здравствуйте, столкнулся с такой проблемой при программирование микроконтроллера dspic33FJ128MC706A на вот этой плате Digilent Cerebot MC7 https://www.digilentinc.com/Products/Detail...rod=CEREBOT-MC7.
На плате встроенный внутрисхемный отладчик, программирую я через MPLAB 8.90 компилятор C30. Писал прогу всё отладил в debug моде, начал переводить её в release режим чтобы МК запускался уже самостоятельно а не из под отладчика и тут функция опроса кнопки перестала работать. Я что только не делал, менял переменные, прописывал их в volatile, static extern и прочее. Смотрел что с моим портом происходит. В режиме отладки всё прекрасно видно как во время прерывания по брейкпоинту в порте RB8 выставляется единичка и всё работает правильно, но как только программирую в release режиме - всё, как будто порт перестаёт видеть высокий сигнал на RB8. Я смотрел осцилографом всё в порядке, напряжение есть на пине при нажатие кнопки, ничего на плате не отвалилось. К этому пину в dspic33FJ128MC706A привязано всего 2 модуля - UART и АЦП, АЦП я ещё при отладке отсоединил от этого пина, так чтобы при отладке всё работало, а насчёт UART не уверен, но проглядев ref.manual по UART я понял ну что там нечему мешать работе регистра PORTB, потому что я его и програмного отключил тоже, хотя он по умолчанию выключен. Кидаю часть своего кода, может кто скажет где у меня ошибка или нелепость какая-та, которую я просто из-за замыленности мозга уже не могу найти.
Код
...
#define    BTN1                    PORTBbits.RB8
#define    BTN2                    PORTBbits.RB14    
#define BUTTON_FILTER            200            
...
/*Variables*/
...
int buttonPressed;
int button2Pressed;
int buttonCounter;
int button2Counter;
...

/*----------------------------------------------------------------------------*/
//Begin
int main (void)
{
...
initPeripherals();
...
    buttonPressed = 0;
    button2Pressed = 0;
    buttonCounter = 0;
    button2Counter = 0;
...
/************************************ Infinite Loop *********************************/

    while(1)                        //Main Infinitive loop
    {
        if(BTN1)                        //button 1 is pressed
        {
            //keep counting if button pressed and debounce value not reached
            if(++buttonCounter > BUTTON_FILTER)
            {
                buttonCounter = BUTTON_FILTER+1;    //limit the counter to avoid overflows
                if( buttonPressed == 0)             //button pressed and debounced
                {
                    buttonPressed = 1;                    //set button presseed flag
                }
            }
        }
        else                                        //button is not pressed
        {
            buttonCounter = 0;                      //clear counter and flag
            buttonPressed = 0;
        }
        ...
    }
...
}

void initPeripherals(void)
{
    //Настройка портов ADC модуля как цифровые (=1 - цифровые; =0 - аналоговые) и регистра TRISB,
    //чтобы работали кнопки на плате
    AD1PCFGLbits.PCFG8 = 1;
    Nop();
    AD1PCFGLbits.PCFG14 = 1;
    Nop();
    TRISBbits.TRISB8 = 1;
    Nop();
    TRISBbits.TRISB14 = 1;
    Nop();
...
}


Сообщение отредактировал Cursedsmite - Aug 19 2013, 14:49
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 06:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01373 секунд с 7
ELECTRONIX ©2004-2016