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

Поделить частоту на 2.5

Этот клок мне нужен для тактирования ATMEGA. Думаю дрожание фронта на несколько наносекунд не должно мешать.

Полуинтуитивно накатал одну схему. Входная частота подается на clk, выходная деленная на 2.5 снимается с out. Выходит 2 корпуса + инвертор:

 

div25.png

 

Но при моделровании в максплюсе наблюдаются иголки 5 нс. А если я ее делаю на рассыпной логике, иголок не будет?

Поделиться сообщением


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

Будут.

 

 

Скажите уже правду :rolleyes: - зачем всё это нужно? Зачем МК именно эта определённая частота тактирования и почему её нужно получать непременно из 30МГц?

Поделиться сообщением


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

Если сделаете на "рассыпухе" может быть и не будет (особенно если плату сделаете откровенно плохо!).

Если позволите :bb-offtopic: замечание "старого ворчуна" - приложенная схема абсолютно "нечитабельная" - соответственно при запуске в производство (я конечно догадываюсь, что это Вы делаете для себя, однако к четкости документации лучше привыкать "с младых ногтей") получите массу лестных замечаний.....увы!

Поделиться сообщением


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

Вот так это делается, без всяких там DDR-триггеров. И постоянная скважность. А уж на плисе или на рассыпухе... Вопрос открытый.

 

module div25 (clk, out);
input clk;
output out;

reg [2:0] cntr;
reg mux_reg;
reg neg_reg, pos_reg;

always @(posedge clk)
  if (cntr[2])
    cntr <= 3'h0;
  else
    cntr <= cntr + 1'b1;
    
always @(posedge clk)
  mux_reg <= cntr[1];

always @(negedge clk)
  neg_reg <= (cntr == 3'h3);

always @(posedge clk)
  pos_reg <= (cntr == 3'h0);

assign out = mux_reg ? neg_reg : pos_reg;

endmodule

 

Если дрожание пофигу, то просто делитель на пять (счетчик от 0 до 4), и дальше на "ИЛИ" для значений счетчика 0 и 3 (или 4 и 2, или 3 и 1)

Поделиться сообщением


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

Будут.

 

Скажите уже правду :rolleyes: - зачем всё это нужно? Зачем МК именно эта определённая частота тактирования и почему её нужно получать непременно из 30МГц?

Если уж говорить правду, то не 30 МГц, а 29.97 :)

Я делаю пульт для проверки электронной схемы лазерного дальномера. У пульта 2 основных функции: выдача тестовых импульсов с заданным временным интервалом, и обмен по UARTу на скорости 115.200. В пульте есть готовый генератор 29.97 МГц. Хочу обойтись только контроллером (авр), без ПЛИС.

Так вот. Если затактовать авр частотой 29.97/2.5, он сможет выдавать импульсы с таким временным интервалом, что будут кратны 25 метрам.

Что касается УАРТа, то если эту же частоту делить на 8 (это аппаратный делитель), потом программным делителем на 13, то получится с огромной точностью 115.2. Таким образом я обойдусь только контроллером и некоторой обвязкой из логики.

 

А теперь вы скажите правду. Про иголки вы говорите исходя из опыта, или только из учебника?

Вопрос этот не праздный, потому что я было дело пытался получить короткие пички задерживая фронты вентилями и сталкивая затем через 2И-НЕ. Если по учебнику, так можно подать на один вход фронт без задержки, на другой через инвертор. Инвертор чуть задержит фронт, на выходе 2И-НЕ будет короткий всплеск. А делал я это на логике 74АС. Так фиг вам. Даже 3 инвертора на задержку не дают импульса, хотя на осциллографе видно что задержка имеется.

Учебник что вы показали старый. ТТЛ там понимается 155, 555 серии, а КМОП - 176, в лучшем случае 561. А современная скоростная логика возможно и по другому себя поведет.

 

 

Если позволите :bb-offtopic: замечание "старого ворчуна" - приложенная схема абсолютно "нечитабельная" - соответственно при запуске в производство (я конечно догадываюсь, что это Вы делаете для себя, однако к четкости документации лучше привыкать "с младых ногтей") получите массу лестных замечаний.....увы!

Схема как раз идет в производство :)

А то что она так выглядит - это потому что рисовал в максплюсе для логического моделирования. А "боевой" вариант я рисую на работе уже в соответствии с гостами.

Поделиться сообщением


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

