реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Поделить частоту на 2.5
paskal
сообщение Dec 12 2009, 17:10
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 29-10-06
Из: Тула
Пользователь №: 21 769



Этот клок мне нужен для тактирования ATMEGA. Думаю дрожание фронта на несколько наносекунд не должно мешать.
Полуинтуитивно накатал одну схему. Входная частота подается на clk, выходная деленная на 2.5 снимается с out. Выходит 2 корпуса + инвертор:



Но при моделровании в максплюсе наблюдаются иголки 5 нс. А если я ее делаю на рассыпной логике, иголок не будет?
Go to the top of the page
 
+Quote Post
Herz
сообщение Dec 12 2009, 17:37
Сообщение #17


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Будут.
[attachment=39136:Clipboard02.jpg] [attachment=39137:Clipboard03.jpg]

Скажите уже правду rolleyes.gif - зачем всё это нужно? Зачем МК именно эта определённая частота тактирования и почему её нужно получать непременно из 30МГц?
Go to the top of the page
 
+Quote Post
Vishv
сообщение Dec 12 2009, 17:50
Сообщение #18


Местный
***

Группа: Участник
Сообщений: 310
Регистрация: 11-07-09
Из: Екатеринбург
Пользователь №: 51 154



Если сделаете на "рассыпухе" может быть и не будет (особенно если плату сделаете откровенно плохо!).
Если позволите bb-offtopic.gif замечание "старого ворчуна" - приложенная схема абсолютно "нечитабельная" - соответственно при запуске в производство (я конечно догадываюсь, что это Вы делаете для себя, однако к четкости документации лучше привыкать "с младых ногтей") получите массу лестных замечаний.....увы!
Go to the top of the page
 
+Quote Post
SM
сообщение Dec 12 2009, 18:47
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Вот так это делается, без всяких там 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)
Go to the top of the page
 
+Quote Post
paskal
сообщение Dec 12 2009, 20:16
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 29-10-06
Из: Тула
Пользователь №: 21 769



Цитата(Herz @ Dec 12 2009, 20:37) *
Будут.

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

Если уж говорить правду, то не 30 МГц, а 29.97 smile.gif
Я делаю пульт для проверки электронной схемы лазерного дальномера. У пульта 2 основных функции: выдача тестовых импульсов с заданным временным интервалом, и обмен по UARTу на скорости 115.200. В пульте есть готовый генератор 29.97 МГц. Хочу обойтись только контроллером (авр), без ПЛИС.
Так вот. Если затактовать авр частотой 29.97/2.5, он сможет выдавать импульсы с таким временным интервалом, что будут кратны 25 метрам.
Что касается УАРТа, то если эту же частоту делить на 8 (это аппаратный делитель), потом программным делителем на 13, то получится с огромной точностью 115.2. Таким образом я обойдусь только контроллером и некоторой обвязкой из логики.

А теперь вы скажите правду. Про иголки вы говорите исходя из опыта, или только из учебника?
Вопрос этот не праздный, потому что я было дело пытался получить короткие пички задерживая фронты вентилями и сталкивая затем через 2И-НЕ. Если по учебнику, так можно подать на один вход фронт без задержки, на другой через инвертор. Инвертор чуть задержит фронт, на выходе 2И-НЕ будет короткий всплеск. А делал я это на логике 74АС. Так фиг вам. Даже 3 инвертора на задержку не дают импульса, хотя на осциллографе видно что задержка имеется.
Учебник что вы показали старый. ТТЛ там понимается 155, 555 серии, а КМОП - 176, в лучшем случае 561. А современная скоростная логика возможно и по другому себя поведет.


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

Схема как раз идет в производство smile.gif
А то что она так выглядит - это потому что рисовал в максплюсе для логического моделирования. А "боевой" вариант я рисую на работе уже в соответствии с гостами.
Go to the top of the page
 
