Здесь мы собираемся установить связь между микроконтроллером ATmega8 и Arduino Uno. Здесь устанавливается связь типа UART (универсальный асинхронный приемный передатчик). Это последовательная связь. Благодаря этому данные последовательной связи могут совместно использоваться двумя контроллерами, что требуется в различных встроенных системных приложениях.
Во встраиваемых системах мы должны иметь базовые знания о системных коммуникациях, поэтому мы и делаем этот проект. В этом проекте мы обсудим базовую систему связи и будем отправлять некоторые данные от передатчика к приемнику последовательно.
В этом проекте ATMEGA8 действует как ПЕРЕДАТЧИК, а ARDUINO UNO - как ПРИЕМНИК. При последовательной связи мы будем посылать данные БИТ ЗА БИТОМ, пока БАЙТ данных не будет передан полностью. Данные могут иметь размер 10 бит, но пока мы будем использовать 8 бит.
Необходимые компоненты
Аппаратное обеспечение: ATMEGA8, ARDUINO UNO, источник питания (5 В), ПРОГРАММАТОР AVR-ISP, конденсатор 100 мкФ (подключенный к источнику питания), резистор 1 кОм (две штуки), светодиод, кнопка.
Программное обеспечение: Atmel studio 6.1, прогисп или flash magic, ARDUINO NIGHTLY.
Принципиальная схема и объяснение
Прежде чем мы обсудим принципиальную схему и программирование передатчика и приемника, нам нужно понять, что такое последовательная связь. ATMEGA здесь отправляет данные в UNO последовательно, как обсуждалось ранее.
Он имеет и другие способы общения, как рабовладелец связь, JTAG связь, но для удобства общения мы выбираем RS232. Здесь мы подключим ПИН TXD (передатчика) ATMEGA8 к ПИН RXD (приемника) ARDUINO UNO.
Установленная передача данных запрограммирована так, чтобы иметь:
- Восемь бит данных
- Два стоповых бита
- Бит проверки четности отсутствует
- Скорость передачи 9600 бит / с (бит в секунду)
- Асинхронная связь (нет разделения часов между ATMEGA8 и UNO (оба имеют разные единицы измерения))
Для установления UART между Arduino Uno и ATMEGA8 нам необходимо точно запрограммировать настройку. Для этого нам необходимо сохранить указанные выше параметры одинаковыми на обоих концах. В этом случае один действует как ПЕРЕДАТЧИК, а другой действует как ПРИЕМНИК. Мы обсудим настройки каждой стороны ниже.
Теперь для интерфейса RS232 на стороне ПЕРЕДАТЧИКА (ATMEGA8) должны быть выполнены следующие функции:
1. Вывод TXD (функция приема данных) первого контроллера должен быть включен для ПЕРЕДАТЧИКА.
2. Поскольку связь является последовательной, нам нужно знать, когда данные получены, чтобы мы могли остановить программу, пока не будет получен полный байт. Это делается путем разрешения прерывания приема данных.
3. ДАННЫЕ передаются и принимаются контроллеру в 8-битном режиме. Таким образом, контроллеру будут отправляться два символа одновременно.
4. В данных, отправленных модулем, нет битов четности, один стоповый бит.
Вышеупомянутые функции устанавливаются в регистрах контроллера; мы собираемся кратко их обсудить:
ТЕМНО-СЕРЫЙ (UDRE): этот бит не устанавливается во время запуска, но он используется во время работы, чтобы проверить, готов ли передатчик к передаче или нет. Смотрите программу на TRASMITTER SIDE для более подробной информации.
VOILET (TXEN): этот бит установлен для включения вывода передатчика на СТОРОНЕ TRASMITTER.
ЖЕЛТЫЙ (UCSZ0, UCSZ1 и UCSZ2): эти три бита используются для выбора количества битов данных, которые мы получаем или отправляем за один раз.
Связь между двумя СТОРОНАМИ устанавливается как восьмибитная связь. Сопоставив связь с таблицей, мы имеем UCSZ0, UCSZ1 равным единице и UCSZ2 равным нулю.
ОРАНЖЕВЫЙ (UMSEL): этот бит устанавливается в зависимости от того, обменивается ли система асинхронно (обе используют разные часы) или синхронно (обе используют одинаковые часы).
Обе СИСТЕМЫ не имеют общих часов. Поскольку они оба используют собственные внутренние часы. Поэтому нам нужно установить UMSEL в 0 в обоих контроллерах.
ЗЕЛЕНЫЙ (UPM1, UPM0): эти два бита настраиваются на основе битовой четности, которую мы используем при обмене данными.
ATMEGA данных запрограммирован на отправку данных без контроля четности, так как длина передачи данных мала, мы явно не можем ожидать потери данных или ошибок. Таким образом, мы не устанавливаем здесь паритет. Поэтому мы устанавливаем оба UPM1 и UPM0 в ноль, или они остаются, потому что все биты по умолчанию равны 0.
СИНИЙ (USBS): этот бит используется для выбора количества стоповых битов, которые мы используем во время связи.
Установленная связь имеет асинхронный тип, поэтому для более точной передачи и приема данных нам нужно использовать два стоповых бита, поэтому мы установили USBS на «1» на стороне ПЕРЕДАТЧИКА.
Скорость передачи устанавливается в контроллере путем выбора соответствующего UBRRH:
Значение UBRRH выбирается путем перекрестной ссылки на скорость передачи данных и частоту кристалла процессора:
Таким образом, по перекрестной ссылке значение UBRR отображается как «6», и поэтому устанавливается скорость передачи.
При этом мы установили настройки на СТОРОНЕ ПЕРЕДАТЧИКА; мы поговорим о ПРИНИМАЮЩЕЙ СТОРОНЕ.
Включение последовательной связи в UNO может быть выполнено с помощью одной команды.
|
Связь, которую мы предполагали установить, осуществляется со скоростью передачи данных 9600 бит в секунду. Итак, чтобы UNO установил такую скорость передачи и начал последовательную связь, мы используем команду «Serial.begin (9600);». Здесь 9600 - это скорость передачи, которую можно изменить.
Теперь осталось только получить данные, если данные получены ООН, они будут доступны для приема. Эти данные собираются командой «receivedata = Serial.read ();». С помощью этой команды последовательные данные переносятся в "полученные данные" с именем целое число.
Как показано на схеме, кнопка подключена на стороне передатчика, когда эта кнопка нажата, восьмибитные данные отправляются ПЕРЕДАТЧИКОМ (ATMEGA8), и эти данные принимаются ПРИЕМНИКОМ (ARDUINO UNO). При успешном получении этих данных он включает и выключает подключенный к нему светодиод, чтобы показать успешную передачу данных между двумя контроллерами.
Благодаря этому UART-связь между контроллером ATMEGA8 и ARDUINO UNO успешно установлена.