Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 04.01.2017, 10:11   #1
IvanPletnev
Senior Member
 
Регистрация: 24.10.2013
Возраст: 40
Сообщений: 122
Вес репутации: 116/15
IvanPletnev will become famous soon enoughIvanPletnev will become famous soon enough
По умолчанию PIC32 ADC Plib PIC32MX795F512L

Уважаемые коллеги, доброго времени суток!
Всех поздравляю с Новым Годом и желаю всего самого лучшего!

Задача - сканировать все 16 аналоговых входов сабжа с частотой 1MSPS, то есть, если сканировать 16 входов, частота прерывания должна быть примерно 62000 Гц.

Прерывание после каждого 16-го измерения.

Код:
int main (void){
        
        SYSTEMConfigPerformance(60000000L);
        OSCConfig(OSC_POSC_PLL,OSC_PLL_MULT_15,OSC_PLL_POST_2,0);
        mOSCSetPBDIV(OSC_PB_DIV_2);
        CloseADC10();
        ConfigIntADC10(ADC_INT_ON|ADC_INT_PRI_5|ADC_INT_SUB_PRI_3);
        mAD1ClearIntFlag();
        INTEnableSystemMultiVectoredInt();
        OpenADC10(PARAM1,PARAM2,PARAM3,PARAM4,PARAM5);
        EnableADC10();
        mPORTESetPinsDigitalOut(BIT_5);
        SetChanADC10(ADC_CH0_NEG_SAMPLEA_NVREF);
        
        while(1){
                
        }
        return 0;
}

void __ISR(_ADC_VECTOR,IPL5SOFT) ADC_Int_Handler (void){
        unsigned char i=0;
        mAD1ClearIntFlag();
        AD1_int_flag=true;
        mPORTEToggleBits(BIT_5);
        for (i=0;i<15;i++){
                One_Hit_16Ch[i].force_new=ReadADC_nibble(i);

                if (One_Hit_16Ch[i].force_new>One_Hit_16Ch[i].treshold){
                        One_Hit_16Ch[i].flag=true;
                }
        }
}
Параметры OpenADC10():
Код:
#define PARAM1  ADC_IDLE_STOP|ADC_FORMAT_INTG|ADC_CLK_AUTO|ADC_AUTO_SAMPLING_ON
#define PARAM2  ADC_VREF_AVDD_AVSS|ADC_OFFSET_CAL_DISABLE|ADC_SCAN_ON|ADC_SAMPLES_PER_INT_16|ADC_ALT_BUF_OFF|ADC_ALT_INPUT_OFF
#define PARAM3  ADC_SAMPLE_TIME_31|ADC_CONV_CLK_PB|ADC_CONV_CLK_Tcy
#define PARAM4  ENABLE_ALL_ANA
#define PARAM5  0x0000
Преобразование происходит, результаты правильно пишутся в буфер, но!
Я не могу изменить скорость преобразования ни изменением ADC_SAMPLE_TIME_31, ни ADC_CONV_CLK_Tcy, ни даже изменением делителя периферийной шины. Частоту входа в прерывание меряю осциллографом по переключению ноги LATE5. Она где-то 75кГц, чуть-чуть изменяется при изменении частоты периферийной шины. Правильно реагирует только тогда, когда меняется системная частота.

Ткните носом, где не прав, пожалуйста!

Последний раз редактировалось IvanPletnev; 04.01.2017 в 10:18.
IvanPletnev вне форума   Ответить с цитированием
Старый 05.01.2017, 09:41   #2
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 30
Сообщений: 1,183
Вес репутации: 2389/51
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: PIC32 ADC Plib PIC32MX795F512L

IvanPletnev
Ткните носом, где не прав, пожалуйста! - plib устарел и на новых версиях компилятора не всегда верно работает.

попробуйте реализовать без plib для начала.
besogon вне форума   Ответить с цитированием
Старый 05.01.2017, 19:44   #3
IvanPletnev
Senior Member
 
Регистрация: 24.10.2013
Возраст: 40
Сообщений: 122
Вес репутации: 116/15
IvanPletnev will become famous soon enoughIvanPletnev will become famous soon enough
По умолчанию Re: PIC32 ADC Plib PIC32MX795F512L

Цитата:
Сообщение от besogon Посмотреть сообщение
IvanPletnev
Ткните носом, где не прав, пожалуйста! - plib устарел и на новых версиях компилятора не всегда верно работает.

попробуйте реализовать без plib для начала.
Да, и у меня было такое подозрение. Но перепроверил на много раз все SFR, касающиеся ADC, запись в которые осуществляется макросами plib, все регистры записаны абсолютно верно. Попробовал поступить другим путём, поднимать флаг в прерывании, а в главном цикле ловить этот флаг и переключать ногу, чтобы посмотреть примерно частоту, с которой у меня происходит семплирование:
Код:
volatile unsigned int ADC_int_flag=0;
Код:
void __ISR(_ADC_VECTOR,IPL3AUTO) ADCHandler (void){
        unsigned char i=0;
//        mAD1ClearIntFlag();
        INTClearFlag(INT_AD1);
        ADC_int_flag=1;
        for (i=0;i<15;i++){
                One_Hit_16Ch[i].force_new=ReadADC10(i);
                if (One_Hit_16Ch[i].force_new>One_Hit_16Ch[i].treshold){
                        One_Hit_16Ch[i].flag=true;
                }
        }
}
Код:
        while(1){
                if (ADC_int_flag){
                        ADC_int_flag=0;
                        mPORTEToggleBits(BIT_5);
        }
}
Так вот, ставлю брекпойнт внутри условия if, а программа даже не думает там останавливаться, то есть не попадает туда, хотя смотрю watch, этот флаг в единице. Это как? Я вот с таким впервые столкнулся..

Последний раз редактировалось IvanPletnev; 05.01.2017 в 19:50.
IvanPletnev вне форума   Ответить с цитированием
Старый 06.01.2017, 20:58   #4
IvanPletnev
Senior Member
 
Регистрация: 24.10.2013
Возраст: 40
Сообщений: 122
Вес репутации: 116/15
IvanPletnev will become famous soon enoughIvanPletnev will become famous soon enough
По умолчанию Re: PIC32 ADC Plib PIC32MX795F512L

В общем, коллеги, беда была в том, что не опускался флаг прерывания ADIF. А не опускался он от того, что не весь буфер был считан. Я читал 15 значений вместо 16.

В PIC32MX795F512L флаг прерывания от ADC нельзя опустить до тех пор, пока не будут прочитаны все "заказанные" при инициализации значения.
IvanPletnev вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PIC32 Plib dosikus Продукция MICROCHIP 9 16.02.2016 16:18
PIC32, USB, 16 MHz tester Продукция MICROCHIP 19 21.05.2012 12:09
ADC PIC32 Vint Продукция MICROCHIP 1 01.05.2012 14:39
Atmega8 change Вопросы начинающих 10 15.05.2011 18:05
Не заставить работать АЦП (dsPIC33F...) в режиме «несколько измерений в БУФЕР» Юрий440 Продукция MICROCHIP 9 11.08.2007 14:50


Часовой пояс GMT +3, время: 08:53.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot