МАРСОХОД

Open Source Hardware Project

Проекты Altera Quartus II для платы Марсоход

Последовательный порт

У нас уже было несколько проектов для платы Марсоход, когда мы подключали ее к ПК. Это были интерфейсы USB, PS/2, Ethernet. Теперь я подумал: "А почему бы не подключить нашу плату по последовательному порту RS232?".

Последовательный интерфейс, конечно, довольно старый и довольно примитивный, но, как ни странно, не собирается уходить со сцены. Даже когда настольные ПК и ноутбуки стали выпускаться без разъемов последовательных портов тут же появились в продаже шнуры USB-to-Serial. Они по прежнему позволяют подключать устройства по последовательному интерфейсу.

В чем же такая привлекательность этого интерфейса? Главные преимущества - это простота реализации в аппаратуре и простота программирования. Даже повсеместный USB несомненно проигрывает по этим критериям.

Итак, мы решили подключить плату Марсоход к персональному компьютеру по последовательному интерфейсу. Что нам нужно знать для этого?

1. Сигналы последовательного порта.
Давайте рассмотрим сигналы 9-ти контактного разъема последовательного порта, того, что на материнской плате или в шнуре USB-to-Serial.

RS232, Разъем последовательного порта компьютера
Как видите на этой картинке - сигналов довольно много. Когда-то последовательный интерфейс использовался для подключения модемов - устройств передачи данных через телефонные линии. Поэтому тут есть например сигнал RI, Ring Indicator - сигнал о входящем телефонном звонке. Другие сигналы, такие как RTS/CTS позволяли управлять потоками данных, разрешать или запрещать передачу.

Для реализации простейшей передачи нам будут нужны всего 3 провода: Земля, TX (передача от ПК) и RX (ПК принимает данные по нему).

2. Преобразование уровней.
К сожалению и тут не обходится без ложки дегтя. Уровни сигналов в последовательном интерфейсе RS232 это +12В и -12В относительно Земли. Причем +12В это логический ноль, а -12В это логическая единица. Понятно, что подключать такие сигналы напрямую к ПЛИС платы Марсоход "не желательно". Существует довольно много схем преобразования уровней, но пожалуй самые простые те, которые используют специализированные микросхемы. Их преимущество в том, что они требуют только одного напряжения питания +5В.

Я использовал первую микросхему, что попалась мне по руку HIN202. описание на эту микросхему можно взять здесь

HIN202 ( 640086 bytes )
.

