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


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

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

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #320 : 01 Дек 2015 [01:42:10] »
вы мне скажите, вот так  же должны быть совмещены импульсы считывания с матрицы и записи в АЦП с последующей выдачей байт в ФПГА ? или я накосячил что-то и моск тут всем выношу , сам того не ведая ?

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #321 : 01 Дек 2015 [01:45:23] »
Диаграмма в симуляторе вроде та. Почему в железе не срабатывает, другой вопрос. Диаграмма несложная, способ должен быть. Фрагмент верилога замысловатый, красивым и понятным не назвать, но, видимо, на то какие-то свои причины были. Иногда бывает надобность впихнуть невпихуемое. А духу Гаусса недалеко лететь :)
да, типичный быдлокод..... 8)

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Description: Time generator 1MHz for DALSA CCD FTF5066C
//reg1[1] byte=0x02;//подача питания на MAX618
//reg1[2] byte=0x04;//управление накоплением заряда
//reg1[3] byte=0x08;//управление экспозицией
//////////////////////////////////////////////////////////////////////////////////
module FTF5066C_1 /*#(parameter BASE = 0)*/(
  // Clock
  input wire clock,
  input wire [5:0]data_gain,//<=====
  input wire [7:0]data_offset,//<=====
  input wire [7:0]data_msb, 
  input wire [7:0]data_lsb,

  // Config
  input wire CR_IN,//<== перед открытием затвора и началом накопления заряда разряжаем матрицу импульсом CR
  input wire power_MAX618,//<== подача питания на MAX618(reg1[1]) 
  input wire integration, //<== накопление пикселей(reg1[2])
  input wire transport,   //<== перенос заряда в хост(reg1[3])
  // CCD
  output wire PWRTGDRW_MAX618,//LOC = P190;//УПРАВЛЕНИЕ ПИТАНИЕМ MAX618
  output wire V_DRIVE11,      //LOC = P164;//УПРАВЛЕНИЕ ПИТАНИЕМ 1 включить 11 вольт
  output wire PWRTGDRW,       //LOC = P189;//УПРАВЛЕНИЕ ПИТАНИЕМ 2 SN74LVC1T45
  output wire TD_WTHLVL,      //LOC = P102;//ИМПУЛЬСЫ УПРАВЛЕНИЯ EL7156 off-11V, on-8V

//======================CCD DALSA FTF5066C
  output wire CR,     //LOC = P103;
 
  output reg TGZ, //LOC = P100; 
  output reg TGY, //LOC = P96; 
  output reg TGX, //LOC = P80;
  output reg TGW, //LOC = P76; 
 
  output reg A1T, //LOC = P99;
  output reg A2T, //LOC = P93;
  output reg A3T, //LOC = P94;
  output reg A4T, //LOC = P97;

  output reg A1B, //LOC = P77;
  output reg A2B, //LOC = P90;
  output reg A3B, //LOC = P89;
  output reg A4B, //LOC = P78;
 
  output reg C1X, //LOC = P68; 
  output reg C2X, //LOC = P69;
  output reg C3X, //LOC = P65;
 
  output reg C1W, //LOC = P62; 
  output reg C2W, //LOC = P63; 
  output reg C3W, //LOC = P64;
 
  output reg SG,  //LOC = P74;   
  output reg RG,  //LOC = P75;

  // ADC
  output reg CDSCLK1,//фиксация уровня
  output reg CDSCLK2,//выборка
  output reg ADCCLK, //тактирование
  // out
  output reg frame,
  output reg header,
  output reg[7:0] header_data,
  output reg header_clock
);

reg  [7:0] buffer;
reg [12:0] pix;// кол-во пикселей в строке
reg [15:0] row;// кол-во строк в кадре
//reg [25:0]cr_; // Charge Reset (CR) pulse on VNS.
reg [25:0]pix_; //

always @ (posedge clock)
begin
    if (buffer == 47)
    begin
      // new tick
