Перейти к содержанию

Генератор Ссп На Vhdl


flexxx

Рекомендуемые сообщения

:) Я не русский - что это такое ССП??? Стандартный Серийный Порт?

Если да - то надо уточнить если это нужно только для симулятора или будет зашиваться в какой то девайс? Ну и уточнить ещё пару вещей - частота и небольшую табличку режимов на входе.... Ну и если это только передачик или и приёмник? Вобщем уточнить..

Изменено пользователем wowa
Ссылка на комментарий
Поделиться на другие сайты

ССП - это сигнал синхронизации приёмников . Расположен он в полном видеосигнале ниже уровня чёрного , и состоит из строчных синхроимпульсов , кадровых синхроимпульсов , и так называемых уравнивающих импульсов ( импульсов двойной строчной частоты до и после кадрового синхроимпульса ) .

В одном стандарте 525 строк , 60 полукадров в секунду , в другом - 625 строк , 50 полукадров в секунду . Частота строк у первого ( NTSC ) стандарта - 15750 герц , у второго ( PAL , SECAM ) - 15625 герц . Для различения стандартов проще использовать частоту кадров , так как она сильнее отличается . Выделить кадровый импульс , да измерить его частоту.

Тока надо все по умному, я пока долеко не спец в VHDL.

__||__||__||__||__...__||_||_||_||_|--------------|_||_||_||_||_||__||__||__||__||___

таково вида должен быть сигнал, но это воймет только тот кто в ТВ шарит, я не понимаю, вот и хочу спорсить у более продвинутых людях.

В приложенной pdf подробно описано про стандарты, и что представляет собой ССП, правда на английском, вот только я не могу разобраться.

ITU_R_BT470_6.pdf

Изменено пользователем flexxx
Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Ага!!! Ну тогда боюсь что и с моими знаниями VHDL тебе непомогу.. Знаю что в нём можно обрабатывать и аналоговые сигналы - да только как я понял всё это ещё только в симулятору.. Для нормальной ПЛИС тебе будет нужен цифровой сигнал.. А розделить синхро из видео будет я думаю проще специальными микрухами для теликов... Ну и потом попробовать его подать на входи анализировать... Я так понял что надо иметь что-то типа автоматического переключения стандартов в телеку?

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Ну весь код это ваще в идеале, но я понимаю что это не кому кроме меня и начальства моего не надо.

Хотя бы обьясните как ССП описать, наше и зарубежное.

Самая большая проблема с ССП, не как не пойму какие импульсы когда будут, порсто не где толком не написано нормально.

А ты можешь код написать?

Ссылка на комментарий
Поделиться на другие сайты

Ну весь код это ваще в идеале, но я понимаю что это не кому кроме меня и начальства моего не надо.

Хотя бы обьясните как ССП описать, наше и зарубежное.

Самая большая проблема с ССП, не как не пойму какие импульсы когда будут, порсто не где толком не написано нормально.

А ты можешь код написать?

У тебя же в пдфке всё расписано. Тебе под какой стандарт нужно делать? Вот почитай. Здесь по русски про формирование видеосигнала и про реализацию на МК. А потом пиши в чём возникает трудность при реализации этого на VHDL.

TV_signal.rar

Ссылка на комментарий
Поделиться на другие сайты

Я просто понятть не могу как ССП ревлизовать на VHDL... причем что бы этот блок работал только от ТС, т.е. подаю я Clock с частотой 15750 Гц (стандарт 525/60, периуд примерно 63.5 ns) и на единственном выходе выходи сигнал ССП. т.е. такой как на рисунке.

первые 1000 тактов на выходе была единица (первый сигнал полукадра), потом примерно 75 тактов (2.3us +/-0,1) в "0", потом вновь 1000 тактов...

короче 5 сигналов полукадра по 1000 тс, между ними примерно 75тс в "0". Далее уравнимающие импульсы через те же 75 тактов после 5ого полукадра. Уравнивающие по 4.7us, между ними 27.1us. Уравнивающих тоже 5.

Короче есть тестбенч для ModelSim, приведени ниже

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

use ieee.numeric_std.all;

entity test_sweep is end test_sweep;

architecture testbench of test_sweep is

-- Declaration of the component under test

component SyncSelector

port (

Clock : in std_logic;

CompSyncIn : in std_logic;

LineRes : buffer std_logic;

FildRes : out std_logic;

Standart : out std_logic;

Sync : out std_logic

);

end component;

signal Clock : std_logic :='1';

signal CompSyncIn : std_logic :='1';

signal LineRes : std_logic;

signal FildRes : std_logic;

signal Standart : std_logic;

signal Sync : std_logic;

signal LineSync : std_logic :='0';

signal LineEqual : std_logic :='0';

signal LineSerra : std_logic :='0';

signal FildSync : std_logic :='0';

signal FildState : INTEGER RANGE 0 TO 3;

begin

-- Place stimulus and analysis statements here

dut : SyncSelector port map (

Clock => Clock,

CompSyncIn => CompSyncIn,

LineRes => LineRes,

FildRes => FildRes,

Standart => Standart,

Sync => Sync

);

clk : PROCESS

begin

wait for 31.75 ns;

Clock <= not Clock;

end PROCESS clk;

LnSnc : PROCESS

begin

LineSync <= '1';

wait for 4.7 us;

LineSync <= '0';

wait for 58.8 us;

end PROCESS LnSnc;

LnEqu : PROCESS

begin

LineEqual <= '1';

wait for 4.7 us;

LineEqual <= '0';

wait for 29.45 us;

end PROCESS LnEqu;

LnSer : PROCESS

begin

LineSerra <= '1';

wait for 27.05 us;

LineSerra <= '0';

wait for 2.3 us;

end PROCESS LnSer;

FdStt : PROCESS

begin

FildState <= 0;

wait for 190.5 us;

FildState <= 1;

wait for 190.5 us;

FildState <= 2;

wait for 16.09725 ms;

FildState <= 3;

wait for 190.5 us;

end PROCESS FdStt;

With FildState Select

CompSyncIn <= LineSerra When 0,

LineSync When 2,

LineEqual When Others;

end testbench;

касячный немного, но помоги из него сделать Генератор ССП....

Плиз.

Ссылка на комментарий
Поделиться на другие сайты

Из тестбенча не сделаешь :)

тебе нужно типа этого

library IEEE;

use ieee.std_logic_1164.all;

entity TV_test is

port(

CLK:in std_logic;

H:out std_logic

);

end entity;

architecture TV_arc of TV_test is

signal Hcount : integer;

begin

process TV(CLK)

begin

if rising_edge(CLK) then

Hcount<=Hcount+1;

if Hcount<Value1 then

H<='0';

else

H<='1';

if Hcount>Value2 then

Hcount<=0;

H<='0';

end if;

end if;

end if;

end process;

end architecture;

Здесь CLK вход тактовых импульсов, H выход. В результате должно получиться типа

H<= __value1__/-----\__value1_ Период = value2

Это только набросок, а не рабочий код. Просто хотел показать в какую степь двигаться :)

Изменено пользователем ИнЖеНиГеР
Ссылка на комментарий
Поделиться на другие сайты

Вот сделал как ты показал, СПАСИБО за идею! только вопрос как сделать петлю? т.е. что бы когда отработает 1000 тактов выдает 1, потом еще 75 выдает 0, и это надо сделать 5 раз подряд. ПОКАЖИ пожалуйста как это можно сделать. потом идет другой цикл, но это я разберусь, благодаря тебе :rolleyes: , там правда тоже цикл нужно сделать, ног если покажешь как делать цикл думаю дальше проблем не будет.

Заранее большое СПАСИБО! очень помог.

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity TV_test is

port(

CLK :in std_logic;

H :out STD_LOGIC

);

end TV_test;

architecture TV_arc of TV_test is

signal Hcount : STD_LOGIC_VECTOR (15 DOWNTO 0);

begin

process (CLK)

begin

