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

Насчет мажоритара - если частота выборки значения линии в 16 раз выше бодовой, то для мажоритара выбирают 3 отчета примерно посередине битового интервала?

Собственно я об этом и говорил. Именно так. Три и мажоритирование - для повышения помехоустойчивости. Я когда-то делал в ПЛИС именно со стартом по отрицательному фронту, поэтому так и написал. Хотя с точки зрения той же помехоустойчивости возможно искать несколько нулей подряд и более правильно. Просто меня в свое время результат устроил и я не стал заморачиваться. :)

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


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

Alexandr

А вот если адаптировать систему под любой интерфейс, протокол, даже тот которого не было на момент создания, то лучше всё же МК (ISP, EEPROM, ADC, DAC, Flash (как FSM - равный памяти программ)) заложить (например, для токового интерфейса).

Вообще, рекомендовать какое-то решение сложно. Могу предложить несколько на выбор (драйвер включаются во все решения):

1.PSOC (например, на основе PicoBlaze + UART ). Достоинство – всё в одном флаконе. Недостатки – надо обучиться работать с PicoBlaze.

2.Готовый UART Exar 16С554 + MK (типа PIC16,Mega16) для его управления. Достоинство – всё уже готово. Недостатки – жёсткое решение, место на плате, дорого.

3.Тоже Exar + FPGA для управления. Достоинства – простота реализации. Недостатки – избыточность.

4.Полностью софтовые UART в МК. Достоинство – всё в одном флаконе, очень дёшево. Недостатки – сложность реализации ПО, пониженная помехоустойчивость.

5. FPGA (XC3S400) для реализации UART + MK реализации высокоуровневых протокол обмена данными. Достоинства – гибкость + мощность. Недостатки – больше место на плате.

IMHO, всё зависит от стоимости, сроков и желания обучаться :glare:

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


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

Если Вам необходим микроконтроллер с 3мя UARTами, то могу посоветовать Cygnal C8051F130, у него 2 аппаратных + 1(или несколько) можно забабахать программных, я такое делал. Но всеже советую сделать на FPGA, это насамом деле несложно. Посмотрите мою реализацию, это простенький UART с фиксированной скоростью и режимом (опять же ненапряжно переделывается под настраиваемый). Использовал его в 2х поектах + FIFO на прием и передачу.

UARTv1.rar

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


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

Да, частоту выборки можно брать любую, но большую бодовой скорости хотя бы раз в 8. Насчет того что "фронт частоты выборки совпадет с перепадом на линии" я вообще не понял как это может быть. Поясню, идея работы таже, по старт-биту запускаем генератор с частотой в N раз большей бодовой скорости и выборку производим на N/2-1, N/2, N/2+1 импульсах генератора. С метастабильностью полный порядок, ибо генератор получаем делением из частоты на которой работает ПЛИС.
Про "фронт частоты выборки совпадет с перепадом на линии" это Я погорячился. Просто сначала в голову залезла тупая идея - хранить все отсчеты сигнала в линии, записываемые с частотой N*бодовая. В таком случае возможно, что очередной отчет попадет на момент переключения в линии. Отсюда и метастабильность. Но теперь, переварив все сообщения в купе с бутылочкой пива, исправил свои заблуждения.

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


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

Да, частоту выборки можно брать любую, но большую бодовой скорости хотя бы раз в 8. Насчет того что "фронт частоты выборки совпадет с перепадом на линии" я вообще не понял как это может быть. Поясню, идея работы таже, по старт-биту запускаем генератор с частотой в N раз большей бодовой скорости и выборку производим на N/2-1, N/2, N/2+1 импульсах генератора. С метастабильностью полный порядок, ибо генератор получаем делением из частоты на которой работает ПЛИС.

 

Для чего брать частоту больше раз в 8, чем бодовая??? Я же писал, что нужна частота только в 3!!! раза больше, чем бодовая, один МЖФ, ну и второй МЖФ для фильтрации входа.

 

Могу привести код работающего проекта на Verilog’e (хотя он только для скорости 115.200, без проверки паритета и с одним стоповым)

 

Как это происходит (повторяюсь и уточняю).

 

При входе сигнала RX (UART’a) постоянно работающий входной МЖФ– для фильтрации коротких пичков на линии. Принцип работы МЖФ - из трех последовательных отсчетов он выбирает 2 совпадающих.

 

А дальше счетчик работающий от основной частоты 40 МГц считает до ‘d114 и сбрасывается – получается частота 3*бодовая (крутится постоянно без сброса по стартовому биту!)

 

А теперь, как счетчик == 114 я на один такт разрешаю продвинуть данные во втором МЖФ.

Мне без разнице, в какой части «бодового» бита, на МЖФ защелкнутся три значения (может даже одно значение попасть из другого «бодового» бита, а может попасть на перепад(в обычном RS-232 он пологий получается) – для такого подхода это «фиолетово») -> а второй счетчик считает, когда (первый счетчик==114) уже 3 раз и на выходе второго МЖФ получаю значение «бодового» бита, которой и вдвигаю.

 

