Главная » Радиоуправление
Призовой фонд
на август 2019 г.
1. 1000 руб
Паяльник
2. Тестер компонентов MG328
Паяльник
3. 200 руб.
От пользователей

Машинка на ДУ управлении своими руками. Аппаратная реализация. UART. Передатчик на AVR

На этом уроке мы с Вами разберём вариант аппаратной реализации протокола обмена на основе модуля универсального асинхронного приёмопередатчика УАПП (Universal Asynchronous Receiver-Transmitter, UART) микроконтроллера AVR.

В те далёкие, давние времена, когда начинали появляться первые микроконтроллеры аппаратные модули интерфейсов обмена отсутствовали. Все интерфейсы связи организовывались программно (на подобие того, чем мы занимались на предыдущих уроках). В наши дни, когда практически каждый микроконтроллер буквально напичкан аппаратными модулями UART, I2C, SPI, CAN и т.п, программную реализацию практически не используют.

Аппаратная реализация интерфейса позволяет освободить машинное время за счёт автономности модулей и использования прерываний. На сегодняшний день почти каждый микроконтроллер имеет на борту универсальный последовательный интерфейс UART. AVR поддерживает этот протокол полностью.

!! В связи с фиксированным расположением выводов модуля UART клавиши управления пришлось перенести. Обратите на это внимание.

Перед использованием настроим UART. Нам нужно задать скорость обмена и формат передаваемых данных.

Для того, чтобы установить скорость обмена необходимо записать в регистр генератора скорости UBRR связи константу вычисленную по формуле приведённой в документации. Однако есть более простой путь – выбрать константу из таблицы стандартных скоростей.

Я выбираю скорость 9600 бит/сек...

UBRRH = 0;
UBRRL = 103; //Скорость 9600 бод

По поводу формата передаваемых данных...

В начале передаётся один стартовый бит. Затем передается байт данных. В завершении передаётся стоповый бит, говорящий о том, что передача этого байта завершена.

В конце байта данных, перед стоповым битом, может находится бит четности.

Также, для надежности, может использоваться два стоповых бита.

Я собираюсь использовать самый популярный формат: 8 бит, один стартовый и один стоповый бит, без бита четности...

UCSRC = (0 << UMSEL)| // Bit 6 – USART Mode Select
        (0 << UPM0)| // Bit 5 – Parity Mode
        (0 << UPM1)| // Bit 4 – Parity Mode
      (0 << USBS)| // Bit 3 – Stop Bit Select
        (1 << UCSZ1)| // Bit 2 – Character Size
        (1 << UCSZ0)| // Bit 1 – Character Size
        (0 << UCPOL); // Bit 0 – Clock Polarity

Включаем передатчик...

UCSRB = (0 << RXCIE)| // Bit 7 – RX Complete Interrupt Enable
   (0 << TXCIE)| // Bit 6 – TX Complete Interrupt Enable
   (0 << UDRIE)| // Bit 5 – USART Data Register Empty Interrupt Enable
   (0 << RXEN)| // Bit 4 – Receiver Enable
   (1 << TXEN)| // Bit 3 – Transmitter Enable
   (0 << UCSZ2); // Bit 2 – Character Size

Для того, чтобы начать передачу необходимо загрузить байт данных в регистр ввода/вывода данных UDR. Передача данных происходит автономно и не занимает машинного времени.

UDR = <байт данных>;

Ну и конечно же, прежде чем отправлять следующий байт необходимо дождаться окончания передачи предыдущего. Для этого используем флаг освобождения регистра данных UDRE...

while(!(UCSRA & (1 << UDRE)));

Для передачи данных я использую две функции: передача байта...

USART_TransmitByte(unsigned char txData) {

   UDR = txData;
   while(!(UCSRA & (1 << UDRE)));
}

...и передача строки...

USART_TransmitString(unsigned char txData[]) {

   for (int i=0; i < strlen(txData);) {

   USART_TransmitByte(txData[i]);
   i++;
   }
}

Ну а далее... опрашиваем ручку газа, клавиши пульта управления и передаём...

   //Передача стартовых байт
   USART_TransmitString(START_SEQUENCE);
 
   //Передача байта мощности
   USART_TransmitByte(ADCH);

   //Передача байта commandBuffer
   USART_TransmitByte(commandBuffer);

   //Передача стоповых байт
   USART_TransmitString(STOP_SEQUENCE);

Несколько слов в завершении. В следующем видео мы напишем программу приёмника на основе аппаратного модуля UART, МК AVR.

ПРОЕКТ С ИСХОДНЫМ КОДОМ И СИМУЛЯЦИЯ В PROTEUS во вложении.

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (0) | Я собрал (0) | Подписаться

Статью еще никто не комментировал. Вы можете стать первым.
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Набор 4WD Kit Bluetooth
Набор 4WD Kit Bluetooth
Набор для сборки - УНЧ 2х60 Вт на TDA7294 200 Вт усилитель класса D на IRS2092
вверх