IF (clk'EVENT AND clk = '1') THEN

Hcount <= Hcount + 1;

if (Hcount < "1111101000") then

H <= '1';

else

H <= '0';

if (Hcount > "10000110011") then

H <= '1';

end if;

end if;

end if;

end process;

end TV_arc;

Ссылка на комментарий
Поделиться на другие сайты

Вот сделал как ты показал, СПАСИБО за идею! только вопрос как сделать петлю? т.е. что бы когда отработает 1000 тактов выдает 1, потом еще 75 выдает 0, и это надо сделать 5 раз подряд. ПОКАЖИ пожалуйста как это можно сделать. потом идет другой цикл, но это я разберусь, благодаря тебе :rolleyes: , там правда тоже цикл нужно сделать, ног если покажешь как делать цикл думаю дальше проблем не будет.

Заранее большое СПАСИБО! очень помог.

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity TV_test is

port(

CLK :in std_logic;

H :out STD_LOGIC

);

end TV_test;

architecture TV_arc of TV_test is

signal Hcount : STD_LOGIC_VECTOR (15 DOWNTO 0);

begin

process (CLK)

begin

IF (clk'EVENT AND clk = '1') THEN

Hcount <= Hcount + 1;

if (Hcount < "1111101000") then

H <= '1';

else

H <= '0';

if (Hcount > "10000110011") then

H <= '1';

end if;

end if;

end if;

end process;

end TV_arc;

Здесь

if (Hcount > "10000110011") then

H <= '1';

end if;

надо обнулить Hcount<="0000000000000000";

Тогда это будет крутиться пока не кончаться тактовые импульсы :)

Затем вводишь ещё один сигнал который будешь инкрементировать каждый раз по окончанию периода. Как только переменная будет равна 5 выполняешь следующее действие.

Ссылка на комментарий
Поделиться на другие сайты

дело в том что ТИ будут поступать постоянно... так что тут это не получиться.

есть же вроде loop? только как им пользоваться???????

А ты переведи внешние ТИ во внутренние с битом управления.

InternalCLK<=CLK and OE;

OE-бит управления которым ты можешь включать или выключать ТИ.

CLK - внешние ТИ

InternalCLK - от них можешь тактироваться, пока тебе это нужно :) затем сбрасываешь OE в "0" и уже не тактируешься.

Ссылка на комментарий
Поделиться на другие сайты

СДЕЛАЛ!!! только немного не так как ты показал.

ВОТ исходник, только остаеться одна проблема. Как из этого сделать неостоновливающийся цикл.

Т.е. как все таки сделать бесконечную петлю?

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity TV_test is

port(

CLK :in std_logic;

SSP :out STD_LOGIC;

CTLSig : buffer STD_LOGIC;

EqSig : buffer STD_LOGIC;

ESig : buffer STD_LOGIC

);

end TV_test;

architecture TV_arc of TV_test is

signal LineCT : STD_LOGIC_VECTOR (8 DOWNTO 0);

signal EqualizeCT : STD_LOGIC_VECTOR (8 DOWNTO 0);

signal FieldCT : STD_LOGIC_VECTOR (9 DOWNTO 0);

signal CTL : STD_LOGIC_VECTOR (2 DOWNTO 0);

signal CTEq : STD_LOGIC_VECTOR (2 DOWNTO 0);

signal CTF : STD_LOGIC_VECTOR (9 DOWNTO 0);

begin

process (CLK)

begin