+Quote Post
SM
сообщение Dec 12 2009, 20:39
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Про иголки - это Вы сами начертите на бумаге диаграммы всех сигналов в правильном масштабе времени, беря все задержки из документации на используемые микросхемы, и смотрите - если два фронта на входе логики слишком рядом, то в этот момент будет потенциальная иголка. Она может быть, а может не быть, все зависит от экземпляра компонента, напряжения питания и температуры.
Go to the top of the page
 
+Quote Post
sazh
сообщение Dec 12 2009, 20:46
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(paskal @ Dec 12 2009, 20:10) *
Но при моделровании в максплюсе наблюдаются иголки 5 нс. А если я ее делаю на рассыпной логике, иголок не будет?


Схемная реализация порочна. Потому что реакция регистра на фронт клока замешана с самим клоком.
Go to the top of the page
 
+Quote Post
Herz
сообщение Dec 12 2009, 21:01
Сообщение #23


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Цитата(paskal @ Dec 12 2009, 22:16) *
Так вот. Если затактовать авр частотой 29.97/2.5, он сможет выдавать импульсы с таким временным интервалом, что будут кратны 25 метрам.
Что касается УАРТа, то если эту же частоту делить на 8 (это аппаратный делитель), потом программным делителем на 13, то получится с огромной точностью 115.2. Таким образом я обойдусь только контроллером и некоторой обвязкой из логики.

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


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

Сообщение отредактировал Herz - Dec 12 2009, 21:04
Go to the top of the page
 
+Quote Post
paskal
сообщение Dec 13 2009, 11:51
Сообщение #24


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 29-10-06
Из: Тула
Пользователь №: 21 769



Цитата(Herz @ Dec 13 2009, 00:01) *
Понятно. Только у меня серьёзное подозрение, что требуемый временной интервал Вы сможете сформировать контроллером и при другой тактовой. Например, половинной от 29.97 rolleyes.gif Геморрою же будет не в пример меньше. Об УАРТе я уж и не говорю...

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

Цитата(Herz @ Dec 13 2009, 00:01) *
Это коварная вещь: их можно не видеть осциллографом, они могут даже проявляться не всегда, так что головная боль обеспечена.

Но раз они такие маленькие, может пропустить их через какой нибудь медленный вентиль, 74HC, например и дальше они не пройдут?
Go to the top of the page
 
+Quote Post
SM
сообщение Dec 13 2009, 12:04
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(paskal @ Dec 13 2009, 14:51) *
Но раз они такие маленькие, может пропустить их через какой нибудь медленный вентиль, 74HC, например и дальше они не пройдут?


А чем не устраивает мое описание схемы? Там гарантировано не будет иголок. Ну может на один корпус побольше, если на рассыпухе собирать.
Go to the top of the page
 
+Quote Post
Herz
сообщение Dec 13 2009, 19:37
Сообщение #26


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



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

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

Можно, конечно, и фильтрами их задавить, но это борьба со следствиями, а не с причинами. Крайний случай, одним словом.
Go to the top of the page
 
+Quote Post
st232bd
сообщение Dec 14 2009, 09:30
Сообщение #27


Частый гость
**

Группа: Свой
Сообщений: 170
Регистрация: 12-02-08
Из: г.Минск (РБ)
Пользователь №: 34 969



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



AVR не пользую, но практически во всех семействах микроконтроллеров есть внешняя синхронизация таймеров, а во многих и УСАРТов. Может самое тривиальное решение - подать в разные ноги контроллера разные частоты и не рисовать никакой схемы?
Go to the top of the page
 
+Quote Post
SM
сообщение Dec 15 2009, 13:23
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(st232bd @ Dec 14 2009, 12:30) *
To SM. Туго Verilog понимаю, VHDL пользую. "assign out = mux_reg ? neg_reg : pos_reg;" - если я понял - комбинационная функция, шилки не будет?

Не будет. Момент переключения находится в пол-такте от любого ближайшего фронта переключаемых сигналов, при условии, что оба переключаемых сигнала в нуле.
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 13:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01479 секунд с 7
ELECTRONIX ©2004-2016