В этом руководстве мы собираемся установить последовательную связь между двумя микроконтроллерами ATMEGA8. Здесь устанавливается связь типа UART (универсальный асинхронный приемный передатчик). Благодаря этому данные последовательной связи могут совместно использоваться двумя микроконтроллерами, что требуется в различных встроенных системах.
Необходимые компоненты
Аппаратное обеспечение: ATMEGA8 (2 шт.), Блок питания (5 В), ПРОГРАММАТОР AVR-ISP, конденсатор 100 мкФ (подключен к источнику питания), резистор 1 кОм (два шт.), Светодиод, кнопка.
Софт: Atmel studio 6.1, прогисп или flash magic.
Принципиальная схема и объяснение
Давайте разберемся с последовательной связью в микроконтроллерах AVR. Здесь ATMEGA последовательно отправляет данные другому ATMEGA. У него другой режим связи, но для удобства мы выбираем RS232. Вывод RS232 первого ATMEGA8 подключен к выводу RXD второго ATMEGA8.
Установленная передача данных запрограммирована так, чтобы иметь:
- Восемь бит данных
- Два стоповых бита
- Бит проверки четности отсутствует
- Скорость передачи 2400 бит / с (бит в секунду)
- Асинхронная связь (без разделения часов между двумя ATMEGA8)
Итак, у нас есть два заданных регистра для двух ATMEGA8 по-разному, где один действует как ПЕРЕДАТЧИК, а другой - как ПРИЕМНИК.
Теперь для интерфейса RS232 между двумя микроконтроллерами ATmega должны быть выполнены следующие функции ПЕРЕДАТЧИКА и ПРИЕМНИКА:
1. Вывод TXD (функция приема данных) первого контроллера должен быть включен для ПЕРЕДАТЧИКА, а вывод RXD второго контроллера должен быть включен для ПРИЕМНИКА.
2. Поскольку связь является последовательной, нам нужно знать, когда был получен байт данных, чтобы мы могли остановить программу, пока не будет получен полный байт. Это делается путем разрешения прерывания приема данных.
3. ДАННЫЕ передаются и принимаются контроллеру в 8-битном режиме. Таким образом, контроллеру будут отправляться два символа одновременно.
4. В данных, отправленных модулем, нет битов четности, один стоповый бит.
Вышеупомянутые функции устанавливаются в регистрах контроллера; мы собираемся их кратко обсудить,
ТЕМНО-СЕРЫЙ (UDRE): (СТОРОНА TRASMITTER) Этот бит не устанавливается во время запуска, но используется во время работы, чтобы проверить, готов ли передатчик к передаче или нет. Смотрите программу на TRASMITTER SIDE для более подробной информации.
СВЕТЛО-СЕРЫЙ (RXC): (ПРИЕМНАЯ СТОРОНА) Этот бит не устанавливается во время запуска, но используется во время работы, чтобы проверить, готов ли приемник к приему данных или нет. Смотрите программу на ПРИЕМНОЙ СТОРОНЕ для более подробной информации.
VOILET (TXEN): (TRASMITTER SIDE) Этот бит установлен для включения вывода передатчика на TRASMITTER SIDE.
КРАСНЫЙ (RXEN): (ПРИЕМНАЯ СТОРОНА) Этот бит представляет функцию приема данных, этот бит должен быть установлен, чтобы данные от модуля были получены контроллером, он также включает вывод RXD контроллера.
КОРИЧНЕВЫЙ (RXCIE): этот бит должен быть установлен для получения прерывания после успешного приема данных. Включив этот бит, мы узнаем об этом сразу после получения 8-битных данных. Мы не будем здесь использовать этот бит, поэтому оставим его в покое.
РОЗОВЫЙ (URSEL): этот бит должен быть установлен перед включением других битов в UCSRC, после установки других необходимых битов в UCSRC; URSEL должен быть отключен или обнулен. Мы не будем здесь использовать этот бит, поэтому оставим его в покое.
ЖЕЛТЫЙ (UCSZ0, UCSZ1, UCSZ2): (СТОРОНА ПОЛУЧЕНИЯ И СТОРОНА TRASMITTER) Эти три бита используются для выбора количества бит данных, которые мы получаем или отправляем за один раз.
Связь между двумя ATMEGA устанавливается как восьмибитная связь. Сопоставив связь с таблицей, мы имеем UCSZ0, UCSZ1 равным единице и UCSZ2 равным нулю.
Мы должны установить их как на принимающей, так и на передающей стороне.
ОРАНЖЕВЫЙ (UMSEL): (ПРИЕМНАЯ СТОРОНА И СТОРОНА TRASMITTER) Этот бит устанавливается в зависимости от того, обменивается ли система асинхронно (обе используют разные часы) или синхронно (обе используют одинаковые часы).
Оба контроллера не имеют общих часов. Поскольку они оба используют собственные внутренние часы. Поэтому нам нужно установить UMSEL в 0 в обоих контроллерах.
ЗЕЛЕНЫЙ (UPM1, UPM0): (ПРИЕМНАЯ СТОРОНА И СТОРОНА TRASMITTER) Эти два бита настраиваются на основе битовой четности, которую мы используем при обмене данными.
ATMEGA запрограммирован на отправку данных без контроля четности, поскольку длина передачи данных мала, мы явно не можем ожидать потери данных или ошибок. Таким образом, мы не устанавливаем здесь паритет. Поэтому мы устанавливаем оба UPM1 и UPM0 на ноль, или они остаются, потому что все биты по умолчанию равны 0..
СИНИЙ (USBS): (ПРИЕМНАЯ СТОРОНА И СТОРОНА ТРАЗМИТТЕРА) Этот бит используется для выбора количества стоповых битов, которые мы используем во время связи.
Установленная здесь связь имеет асинхронный тип, поэтому для более точной передачи и приема данных нам нужно использовать два стоповых бита. Следовательно, мы установили USBS на «1» в обоих контроллерах.
Скорость передачи устанавливается в контроллере путем выбора соответствующего UBRRH.
Значение UBRRH выбирается путем перекрестной ссылки на скорость передачи данных и частоту кристалла процессора.
Таким образом, по перекрестной ссылке значение UBRR отображается как «25», и поэтому устанавливается скорость передачи.
Как показано на схеме, кнопка подключена на стороне передатчика. Когда эта кнопка нажата, ПЕРЕДАТЧИК отправляет восьмибитные данные, а ПРИЕМНИК принимает эти данные. При успешном получении этих данных он включает и выключает подключенный к нему светодиод, что показывает успешную передачу данных между двумя контроллерами.