Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


ЦАП на плате L-780M

Вы не вошли.

 Поиск | Регистрация | Вход 

Денис
22.05.2006 17:57:14
#1

Гость

ЦАП на плате L-780M

Никак не пойму как на этой плате выделяется память под большой кольцевой буфер ЦАП.
Задаю такие параметры
FIFO = 512
размер большого буфера хочу 2048.
Почему после выполнения функции SetParametersStream размер буфера становится 1024?

И ещё нередко происходит "залипание" переменной синхронизации, т.е. счётчик доходит до определённого значения и больше не меняется  (похоже что при определённых значениях FIFO и размеров большого буфера). При этом кольцевой выдачи не происходит, а АЦП работает нормально.

23.05.2006 09:15:39
#2

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: ЦАП на плате L-780M

кусок кода нужен. или смотрите пример L7XX.OSC...

Денис
23.05.2006 10:29:54
#3

Гость

Re: ЦАП на плате L-780M

Вот кусок кода


    PLATA_DESCR         pd;
    DAC_PAR             DAC;
    ADC_PAR             ADC;

    L_ERROR == pDevice->ReadPlataDescr(&pd)
    uDeviceDSP = DSP_UNDEF;
    if ( 0 == lstrcmp(pd.DspType,"2184") )
        uDeviceDSP = DSP_2184;
    if ( 0 == lstrcmp(pd.DspType,"2185") )
        uDeviceDSP = DSP_2185;
    if ( 0 == lstrcmp(pd.DspType,"2186") )
        uDeviceDSP = DSP_2186;
    if(pd.IsDacPresent)
        m_iDacDevice=true;
    else
        return;

    m_dDACFreq = 1.024;
    m_iFrameCount = 1024;                   //áóôåð íà ïëàòå
    m_dwLargeBuffer = m_iFrameCount*2;      //ðàçìåð áîëüøîãî áóôåðà

    DAC.t1.s_Type = L_DAC_PARAM;
    DAC.t1.AutoInit = 1;
    DAC.t1.dRate = m_dDACFreq;      //(1êÃö)
    DAC.t1.FIFO = m_iFrameCount/2;
    DAC.t1.IrqStep = DAC.t1.FIFO;
    DAC.t1.Pages = m_dwLargeBuffer/DAC.t1.IrqStep;
    DAC.t1.IrqEna = 1;
    DAC.t1.DacEna = 1;

    L_ERROR == pDevice->FillDAQparameters(&DAC.t1)
    L_ERROR == pDevice->RequestBufferStream(&m_dwLargeBuffer, L_STREAM_DAC)
    L_ERROR == pDevice->SetParametersStream(&DAC.t1,&m_dwLargeBuffer, (void**)&m_Buffer,(void**)&m_Sync, L_STREAM_DAC)

    m_siBufferPart0 = (DWORD*)m_Buffer;
    m_siBufferPart1 = m_siBufferPart0 + m_dwLargeBuffer/2;
    for(int i=0;i<m_dwLargeBuffer;i++)
        m_siBufferPart0[i] = 700&0xFFF|0x0000;
    DACViewSync =  m_Sync;

    m_iADCFrameCount = 1024;    //&#240;&#224;&#231;&#236;&#229;&#240; &#239;&#238;&#235;&#238;&#226;&#232;&#237;&#234;&#232; &#225;&#243;&#244;&#229;&#240;&#224; &#237;&#224; &#239;&#235;&#224;&#242;&#229;
    m_dADCFrameFreq = 1.024;
    m_iADCChannelCount = 1;
    m_dwADCLargeBuffer = m_iADCFrameCount*m_iADCChannelCount;
    m_dwADCLargeBuffer *=2;

    //&#239;&#224;&#240;&#224;&#236;&#229;&#242;&#240;&#251; &#240;&#224;&#225;&#238;&#242;&#251; &#241; &#192;&#214;&#207;
    ADC.t1.s_Type = L_ADC_PARAM;
    ADC.t1.AutoInit = 1;
    ADC.t1.dRate = m_dADCFrameFreq;
    ADC.t1.dKadr = 0.0;
    ADC.t1.dScale = 0;
    ADC.t1.SynchroType = 3;
    ADC.t1.SynchroSensitivity = 0;
    ADC.t1.SynchroMode = 0;
    ADC.t1.AdChannel = 0;
    ADC.t1.AdPorog = 0;
    ADC.t1.NCh = 1;
    ADC.t1.Chn[0] = 0x0;
    ADC.t1.FIFO = m_iADCFrameCount;
    ADC.t1.IrqStep = ADC.t1.FIFO;
    ADC.t1.Pages = m_dwADCLargeBuffer/ADC.t1.IrqStep;
    ADC.t1.IrqEna = 1;
    ADC.t1.AdcEna = 1;
    L_ERROR == pDevice->FillDAQparameters(&ADC.t1))
    L_ERROR == pDevice->RequestBufferStream(&m_dwADCLargeBuffer, L_STREAM_ADC)
    L_ERROR == pDevice->SetParametersStream(&ADC.t1,&m_dwADCLargeBuffer, (void**)&m_ADCBuffer,(void**)&m_ADCSync, L_STREAM_ADC)
    ADCViewSync =  m_ADCSync;
    PlataSetup->Lines->Add("&#207;&#224;&#240;&#224;&#236;&#229;&#242;&#240;&#238;&#226; &#192;&#214;&#207; &#231;&#224;&#228;&#224;&#237;&#251;");
    m_siADCBufferPart0 = (DWORD*)m_ADCBuffer;
    m_siADCBufferPart1 = m_siADCBufferPart0 + m_dwADCLargeBuffer/2;