Про иголки - это Вы сами начертите на бумаге диаграммы всех сигналов в правильном масштабе времени, беря все задержки из документации на используемые микросхемы, и смотрите - если два фронта на входе логики слишком рядом, то в этот момент будет потенциальная иголка. Она может быть, а может не быть, все зависит от экземпляра компонента, напряжения питания и температуры.

Поделиться сообщением


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

Но при моделровании в максплюсе наблюдаются иголки 5 нс. А если я ее делаю на рассыпной логике, иголок не будет?

 

Схемная реализация порочна. Потому что реакция регистра на фронт клока замешана с самим клоком.

Поделиться сообщением


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

Так вот. Если затактовать авр частотой 29.97/2.5, он сможет выдавать импульсы с таким временным интервалом, что будут кратны 25 метрам.

Что касается УАРТа, то если эту же частоту делить на 8 (это аппаратный делитель), потом программным делителем на 13, то получится с огромной точностью 115.2. Таким образом я обойдусь только контроллером и некоторой обвязкой из логики.

Понятно. Только у меня серьёзное подозрение, что требуемый временной интервал Вы сможете сформировать контроллером и при другой тактовой. Например, половинной от 29.97 :rolleyes: Геморрою же будет не в пример меньше. Об УАРТе я уж и не говорю...

А теперь вы скажите правду. Про иголки вы говорите исходя из опыта, или только из учебника?

 

Смею Вас заверить - и не только из своего. :biggrin: Если в схемке есть неопределённость относительно того, какой из фронтов появится раньше - гарантия.

Это коварная вещь: их можно не видеть осциллографом, они могут даже проявляться не всегда, так что головная боль обеспечена.

Изменено пользователем Herz

Поделиться сообщением


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

Понятно. Только у меня серьёзное подозрение, что требуемый временной интервал Вы сможете сформировать контроллером и при другой тактовой. Например, половинной от 29.97 :rolleyes: Геморрою же будет не в пример меньше. Об УАРТе я уж и не говорю...

А как с УАРТом тогда быть? В АВР частота УАРТа получается из 1/8 тактовой поделенной на UBRRn регистр. 15 МГц/8=1,875. Из этой частоты 115 200 что то не получается.

 

Это коварная вещь: их можно не видеть осциллографом, они могут даже проявляться не всегда, так что головная боль обеспечена.

Но раз они такие маленькие, может пропустить их через какой нибудь медленный вентиль, 74HC, например и дальше они не пройдут?

Поделиться сообщением


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

Но раз они такие маленькие, может пропустить их через какой нибудь медленный вентиль, 74HC, например и дальше они не пройдут?

 

А чем не устраивает мое описание схемы? Там гарантировано не будет иголок. Ну может на один корпус побольше, если на рассыпухе собирать.

Поделиться сообщением


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

А как с УАРТом тогда быть? В АВР частота УАРТа получается из 1/8 тактовой поделенной на UBRRn регистр. 15 МГц/8=1,875. Из этой частоты 115 200 что то не получается.

Получится. Я не очень-то знаком с АВР-ками, но принцип общий. Дело в том, что УАРТ допускает отклонение тактовой частоты в несколько процентов, главное, чтобы набег таймингов не был слишком большим при передаче длинных сообщений. В общем случае, по стартовым битам идёт новая синхронизация и при передаче байта расхождения получаются незаметными. Почитайте в доке требования к тактированию УАРТа. Практически при любой тактовой частоте МК есть возможность подобрать значения внутренних регистров, ответственных за УАРТ, для стабильного обмена. На больших скоростях, само собой, будут жёстче требования, но, может, высокая скорость УАРТа не так уж важна?

Но раз они такие маленькие, может пропустить их через какой нибудь медленный вентиль, 74HC, например и дальше они не пройдут?

Можно, конечно, и фильтрами их задавить, но это борьба со следствиями, а не с причинами. Крайний случай, одним словом.

Поделиться сообщением


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

To SM. Туго Verilog понимаю, VHDL пользую. "assign out = mux_reg ? neg_reg : pos_reg;" - если я понял - комбинационная функция, шилки не будет?

 

 

 

AVR не пользую, но практически во всех семействах микроконтроллеров есть внешняя синхронизация таймеров, а во многих и УСАРТов. Может самое тривиальное решение - подать в разные ноги контроллера разные частоты и не рисовать никакой схемы?

Поделиться сообщением


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

To SM. Туго Verilog понимаю, VHDL пользую. "assign out = mux_reg ? neg_reg : pos_reg;" - если я понял - комбинационная функция, шилки не будет?

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

Поделиться сообщением


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

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

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

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

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

×
×
  • Создать...