Телескопы покупают здесь


A A A A Автор Тема: 33 мегапикселя на ладони  (Прочитано 28603 раз)

0 Пользователей и 1 Гость просматривают эту тему.

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #440 : 08 Дек 2015 [19:56:03] »
Если фифо кипариса забито данными и он не может их отправить в хост из за занятости USB - он запрашивает от трансмиттера->секвенсора приостановку потока. Учтен ли этот момент, и если да, то каким образом? Не получается ли так, что у кипариса случился запор, а трансмиттер продолжает пихать данные.
вот это очень интересный момент и скорее всего он нереализован. так как запуск на сканирование матрица осуществляется тупо по команде из приложения на винде, а именно приёмом одного бита    .transport(reg1[3]),    //<== перенос заряда в хост

FTF5066C_1 timegen ( // тактирование матрицы на частоте 1 МГц dalsa1.xsvf
//FTF5066C_2 timegen ( // тактирование матрицы на частоте 2 МГц   dalsa2.xsvf
//FTF5066C_4 timegen ( // тактирование матрицы на частоте 4 МГц dalsa4.xsvf
//FTF5066C_8 timegen ( // тактирование матрицы на частоте 8 МГц dalsa8.xsvf
.clock(c48), //Clock 48 MHz
.data_gain(reg8),       //<===== усиление АЦП задаётся в хосте
    .data_offset(reg9),     //<===== смещение данных АЦП задаётся в хосте
    .data_msb(out_byte_DS18B20[7:0]),//<===== значение тока Пельтье
    .data_lsb(data_lsb),             //<===== значение тока Пельтье
.CR_IN(reg1[0]),//перед открытием затвора и началом накопления заряда очищаем матрицу импульсом CR
.power_MAX618(reg1[1]), //<== подача питания на MAX618 00000010
.integration(reg1[2]),  //<== накопление пикселей       00000100
    .transport(reg1[3]),    //<== перенос заряда в хост     00001000


andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #441 : 08 Дек 2015 [20:03:00] »
теперь кусок сишного кода из приложения , кот. я написал в визуал студио2010, так как именнов этой среде можно было привязать длл-ку для связи кипреса и приложения. Собственно это циклдля записи одиночного кадра или серии кадров.

команды типа byte = 0x70; status = flWriteChannel(handle, 1000, 0x01, 1 , &byte, &error);посылают байты в спартан через кипресс, где и воздействуют на различные части кода ФПГА.
а чтение ацп осуществляется по команде   flReadChannel(handle, 1000, 0x00, ccd, ccd_buf, &error);//без проверки
то есть тупо читаем непрерывным потоком, то, что шлёт матрица через кипрес.
далее просто перезапись в буфер и файл.


//команда сброса и активации пересылки значения термосенсора 10 20 40   
 byte = 0x70; status = flWriteChannel(handle, 1000, 0x01, 1 , &byte, &error);

 byte = 0x00; status = flWriteChannel(handle, 1000, 0x01, 1, &byte, &error); //flSleep(100);

//==== перед открытием затвора и началом накопления заряда разряжаем матрицу импульсом CR =====
 byte = 0x01;//00000001
              status = flWriteChannel(handle, 1000, 0x01, 1, &byte, &error); flSleep(500);

//========= ПОДАЧА ПИТАНИЯ НА MAX618 ===============================================
byte = 0x02;//00000010
            status = flWriteChannel(handle, 1000, 0x01, 1, &byte, &error); flSleep(100);

//========= УСТАНОВКА 8 ВОЛЬТ, РЕЖИМ НАКОПЛЕНИЯ ЗАРЯДОВ =======================================
byte = 0x06;//00000110 0x04 & 0x02
            status = flWriteChannel(handle, 1000, 0x01, 1, &byte, &error); 

//======================= УПРАВЛЯЕМ ЗАТВОРОМ =======================================
byte = 0x86;//10000110  0x80 & 0x04 & 0x02 // затвор открыть
            status = flWriteChannel(handle, 1000, 0x01, 1, &byte, &error); flSleep(100);

                                              flSleep(exposition_time); // задаём время экспозиции
  next_time = 0; 
//========= ЗАТВОР ЗАКРЫТ,ПЕРЕКЛЮЧЕНИЕ НА 11 ВОЛЬТ И СЧИТЫВАНИЕ ДАННЫХ =====================================
byte=0x0A;//00001010 0x08 & 0x02
          status = flWriteChannel(handle, 1000, 0x01, 1, &byte, &error);//

//========= ЗАПИСЬ В БУФЕР НЕПРЕРЫВНЫМ ПОТОКОМ =====================================
     // if(flReadChannel(handle, 1000, 0x00, ccd, ccd_buf, &error)!=0)//проверка
      flReadChannel(handle, 1000, 0x00, ccd, ccd_buf, &error);//без проверки
  // запись циклом, но выглядит хуже, какая-то рванина
//for(p = 0; p <= image_lines; p++) flReadChannel(handle, 1000, 0x00, image_pixs*2, &ccd_buf[p*image_pixs*2], &error);//без проверки

//========= СТОП ПОСЫЛКА НА СЧИТЫВАНИЕ ДАННЫХ ======================================
byte=0x00;  //00000000 отключается всё 
          status = flWriteChannel(handle, 1000, 0x01, 1, &byte, &error);

    anf_kadr = pixel * Size_Wert_Line ;     //удвоенное кол-во пикселей одной строки х номер строки (0 - 2600)
//=============== обрезка верхнего края кадра ======================================
for(p = 0; p <= anf_kadr; p++) { 
          if(ccd_buf[p] == 0x01) {
   if(ccd_buf[p+1] == 0x02) {
          if(ccd_buf[p+2] == 0x00) {
  if(ccd_buf[p+3] == 0x01) { line=0;  break;}
                                           }
                                }
                                 }
                         }
//===================================================================================
        line = 0;
//============== переписывание буфера ===============================================
for(p = anf_kadr; p <= ccd; p++) { 
              if(ccd_buf[p] == 0x01) {
    if(ccd_buf[p+1] == 0x02) {
                  if(ccd_buf[(p+9)] != 0x00) {
   if(ccd_buf[(p+10)] != 0x00) {
                                ccd += pixel;
                                line-=1;//
                               }
                              }
                     else
memmove(&buf_out[pixel * line++], &ccd_buf[p + offset_raw], pixel);//
                             }
                                 }
                         }
//==========================================================================================================================
    fwrite(buf_out, sizeof(unsigned char), write_raw, fp);        //записываем данные в файл. последовательная запись
    flSleep(pause_time);                                          //задаём время паузы между экспозициями
    fclose(fp);                                                   //закрываем созданный файл
    next_file=1;                                                  //разрешаем преобразование raw2tiff.exe
//==========================================================================================================================
    Temp_Ist = peltier_current_temp(Current_Peltier);             //возвращает истинное значение Тemp.Пельтье
//==========================================================================================================================
}while (--number_of_file != 0);//считаем , пока не кончатся

