Необходимые знания: [HW] Kontrollermoodul, [AVR] USART, [LIB] Jadaliides,
[LIB] Alfabeetiline LCD
RS-232 - это физический стандарт интерфейса передачи данных, который используется для передачи двоичных данных. Стандарт используется в основном в последовательных портах компьютеров, которые в разговорном языке называют “COM“ портами. В настоящее время RS-232 в большей части заменены USB интерфейсом, но в связи с их простотой RS-232 удачно используется и дальше в сфере хобби, особенно тогда, когда имеются USB - RS-232 преобразователи. RS-232 стандарт определяет разъемы, электрические параметры и значение сигналов, но не протоколы.
RS-232 интерфейс используется в основном вместе с аппаратным модулем передачи данных, называющимся UART, у которого протокол стандартизирован, но что опять же не определяет разъемы и т.п. Таким образом, RS-232 дополняет UART. Так как UART - это в основном один из периферийных модулей в микроконтроллере, дигитальные входы-выходы которого не отвечают электрическим параметрам RS-232, их между собой сводят вместе специальным уровневым преобразователем. Один из самых известных уровневых преобразователей между RS-232 и TTL/CMOS является, к примеру, MAX232.
UART расшифровывается как «универсальный асинхронный приёмопередатчик» (на английском языке universal asynchronous receiver/transmitter). USART практически то же самое, но разница в том, что данные передаются вместе с тактовым сигналом. UART можно назвать так же последовательным интерфейсом. Последовательный интерфейс - это механизм передачи, где каждый бит, передается по отдельности. К примеру, чтобы передать 1 байт, передается с точным интервалом времени 8 бит. То есть физически на линии последовательного интерфейса, которая является одним из выводов микроконтроллера, происходит за определённый промежуток времени изменение значения напряжения высоким или низким. В целом, с последовательным интерфейсом соединены 2 устройства, одно из которых передает информацию (изменяя значение вывода), а другой принимает (регистрируя значение вывода). Сокращение передающего вывода это TX, а принимающего - RX. Информация движется на одной линии всегда в одну сторону. Для передачи информации в обратную сторону используют другую линию. Если данные передвигаются на двух линиях одновременно, то это называют шиной полного дуплекса.
Передача данных в UART интерфейсе происходит по кадрам (на английском языке frame), где битов данных от 5 до 9, в зависимости от конфигурации. Наиболее распространены 8 бит, или 1 байт. Помимо битов данных кадрами передаются и дополнительные биты, с помощью которых происходит распознавание момента пребывания и окончания на стороне приемника. Первый из них называется стартовым битом, который всегда 0, другой стоповым битом (или битами), который всегда 1. Перед стоповым битом может быть бит четности, который используют для проверки корректности данных. Бит четности показывает, есть ли среди битов данных четное или нечетное число единиц. То, какое показание оно обретает, зависит от настройки UART интерфейса. Четные биты, как правило, сегодня не используются, и в настройке это можно тоже запретить. Так же как можно настроить биты четности, можно получить и число битов данных и стоповых битов.
Помимо кадровой структуры есть еще один важный параметр - это скорость передачи данных (на английском языке baud rate), с помощью чего обозначается число передаваемых символов за одну секунду. Бод (единица измерения символьной скорости) - показывает, собственно, число символов. В случае UART 1 бод - это 1 бит, и поэтому в случае кадров говорилось о битах. В принципе, для передачи данных можно использовать любую скорость передачи данных, но имеются ряд общеиспользуемых скоростей передачи данных, которые стоит использовать. К примеру: 9600 bps, 19200 bps, 38400 bps, 57600 bps, 115200 bps.
В качестве дополнительной информации можно знать, что стандарт RS-232 содержит помимо сигналов данных (RX, TX) еще и выводы контроля потока данных - DTR, DCD, DSR, RI, RTS и CTS, которые используются для управления общения между устройствами. К примеру, с их помощью устройство может дать знать готово оно или нет принимать данные. Так как изначальная цель RS-232 интерфейса была соединение компьютеров с модемом, то некоторые сигналы используются (а точнее использовались) для показания состояния телефонной линии.
На плате модуля «Контроллер» Домашней Лаборатории есть разъем RS-232 типа «папа». С его помощью можно соединить контроллер с компьютером или другим контроллером. Для соединения с компьютером нужно использовать обычный неперевернутый кабель, один из разъемов которого типа «мама», другой типа «папа». Для подключения с другим контроллером нужно использовать кабель, где RX и TX, а также сигналы контроля потока перпендикулярно перевернуты и оба разъема типа «мама». Перевернутый кабель называют также нуль-модемным кабелем. Далее приведен пример программы использования UART интерфейса. Программа отправляет при запуске через RS-232 интерфейс приветствие и отображает сообщения, которые поступают. Используется LCD и USART библиотеки.
// // Соединение модуля «Контроллер» Домашней Лаборатории с компьютером через RS-232. // Пример использует модуль «Дигитальные входы-выходы» вместе с LCD экраном. // Введенный в терминал компьютера текст отображается на LCD. // #include <homelab/usart.h> #include <homelab/module/lcd_alpha.h> // // Определение USART интерфейса // usart port = USART(0); // // Основная программа // int main(void) { char c; unsigned char row = 1; // Настройка USART интерфейса usart_init_async(port, USART_DATABITS_8, USART_STOPBITS_ONE, USART_PARITY_NONE, USART_BAUDRATE_ASYNC(9600)); // Настройка LCD экрана lcd_alpha_init(LCD_ALPHA_DISP_ON_BLINK); // Отображение на экране приветствие lcd_alpha_write_string("Ootan teadet"); // Перенос курсора в начало второй строки lcd_alpha_goto_xy(0, row); // Сказать компьютеру привет usart_send_string(port, "Привет, напиши что-нибудь!\r\n"); // Бесконечный цикл while (true) { // Чтение знака из последовательного интерфейса if (usart_try_read_char(port, &c)) { // Обстоит ли дело со знаком изменения строки? if (c == '\r') { // Изменение строки row = 1 - row; // Очистка строки от предыдущего сообщения lcd_alpha_clear_line(row); } else { // Обозначение знака непосредственно на экране lcd_alpha_write_char(c); } } } }
С операционной системой Windows XP идет вместе программа HyperTerminal. Она открывается из меню Start при выборе Accessories → Communications → HyperTerminal. Для настройки соединения выбрать 9600 bps, 1 стартовый бит и 1 стоповый бит без четности и контроля потока. Если HyperTerminal открыт во время запуска микроконтроллера, на экране появляется приветствующее сообщение. Введенные в окне буквы отображаются на буквенно-цифровом LCD экране. При нажатии на Enter изменяется на LCD экране строка.