которых может быть 0 или 1. Если в определенные моменты времени считывать состояние линии, то можно восстановить то, что было послано. При этом для приемника и передатчика, связанных между собой тремя проводами («земля» и два сигнальных провода «туда» и «обратно»), приходится задавать скорость передачи и приема, которая должна быть одинакова для устройств на обоих концах линии. Эти скорости стандартизированы и выбираются из ряда: 1200, 2400, 4800, 9600, 14 400, 19 200, 28 800, 38 400, 56 000, 57 600, 115 200 (более медленные скорости я опустил)[42]. Число это обозначает количество передаваемых/принимаемых битов в секунду.

Проблема состоит в том, что приемник и передатчик — это физически совершенно разные системы, и скорости эти для них не могут быть строго одинаковыми в принципе (из-за разброса параметров тактовых генераторов), и даже если их каким-то образом синхронизировать в начале, то они в любом случае быстро «разъедутся». Потому в RS-232 передача каждого байта всегда сопровождается начальным (стартовым) битом, который служит для синхронизации. После него идут восемь (или девять — если используется проверка на четность) информационных битов, а затем стоповые биты, которых может быть один, два и более, но это уже не имеет принципиального значения. Общая диаграмма передачи таких последовательностей показана на рис. 21.3.

Рис. 21.3. Диаграмма передачи данных по последовательному интерфейсу RS232 в формате 8п2

В современных компьютерах СОМ-порт, как правило, отсутствует. Конечно, его можно обеспечить с помощью дополнительных плат или (в ноутбуках) PCMCIA-карт, но, в общем случае, это неудобно. Куда проще воспользоваться универсальным последовательным портом USB, имеющемся практически на каждом компьютерном устройстве. Микросхемы-переходники, обеспечивающие преобразование USB/RS-232, носят по наименованию выпускающей их фирмы название FTDI и являются составной частью любого устройства, обеспечивающего эмуляцию протокола RS-232 через USB. Устройство при этом имеет лишь простой UART, а преобразование обеспечивается микросхемой, которая в случае Arduino встроена в плату.

При соединении такого устройства с компьютером через USB-кабель драйвер распознает его, как виртуальный СОМ-порт (см. раздел об установке Arduino в этой главе). Кстати, подобную связь с компьютером имеют многие дешевые мобильники — в них со стороны телефона имеется лишь UART, в точности так же, как в МК AVR, а для связи нужен специальный и иногда довольно дорогой кабель-адаптер с установленной внутри микросхемой FTDI или аналогичной.

Как и взаимодействие с АЦП, работа через последовательный порт в Arduino относится к базовым функциям и не требует подключения внешних библиотек. Далее мы увидим, что физически передача через последовательный порт может быть реализована далеко не только с помощью USB, — чуть позже мы рассмотрим модуль, который «прозрачно» для программиста обеспечивает передачу по радиоканалу с помощью тех же самых функций.

Сам по себе обмен через последовательный порт в Arduino немногим сложнее чтения значения аналоговой величины в только что рассмотренном примере термостата и обеспечивается набором функций Serial (см. их описание в разделе Программирование [23]). Для успешной работы спроектированного устройства совместно с Windows, если Arduino IDE в ней не устанавливалась, необходимо установить драйвер ArduinoUSBSerial.inf, входящий в комплект Arduino IDE (находится в основном каталоге размещения среды Arduino). Для обмена данными библиотека Serial использует цифровые порты платы Arduino 0 (RX) и 1 (ТХ). Разумеется, если вы используете функции Serial, то нельзя одновременно с этим использовать порты 0 и 1 для других целей, — обратите внимание, что во всех наших проектах они остаются свободными.

Простейшая пробная программа для работы с функциями serial выглядит так:

Функция Serial.write() отличается от Serial.print() тем, что первая посылает данные, как числа, а вторая позволяет организовать вывод в различных строковых форматах (см. описание функции в [23]). Мы здесь употребляем вариант второй функции под названием serial.println, который дополнительно присоединяет к выводу символы перевода строки. Многочисленные примеры употребления этих операторов в разных вариантах вы встретите далее.

* * *

Подробности

Коммуникационные функции Arduino в случае приема нескольких байтов всегда требуют тщательной отладки на макете. На них (функциях) сказываются недостатки Arduino, заключающиеся в общей замедленности работы платформы. Отслеживание данных, приходящих через последовательный

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ОБРАНЕ

0

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

Отметить Добавить цитату