Оффлайн Дмитрий Бучинский

  • *****
  • Сообщений: 603
  • Благодарностей: 25
  • ex. damian_1
    • Сообщения от Дмитрий Бучинский
Re: 33 мегапикселя на ладони
« Ответ #442 : 08 Дек 2015 [20:06:58] »
Цифровой ДКВ вместо аналогового:

1. Перевести АЦП в режим SHA, когда он измеряет сигнал отн. offsеt'a.
2. Вывод OFFSET закоротить на землю, установив верхом на керамический кондер резистор нулевик. Возможно, стОит поставить вместо нуля резистор с подобранным сопротивлением, чтобы шунтируя внутреннюю цепочку формирования offset'а добиться такой величины смещения, чтобы оно было несколько ниже уровня насыщения ПЗС.
3. Перепахать секвенсор:
Сигнал CDSCLK1 убрать.

Секвенсор прокручивает циклограмму, пока на выходе ПЗС не появляется опорный уровень черного.
Далее секвенсор останавливает циклограмму ПЗС, и тактирует АЦП согласно Fig6 даташита, но только аналоговый сигнал на входе в этот момент не меняется - т.е. АЦП проводит многоточечный замер уровня черного для данного пикселя. Думаю, 2-4 замера вполне достаточно, ибо скорость АЦП ограничена. В трансмиттере полученные с АЦП данные суммируются в достаточно просторном регистре, чтобы не произошло переполнение.
Далее, результат суммирования делится на количество замеров, а если замеров 2 или 4 - то тупо отбрасывается один или два младших разряда.
Далее, секвенсор проворачивается, пока на выходе ПЗС появляется уровень полезного.
Далее секвенсор опять тактирует АЦП, для многоточечного замера уровня полезного. В трансмиттере так-же результаты замеров суммируются и делятся.
Далее, трансмиттер из усредненного уровня черного вычитает усредненный уровень белого, и выдает разность в качестве результата оцифровки пикселя, а секвенсор крутит шарманку до следующего раза.