if (pix == 5737)// кол-во пикселей в строке 688+9+20+4+4992+4+20 = 5737
      begin
        if (row == 6703) // кол-во строк в кадре 6703
        begin
          // wait
          if (transport == 1'b1)
        begin
            row <= 0;
pix_ <= 0;
//cr_ <= 0;
          end 
        end else begin
          // new line
          pix <= 0;
          row <= row + 1;
          buffer <= 0;
        end
      end else begin
        // new pixel
        pix <= pix + 1;
  pix_ <= pix_ + 1;
  //cr_ <= cr_ + 1;//Charge Reset (CR) pulse on VNS
        buffer <= 0; 
      end
    end else begin
      buffer <= buffer + 1;
    end
end

wire   SSC =     !((pix > 0) && (pix <= 688));  // 0,688
wire   SSC_ADC = !((pix > 0) && (pix <= 684));  // 0,684 пропускаем 4 такта ацп
wire   SSC_CCD = !((pix > 0) && (pix <= 688));  // 0,688

//импульсы вертикального переноса заряда 50кГц
//при накоплении выставляем 8 вольт, а при переносе пульсируем  - с ампл. 11 вольт
wire TG_A1 = integration ? 1'b0 : transport ?   (pix >= 188) && (pix <= 501)  : 1'b0 ;  //188,501
wire    A2 = integration ? 1'b1 : transport ? !((pix >= 125) && (pix <= 313)) : 1'b0 ;  //125,313
wire    A3 = integration ? 1'b1 : transport ? !((pix >= 250) && (pix <= 438)) : 1'b0 ;  //250,438
wire    A4 = integration ? 1'b1 : transport ? !((pix >= 375) && (pix <= 563)) : 1'b0 ;  //375,563

// CR <= !(cr_ >= 0 && cr_ <= 687);     //LOC = P103; Charge Reset (CR) pulse on VNS.
assign CR = CR_IN;                      //LOC = P103; Charge Reset (CR) pulse on VNS.
assign PWRTGDRW_MAX618 = !power_MAX618; //подача питания на драйверы MAX618 pin190

// при накоплении заряда устанавливаем 8 вольт, а при переносе 11 вольт.
assign V_DRIVE11 = integration ;        //8V - накопление заряда, 11V - вертикальный перенос pin164
assign TD_WTHLVL = integration || SSC; //переключатель напр.11/8 вольт на EL7156.  pin102
assign  PWRTGDRW =   transport ;        //подача питания на драйверы гориз.переноса pin189
 
//====================== CCD DALSA FTF5066C ===================================================
always @ (posedge clock) 
begin
//================== ВЕРТИКАЛЬНЫЙ ПЕРЕНОС 50 кГц ==============================================
   TGZ <= TG_A1;                                     //LOC = P100;Image Clock Transfer Gate(Phase 1)
   TGY <= TG_A1;                                     //LOC = P96;
   TGX <= TG_A1;                                     //LOC = P80;   
   TGW <= TG_A1;                                     //LOC = P76;   
//TOP
   A1T <= TG_A1;                                     //LOC = P99; Image Clock (Phase 1)
   A2T <= A2;                                        //LOC = P93; Image Clock (Phase 2)
   A3T <= A3;                                        //LOC = P94; Image Clock (Phase 3)
   A4T <= A4;                                        //LOC = P97; Image Clock (Phase 4)
//BOT
   A1B <= TG_A1;                                     //LOC = P77; Image Clock (Phase 1)
   A2B <= A2;                                        //LOC = P90; Image Clock (Phase 2)
   A3B <= A3;                                        //LOC = P89; Image Clock (Phase 3)
   A4B <= A4;                                        //LOC = P78; Image Clock (Phase 4)

///================== ГОРИЗОНТАЛЬНЫЙ ПЕРЕНОС 1 МГц  ============================================
    RG <= buffer ==  0 && SSC_CCD;                   //LOC = P75; Reset Gate
    SG <= buffer  < 24 && SSC_CCD;                   //LOC = P74; Summing Gate
  //LEFT (SINGLE OUTPUT Left C1 C2 C3) //RIGHT (SINGLE OUTPUT Right C2 C1 C3)
   C1W <=  !((buffer < 16 || buffer > 39) && SSC_CCD);//LOC = P62; Register Clock (Phase 1)
   C2W <= !(!(buffer <  8 || buffer > 31) && SSC_CCD);//LOC = P63; Register Clock (Phase 2)   
   C3W <=     buffer < 24 && SSC_CCD;                 //LOC = P64; Register Clock (Phase 3)
 
   C1X <=  !((buffer < 16 || buffer > 39) && SSC_CCD);//LOC = P68; Register Clock (Phase 1)
   C2X <= !(!(buffer <  8 || buffer > 31) && SSC_CCD);//LOC = P69; Register Clock (Phase 2)   
   C3X <=     buffer < 24 && SSC_CCD;                 //LOC = P65; Register Clock (Phase 3)

///===============================================================================================
          frame <= SSC; //SSC
header_clock <= buffer == 0 && !SSC;   
         header <= pix >= 380  && pix <= 391; //8 byte 380-391
///===============================================================================================      
  case (pix)
            380: header_data <= 8'h01;                    //01 заголовок маркера
            381: header_data <= 8'h02;                    //02 заголовок маркера
         382: header_data <= row[15:8];                //ст.байт номер строки
         383: header_data <= row[7:0];                 //мл.байт номер строки
         384: header_data <= data_msb[7:0];            //ст.байт Т.Пельтье
            385: header_data <= data_lsb[7:0];            //мл.байт Т.Пельтье
            386: header_data <= data_gain[5:0];           //усиление АЦП
            387: header_data <= data_offset[7:0];         //смещение АЦП
388: header_data <= 8'h00;
389: header_data <= 8'h00;
390: header_data <= 8'h00;
391: header_data <= 8'h00;
  endcase
///===== тактирование ацп. =========================================================
   CDSCLK1 <=   buffer >= 20 && buffer <= 21  && SSC_ADC; //==> импульс фиксации
   CDSCLK2 <=   buffer >= 42 && buffer <= 45  && SSC_ADC; //==> импульс выборки
    ADCCLK <= !(buffer <  45 || buffer >  46) && SSC_ADC; //==> HB,LB 16 bit короткий импульс. ОК
  //ADCCLK <= (buffer <  20 || buffer >  43) && SSC_ADC;  //==> HB,LB 16 bit меандр. приложение падает
///=================================================================================
  end

initial
       begin
           buffer = 47;
              pix = 5737;//
              row = 6703;
  pix_ = 0;
//cr_ = 0;
   end

endmodule

Оффлайн Mixa

  • *****
  • Сообщений: 721
  • Благодарностей: 31
    • Сообщения от Mixa
Re: 33 мегапикселя на ладони
« Ответ #322 : 01 Дек 2015 [02:01:52] »
вот так  же должны быть совмещены импульсы
Да, все так. По поводу клока, почему мне кажется это важным, микросхема внутри себя формирует подробные управляющие сигналы на основе внешних. И, возможно, какой-то характер этих сигналов подразумевается, но не специфицируется. Уж очень явно меандр ADCCLK на диаграммах проступает. Может это и не важно на самом деле, но на этапе отладки лучше сделать картинку похожей. Косвенно об этом может говорить то, что на диаграмме оба полупериода ADCCLK обозначены одинаково, tADCLK

P.S. Полезно интересоваться тем, что бывает насинтезировано в ответ на buffer >= 42 && buffer <= 45, (buffer <  20 || buffer >  43)  и т.п. Хотя на самом деле от схемы требуется не более, чем
case (buffer)
20:
   CDSCLK1 <=  SSC_ADC; //==> импульс фиксации
22:
   CDSCLK1 <=  1'b0;
default:
   CDSCLK1 <=  CDSCLK1;

или с вариациями
20, 21:
   CDSCLK1 <=  SSC_ADC; //==> импульс фиксации
default:
   CDSCLK1 <= 1'b0;

5'b1010X:
   CDSCLK1 <=  SSC_ADC; //==> импульс фиксации
default:
   CDSCLK1 <= 1'b0;


« Последнее редактирование: 01 Дек 2015 [16:26:55] от Mixa »

Оффлайн Майоров Виктор

  • *****
  • Сообщений: 2 397
  • Благодарностей: 181
    • Skype - victor_maiorov
    • Сообщения от Майоров Виктор
    • Видеоскан
Re: 33 мегапикселя на ладони
« Ответ #323 : 01 Дек 2015 [21:51:23] »
Все-таки попробуйте сначала без матрицы. Просто постоянный уровень.
С наилучшими пожеланиями

Майоров Виктор

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #324 : 01 Дек 2015 [22:09:50] »
Все-таки попробуйте сначала без матрицы. Просто постоянный уровень.
попробовал . СКО  == 0. если не считать мелких брызг.

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #325 : 01 Дек 2015 [22:26:02] »
прошу пардона, в том посте я неправильно помолился и не тому царю.
ваш код:
///===== тактирование ацп. =========================================================
case (buffer)
                20,21: CDSCLK1 <= SSC_ADC; //==> импульс фиксации
              default: CDSCLK1 <= 1'b0;
endcase

case (buffer)
             43,44,45: CDSCLK2 <= SSC_ADC; //==> импульс выборки
              default: CDSCLK2 <= 1'b0;
endcase

case (buffer)
                45,46: ADCCLK <= SSC_ADC; //==> HB,LB 16 bit короткий импульс. ОК
              default: ADCCLK <= 1'b0;
endcase
///=================================================================================
выглядит красивее конечно, но в плане каких-то изменений , ничего не превнёс. кроме красоты, в чём его преимущество? я внутрь камня не заглядывал, хотя знаю , как, но боюсь ,всё равно  не разгляжу там ничего....

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #326 : 02 Дек 2015 [00:32:40] »
 заметил некоторую странность. При тактовой 1 МГц, каждую 16 строку, или с частотой 10.4Гц, появляется какой-то странный всплеск.
Мне кажется, что именно он является причиной рассинхонизации цвета на картинках и источником горизонтальных полос. Откуда он может выползать - непонятно....... :-\
На других тактовых, ещё хуже, больше полос и цветовых нарушений...
на тактовой 2 МГц, этот всплеск  == 20.8 Гц.
на 4 МГц соответственно 41.4 Гц
« Последнее редактирование: 02 Дек 2015 [00:41:26] от Andreichk »

Оффлайн Mixa

  • *****
  • Сообщений: 721
  • Благодарностей: 31
    • Сообщения от Mixa
Re: 33 мегапикселя на ладони
« Ответ #327 : 02 Дек 2015 [00:40:14] »
Все-таки попробуйте сначала без матрицы. Просто постоянный уровень.
попробовал . СКО  == 0. если не считать мелких брызг.
Можно offset добавить, чтобы уровень приподнялся и что-то стало оцифровываться. Это если режим CDS не менять.

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #328 : 02 Дек 2015 [00:48:45] »
не знаю как, но у меня вот такое получилось

Оффлайн Mixa

  • *****
  • Сообщений: 721
  • Благодарностей: 31
    • Сообщения от Mixa
Re: 33 мегапикселя на ладони
« Ответ #329 : 02 Дек 2015 [00:48:49] »
но в плане каких-то изменений , ничего не превнёс. кроме красоты, в чём его преимущество?
На симуляторе выглядит так же. Но блок синтеза может по-разному ответить на заявку. Отчеты синтеза и распределения ресурсов можно посмотреть, какие блоки, примитивы задействуются, в какие булевы формы все это превращается. Одно дело блок арифметического сравнения, другое дело просто И. Оптимизатор, может быть и оптимизирует, но проверить хорошо бы.
Меандр ADCCLK, кстати, получился?

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #330 : 02 Дек 2015 [00:51:41] »
да меандр я могу сделать, что толку-то. с меандром у меня почему-то приложение падает и в файл ничего не записывается.

Оффлайн Mixa

  • *****
  • Сообщений: 721
  • Благодарностей: 31
    • Сообщения от Mixa
Re: 33 мегапикселя на ладони
« Ответ #331 : 02 Дек 2015 [00:59:03] »
не знаю как, но у меня вот такое получилось
Это что? Что на ноге 26 и какой offset?

И, кстати, что за приложение, которое падает?

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #332 : 02 Дек 2015 [01:02:58] »
на входе ничего, сигнал от матрицы,оффсет=0, усиление ==55 , но затвор закрыт.
приложение, которым я камерой управляю, самописное на  визуале си++

Оффлайн Mixa

  • *****
  • Сообщений: 721
  • Благодарностей: 31
    • Сообщения от Mixa
Re: 33 мегапикселя на ладони
« Ответ #333 : 02 Дек 2015 [01:29:24] »
на входе ничего, сигнал от матрицы,оффсет=0, усиление ==55 , но затвор закрыт.
приложение, которым я камерой управляю, самописное на  визуале си++
Лучше R95 убрать, правый вывод C156 переключить на землю, gain 0, offset 255 (0 1111 1111). В этом случае на входе АЦП будет только то, что идет от offset, примерно 300 мВ, на выходе должны увидеть результат оцифровки этого уровня.  Поток чисел в районе 9800 должен быть на выходе (если АЦП на диапазон 2В настроен).

Я поначалу думал, что компилятор верилога падает, или с FPGA что-то не то, если прошивку приложением назвать.

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #334 : 02 Дек 2015 [01:37:34] »
Я поначалу думал, что компилятор верилога падает, или с FPGA что-то не то, если прошивку приложением назвать.
православный верилог и не такое выдерживал у меня... 8)
падает приложение при попытке записи в файл РАВ.
сёдня поздно уже. завтра потыкаюсь паяльником а АЦП....гуте нахт, спасибо за наводки.

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #335 : 02 Дек 2015 [01:58:35] »
вобщем с указанными настройками , усиление 0 и смещение 255,правый конец входного кондёра посажен на землю.
основная масса пикселей имеет значение в районе 08В4, некоторые 14В1
« Последнее редактирование: 02 Дек 2015 [10:15:48] от Andreichk »

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #336 : 02 Дек 2015 [10:22:50] »
а это со смещением 0. видно, что уровень пикселей упал до 037С- 0563