23.05.2006 11:27:01
#4

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: ЦАП на плате L-780M

там упущение в описании...просто данные для ЦАП 32-битные если смотреть пример, а память выделяется словами.... и два формата получилось. для циклического ввода из внутреннего буфера и для ввода из писюка из большого буфера. В примере раскомментирован для 780 просто, а закомментирован для 780M.

Денис
23.05.2006 13:45:00
#5

Гость

Re: ЦАП на плате L-780M

Что-то я в примере ничего не нашёл. Можете кусок кода сюда кинуть

23.05.2006 14:38:15
#6

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: ЦАП на плате L-780M

L7XX.OSC

Денис
23.05.2006 16:16:35
#7

Гость

Re: ЦАП на плате L-780M

Нету тама такого каталога. Есть  L780.osc Но в этом примере я ничего не нашёл

24.05.2006 06:32:56
#8

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: ЦАП на плате L-780M

тип данных смотрите и как массив для цап заполняется....

Денис
24.05.2006 14:55:46
#9

Гость

Re: ЦАП на плате L-780M

У вас что размер буфера опредеояется значением Pages. Которое всегда равно 2?!

Вопрос два, почему запуская бинарник бывают случаи когда переменная синхронизации "залипает" и не меняется?

Денис
24.05.2006 15:35:34
#10

Гость

Re: ЦАП на плате L-780M

Всё, кажись разобрался

Денис
24.05.2006 16:00:14
#11

Гость

Re: ЦАП на плате L-780M

Но ЦАП бывает всё равно подвисает, т.е. переменная синхронизаци перестаёт бегать по буферу. Что делать? И в чём может быть причина?

Денис
24.05.2006 16:03:59
#12

Гость

Re: ЦАП на плате L-780M

Т.е. очень часто счётчик доходит либо до середины большого буфера, либо до его конца  и значение своё больше не меняет. Что делать?

Денис
25.05.2006 15:17:57
#13

Гость

Re: ЦАП на плате L-780M

Так в чём может быть причина такого поведения и как решить проблему?

25.05.2006 19:18:06
#14

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: ЦАП на плате L-780M

а если буфер побольше взять? да и частоту тоже...

Денис
29.05.2006 11:42:35
#15

Гость

Re: ЦАП на плате L-780M

С буфером пробывал играться... Результата никакого. Бывает что работает бывает что нет

Денис
30.05.2006 17:41:44
#16

Гость

Re: ЦАП на плате L-780M

Какие ещё варианты есть?