Наилучший вариант - если настройками GAIN/OFFSET АЦП получится захватить уровень черного/полезного (в режиме SHA!) не потеряв участка шкалы, и не переделывая цепь смещения АЦП - тогда переход между цифровым и аналоговым ДКВ можно будет осуществлять чисто программно, например реализовать в качестве опции "сверхмедленного прецизионного чтения".
« Последнее редактирование: 08 Дек 2015 [20:53:25] от Дмитрий Бучинский »
SW2001, самодельный USB мотофокус, MPCC, колесо DS 2", EOS 350Da, QHY8L @ NEQ6ST eqmod. Гид - кинопроекционник КО-140М ( 140/1.8 ) + DSI-Pro.
Доп: разные телевики + самодельное колесо фильтров с USB + QHY6.
Darkbox - термометр/термостат + пельтье холодильник для съемки правильных дарков.

Оффлайн Дмитрий Бучинский

  • *****
  • Сообщений: 603
  • Благодарностей: 25
  • ex. damian_1
    • Сообщения от Дмитрий Бучинский
Re: 33 мегапикселя на ладони
« Ответ #443 : 08 Дек 2015 [20:18:52] »
Опишите мне понятным мне языком, какие сигналы связывают ПЛИС и кипарис между собой - аппаратно(!) и как они описаны в декларации(?) сигналов трансмиттера в проекте ПЛИС.

Мне припоминается что у кипариса вроде как есть какие-то разрешающие/запрещающие сигналы для источника данных.
Т.е. если у кипариса запор, он выставляет трансмиттеру сигнал запрета передачи данных, пока фифо не освободится в хост. Этот сигнал должен безусловно и немедленно останавливать секвенсор, в какой бы стадии тот не был.
SW2001, самодельный USB мотофокус, MPCC, колесо DS 2", EOS 350Da, QHY8L @ NEQ6ST eqmod. Гид - кинопроекционник КО-140М ( 140/1.8 ) + DSI-Pro.
Доп: разные телевики + самодельное колесо фильтров с USB + QHY6.
Darkbox - термометр/термостат + пельтье холодильник для съемки правильных дарков.

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #444 : 08 Дек 2015 [20:20:15] »
ну тут понадобится хороший пахарь. возможно когда-нибудь он обязательно отыщется, я даже думаю, что обязательно отыщется. а какие преимущества это собственно нам даст?

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #445 : 08 Дек 2015 [20:21:46] »
Опишите мне понятным мне языком, какие сигналы связывают ПЛИС и кипарис между собой - аппаратно(!) и как они описаны в декларации(?) сигналов трансмиттера в проекте ПЛИС.

Мне припоминается что у кипариса вроде как есть какие-то разрешающие/запрещающие сигналы для источника данных.
Т.е. если у кипариса запор, он выставляет трансмиттеру сигнал запрета передачи данных, пока фифо не освободится в хост. Этот сигнал должен безусловно и немедленно останавливать секвенсор, в какой бы стадии тот не был.
да вот же они родимые

