Перейти к содержанию
    

TMS320F2812

Доброе время суток!

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

Hardware->ADCTRL1.bit.SUSMOD=1; //1

Hardware->ADCTRL1.bit.ACQ_PS=15; //15

Hardware->ADCTRL1.bit.CPS=0;

Hardware->ADCTRL1.bit.CONT_RUN=0; //0

Hardware->ADCTRL1.bit.SEQ_CASC=1;

 

 

Hardware->ADCTRL2.all=0;

 

Hardware->ADCTRL2.bit.INT_ENA_SEQ1=1;

Hardware->ADCTRL2.bit.INT_MOD_SEQ1=0;

Hardware->ADCTRL2.bit.EVA_SOC_SEQ1=1;

 

 

 

Hardware->ADCTRL3.bit.ADCPWDN=1;

Hardware->ADCTRL3.bit.ADCCLKPS=3;

Hardware->ADCTRL3.bit.SMODE_SEL=0;

 

 

Hardware->ADCMAXCONV.all=15;

Hardware->ADCCHSELSEQ1.bit.CONV00=0;

Hardware->ADCCHSELSEQ1.bit.CONV01=1;

Hardware->ADCCHSELSEQ1.bit.CONV02=2;

Hardware->ADCCHSELSEQ1.bit.CONV03=3;

Hardware->ADCCHSELSEQ2.bit.CONV04=4;

Hardware->ADCCHSELSEQ2.bit.CONV05=5;

Hardware->ADCCHSELSEQ2.bit.CONV06=6;

Hardware->ADCCHSELSEQ2.bit.CONV07=7;

Hardware->ADCCHSELSEQ3.bit.CONV08=12;

Hardware->ADCCHSELSEQ3.bit.CONV09=11;

Hardware->ADCCHSELSEQ3.bit.CONV10=8;

Hardware->ADCCHSELSEQ3.bit.CONV11=10;

Hardware->ADCCHSELSEQ4.bit.CONV12=9;

Hardware->ADCCHSELSEQ4.bit.CONV13=13;

Hardware->ADCCHSELSEQ4.bit.CONV14=14;

Hardware->ADCCHSELSEQ4.bit.CONV15=15;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

