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

 
 
6 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> RS-232 + FPGA
prototype
сообщение May 20 2006, 04:44
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 513
Регистрация: 1-02-05
Из: Харьков, СССР
Пользователь №: 2 334



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

Собственно я об этом и говорил. Именно так. Три и мажоритирование - для повышения помехоустойчивости. Я когда-то делал в ПЛИС именно со стартом по отрицательному фронту, поэтому так и написал. Хотя с точки зрения той же помехоустойчивости возможно искать несколько нулей подряд и более правильно. Просто меня в свое время результат устроил и я не стал заморачиваться. smile.gif
Go to the top of the page
 
+Quote Post
ASN
сообщение May 20 2006, 04:56
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 15-07-04
Из: g.Penza
Пользователь №: 326



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.gif
Go to the top of the page
 
+Quote Post
DeadMoroz
сообщение May 20 2006, 08:56
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 3-02-05
Пользователь №: 2 391



Если Вам необходим микроконтроллер с 3мя UARTами, то могу посоветовать Cygnal C8051F130, у него 2 аппаратных + 1(или несколько) можно забабахать программных, я такое делал. Но всеже советую сделать на FPGA, это насамом деле несложно. Посмотрите мою реализацию, это простенький UART с фиксированной скоростью и режимом (опять же ненапряжно переделывается под настраиваемый). Использовал его в 2х поектах + FIFO на прием и передачу.
Прикрепленные файлы
Прикрепленный файл  UARTv1.rar ( 1.73 килобайт ) Кол-во скачиваний: 255
 
Go to the top of the page
 
+Quote Post
maksya
сообщение May 20 2006, 10:07
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-08-04
Из: Ленинград
Пользователь №: 562



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


--------------------
Лень - это не врожденное чувство русского человека, а средство борьбы с неуемной, но бестолковой энергией начальника.
Go to the top of the page
 
+Quote Post
Kopart
сообщение May 20 2006, 19:49
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 1-03-05
Из: Spb
Пользователь №: 2 972



Цитата(Alexandr @ May 20 2006, 00:01) *
Да, частоту выборки можно брать любую, но большую бодовой скорости хотя бы раз в 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) )


--------------------
Насколько проще была бы жизнь, если бы она была в исходниках
Go to the top of the page
 
+Quote Post
sazh
сообщение May 21 2006, 10:56
Сообщение #21


Гуру
******

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



To NIOS
Хороший подход. Можно пойти еще дальше. Отказаться от стопового бита. Ведь Вам он не нужен.
Экономия на лицо.
Go to the top of the page
 
+Quote Post
Kopart
сообщение May 22 2006, 10:26
Сообщение #22


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 1-03-05
Из: Spb
Пользователь №: 2 972



Цитата(sazh @ May 21 2006, 14:56) *
To NIOS
Хороший подход. Можно пойти еще дальше. Отказаться от стопового бита. Ведь Вам он не нужен.
Экономия на лицо.


Рад, что поняли мой проект smile.gif

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


--------------------
Насколько проще была бы жизнь, если бы она была в исходниках
Go to the top of the page
 
+Quote Post
Motorhead
сообщение May 22 2006, 10:59
Сообщение #23


Участник
*

Группа: Новичок
Сообщений: 22
Регистрация: 24-04-06
Пользователь №: 16 436



[quote name='NiOS' date='May 20 2006, 23:49' post='115298']
[quote name='Alexandr' post='115057' date='May 20 2006, 00:01']
При входе сигнала RX (UART’a) постоянно работающий входной МЖФ– для фильтрации коротких пичков на линии. Принцип работы МЖФ - из трех последовательных отсчетов он выбирает 2 совпадающих.
[/quote]

2 совпадающих должны быть рядом?
Go to the top of the page
 
+Quote Post
Gorby
сообщение May 22 2006, 12:20
Сообщение #24


Местный
***

Группа: Свой
Сообщений: 449
Регистрация: 28-10-04
Из: Украина
Пользователь №: 1 002