//------------------Cypress CY7C68013A-56
  output wire[1:0] fx2Addr_out,   // select FIFO: "10" for EP6OUT, "11" for EP8IN
  inout  wire[7:0] fx2Data_io,    // 8-bit data to/from FX2
// When EP6OUT selected:
  output wire      fx2Read_out,   // asserted (active-low) when reading from FX2
  output wire      fx2OE_out,     // asserted (active-low) to tell FX2 to drive bus
  input  wire      fx2GotData_in, // asserted (active-high) when FX2 has data for us
// When EP8IN selected:
  output wire      fx2Write_out,  // asserted (active-low) when writing to FX2
  input  wire      fx2GotRoom_in, // asserted (active-high) when FX2 has room for more data from us
  output wire      fx2PktEnd_out, // asserted (active-low) when a host read needs to be committed early


в спец.файле проекта они описаны вот так


//============================Cypress CY7C68013A-56
//NET "fx2Clk_in"       LOC="P177"  | IOSTANDARD=LVTTL;   # IFCLK
NET "fx2Addr_out<0>"  LOC = "P132"  ;  // # PA4/FIFOADR0
NET "fx2Addr_out<1>"  LOC = "P129"  ;  // # PA5/FIFOADR1

NET "fx2Data_io<0>"   LOC = "P153"  ;  // # PB0/FD0
NET "fx2Data_io<1>"   LOC = "P152"  ;  // # PB1/FD1
NET "fx2Data_io<2>"   LOC = "P151"  ;  // # PB2/FD2
NET "fx2Data_io<3>"   LOC = "P150"  ;  // # PB3/FD3
NET "fx2Data_io<4>"   LOC = "P147"  ;  // # PB4/FD4
NET "fx2Data_io<5>"   LOC = "P146"  ;  // # PB5/FD5
NET "fx2Data_io<6>"   LOC = "P145"  ;  // # PB6/FD6
NET "fx2Data_io<7>"   LOC = "P144"  ;  // # PB7/FD7

NET "fx2Read_out"     LOC = "P107"  ;  // # RDY0/SLRD
NET "fx2OE_out"       LOC = "P134"  ;  // # PA2/SLOE
NET "fx2GotData_in"   LOC = "P138"  ;  // # CTL2/FLAGC

NET "fx2Write_out"    LOC = "P106"  ;  // # RDY1/SLWR
NET "fx2GotRoom_in"   LOC = "P139"  ;  // # CTL1/FLAGB
NET "fx2PktEnd_out"   LOC = "P128"  ;  // # PA6/PKTEND
« Последнее редактирование: 08 Дек 2015 [20:30:24] от Andreichk »

Оффлайн Дмитрий Бучинский

  • *****
  • Сообщений: 603
  • Благодарностей: 25
  • ex. damian_1
    • Сообщения от Дмитрий Бучинский
Re: 33 мегапикселя на ладони
« Ответ #446 : 08 Дек 2015 [20:35:06] »
input  wire      fx2GotRoom_in, // asserted (active-high) when FX2 has room for more data from us

Если я правильно понял - это оно. Высокий уровень, пока в фифо FX2го есть место для новых данных. Низкий - когда фифо переполнен и не может принимать новые данные.
Вам надо сделать так, чтобы низкий уровень этого сигнала немедленно приостанавливал работу секвенсора.
SW2001, самодельный USB мотофокус, MPCC, колесо DS 2", EOS 350Da, QHY8L @ NEQ6ST eqmod. Гид - кинопроекционник КО-140М ( 140/1.8 ) + DSI-Pro.
Доп: разные телевики + самодельное колесо фильтров с USB + QHY6.
Darkbox - термометр/термостат + пельтье холодильник для съемки правильных дарков.

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #447 : 08 Дек 2015 [20:39:20] »
input  wire      fx2GotRoom_in, // asserted (active-high) when FX2 has room for more data from us