неужели никто не юзал АЦП на таки камнях((((

подскажите есл и в каскаде включены ацп, то управлене идет от EVMB ??

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Управление от EVB будет при соответствующих настройках EVB (бит разрешения установить надо)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно попробовать набросать модель в Симулинке Матлаба. Сгенерить сишный код оттуда и посмотреть как осуществляется настройка АЦП в коде 8-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я тут сделал модель в "Матлабе", которая принимает данные с АЦП и отправляет их в последовательный порт УАРТ. Настройки АЦП следующие:

1. ADCCLKPS = 6;

2. CPS = 0;

3. ACQ_PS = 12;

4. Sample time = 0.001 sec.;

5. Оцифровываются каналы с ADCINA0 по ADCINA7.

Модель и получившийся проект в "Код композере" с исходниками на Си я прилагаю во вложении. Может поможет кому-нибудь.

AdcTest.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Народ помогите плз,

Не мону ни как понять, даже читая датащит по АЦП(http://www.ti.com/lit/ug/spru812a/spru812a.pdf), этож надо так извращенно писать, раз 20 перечитавал, ничего так и не понял.

вот тут, в коде ...

Hardware->ADCCHSELSEQ1.bit.CONV00=0;

Hardware->ADCCHSELSEQ1.bit.CONV01=1;

Hardware->ADCCHSELSEQ1.bit.CONV02=2;

Hardware->ADCCHSELSEQ1.bit.CONV03=3;

Hardware->ADCCHSELSEQ2.bit.CONV04=4;

Hardware->ADCCHSELSEQ2.bit.CONV05=5;

...

...

0 1 2 3 4 5 ... - это что за magic_numbers, что за значения такие?

В даташите тоже такое в примерах указвается но не сказано что за значения...

Это то в каком порядке должны переключаться каналы АЦП, или чтото другое?

Хелп плиз, актуально очень...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

0 1 2 3 4 5 ... - это что за magic_numbers, что за значения такие?

стр. 44 вышеприведенного даташита. 0 1 2 3 4 5 - это номер канала АЦП (физическая ножка). А регистр предназначен для выбора последовательности опроса каналов в автоматическом режиме (собственно и название регистра говорящее).

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

стр. 44 вышеприведенного даташита. 0 1 2 3 4 5 - это номер канала АЦП (физическая ножка). А регистр предназначен для выбора последовательности опроса каналов в автоматическом режиме (собственно и название регистра говорящее).

выходит я верно понял, однако хочу уточнить, верно ли я понял передаваемый смысл работы этого мудренного ацп

если я укажу последовательность 12 7 4 9 3 6 2 13 5... - то имено в такой последовательсти будут опрашиваться все каналы, включая режим каскадирования?

И именно в такой последовательности будут находиться измерения каналов в соответствующих ADCRESULTn ?

И еще - как мне сделать если нужно опросить не 8 и не 16 каналов, а к примеру только 5 каналов, причем в режиме Dual Sequences, тоесть эти 5 каналов разбросаны на 2 банка АЦП как (например)3 и 2? Ограничение каналов измерения как я понял указывается значением в регистре - ADCMAXCONV, верно?

Если верить примеру на стр22 то так можно но вот как, однако из написанного ниграму не ясно как, пример бы посмотреть...

PS

Нашел интересный сайт с примерами - http://search.pudn.com/search_read.asp?key...s320f28*&p=

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

выходит я верно понял, однако хочу уточнить, верно ли я понял передаваемый смысл работы этого мудренного ацп

если я укажу последовательность 12 7 4 9 3 6 2 13 5... - то имено в такой последовательсти будут опрашиваться все каналы, включая режим каскадирования?

может, книга поможет? Глава 6. все по АЦП именно этого процессора. Ссылка на Книгу в этой ветке

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

может, книга поможет? Глава 6. все по АЦП именно этого процессора. Ссылка на Книгу в этой ветке

не могу, у меня заблокированы на работе многие сайты с файлозашарками, и указанный вами тоже... Дома посмотрю, но толку будет мало - на работу то я её не принесу, флешки запрешены тоже.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

выходит я верно понял, однако хочу уточнить, верно ли я понял передаваемый смысл работы этого мудренного ацп

если я укажу последовательность 12 7 4 9 3 6 2 13 5... - то имено в такой последовательсти будут опрашиваться все каналы, включая режим каскадирования?

Вроде бы, да - в такой последовательности. Даже логично получается: если у вас на всех входах АЦП висят датчики внешние и Вам приспичило именно в такой последовательности оцифровывать, то почему бы и нет, т.е. TI тут предоставила свободу творчества, что вылилось в общем усложнении

Вот что я в прошлом году натворил (хотя тогда еще зелёнее, чем сейчас был..)

 

//функция, подключающая к питанию все внутренние блоки АЦП
void PowerUpADC(void)
{
    //Должна быть использована следующая последовательность
    //без ТИ не будет записи,чтения в регистры АЦП
    
    if(!SysCtrlRegs.PCLKCR0.bit.ADCENCLK)
    {
        //включаем тактирование
        EALLOW;
        SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;
        EDIS;
        //д/б задержка 2-SYSCLOCK цикла
        asm(" NOP");
        asm(" NOP");
    }
    //1. Разрешаем/запрещаем внешний источник опоры
    AdcRegs.ADCREFSEL.bit.REF_SEL = 1;
    //2. Power up reference/bandgap/ADC circuits together (одновременно)
    AdcRegs.ADCTRL3.all = 0x00E0;
    //3. Before performing the first conversion, a delay of 5 ms is required
        //сбросим WatchDog, если он включен
    ServiceDog();
    DELAY_US(5000);    
}

void InitializeADCmy()
{
    
    if(!SysCtrlRegs.PCLKCR0.bit.ADCENCLK)
    {
        ////разрешаем тактирование АЦП от HSPCLK (HISPCP)
        EALLOW;
        SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;
        EDIS;
        //д/б задержка 2-SYSCLOCK цикла
        asm(" NOP");
        asm(" NOP");
    }

   // *IMPORTANT*
   // The ADC_cal function, which  copies the ADC calibration values from TI reserved
   // OTP into the ADCREFSEL and ADCOFFTRIM registers, occurs automatically in the
   // Boot ROM. If the boot ROM code is bypassed during the debug process, the
   // following function MUST be called for the ADC to function according
   // to specification. The clocks to the ADC MUST be enabled before calling this
   // function.
   // See the device data manual and/or the ADC Reference
   // Manual for more information.

    ADC_cal();
    

//Включение питания
    PowerUpADC();

//Тактирование: прескайлеры
    //FCLK = HSPCLK
    AdcRegs.ADCTRL3.bit.ADCCLKPS = 0x00;
    //ADCLK = FCLK
    AdcRegs.ADCTRL1.bit.CPS = 0;


//Sampling Window (determines for what time duration the sampling switch is closed): 
//The width = (ACQ_PS + 1) times the ADCLK period.
/* 
From 'TMS320F2812_Implementation tutorial' p.169 (6-6): 

"the sampling window controlled by the field ”ACQ_PS”. This group of bits 
defines the length of the window that is used between the multiplexer switch
and the time when we sample (or ”freeze”) the input voltage.
This time depends on the line impedance of the input signal.
So it is hardware dependent"

*/
    //для оцифровки максимально возможных сигналов для данного АЦП
    // примем Окно = 0;
    //т.е 1- ADCKL УВХ будет обрабатывать входной аналоговый сигнал
    //и в конце следующего 1-ADCKL цифровой результат появится на выходе АЦП
    //ПОЭТОМУ ЧАСТОТА ADCKL = 25 МГц, хотя у АЦП мах частота = 12,5 МГц!!!!!! 
    AdcRegs.ADCTRL1.bit.ACQ_PS = 0;
    //Выставляем "Continious conversion mode"
    AdcRegs.ADCTRL1.bit.CONT_RUN = 1;
    //разрешаем SEQ wrap around при достижении MAXCONVn
    AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0;
    //Объединяем SEQ1 & SEQ2 -> SEQ = 16-state sequenser
    AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;



    //Режим сэмплирования: последовательный
    AdcRegs.ADCTRL3.bit.SMODE_SEL = 1;
    //выставляем глубину буффера АЦП = 16
    AdcRegs.ADCMAXCONV.all = BUF_ADC_DEPTH;

    //Выбираем каналы для сэмплирования: везде нулевой канал ADCINA0

    AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;
    AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x0;
    AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x0;
    AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x0;

    AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x0;
    AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x0;
    AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x0;
    AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x0;

    AdcRegs.ADCCHSELSEQ3.bit.CONV08 = 0x0;
    AdcRegs.ADCCHSELSEQ3.bit.CONV09 = 0x0;
    AdcRegs.ADCCHSELSEQ3.bit.CONV10 = 0x0;
    AdcRegs.ADCCHSELSEQ3.bit.CONV11 = 0x0;

    AdcRegs.ADCCHSELSEQ4.bit.CONV12 = 0x0;
    AdcRegs.ADCCHSELSEQ4.bit.CONV13 = 0x0;
    AdcRegs.ADCCHSELSEQ4.bit.CONV14 = 0x0;
    AdcRegs.ADCCHSELSEQ4.bit.CONV15 = 0x0;


//Прерывание  sprufb0d p. 122

    //запрещаем глобально
    DINT;

    //Разрешаем прерывание от SEQ1 при каждом достижении конца последовательности (EOS)
    AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1 = 0;
    AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;
#if EXAMPLE2
    //разрешаем работать SOC от ePWMxSCOA 
    AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;
#endif
    
    //Разрешаем прерывание ADCINT инициируемое EOS (концом последовательности SEQ1)
    // в блоке PIE: ADCINT = INT1.1
    PieCtrlRegs.PIEIER1.bit.INTx1 = 1;

    // группа INT1
    PieCtrlRegs.PIEACK.bit.ACK1 = 1;

    //Разрешаем прерывание в CPU по каналу INT1
    IER |= (1<<0);
/* 
в main добавить следующие строки

    разрешаем глобальное прерываниe
    и режим отладки
    EINT;
    ERTM;

*/
}    // InitializeADCmy();

 

не могу, у меня заблокированы на работе многие сайты с файлозашарками, и указанный вами тоже... Дома посмотрю, но толку будет мало - на работу то я её не принесу, флешки запрешены тоже.

ну пишите в личку вашу почту - вышлю книгу

 

И именно в такой последовательности будут находиться измерения каналов в соответствующих ADCRESULTn ?

Чего - то мне кажется, что Да - в той же последовательности .. "Each sample and hold is connected to 8 multiplexed input lines. The auto sequencer is a programmable state

machine and is able to automatically convert up to 16 input signals. Each state of the auto sequencer puts a measurement into its own result register.

"

 

Дома посмотрю, но толку будет мало

Не надо ничего! Вот глава ( мог бы в лучшем качестве распечатать, но даже 300 dpi почему то печатает 5,8 Метров, а 600 dpi чуть больше 6 Метров, а 150 dpi - уже 2,5 М... нелинейность)

 

TMS320F2812_Implementation_tutorial_Ch_6_ADC.pdf

Изменено пользователем beaRTS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

beaRTS - Огромное Вам спасибо! Человек! :)

Кое что прояснилось. Пошел читать документ что вы прицепили. За код - отдельное Спасибо!

 

Заметил у вас использование вот этих команд в коде, раньше тоже встречал уже, специфических для этой архитектуры

EALLOW;

...

EDIS;

...

//запрещаем глобально

DINT;

...

разрешаем глобальное прерываниe

и режим отладки

EINT;

ERTM;

 

Где есть полный их перечень? А то приходится по огрызкам гуглить и конспектировать ;) .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Заметил у вас использование вот этих команд

EALLOW;

...

EDIS;

...

//запрещаем глобально

DINT;

...

разрешаем глобальное прерываниe

и режим отладки

EINT;

ERTM;

 

Где есть полный их перечень? А то приходится по огрызкам гуглить и конспектировать ;) .

Я начал методично весь геммор записывать к себе в бложик, так сказать, конспектирую - без этого никуда..

НАсчет где почитать. Сейчас приложу файлы и кидану ссылочки, что накопаю.

 

EALLOW, EDIS:

качаем на свой проц доку "System Control and Interrupts" -> глава EALLOW-Protected Registers (в моем глава 7.2), кратко:

The following registers are EALLOW-protected:

• Device Emulation Registers

• Flash Registers

• CSM Registers

• PIE Vector Table

• System Control Registers

• GPIO MUX Registers

• Certain eCAN Registers

• XINTF Registers

 

EINT, DINT - enable/disable interrupt - для того, чтоб сделать часть Вашего кода атомарной (не прерываемой ни под каким предлогом!)

качаем "TMS320C28x CPU and Instruction Set" и пользуемся поиском по документу.

 

ERTM - не нашел в каком документе искать, но помнится, что это Enable Real-Time Mode - для средств отладки. По-любому, он вписывает какой-то бит в один из регистров специального назначения, который за отладку отвечает (вроде такой был на борту 28х )

DSP2833x_HeaderFiles_QuickStart_EALLOW_EDIS.pdf

Изменено пользователем beaRTS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...