Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: подскажите про MBI5030
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Цифровые схемы, высокоскоростные ЦС
InsolentS
3-й день мучаю MBI5030. С формированием управляющих импульсов разобрался, всё делаю правильно, по даташиту 1 в 1, но ничего не получается - светики либо не горят, либо горят, но беспорядочно, без всякой логики. Никто не сталкивался с этим драйвером?
stu
если я правильно понял, то для 5030 требуется 16 пучков по 16 бит, DCLK-тактирование, LE-с последним битом каждого пучка, 3 раза на 16 пучке, GCLK-частота мерцания диодов. написал на VHDL тестовый код:
Код
entity test_vhdl is
      Port (        CLK0           : in   STD_LOGIC;         -- частота тактового генератора
            -- управляющие сигналы --
            LED          : out   STD_LOGIC := '0';           -- диод на плате
            TX_E    : out   STD_LOGIC := '1';   -- разрешение
            CLK_TX    : inout STD_LOGIC := '0';   -- GCLK для драйвера
            LE_TX    : inout STD_LOGIC := '0';   -- обозначение нового пакета для драйвера
            DCLK_TX   : inout STD_LOGIC := '0';   -- тактирование
            -- данные на преобразователь --  3 драйвера на R, G, B
            TA2    : out   STD_LOGIC; -- R
            TA3    : out   STD_LOGIC; -- G
            TA4    : out   STD_LOGIC; -- B
            TA5    : out   STD_LOGIC); -- доп. по плате надо
end test_vhdl;

architecture Behavioral of test_vhdl is
begin

process (CLK0)

variable count : integer range 0 to 111 := 0;              -- для делителя тактовой частоты
variable count2, count3, count4 : integer range 0 to 16 := 0;
variable clk_in : STD_LOGIC;                  -- работа не по тактовой частоте генератора, а по этой
---------------- пробовать менять значения битов и смотреть, что получится ------------------------------------
variable bit0 : STD_LOGIC := '0';
variable bit1 : STD_LOGIC := '0';
variable bit2 : STD_LOGIC := '1';
variable bit3 : STD_LOGIC := '0';
variable bit4 : STD_LOGIC := '0';
variable bit5 : STD_LOGIC := '1';
variable bit6 : STD_LOGIC := '1';
variable bit7 : STD_LOGIC := '0';
variable bit8 : STD_LOGIC := '0';
variable bit9 : STD_LOGIC := '0';
variable bit10 : STD_LOGIC := '0';
variable bit11 : STD_LOGIC := '0';
variable bit12 : STD_LOGIC := '0';
variable bit13 : STD_LOGIC := '0';
variable bit14 : STD_LOGIC := '0';
variable bit15 : STD_LOGIC := '1';

begin
------------------------------делитель тактовой частоты------------------------------
   if (rising_edge(CLK0)) then
      if (count = 5) then                       -- счет импульсов для выставления "1", частота генератора большая
         count := 0;
         clk_in := '1';
      else
         count := count + 1;
         clk_in := '0';
      end if;
   end if;
-------------------------------------------------------------------------------------
   DCLK_TX <= clk_in;                     -- синхронизация драйвера по частоте
   CLK_TX <= clk_in;                     -- частота мерцания диодов
-------------------------------------------------------------------------------------
   if (clk_in='1') then                          -- тактирование по внутреннерассчитанной частоте
      ------------------------------ LE ------------------------------
      if (count2=15) then
         LE_TX <= '1';                  -- 16 импульсов на передачу, потом новый пакет
         count2:=0;
         count3:=count3+1;
      else
         count2:=count2+1;
         if (count3 < 15 or count2 < 13) then            -- на 16 пачке из 16 импульсов 3 раза надо выдать LE
            LE_TX <= '0';
         else
            LE_TX <= '1';
         end if;
      end if;
      ------------------------------ RGB ------------------------------
      case count2 is
         when 0 => TA2 <= bit0; TA3 <= bit0; TA4 <= bit0;         -- MSB
         when 1 => TA2 <= bit1; TA3 <= bit1; TA4 <= bit1;
         when 2 => TA2 <= bit2; TA3 <= bit2; TA4 <= bit2;
         when 3 => TA2 <= bit3; TA3 <= bit3; TA4 <= bit3;
         when 4 => TA2 <= bit4; TA3 <= bit4; TA4 <= bit4;
         when 5 => TA2 <= bit5; TA3 <= bit5; TA4 <= bit5;
         when 6 => TA2 <= bit6; TA3 <= bit6; TA4 <= bit6;
         when 7 => TA2 <= bit7; TA3 <= bit7; TA4 <= bit7;
         when 8 => TA2 <= bit8; TA3 <= bit8; TA4 <= bit8;
         when 9 => TA2 <= bit9; TA3 <= bit9; TA4 <= bit9;
         when 10 => TA2 <= bit10; TA3 <= bit10; TA4 <= bit10;
         when 11 => TA2 <= bit11; TA3 <= bit11; TA4 <= bit11;
         when 12 => TA2 <= bit12; TA3 <= bit12; TA4 <= bit12;
         when 13 => TA2 <= bit13; TA3 <= bit13; TA4 <= bit13;
         when 14 => TA2 <= bit14; TA3 <= bit14; TA4 <= bit14;
         when 15 => TA2 <= bit15; TA3 <= bit15; TA4 <= bit15;      -- LSB
         when OTHERS => TA2 <= '0'; TA3 <= '0';  TA4 <= '0';
      END CASE;
      ------------------------------ adr ------------------------------
      TA5 <= '1';
   end if;
-------------------------------------------------------------------------------------
end process;
end Behavioral;


но не работает. кто-нить подскажите, выдавать В ТА2 последовательность, например из bit(i).
stu
вопрос снят
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.