Если я правильно понял - это оно. Высокий уровень, пока в фифо FX2го есть место для новых данных. Низкий - когда фифо переполнен и не может принимать новые данные.
Вам надо сделать так, чтобы низкий уровень этого сигнала немедленно приостанавливал работу секвенсора.
я понял, щас помолюсь, принесу кота в жертву и попытаюсь сделать это самостоятельно. но это будет долго...... 8)

Оффлайн Дмитрий Бучинский

  • *****
  • Сообщений: 603
  • Благодарностей: 25
  • ex. damian_1
    • Сообщения от Дмитрий Бучинский
Re: 33 мегапикселя на ладони
« Ответ #448 : 08 Дек 2015 [20:51:48] »
я понял, щас помолюсь, принесу кота в жертву и попытаюсь сделать это самостоятельно. но это будет долго...... 8)
Кота пощади, не виноватый он.
Если не пойдет с меандром ADCCLK, попробуй вернуть не-меандр. Хотя потом всё равно бы разобраться с этим.
SW2001, самодельный USB мотофокус, MPCC, колесо DS 2", EOS 350Da, QHY8L @ NEQ6ST eqmod. Гид - кинопроекционник КО-140М ( 140/1.8 ) + DSI-Pro.
Доп: разные телевики + самодельное колесо фильтров с USB + QHY6.
Darkbox - термометр/термостат + пельтье холодильник для съемки правильных дарков.

Оффлайн Дмитрий Бучинский

  • *****
  • Сообщений: 603
  • Благодарностей: 25
  • ex. damian_1
    • Сообщения от Дмитрий Бучинский
Re: 33 мегапикселя на ладони
« Ответ #449 : 08 Дек 2015 [21:02:05] »
ну тут понадобится хороший пахарь. возможно когда-нибудь он обязательно отыщется, я даже думаю, что обязательно отыщется. а какие преимущества это собственно нам даст?
Это даст улучшение С/Ш, навскидку в SQR(Nзамеров) раз, ценой некоторой потери времени на считывание.
Сильно утрируя - все равно что сложить между собой N кадров без траты времени на съемку, без мороки с выравниванием кадров, гидированием итп.
SW2001, самодельный USB мотофокус, MPCC, колесо DS 2", EOS 350Da, QHY8L @ NEQ6ST eqmod. Гид - кинопроекционник КО-140М ( 140/1.8 ) + DSI-Pro.
Доп: разные телевики + самодельное колесо фильтров с USB + QHY6.
Darkbox - термометр/термостат + пельтье холодильник для съемки правильных дарков.

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #450 : 08 Дек 2015 [21:44:06] »
какая-то фигня с этим сигналом fx2GotRoom_in. только я  инициализировал подключение к фпга, там сразу же выставилась лог.1 и всё на этом. картинка получилась как обычно, с немеандром,  и с кучей артефактов. то есть введение этого сигнала ничего не улучшило . :'(

Оффлайн Дмитрий Бучинский

  • *****
  • Сообщений: 603
  • Благодарностей: 25
  • ex. damian_1
    • Сообщения от Дмитрий Бучинский
Re: 33 мегапикселя на ладони
« Ответ #451 : 08 Дек 2015 [22:09:04] »
Сигнал Room можно пока отложить в сторону, но не исключено, что он еще может понадобиться, когда придет время отлаживать устройство на загруженной USB шине.

Нельзя-ли посмотреть прогон в симуляторе сигналов ADCCLK и вот этого:
output wire      fx2Write_out
Если этот сигнал в эмуляторе статичен, то тогда нужно его смотреть осциллографом на камере в момент считывания.
SW2001, самодельный USB мотофокус, MPCC, колесо DS 2", EOS 350Da, QHY8L @ NEQ6ST eqmod. Гид - кинопроекционник КО-140М ( 140/1.8 ) + DSI-Pro.
Доп: разные телевики + самодельное колесо фильтров с USB + QHY6.
Darkbox - термометр/термостат + пельтье холодильник для съемки правильных дарков.

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #452 : 08 Дек 2015 [22:25:16] »
Сигнал Room можно пока отложить в сторону, но не исключено, что он еще может понадобиться, когда придет время отлаживать устройство на загруженной USB шине.

