У нас уже было несколько проектов для платы Марсоход, когда мы подключали ее к ПК. Это были интерфейсы 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, без бита четности и без аппаратного управления.

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

 

 

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