Это не единственная микросхема такого рода. Есть еще MAX232 (https://ru.wikipedia.org/wiki/Max232) или SP230 и многие другие. Микросхемы эти в общем похожи друг на друга и зачастую имеют одинаковое расположение выводов и похожие схемы включения:

Схема включения преобразователя уровней HIN202

3. Изготовление преобразователя уровней для платы Марсоход.
Я изготовил преобразователь уровня, который подключается к плате через ее разъем Right motor. Схема преобразователя уровней вот такая:

Схема преобразователя уровней RS232 для платы Марсоход
Я использовал SMD конденсаторы 1Мф - они нарисованы синими прямоугольничками.

А вот несколько фото моей платы:

Преобразователь уровней для платы Марсоход (вид сверху) Преобразователь уровней для платы Марсоход (вид снизу)

Вот так подключаем к плате:

Преобразователь уровней для платы Марсоход

4. Протокол передачи данных.
При последовательной передаче по RS232 данные передаются очень просто. В исходном состоянии линия находится в логической единице. При передаче байта сперва идет старт бит - ноль, затем 8 бит данных (младшими битами вперед), затем бит четности и стоп бит - это единица.

Контроллер последовательного приемопередатчика можно программировать так, что бит четности не передается. Тогда еще проще: старт бит, 8 бит данных и стоп бит.

Протокол последовательной передачи данных

После этой последовательности можно посылать следующий байт. Скорость передачи может программироваться. Стандартные значения скорости передачи, например 9600, 19200, 38400 или 115200 бит в секунду.

5. Проект для платы Марсоход.

Теперь, когда преобразователь уровней сигналов у нас уже есть, нужно заняться самим проектом для ПЛИС. Я написал простейший приемопередатчик ня языке Verilog. Его исходный текст вот здесь. Прием и передача осуществляется на скорости 38400 бит/секунду без бита четности.

Ну а весь проект для платы Марсоход можно взять здесь:

Этот проект делает следующее:

  • принимает байты и показывает последний принятый байт на светодиодах платы;
  • при нажатии на кнопочки платы посылает код 0x30+N, где N четырехбитный код кнопочек платы.

6. Испытание.

Подключаю плату Марсоход через преобразователь уровней и шнур USB-to_Serial.

Подключение платы Марсоход по последовательному порту к ПК

В диспетчере устройств ноутбука смотрим номер порта, назначенный моему шнуру USB-to-Serial. Вижу, что у меня COM6.

Окно "Управление компьютером"

Подаем питание на плату Марсоход:

Подключение платы Марсоход по последовательному порту к ПК

Запускаем программу HyperTerminal (или любую другую). Настраиваем ее на скорость 38400, без бита четности и без аппаратного управления.

Нажимая кнопки на плате видим как появляются цифры в окне терминала. Когда печатаем в окне терминала - загораются светодиоды платы.

 

 

Комментарии  

+1 #30 nckm 15.03.2016 08:09
Цитирую Всеслав:
Добрый день! Подскажите пожалуйста, а как выход HIN202 (там 5 вольт) подключить к плис? Разве можно напрямую? И как можно подключить?

Там на фото плис питается от аккумулятора. Нет там никаких 5 вольт.
+1 #29 Всеслав 11.03.2016 13:35
Добрый день! Подскажите пожалуйста, а как выход HIN202 (там 5 вольт) подключить к плис? Разве можно напрямую? И как можно подключить?
+1 #28 Руслан Садыков 26.02.2015 19:38
По фото видно - распаял правильно, но по схеме всё перепутал. И подтяжку на 15 не показал. Откорректируйте "чертёж" схемы. Код еще не смотрел.
+1 #27 vitalikorl 24.02.2014 13:33
По даташиту преобразователь в преобразователи напряжения кондяи ставятся 0.1 мкФ (микроФарат) у вас в описании стоит 1 Мф (МегаФарат) - это опечатка?
+2 #26 melman 02.12.2013 09:43
У вас на картинке https://marsohod.org/images/stories/prj/serial/schema.png пере[censored] Rx/Tx к альтере с Rx/Tx к компу.
+1 #25 Faton_11 25.09.2013 19:32
Спасибо!
+1 #24 nckm 23.09.2013 17:02
Цитирую Faton_11:
Здравствуйте! Ваш проект содержит два модуля - два отдельных, никак между собой не связанных файла. Тогда для чего нужны проекты верхнего уровня? Только для удобства компиляции?

в проекте модуль верхнего уровня - это схема max2.bdf. На ней используются два верилог модуля key_poll и serial
+1 #23 Faton_11 22.09.2013 19:23
Здравствуйте! Ваш проект содержит два модуля - два отдельных, никак между собой не связанных файла. Тогда для чего нужны проекты верхнего уровня? Только для удобства компиляции?
+1 #22 nckma 12.09.2012 12:29
Цитирую AlexSkv:
Спасибо за Ваш ответ! Всё равно осталось не понимание.
Зачем в формировании сигнала send используется выражение prev_key (не равно) keyn, если чуть выше в блоке if при проверке шины на "свободно/занято" и так выполняется присваивание?

verilog не похож на другие языки тем, что в нем возможно описание одновременных событий. Почитайте про неблокирующее присвоение https://marsohod.org/11-blog/85-veriloglesson5 Строки кода могут выполняться не последовательно а как бы параллельно
+1 #21 AlexSkv 11.09.2012 14:00
Спасибо за Ваш ответ! Всё равно осталось не понимание.
Зачем в формировании сигнала send используется выражение prev_key (не равно) keyn, если чуть выше в блоке if при проверке шины на "свободно/занят о" и так выполняется присваивание?
+1 #20 nckm 09.09.2012 09:44
Цитирую AlexSkv:
Объясните, как формируется сигнал send в модуле key_poll. При любой нажатой кнопке и свободной линии получается логический нуль 0, хотя по смыслу должна быть 1 - сигнал отправки ?

сигнал отправки send это не нажатая кнопка, а момент, когда состояния кнопок поменялись.
По каждому клоку keyn записывается в prev_key вот так: prev_key
+1 #19 AlexSkv 08.09.2012 16:49
Объясните, как формируется сигнал send в модуле key_poll. При любой нажатой кнопке и свободной линии получается логический нуль 0, хотя по смыслу должна быть 1 - сигнал отправки ?
+1 #18 AlexSkv 07.09.2012 17:42
Извините за мусорные сообщения, не получается полная отправка сообщения!
+1 #17 AlexSkv 07.09.2012 17:40
В модуле key_poll есть строка:
send
+1 #16 AlexSкv 07.09.2012 11:49
Спасибо за ответы! Разобрался во всём, кроме этой строчки в модуле key_poll:
send
+1 #15 nckm 07.09.2012 08:35
Цитирую AlexSкv:
Спасибо за очень оперативный ответ! Спрошу ещё)) Обязательно ли, чтобы маленькая платка с DB-9 имела общую землю с платой марсохода? То есть могу ли я запитать микросхему HIN отдельно, а на марсоход будет уходить только два проводка RX и ТX ? Спасибо!