IF (clk'EVENT AND clk = '1') THEN

------/////////////////////////////////////////////////////////--------------------

IF ( CTL < 101 and CTLSig = '0' ) then

LineCT <= LineCT + 1;

if (LineCT < "111001111") then

SSP <= '1';

else

SSP <= '0';

if (LineCT > "111110010") then

LineCT <="000000000";

CTL <= CTL + 1;

end if;

end if;

elsif (CTL = 101) then

CTL <= "000";

CTLSig <= '1';

end if;

------/////////////////////////////////////////////////////////--------------------

IF ( CTLSig = '1' ) then

if ( CTEq < "110" and EqSig = '0' ) then

EqualizeCT <= EqualizeCT + 1;

if ( (EqualizeCT < "1001010") and (CTEq < "101") ) then

SSP <= '1';

else

SSP <= '0';

if (EqualizeCT > "111110010") then

EqualizeCT <="000000000";

CTEq <= CTEq + 1;

end if;

end if;

elsif ( (CTEq = "110") and CTL = 000 ) then

CTEq <= "000";

CTEq <= "000";

EqSig <= '1';

end if;

end if;

------///////////////////////////////////////////////////////----------------------

IF ( EqSig = '1' ) then

if ( (CTF < "1000000011") and ESig = '0' ) then

FieldCT <= FieldCT + 1;

if (FieldCT < "10010100") then

SSP <= '1';

else

SSP <= '0';

if (FieldCT > "1111101000") then

FieldCT <="0000000000";

CTF <= CTF + 1;

end if;

end if;

elsif ( (CTF = "1000000011") and CTL = 000 and CTEq = 000) then

CTF <= "0000000000";

ESig <= '1';

end if;

end if;

------///////////////////////////////////////////////////////----------------------

end if;

end process;

end TV_arc;

Ссылка на комментарий
Поделиться на другие сайты

если кто знает, как после begin описать for... loop, вот такое выражение, т.е. что бы вся выше показанная прога работала неостонавливаясь?

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Добрый вечер всем!  Проблема следующая: Есть флешка с записанной файловой системой через USB MASS STORAGE DEVICES. При "втыкании"  в порт USB открывается на ПК диск с содержимым. Я подключил библиотеку Fatfs и прописал низкоуровневые функции чтения и записи в файле diskio.c Работаю с файлом так:   disk_initialize(SDFatFs.drv); if(f_mount(&SDFatFs,(TCHAR const*)USER_Path,0)!=FR_OK) { //Error_Handler(); Usart1_Send_String("Error_f_mount!\r\n"); } else { if(f_open(&MyFile,"01.WAV",FA_READ)!=FR_OK) { //Error_Handler(); Usart1_Send_String("Error_open_File1!\r\n"); } else { Usart1_Send_String("open_File_OK1!\r\n"); } if(f_open(&MyFile,"01.wav",FA_READ)!=FR_OK) { //Error_Handler(); Usart1_Send_String("Error_open_File2!\r\n"); } else { Usart1_Send_String("open_File_OK2!\r\n"); UINT testBytes=0; f_read(&MyFile, buff1, 512, &testBytes); sprintf(buf1, "TestBytes=%d\r\n", testBytes); Usart1_Send_String(buf1); Usart1_Send_hex((char*)buff1, 512); Usart1_Send_String("read_File_complite!\r\n"); f_close(&MyFile); } } подправил diskio.c так:   DRESULT disk_read ( BYTE pdrv, /* Physical drive nmuber to identify the drive */ BYTE *buff, /* Data buffer to store read data */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to read */ ) { DRESULT res; //res = disk.drv[pdrv]->disk_read(disk.lun[pdrv], buff, sector, count); sprintf(buffer0, "sector=%lu\r\n", sector); Usart1_Send_String(buffer0); w25qReadPage(buff, sector*2); w25qReadPage(buff + 256, sector*2+256); res=RES_OK; return res; } #if _USE_WRITE == 1 DRESULT disk_write ( BYTE pdrv, /* Physical drive nmuber to identify the drive */ const BYTE *buff, /* Data to be written */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to write */ ) { DRESULT res; //res = disk.drv[pdrv]->disk_write(disk.lun[pdrv], buff, sector, count); w25qWritingByUSB(sector, (uint8_t*)buff); res=RES_OK; return res; } #endif /* _USE_WRITE == 1 */ функцию чтения на самом деле пробовал прописывать по разному, все равно не корректно работает... Выдает в отладке такое:   Program start!.... sector=0 // это обращение к функции чтения DRESULT disk_read (); Error_open_File1! sector=0 // это обращение к функции чтения DRESULT disk_read (); Error_open_File2! Что я забыл еще добавить?
    • В былые годы запрещалось размещать на форуме бессмысленные темы. Видать, с тех пор правила существенно изменились.
    • скачай новый архив. там есть важные изменения в комповой программе, по сравнению с той, что я отправлял в личке. исправлены недоделки и добавлены проверки на некорректные действия.
    • Здесь все индивидуально, точного ответа нет. Тип фоторезиста, качество фотошаблона, расстояние и время засветки, длина волны св.диодов, "полоскание" в химии ... Надо все пробовать самому, ручками, опыт придет со временем, ничего сложного там нет. На форуме есть ветка, почитайте.
    • Привет.  Хочу попробовать поработать с фоторезистом. Есть пару десятков ультрафиолетовых светодиодов, общей мощностью 4 вата. Хватит ли этой мощности для обработки платок размером 10 на 10 см или надо искать что-то дополнительно? 
    • Чтобы меньше было излучения, нужно мотать тороидальную. Возможно для повышения добротности по омическому сопротивлению лучше этот ТОР мотать в пару слоев. Если ее намотать на шило, то она вряд ли будет вообще работать как катушка.   Индуктивность прямо пропорциональна площади сечения, которая в свою очередь прямо пропорциональна квадрату диаметра. К тому же индуктивность в обратной пропорции с длиной намотки.
×
×
  • Создать...