Нельзя-ли посмотреть прогон в симуляторе сигналов ADCCLK и вот этого:
output wire      fx2Write_out
Если этот сигнал в эмуляторе статичен, то тогда нужно его смотреть осциллографом на камере в момент считывания.
в симуляторе я его не увижу, так как он снаружи. я его могу вытащить на пин спартана и осциллом посмотреть, что там

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #453 : 08 Дек 2015 [22:36:57] »
Нельзя-ли посмотреть прогон в симуляторе сигналов ADCCLK и вот этого:
output wire      fx2Write_out
Если этот сигнал в эмуляторе статичен, то тогда нужно его смотреть осциллографом на камере в момент считывания.
там на нём узкие отриц. импульсы с частотой 1 МГц. Этот сигнал  спартан гонит в кипресс .
другими словами , там тот же ADCCLK ,только инвертированный
« Последнее редактирование: 08 Дек 2015 [23:02:33] от Andreichk »

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #454 : 09 Дек 2015 [00:16:54] »
блин, нихрена не пониме, что происходит, хреначит мне фотки немеандровые в полный рост безо всяких артефактов, уже 10 подряд. я ж ничего не переделывал..... :-\ мож это под вечер винда успокаивается и всё начинает нормально работать?

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #455 : 09 Дек 2015 [00:42:35] »
Цифровой ДКВ вместо аналогового:

1. Перевести АЦП в режим SHA, когда он измеряет сигнал отн. offsеt'a.
2. Вывод OFFSET закоротить на землю, установив верхом на керамический кондер резистор нулевик. Возможно, стОит поставить вместо нуля резистор с подобранным сопротивлением, чтобы шунтируя внутреннюю цепочку формирования offset'а добиться такой величины смещения, чтобы оно было несколько ниже уровня насыщения ПЗС.
3. Перепахать секвенсор:
Сигнал CDSCLK1 убрать.

Секвенсор прокручивает циклограмму, пока на выходе ПЗС не появляется опорный уровень черного.
Далее секвенсор останавливает циклограмму ПЗС, и тактирует АЦП согласно Fig6 даташита, но только аналоговый сигнал на входе в этот момент не меняется - т.е. АЦП проводит многоточечный замер уровня черного для данного пикселя. Думаю, 2-4 замера вполне достаточно, ибо скорость АЦП ограничена. В трансмиттере полученные с АЦП данные суммируются в достаточно просторном регистре, чтобы не произошло переполнение.
Далее, результат суммирования делится на количество замеров, а если замеров 2 или 4 - то тупо отбрасывается один или два младших разряда.
Далее, секвенсор проворачивается, пока на выходе ПЗС появляется уровень полезного.
Далее секвенсор опять тактирует АЦП, для многоточечного замера уровня полезного. В трансмиттере так-же результаты замеров суммируются и делятся.
Далее, трансмиттер из усредненного уровня черного вычитает усредненный уровень белого, и выдает разность в качестве результата оцифровки пикселя, а секвенсор крутит шарманку до следующего раза.

Наилучший вариант - если настройками GAIN/OFFSET АЦП получится захватить уровень черного/полезного (в режиме SHA!) не потеряв участка шкалы, и не переделывая цепь смещения АЦП - тогда переход между цифровым и аналоговым ДКВ можно будет осуществлять чисто программно, например реализовать в качестве опции "сверхмедленного прецизионного чтения".
прямо хоть конкурс объявляй - кто напишет модуль, тому матрица за пол-цены.....

Оффлайн Дмитрий Бучинский

  • *****
  • Сообщений: 603
  • Благодарностей: 25
  • ex. damian_1
    • Сообщения от Дмитрий Бучинский