нет нужен еще третий провод - земля.
+1 #14 AlexSкv 07.09.2012 08:32
send
+1 #13 AlexSкv 07.09.2012 08:28
Фрагмент из модуля rte_poll
always @(posedge clk5 or posedge reset)
if(reset)
prev_key
+1 #12 AlexSкv 07.09.2012 05:48
Спасибо за очень оперативный ответ! Спрошу ещё)) Обязательно ли, чтобы маленькая платка с DB-9 имела общую землю с платой марсохода? То есть могу ли я запитать микросхему HIN отдельно, а на марсоход будет уходить только два проводка RX и ТX ? Спасибо!
+1 #11 nckma 06.09.2012 16:07
Цитирую AlexSкv:
Добрый День! Подскажите, пожалуйста, для чего нужны выходы, посаженные на землю f2[9..0], f3[9..0], f4[9..0], f5[9..0] в этом проекте квартуса и почему они 10-ти разрядные. Зачем необходим f0[9..0] из которого только f0[0] идет на вход rx. Может, вопросы глупые, но я только приступил к работе с Вашей платой.

Выходы посаженные на землю не нужны.
Просто проект переделывался из другого ("почти пустого проекта"), где эти выходы были. Вот их и посадили на землю. Можете их удалить.
Те выходы которые объединены по 10 - это чтобы сделать один мощный сигнал - к нему в других проектах моторы подключались. Они, эти выходы и на плате объединены для этих же целей.
+1 #10 AlexSкv 06.09.2012 14:45
Добрый День! Подскажите, пожалуйста, для чего нужны выходы, посаженные на землю f2[9..0], f3[9..0], f4[9..0], f5[9..0] в этом проекте квартуса и почему они 10-ти разрядные. Зачем необходим f0[9..0] из которого только f0[0] идет на вход rx. Может, вопросы глупые, но я только приступил к работе с Вашей платой.
+1 #9 nckkm 02.03.2012 06:44
Цитирую Chooze:
Поясните пожалуйста почему:
5000000/38400 = 130 ,а parameter RCONST = 128;
В таком варианте - на прием модуль не работал. Исправил переменную на 130 и все заработало.
???

разные партии ПЛИС к сожалению имеют разную частоту встроенного генератора, от этого и проблема.
+1 #8 Chooze 02.03.2012 06:00
Поясните пожалуйста почему:
5000000/38400 = 130 ,а parameter RCONST = 128;
В таком варианте - на прием модуль не работал. Исправил переменную на 130 и все заработало.
???
+1 #7 Techno Viking 28.02.2012 06:30
Возможно ли при помощи подобных микросхем для последовательно го порта реализовать каким-нибуь образом трехуровневый биполярный код?
+1 #6 nckkm 26.02.2012 17:12
Цитирую Mikk:
а такой проект можно перенести на epm3128 ?

скорее всего можно
+1 #5 Mikk 26.02.2012 14:21
а такой проект можно перенести на epm3128 ?
+1 #4 pixar 13.01.2012 05:32
Цитирую Ю р и й:
простейший приемопередатчик ня языке Verilog. Его исходный текст вот здесь.
Прескалеру бодрейта не хватает разрядности для смены тактовой . Добавьте коммент :)
+2 #3 Ю р и й 09.06.2011 18:32
Цитирую Вячеслав:
Скажите пожалуйста.. какие используются SMD конденсаторы полярные или нет?

Неполярные керамические на 1мф.
+2 #2 Вячеслав 09.06.2011 09:56
Скажите пожалуйста.. какие используются SMD конденсаторы полярные или нет?
+7 #1 DigolosSSD 18.10.2010 03:31
I liked a resource. Already many resources look well at last that have learned to do beautifully. Our information century has forced people to do the affairs and instantly to solve any questions through a global network the Internet.

Добавить комментарий


Защитный код
Обновить


GitHub YouTube Twitter
Вы здесь: Начало Проекты Проект Марсоход Последовательный порт