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


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

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

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #480 : 12 Дек 2015 [20:17:49] »
Дмитрий, сделайте на альтеровском симуляторе этот модуль
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Description: Time generator 4 MHz for DALSA CCD FTF5066C
//reg1[1] byte=0x02;//подача питания на MAX618
//reg1[2] byte=0x04;//управление накоплением заряда
//reg1[3] byte=0x08;//управление экспозицией
//////////////////////////////////////////////////////////////////////////////////
module FTF5066C_4 /*#(parameter BASE = 0)*/(
  // Clock
  input wire clock,
  input wire f2hReady,
  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, //тактирование
  output reg REGWR,
  // 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_; //

//=======================================11
always @ (posedge clock)
begin if ( f2hReady )
  begin
    if (buffer == 11)
    begin
      // new tick
if (pix == 5149)// кол-во пикселей в строке 100+9+20+4+4992+4+20 = 5149
      begin
        if (row == 6703) // кол-во строк в кадре 6703
        begin
          // wait
          if (transport == 1'b1)
        begin
            row <= 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;
  //cr_ <= cr_ + 1;//Charge Reset (CR) pulse on VNS
        buffer <= 0; 
      end
    end else begin
      buffer <= buffer + 1;
    end
  end
end

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

//импульсы вертикального переноса заряда 776 Гц
//при накоплении выставляем 8 вольт, а при переносе пульсируем  - с ампл. 11 вольт
wire TG_A1 = integration ? 1'b0 : transport ?   (pix >= 30) && (pix <= 80) : 1'b0 ;  //188,501
wire    A2 = integration ? 1'b1 : transport ? !((pix >= 20) && (pix <= 50)): 1'b0 ;  //125,313
wire    A3 = integration ? 1'b1 : transport ? !((pix >= 40) && (pix <= 70)): 1'b0 ;  //250,438
wire    A4 = integration ? 1'b1 : transport ? !((pix >= 60) && (pix <= 90)): 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
//================== ВЕРТИКАЛЬНЫЙ ПЕРЕНОС 776 Гц ==============================================
   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)

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

///===============================================================================================
          frame <= SSC; //SSC
header_clock <= buffer == 0 && pix >= 40 && pix <= 51;
            header <= pix >= 40  && pix <= 51; //8 byte 380-391
///===============================================================================================      
  case (pix)
            40: header_data <= 8'h01;                    //01 заголовок маркера
            41: header_data <= 8'h02;                    //02 заголовок маркера
         42: header_data <= row[15:8];                //ст.байт номер строки
         43: header_data <= row[7:0];                 //мл.байт номер строки
         44: header_data <= data_msb[7:0];            //ст.байт Т.Пельтье
            45: header_data <= data_lsb[7:0];            //мл.байт Т.Пельтье
            46: header_data <= data_gain[5:0];           //усиление АЦП
            47: header_data <= data_offset[7:0];         //смещение АЦП
     default: header_data <= 8'h00;
 endcase
///===== тактирование ацп. HB,LB 16 bit========================================================
     case (buffer)    2: CDSCLK1 <= SSC_ADC; //==> импульс фиксации уровня чёрного
           default: CDSCLK1 <= 1'b0;
     endcase

     case (buffer)  7,8: CDSCLK2 <= SSC_ADC; //==> импульс выборки значения яркости пикселя
           default: CDSCLK2 <= 1'b0;
     endcase

     case (buffer) 0,1,8,9,10,11:            //==> меандр, такт АЦП
                    ADCCLK <= SSC_ADC;
           default: ADCCLK <= 1'b0;
     endcase
end

always @ (negedge clock) // по спаду тактового импульса
begin
     case (buffer) 4,10:  //удвоенная частота  //==> такт записи данных в FX2
  REGWR <= SSC_ADC;           
  default: REGWR <= 1'b0;
     endcase  
end
///=================================================================================

initial
       begin
           buffer = 11;
              pix = 5149;//
              row = 6703;
//cr_ = 0;
   end


endmodule

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

  • *****
  • Сообщений: 603
  • Благодарностей: 25
  • ex. damian_1
    • Сообщения от Дмитрий Бучинский
Re: 33 мегапикселя на ладони
« Ответ #481 : 12 Дек 2015 [21:32:52] »
Ок, сейчас займусь.
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 мегапикселя на ладони
« Ответ #482 : 12 Дек 2015 [22:12:35] »
Модуль удалось загнать в квартус и скомпиллировать.
Для написания бенчмарка мне нужно уточнить некоторые вещи:
Вход clock - подать 48МГц?
f2hReady - подаю статическую лог1.

data_gain - подаю произвольное число
data_offset - ^^^

data_msb - что сюда?
data_lsb  - и сюда?

transport - сюда подается импульс или уровень на все время чтения? Полярность?
сигналы питания и сброса матрицы - можно забить на них (статику лог0), или требуются некие разрешающие уровни или импульсы?

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

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #483 : 12 Дек 2015 [22:18:09] »
у меня инит для симулятора такой:

   initial begin
      // Initialize Inputs
      clock = 0;
      f2hReady = 1;
      data_gain = 0;
      data_offset = 0;
      data_msb = 0;
      data_lsb = 0;
      CR_IN = 0;
      power_MAX618 = 0;
      integration = 0;
      transport = 0;

   #10;   
       CR_IN = 1;
   #1;   
       CR_IN = 0;


  #20;
  integration <= 1;
  transport <= 0;
  #5149;
  integration <= 0;
  #5149;
  transport <= 1;
end
 
always
begin
 #1 clock <= !clock;
end
   

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #484 : 12 Дек 2015 [22:25:49] »
data_gain - подаю произвольное число
data_offset - ^^^

data_msb - что сюда?
data_lsb  - и сюда?
            95: header_data <= data_msb[7:0];            //ст.байт Т.Пельтье
            96: header_data <= data_lsb[7:0];            //мл.байт Т.Пельтье   
            97: header_data <= data_gain[5:0];           //усиление АЦП
            98: header_data <= data_offset[7:0];         //смещение АЦП

эти байты принимают значения, которые я засылаю с консоли. так их удобно контролировать в НЕХ файле  картинки

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

  • *****
  • Сообщений: 603
  • Благодарностей: 25
  • ex. damian_1
    • Сообщения от Дмитрий Бучинский
Re: 33 мегапикселя на ладони
« Ответ #485 : 12 Дек 2015 [22:36:38] »
А куда подавать пиксельные данные с АЦП?
SW2001, самодельный USB мотофокус, MPCC, колесо DS 2", EOS 350Da, QHY8L @ NEQ6ST eqmod. Гид - кинопроекционник КО-140М ( 140/1.8 ) + DSI-Pro.
Доп: разные телевики + самодельное колесо фильтров с USB + QHY6.
Darkbox - термометр/термостат + пельтье холодильник для съемки правильных дарков.

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #486 : 12 Дек 2015 [22:41:02] »
А куда подавать пиксельные данные с АЦП?
дык никуда. в этом модуле формируются только тайминги, а данные с АЦП попадают в другой модуль

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

 я ещё раз обновил весь проект и выложил его на гугле диск. щас он закачается. там я исправил некоторые ошибки в заголовке строк, убрал лишние регистры и кое что по мелочи почистил. в принципе , его запросто можно на Альтеру положить, спец. модулей хилинкса там нет, чисто вериложный код. Попробуйте весь код взять и просимулироваь по частям или целиком.
Вы вообще управлять матрицей как будете? альтерой,или авторскую схему возьмёте?
ссылка в первом посту
« Последнее редактирование: 12 Дек 2015 [22:48:51] от Andreichk »

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #487 : 12 Дек 2015 [22:51:14] »
вобщем выправил тайминг матрицы насколько возможно. теперь для всех 4-х тактов ацп - 1 2 4 и 8 МГц, рисует одинаковые картинки, во всяком случае при свете комнатного освещения. как будет в темноте - пока не знаю.

блин, я совсем забыл, надо же ещё как-то написать модуль управления датчиком температуры DALLAS_DS18B20.
в принципе он есть, но написан на чистом ВХДЛ коде, а там я полный 0. я чёто не пойму как там вход датчика подцеплять.

----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Design Name:
-- Module Name:    one_wire - Behavioral
-- http://we.easyelectronics.ru/plis/1-wire-na-vhdl.html
----------------------------------------------------------------------------------
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
       
entity one_wire is
        port ( reset : in std_logic;
                        read_byte : in std_logic;
                        write_byte : in std_logic;
                        wire_out : out std_logic;
                        wire_in : in std_logic;
                        presense : out std_logic;
                        busy : out std_logic;
                        in_byte : in std_logic_vector (7 downto 0);
                        out_byte : out std_logic_vector (7 downto 0);
                        clk : in std_logic );
end one_wire;

architecture a of one_wire is
signal count : std_logic;
signal counter : integer range 0 to 127;

begin
process (clk)

type finit_state is (start, delay_reset, wire_read_presense, wire_0, wire_write, wire_read, delay );
variable state : finit_state := start;

variable n_bit : integer range 0 to 7;
variable f : std_logic;
begin
if (clk'event and clk = '1') then
case (state) is
        when start => wire_out <= '1';         -- здесь программа посто висит и ждет команд
                                busy <= '0';
                                count <= '0';
                                if (reset = '1') then        -- пришла команда сбросить шину
                                        busy <= '1';
                                        presense <= '0';
                                        state := delay_reset;   -- переходим туда, где эта шина сбрасывается
                                elsif (write_byte = '1') then
                                        f := '0';
                                        busy <= '1';
                                        state := wire_0;
                                elsif (read_byte = '1') then
                                        f := '1';
                                        busy <= '1';
                                        state := wire_0;
                                end if;
                                       
        when delay_reset => wire_out <= '0';     -- сбрасываем шину, т. е. выставляем 0 и ждем 480 мкс
                                count <= '1';
                                if (counter = 78) then
                                        state := wire_read_presense;
                                        count <= '0';
                                end if;
                       
        when wire_read_presense => wire_out <= '1';
                                count <= '1';
                                if (counter = 11) then     -- проверяем ответ от устройства
                                        presense <= not wire_in;
                                end if;
                                if (counter = 78) then
                                        state := start;
                                        count <= '0';
                                end if;
                                       
        when wire_0 => wire_out <= '0';                    -- инициируем передачу или прием бита
                                if (f = '0') then
                                        state := wire_write;
                                else
                                        state := wire_read;
                                end if;
                                       
        when wire_write =>
                                if (in_byte(n_bit) = '1') then   -- по-очереди передаем байт
                                        wire_out <= '1';
                                end if;
                                state := delay;
                                                                               
        when wire_read => wire_out <= '1';
                                count <= '1';
                                if (counter = 1) then     
                                        out_byte(n_bit) <= wire_in;   -- считываем бит
                                        count <= '0';
                                        state := delay;
                                end if;
                               
        when delay =>
                                count <= '1';
                                if (counter = 8) then     -- задержка перед приемом или передачей следующего бита
                                        count <= '0';
                                        wire_out <= '1';
                                        if (n_bit = 7) then    -- если все биты приняты/переданы возвращаемся на начало
                                                n_bit := 0;
                                                state := start;
                                        else n_bit := n_bit + 1;
                                                state := wire_0;
                                        end if;
                                end if;
                                                               
end case;
end if;
end process;

-- счетчик, тикает с периодом 6 мкс, нужен для выдерживания временных интервалов
process (clk)
begin
if (count = '0') then
        counter <= 0;
elsif (clk'event and clk = '1') then
        counter <= counter + 1;
end if;
end process;

end architecture;
« Последнее редактирование: 12 Дек 2015 [22:57:35] от Andreichk »

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

  • *****
  • Сообщений: 603
  • Благодарностей: 25
  • ex. damian_1
    • Сообщения от Дмитрий Бучинский
Re: 33 мегапикселя на ладони
« Ответ #488 : 12 Дек 2015 [23:35:41] »
В симуляторе прогнал, вроде как никакого криминала не видно.
Выходной файл могу скинуть, но для его просмотра придется скачать и поставить Quartus WebEdition, он фриварный, но большой - долго качается.
Могу сделать скриншот - но снимать все сигналы будет мелко и неудобно смотреть. Если надо - напишите что оставить, я уберу все лишнее и выложу картинку.
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 мегапикселя на ладони
« Ответ #489 : 12 Дек 2015 [23:50:32] »
Я планирую камеру по своему сделать:
Обвязку ПЗС взять референсную.
Насчет промежуточных видеоусилителей пока не решил, ставить или нет.
АЦП - пара 14бит AD9822, в двухканальном режиме, вывод через 4 угла ПЗС. Предусмотрю на платах посадочные места под всё что для этого надо, а буду или не буду ставить - по ситуации. АЦП можно потом поменять на AD9826 без переделки проекта. Цифровую ДКВ возможно реализую - посмотрю по обстоятельствам.
Пока непонятно с отключением видеоусилителей в ПЗС. Если даташит не запрещает отключать, предусмотрю посадочные места на плате ПЗС. Если будут засвеченные углы - сделаю отключение.
Остальное "железо" - ПЛИС альтера, FX2LP. Загрузки прошивок в FX и ПЛИС из ПК не будет, поставлю еепромы с прошивками в камеру. Для прототипа пойдет и так.
Софт: на стороне ПК знакомый мне драйвер LibUSB. Программа - самописная, для оценки пригодности матрицы для практического применения (настораживает невысокий QE). Если будет переспектива к практическому применению - придется писать ASCOM плагин (пока даже не знаю как к этому подступиться).
На стороне FX2, пока не знаю. Этот проц мне не знаком. Проект, который Вы использовали как основу, мне не нравится своей функциональной избыточностью (из за универсальности). Писать самому с нуля - аццкий гемор, т.к. FX2 весьма нетривиален. Вероятно буду брать подходящий референсный пример от разработчиков проца, и приспосабливать его к своим гнусным целям.
Проект в ПЛИС напишу сам, там нет ничего особо сложного (на первый взгляд).
Служебку (DS18b20, ШИМ, термостат итп) сделаю на отдельном микроконтроллере, или на "софтпроце" интегрированном в ПЛИС - посмотрю, как там будет с ресурсами и сложностью реализации.
Это все так, наброски эскизного проекта. Когда дойдет до дела, все еще может сто раз поменяться...

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

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #490 : 12 Дек 2015 [23:54:10] »
Могу сделать скриншот - но снимать все сигналы будет мелко и неудобно смотреть. Если надо - напишите что оставить, я уберу все лишнее и выложу картинку.
просто пару картинок положите сюда, чистапасматреть.

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #491 : 13 Дек 2015 [00:08:15] »
Цитата
Проект, который Вы использовали как основу, мне не нравится своей функциональной избыточностью (из за универсальности).
а в чём его избыточность, я чёт невкурил?

Цитата
Загрузки прошивок в FX и ПЛИС из ПК не будет, поставлю еепромы с прошивками в камеру.
в FX ничего заливать не надо. а в ПЛИС заливается за пару секунд. для прототипа еепромы-то зачем? хотя конечно дело хозяйское.

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

  • *****
  • Сообщений: 603
  • Благодарностей: 25
  • ex. damian_1
    • Сообщения от Дмитрий Бучинский
Re: 33 мегапикселя на ладони
« Ответ #492 : 13 Дек 2015 [12:41:52] »
Цитата
...
а в чём его избыточность, я чёт невкурил?
Автор проекта связки напихал в свое творение много разных интересных фич. Несколько виртуальных каналов, выбор разных конечных точек... Зачем это в камере?
Цитата
Цитата
Загрузки прошивок в FX и ПЛИС из ПК не будет
в FX ничего заливать не надо.
Надо. FX2й "romless", на борту камня только "масочный" загрузчик. При включении питания, загрузчик ищет прошивку в  конфигурационном EEPROM, и если ЕЕР не подключен или не содержит тело программы, он ждет загрузку через USB по специальному протоколу. Загрузкой фирмвари в этом случае заведует драйвер.
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 мегапикселя на ладони
« Ответ #493 : 13 Дек 2015 [12:56:21] »
2 Andreichk
Как успехи? Разобрались с симуляцией?
SW2001, самодельный USB мотофокус, MPCC, колесо DS 2", EOS 350Da, QHY8L @ NEQ6ST eqmod. Гид - кинопроекционник КО-140М ( 140/1.8 ) + DSI-Pro.
Доп: разные телевики + самодельное колесо фильтров с USB + QHY6.
Darkbox - термометр/термостат + пельтье холодильник для съемки правильных дарков.

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #494 : 13 Дек 2015 [13:04:54] »
Автор проекта связки напихал в свое творение много разных интересных фич. Несколько виртуальных каналов, выбор разных конечных точек... Зачем это в камере?
ну и напихал, это что ли мешает чему-то?


Цитата
FX2й "romless", на борту камня только "масочный" загрузчик. При включении питания, загрузчик ищет прошивку в  конфигурационном EEPROM, и если ЕЕР не подключен или не содержит тело программы, он ждет загрузку через USB по специальному протоколу. Загрузкой фирмвари в этом случае заведует драйвер.
опять не пойму, в чём тут проблема. один раз при подключении перепрописал что-то там в кипресе  и всё, при следующих подключениях оно само уже всё там организуется. мы вообще об Cypress CY7C68013A-56 говорим или о чём-то другом?

Как успехи? Разобрались с симуляцией?
неа, хилинкс не переваривает альтеровские файлы.

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #495 : 13 Дек 2015 [13:07:48] »
кстати модуль для ШИМ очень простой, совсем не обязательно под него процессор создавать

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////
// Широтно-импульсная модуляция для ПЕЛЬТЬЕ и ПРОТИВОРОСНИКА
// Принимаем 2 байта из хоста и делаем из них 16 битное число
//////////////////////////////////////////////////////////////
module PWM(
    input clk,
    input [7:0] PWM_in1,
input [7:0] PWM_in2,
    output PWM_out
);

reg [15:0] cnt;
reg cnt_dir;  // 0 to count up, 1 to count down

wire [15:0] cnt_next = cnt_dir ? cnt-1'b1 : cnt+1'b1;

wire cnt_end = cnt_dir ? cnt==16'b0000000000000000 : cnt==16'b1111111111111111;

always @(posedge clk) cnt <= cnt_end ? ( PWM_in1 << 8 | PWM_in2 ) : cnt_next;

always @(posedge clk) cnt_dir <= cnt_dir ^ cnt_end;

assign PWM_out = cnt_dir;

endmodule

вспомнил, есть же чудесный сайт по верилогу на английском , но с примерами,лично я оттуда очень многому научлся
http://www.fpga4fun.com/DDS2.html

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

  • *****
  • Сообщений: 603
  • Благодарностей: 25
  • ex. damian_1
    • Сообщения от Дмитрий Бучинский
Re: 33 мегапикселя на ладони
« Ответ #496 : 13 Дек 2015 [15:30:29] »
КМК, начинается полемика "о вкусе и цвете", т.е. ни о чем.
Вы поднимаете свой, сложный проект; я вам в меру способностей помогаю. Споры о не относящихся к конкретной проблеме вещах отнимают время и не приносят пользы делу.

Цитата
Как успехи? Разобрались с симуляцией?
неа, хилинкс не переваривает альтеровские файлы.
Тогда, если не хотите ставить квартус, можете отправить мне куски проекта, и пожелания по интересующим моментам в симуляции. Я у себя прогоню на симуляторе, и выложу фрагменты. Целиком симуляцию выложить не получится.
Как работает камера на данный момент, есть ли какие проблемы?

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

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #497 : 13 Дек 2015 [16:42:12] »
КМК, начинается полемика "о вкусе и цвете", т.е. ни о чем.
Вы поднимаете свой, сложный проект; я вам в меру способностей помогаю. Споры о не относящихся к конкретной проблеме вещах отнимают время и не приносят пользы делу.

Цитата
Как успехи? Разобрались с симуляцией?
неа, хилинкс не переваривает альтеровские файлы.
Тогда, если не хотите ставить квартус, можете отправить мне куски проекта, и пожелания по интересующим моментам в симуляции. Я у себя прогоню на симуляторе, и выложу фрагменты. Целиком симуляцию выложить не получится.
Как работает камера на данный момент, есть ли какие проблемы?

P/S В квартусе есть экспорт отчета симуляции в форматах .vwf .cvwf .vcd .tbl - может какой-то из этих форматов получится загрузить у Вас и просмотреть...
Дмитрий, сегодня же воскресенье, можно и ни о чём поболтать. Я же не навязываю свою точку зрения, просто высказываюсь.
в данный момент я просто гоняю софт на предмет отказоустойчивости. есть некоторые проблемы с цветовой синхронизацией, но я думаю, что справлюсь с ней. тут надо в визуале си++ код подшаманить немного.

у меня где-то валяется квартус, надо только найти его, просто ставить только из за того, чтобы симуляцию посмотреть смысла не вижу. писать то в  нём я точно не буду ничего, когда-то пытался что-то писать под модуль Теразик, потом забросил, слишком много лицензионных ограничений. в ИЗЕ всё это с палёной лицензией работает, а в квартусе облом.

.vwf .cvwf .vcd .tbl ни один из этих форматов в ИЗЕ не открывается, так что не парьтесь с этим даже

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

  • *****
  • Сообщений: 603
  • Благодарностей: 25
  • ex. damian_1
    • Сообщения от Дмитрий Бучинский
Re: 33 мегапикселя на ладони
« Ответ #498 : 13 Дек 2015 [17:33:18] »
Дмитрий, сегодня же воскресенье, можно и ни о чём поболтать. Я же не навязываю свою точку зрения, просто высказываюсь.
Ок, тогда пободаемся  :)
Цитата
ну и напихал, это что ли мешает чему-то?
Софт должен быть кратким, как выстрел. Каждая неиспользуемая функция - это источник потенциальных проблем. Автор стороннего проекта мог допустить ошибки - как в нужной Вам части кода, так и в ненужной. Разобраться с этими ошибками вдвойне сложней, т.к. придется досконально разобраться в чужом коде - иногда проще самому все переписать. Единственный плюс использования стороннего проекта - экономия времени, и это в основном оправдано. Если делается неспеша, для души - то лучше сделать все самому: и удовольствие от процесса будет, и развитие своих талантов, и доп. повод для поднятия ЧСВ  ;D.
В моем случае: я никуда не спешу, получаю удовольствие от процесса и предпочитаю использовать уже знакомые мне решения, нежели вникать в чужой софт и приспосабливаться к его особенностям.

Цитата
опять не пойму, в чём тут проблема. один раз при подключении перепрописал что-то там в кипресе  и всё, при следующих подключениях оно само уже всё там организуется*. мы вообще об Cypress CY7C68013A-56 говорим или о чём-то другом?
Да о нём, родимом. Вот тут (*) Вы правы лишь отчасти. Процессор FX2LP - romless, т.е. у него вся память энергозависимая. Загрузка фирмвари требуется после каждой подачи питания и/или аппаратного сброса. Если на борту камеры есть конфигурационный eeprom достаточного объема, то да, один раз туда вливается тело программы (через USB), и потом все работает как бы само по себе. Если еер мал (только для хранения пользовательского VID/PID как в QHYxx), то загрузка из спец. драйвера все равно нужна. Мне проще поставить толстый eeprom, чем разбираться как пишется чудо-драйвер загрузчик.
Как-то так.
SW2001, самодельный USB мотофокус, MPCC, колесо DS 2", EOS 350Da, QHY8L @ NEQ6ST eqmod. Гид - кинопроекционник КО-140М ( 140/1.8 ) + DSI-Pro.
Доп: разные телевики + самодельное колесо фильтров с USB + QHY6.
Darkbox - термометр/термостат + пельтье холодильник для съемки правильных дарков.

andreichk

  • Гость
Re: 33 мегапикселя на ладони
« Ответ #499 : 13 Дек 2015 [17:45:03] »
 у меня как-то тоже была мысль сделать полностью автономную камеру, с дисплеем, на кот. отображаются всякие настройки и кнопочками, для этих самых настроек, а потом подумал ,это ж просто фотоаппарат получится, не иначе.......
так что в общем я с вами полностью согласный.

Цитата
Мне проще поставить толстый eeprom, чем разбираться как пишется чудо-драйвер загрузчик.
загрузчик чего?