У нас уже было несколько проектов для платы Марсоход, когда мы подключали ее к ПК. Это были интерфейсы USB, PS/2, Ethernet. Теперь я подумал: "А почему бы не подключить нашу плату по последовательному порту RS232?".
Последовательный интерфейс, конечно, довольно старый и довольно примитивный, но, как ни странно, не собирается уходить со сцены. Даже когда настольные ПК и ноутбуки стали выпускаться без разъемов последовательных портов тут же появились в продаже шнуры USB-to-Serial. Они по прежнему позволяют подключать устройства по последовательному интерфейсу.
В чем же такая привлекательность этого интерфейса? Главные преимущества - это простота реализации в аппаратуре и простота программирования. Даже повсеместный USB несомненно проигрывает по этим критериям.
Итак, мы решили подключить плату Марсоход к персональному компьютеру по последовательному интерфейсу. Что нам нужно знать для этого?
1. Сигналы последовательного порта.
Давайте рассмотрим сигналы 9-ти контактного разъема последовательного порта, того, что на материнской плате или в шнуре USB-to-Serial.
Как видите на этой картинке - сигналов довольно много. Когда-то последовательный интерфейс использовался для подключения модемов - устройств передачи данных через телефонные линии. Поэтому тут есть например сигнал RI, Ring Indicator - сигнал о входящем телефонном звонке. Другие сигналы, такие как RTS/CTS позволяли управлять потоками данных, разрешать или запрещать передачу.
Для реализации простейшей передачи нам будут нужны всего 3 провода: Земля, TX (передача от ПК) и RX (ПК принимает данные по нему).
2. Преобразование уровней.
К сожалению и тут не обходится без ложки дегтя. Уровни сигналов в последовательном интерфейсе RS232 это +12В и -12В относительно Земли. Причем +12В это логический ноль, а -12В это логическая единица. Понятно, что подключать такие сигналы напрямую к ПЛИС платы Марсоход "не желательно". Существует довольно много схем преобразования уровней, но пожалуй самые простые те, которые используют специализированные микросхемы. Их преимущество в том, что они требуют только одного напряжения питания +5В.
Я использовал первую микросхему, что попалась мне по руку HIN202. описание на эту микросхему можно взять здесь
Это не единственная микросхема такого рода. Есть еще MAX232 (https://ru.wikipedia.org/wiki/Max232) или SP230 и многие другие. Микросхемы эти в общем похожи друг на друга и зачастую имеют одинаковое расположение выводов и похожие схемы включения:
3. Изготовление преобразователя уровней для платы Марсоход.
Я изготовил преобразователь уровня, который подключается к плате через ее разъем Right motor. Схема преобразователя уровней вот такая:
Я использовал 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, без бита четности и без аппаратного управления.
Нажимая кнопки на плате видим как появляются цифры в окне терминала. Когда печатаем в окне терминала - загораются светодиоды платы.
Подробнее...