Re: 33 мегапикселя на ладони
« Ответ #456 : 09 Дек 2015 [18:12:31] »
Цитата
Нельзя-ли посмотреть прогон в симуляторе сигналов ADCCLK и вот этого:
output wire      fx2Write_out
там на нём узкие отриц. импульсы с частотой 1 МГц. Этот сигнал  спартан гонит в кипресс .
другими словами , там тот же ADCCLK ,только инвертированный
Я так понимаю, что fx2Wo и ADCCLK формируются внутри ПЛИС, из глобального клока...
Выложите пожалуйста кусок кода, где _оба этих сигнала формируются.
Так-же интересует:
- Путь ADCH/L от пинов АЦП до пинов кипариса.
- Разрядность шины данных между кипарисом и ПЛИС.
- Ссылка на учебник "VHDL для чайников за 1 день", желательно чтобы побольше картинок и поменьше текста.
SW2001, самодельный USB мотофокус, MPCC, колесо DS 2", EOS 350Da, QHY8L @ NEQ6ST eqmod. Гид - кинопроекционник КО-140М ( 140/1.8 ) + DSI-Pro.
Доп: разные телевики + самодельное колесо фильтров с USB + QHY6.
Darkbox - термометр/термостат + пельтье холодильник для съемки правильных дарков.

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #457 : 09 Дек 2015 [19:41:27] »
Я так понимаю, что fx2Wo и ADCCLK формируются внутри ПЛИС, из глобального клока...
Выложите пожалуйста кусок кода, где _оба этих сигнала формируются.
case (buffer) //45,46,47,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18://меандр
                     45,46:                                                                            //короткий импульс.
         ADCCLK <= SSC_ADC; 
            default: ADCCLK <= 1'b0;   
endcase                                                   


assign fx2Write_out = fifoOp[1]; этот сигнал является первым разрядом трёхразрядного регистра reg[1:0]   fifoOp , который принимает какие-то значения в соответствии с алгоритмом . нужно смотреть весь код целиком, иначе ничего не поймёте всё равно.

Цитата
- Путь ADCH/L от пинов АЦП до пинов кипариса.

always @ (posedge c48)
begin
     header_data_ <= header_data;
        adc_data_ <= adc_data;
end

//данные и такт с видео АЦП
wire expos_clk = (frame && adc_clock) || (header && header_clock);
wire [7:0]expos_data = (frame) ? adc_data_[7:0] : (header) ? header_data_[7:0] : 8'd0;//

// коммутатор данных и такта, подаваемых в FPGALINK
wire    comp_valid = (reg1[3]) ? expos_clk : 1'b0;//
wire [7:0]comp_out = (reg1[3]) ? expos_data[7:0] : 8'b00000000;//

   .f2hData_in(comp_out[7:0] ),//HOST <== FPGA посылка данных в консоль. эта строка  вводит данные с ацп

Цитата
- Разрядность шины данных между кипарисом и ПЛИС.
8бит

Цитата
- Ссылка на учебник "VHDL для чайников за 1 день", желательно чтобы побольше картинок и поменьше текста.
http://we.easyelectronics.ru/plis/vvodnaya-plis-v-kartinkah-a-takzhe-nemnogo-o-yazykah-vhdl-i-verilog.html

http://habrahabr.ru/post/252261/

http://geektimes.ru/post/253946/

« Последнее редактирование: 09 Дек 2015 [20:02:40] от Andreichk »

Оффлайн Дмитрий Бучинский

  • *****
  • Сообщений: 603
  • Благодарностей: 25
  • ex. damian_1
    • Сообщения от Дмитрий Бучинский
Re: 33 мегапикселя на ладони
« Ответ #458 : 09 Дек 2015 [21:08:29] »
Спасибо за ссылки на литературу, как я не упирался, изучать VHDL таки придется.