Когда автомат, находясь в «idle», получил значение «бодового» бита «0» -> это стартовый -> задвигаю в регистр [9:0] (в «idle» инициализированный всеми «1») -> как стартовый «0» добрался до конца регистра [9:0] -> всё посылка принята!

 

И не нужна НИКАКАЯ синхронизация при стартовом бите, и внутри бита – просто по двум из трех значений определяется значение бита.

 

Дописал - посмотрел – слов много, а объяснил ли?

В общем, если что не понятно на буднях смогу привести код (это более универсальный язык =8) )

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


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

To NIOS

Хороший подход. Можно пойти еще дальше. Отказаться от стопового бита. Ведь Вам он не нужен.

Экономия на лицо.

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


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

To NIOS

Хороший подход. Можно пойти еще дальше. Отказаться от стопового бита. Ведь Вам он не нужен.

Экономия на лицо.

 

Рад, что поняли мой проект :)

 

А хорошее замечание! Только кто придумывал стандарт в то время, это не предусмотрели.

Видать тогда частоты работы были значительно меньше, поэтому нужно было переходное состояние для "отпускания" линии(стоповый бит) + определение, что дальше пошел новый стартовый (ИМХО).

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


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

При входе сигнала RX (UART’a) постоянно работающий входной МЖФ– для фильтрации коротких пичков на линии. Принцип работы МЖФ - из трех последовательных отсчетов он выбирает 2 совпадающих.

 

2 совпадающих должны быть рядом?

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


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

При входе сигнала RX (UART’a) постоянно работающий входной МЖФ– для фильтрации коротких пичков на линии. Принцип работы МЖФ - из трех последовательных отсчетов он выбирает 2 совпадающих.

 

2 совпадающих должны быть рядом?

 

Нет. Просто должно быть МИНИМУМ два одинаковых из трех.

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


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

2 совпадающих должны быть рядом?

 

выходное значение учитывает предысторию из трех последовательных входных.

 

Если отвечать в лоб на Ваш вопрос, то они могут быть как подряд (1,2 и 2,3), так и через один(1,3) :)

 

Привожу свой код МЖФ на Verilog'e

wire ena;
reg [2:0] dd;
always @ (posedge rst or clk)
  if (rst) 
      dd[2:0] <= #T 3'b111;  
  else if (ena)
           dd[2:0] <= #T {dd[1:0], in};

reg out;
always @ (posedge rst or clk)
  if (i_rst)
      out <= #T 1'b1; 
  else if (ena)
           out <= #T (dd[0]&dd[1])|(dd[0]&dd[2])|(dd[1]&dd[2]);

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


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

2 совпадающих должны быть рядом?

 

выходное значение учитывает предысторию из трех последовательных входных.

 

Если отвечать в лоб на Ваш вопрос, то они могут быть как подряд (1,2 и 2,3), так и через один(1,3) :)

 

Привожу свой код МЖФ на Verilog'e

wire ena;
reg [2:0] dd;
always @ (posedge rst or clk)
  if (rst) 
      dd[2:0] <= #T 3'b111;  
  else if (ena)
           dd[2:0] <= #T {dd[1:0], in};

reg out;
always @ (posedge rst or clk)
  if (i_rst)
      out <= #T 1'b1; 
  else if (ena)
           out <= #T (dd[0]&dd[1])|(dd[0]&dd[2])|(dd[1]&dd[2]);

 

Все понятно, непонятно зачем ena сигнал.

Пусть всегда щелкает.

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


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

Все понятно, непонятно зачем ena сигнал.

Пусть всегда щелкает.

 

Не хотел удалять :) Привел универсальный модуль.

 

По существу: во входном МЖФ можно без ena (или вставить как модул, и на него подать VCC), а вот во втором МЖФ он уже обязательно нужен (за период "бодовой" частоты должно быть только 3 входных воздействия)

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


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

Никогда не писал кода для RS, но когда потребовалось, сделал. Если не считать времени на отладку, то задача по моему разумению вообще тривиальная. Преобразователь уровня и... все остальное в FPGA. Вкалывает за милую душу. Делаю четырехкратную проверку бита, но думаю что можно и меньше, наверное это может обезопасить при высоких скоростях передачи. А так проблем не было!

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


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

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

 

Внешний сигнал асинхронен, так что проблемы могут быть

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


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

Вариант 2. Самому делать на FPGA. В этом случае Я вижу несколько проблем:

- как мне осуществить "запуск" генератора приемника при обнаружении старт-бита?

- т.к. мне требуется реализовать 3 передатчика и 3 приемника RS-232, и скорее всего эти каналы будут работать независимо друг от друга, то вроде как получается, чересчур большие затраты по количеству PLL-ресурсов. Как бы не вышло, что придется ставить несколько ПЛИС...

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

Таким образом промимо ядра RS-232 вам требуется ещё напмсить ядро контроллера прерываний.

RS-232 у меня занял 3 экрана verilog- кода, приоритетный контроллер прерываний - тоже 3 экрана.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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