Оффлайн Mixa

  • *****
  • Сообщений: 721
  • Благодарностей: 31
    • Сообщения от Mixa
Re: 33 мегапикселя на ладони
« Ответ #337 : 02 Дек 2015 [14:26:23] »
вобщем с указанными настройками , усиление 0 и смещение 255,правый конец входного кондёра посажен на землю.
основная масса пикселей имеет значение в районе 08В4, некоторые 14В1
Что-то не складывается понимание. В окошке Screen Stretch гистограмма обрывается рядом с 192, т. е. max 00C0 или 00BF. Откуда значение в районе 08В4 ?
В любом случае, это не то, что ожидается: ровное поле с легким приятным шумом.

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #338 : 02 Дек 2015 [18:17:39] »
вобщем с указанными настройками , усиление 0 и смещение 255,правый конец входного кондёра посажен на землю.
основная масса пикселей имеет значение в районе 08В4, некоторые 14В1
Что-то не складывается понимание. В окошке Screen Stretch гистограмма обрывается рядом с 192, т. е. max 00C0 или 00BF. Откуда значение в районе 08В4 ?
В любом случае, это не то, что ожидается: ровное поле с легким приятным шумом.
эти значения видны, если просматривать файл в НЕХ формате .

Оффлайн Mixa

  • *****
  • Сообщений: 721
  • Благодарностей: 31
    • Сообщения от Mixa
Re: 33 мегапикселя на ладони
« Ответ #339 : 02 Дек 2015 [19:40:05] »
Смоделировал, к чему нужно стремиться при закороченном входе АЦП, диапазоне АЦП 2В и offset 255