Вот этот момент тоже мне не понятен:
Цитата
Цитата
output wire      fx2Write_out
там на нём узкие отриц. импульсы с частотой 1 МГц. Этот сигнал  спартан гонит в кипресс .
другими словами , там тот же ADCCLK ,только инвертированный
Судя по "тот же ADCCLK", этот сигнал является стробом записи данных в EР FIFO FX2го. Но тогда не понятно, почему он "тот-же", когда по идее должен быть с частотой, в два раза выше чем ADCCLK? Обычно стробы записи управляют фифо таким образом, чтобы данные с шины, защелкивались в фифо по переднему или заднему фронту строба. Если только не применяется DDR, где данные защелкиваются по обеим фронтам строба. Вы не упустили из виду момент, что АЦП по факту DDR, а кипарис (если я не путаю) - не DDR?

Если кипарис таки принимает данные в режиме DDR (а вдруг?), то сигналы ADCCLK и строб FXа должны быть сдвинуты отн. друг-друга по фазе на 90 градусов. Если они синфазны - будет так: АЦП по фронту CLK поменял данные на шине, на переключение выходного регистра нужно время, на распространение сигналов по шине и по потрохам ПЛИС надо еще время... Одновременно с этим, по фронту "того-же ADCCLK - fx2Write_out", FX2ой защелкнул в фифо шум коммутации шины вместо данных. Или защелкнул чуть-чуть позже, когда данные почти стабилизировались - но все равно на грани фола - ушла температура, поползло питание, сдвинулись на пару нсек фронты сигналов - и полезли глюки...
Если fx2Write_out отстает от ADCCLK на 90 градусов, то АЦП сначала выдает данные, и через полтакта (когда переходной процесс в шине данных закончился, потенциалы на линиях стабилизировались) фифо фх-а захватил полезные данные.

Ссылку на проект связи спартана с фх2 не дадите? Чтение авторского описания проекта может помочь.
SW2001, самодельный USB мотофокус, MPCC, колесо DS 2", EOS 350Da, QHY8L @ NEQ6ST eqmod. Гид - кинопроекционник КО-140М ( 140/1.8 ) + DSI-Pro.
Доп: разные телевики + самодельное колесо фильтров с USB + QHY6.
Darkbox - термометр/термостат + пельтье холодильник для съемки правильных дарков.

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #459 : 09 Дек 2015 [22:44:19] »
Цитата
Ссылку на проект связи спартана с фх2 не дадите? Чтение авторского описания проекта может помочь.
вот всё , что нарыл.
http://fpgalink.readthedocs.org/en/dev/index.html
http://www.swaton.ukfsn.org/docs/fpgalink/vhdl_paper.pdf
https://github.com/makestuff/libfpgalink/wiki/FPGALink
https://globlib4u.wordpress.com/2013/03/02/fpgalink-easy-usb-to-fpga-communication/

Цитата
Судя по "тот же ADCCLK", этот сигнал является стробом записи данных в EР FIFO FX2го. Но тогда не понятно, почему он "тот-же", когда по идее должен быть с частотой, в два раза выше чем ADCCLK? Обычно стробы записи управляют фифо таким образом, чтобы данные с шины, защелкивались в фифо по переднему или заднему фронту строба. Если только не применяется DDR, где данные защелкиваются по обеим фронтам строба. Вы не упустили из виду момент, что АЦП по факту DDR, а кипарис (если я не путаю) - не DDR?
честно я даже не думал о этом. эту идею мне предложил товарищ Максим.П, который тоже  должен заниматься этим проектом, но к сож. по причине занятости в нём временно не участвует.

Цитата
fx2Write_out  должен быть с частотой, в два раза выше чем ADCCLK
ну тут бабушка надвое сказала.
модуль comm_fpga_fx2 Cypress(... специально же для нашей камеры не затачивался. Очевидно автор не расчитывал на то, что там должна быть удвоенная частота. это уже какбэ наша задача - что подадим, то и обработает. если надо, я попробую удвоить ADCCLK  и посмотрим , что получится
« Последнее редактирование: 09 Дек 2015 [23:08:32] от Andreichk »