[quote name='Motorhead' date='May 22 2006, 14:59' post='115735']
[quote name='NiOS' date='May 20 2006, 23:49' post='115298']
[quote name='Alexandr' post='115057' date='May 20 2006, 00:01']
При входе сигнала RX (UART’a) постоянно работающий входной МЖФ– для фильтрации коротких пичков на линии. Принцип работы МЖФ - из трех последовательных отсчетов он выбирает 2 совпадающих.
[/quote]

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

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


--------------------
Умею молчать на 37 языках...
Go to the top of the page
 
+Quote Post
Kopart
сообщение May 22 2006, 12:22
Сообщение #25


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 1-03-05
Из: Spb
Пользователь №: 2 972



Цитата(Motorhead @ May 22 2006, 14:59) *
2 совпадающих должны быть рядом?


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

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

Привожу свой код МЖФ на 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]);


--------------------
Насколько проще была бы жизнь, если бы она была в исходниках
Go to the top of the page
 
+Quote Post
Motorhead
сообщение May 22 2006, 12:43
Сообщение #26


Участник
*

Группа: Новичок
Сообщений: 22
Регистрация: 24-04-06
Пользователь №: 16 436



Цитата(NiOS @ May 22 2006, 16:22) *
Цитата(Motorhead @ May 22 2006, 14:59) *

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


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

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

Привожу свой код МЖФ на 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 сигнал.
Пусть всегда щелкает.
Go to the top of the page
 
+Quote Post
Kopart
сообщение May 22 2006, 12:52
Сообщение #27


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 1-03-05
Из: Spb
Пользователь №: 2 972



Цитата(Motorhead @ May 22 2006, 16:43) *
Все понятно, непонятно зачем ena сигнал.
Пусть всегда щелкает.


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

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


--------------------
Насколько проще была бы жизнь, если бы она была в исходниках
Go to the top of the page
 
+Quote Post
Vital_100
сообщение May 27 2006, 04:34
Сообщение #28





Группа: Новичок
Сообщений: 12
Регистрация: 23-05-06
Пользователь №: 17 367



Никогда не писал кода для RS, но когда потребовалось, сделал. Если не считать времени на отладку, то задача по моему разумению вообще тривиальная. Преобразователь уровня и... все остальное в FPGA. Вкалывает за милую душу. Делаю четырехкратную проверку бита, но думаю что можно и меньше, наверное это может обезопасить при высоких скоростях передачи. А так проблем не было!
Go to the top of the page
 
+Quote Post
afsh
сообщение May 30 2006, 18:00
Сообщение #29


Участник
*

Группа: Новичок
Сообщений: 21
Регистрация: 30-05-06
Пользователь №: 17 574



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

Внешний сигнал асинхронен, так что проблемы могут быть
Go to the top of the page
 
+Quote Post
grigorybold
сообщение Jul 3 2006, 10:58
Сообщение #30


Участник
*

Группа: Свой
Сообщений: 32
Регистрация: 8-01-05
Из: г. Воронеж
Пользователь №: 1 845



Цитата
Вариант 2. Самому делать на FPGA. В этом случае Я вижу несколько проблем:
- как мне осуществить "запуск" генератора приемника при обнаружении старт-бита?
- т.к. мне требуется реализовать 3 передатчика и 3 приемника RS-232, и скорее всего эти каналы будут работать независимо друг от друга, то вроде как получается, чересчур большие затраты по количеству PLL-ресурсов. Как бы не вышло, что придется ставить несколько ПЛИС...

Можно сделать, что генератор скорости бод будет работать всегда. При приходе фронта сигнала (т.е. начала старт- импульса) запускается конечный автомат приёмника. После приёма формируется импульс, фиксирующийся в контроллере прерываний. После обработки данного запроса микроконтроллер сбрасывает этот бит в контроллере.
Таким образом промимо ядра RS-232 вам требуется ещё напмсить ядро контроллера прерываний.
RS-232 у меня занял 3 экрана verilog- кода, приоритетный контроллер прерываний - тоже 3 экрана.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th June 2025 - 09:57
Рейтинг@Mail.ru


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