Реклама ⓘ
Главная » Радиоуправление
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

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

На этом уроке мы с Вами напишем программу приёмника на основе модуля UART, микроконтроллера AVR.

Начнём с настройки UART. Скорость и формат передачи данных сохраняется. Включаем приёмник (передатчик выключен)…

(1 << RXEN)| //Bit 4 – Receiver Enable

Приём данных будем осуществлять с помощью прерываний, включим прерывание по приёму байта…

(1 << RXCIE)| //Bit 7 – RX Complete Interrupt Enable

Остальные настройки остаются неизменными. В прерывании…

ISR (USART_RXC_vect) { //Принят байт...

…сохраняем принятые данные…

rxBuffer[index] = UDR; //Сохраняем принятый байт...

…если принятый байт отличается от первого байта стартовой последовательности выходим из прерывания и ожидаем следующий байт…

//Ищем первый стартовый бит...
   if (rxBuffer[0] != 'A') return; //Выход из обработчика...

Если начало стартовой последовательности найдено, принимаем данные. При поступлении стопового байта устанавливаем флаг «команда принята» и выключаем прерывания приёмника на время обработки команды…

//Ожидаем признак окончания кадра...
   if (rxBuffer[5] == '&') {

   statusCommand = commandReceived; //Команда принята...
   UCSRB &= ~(1 << RXCIE); //Выключить прерывание приёмника...
   return; //Выход из обработчика...
   }   

В основной программе опрашиваем флаг приёма команды. Если комманда принята…

   //Обработка принятых данных...
   if (statusCommand == commandReceived) {

…обрабатываем её…

//Проверка стартовый байт...   if (rxBuffer[1] != 'B') continue;
   if (rxBuffer[2] != 'C') continue;

//Загружаем значение мощности
   OCR2 = rxBuffer[3];

//Выполняем команды направления движения и поворота
   if (rxBuffer[4] & (1 << 0)) PORTC |= (1 << PC1); else PORTC &= ~(1 << PC1);
   if (rxBuffer[4] & (1 << 1)) PORTC |= (1 << PC2); else PORTC &= ~(1 << PC2);
   if (rxBuffer[4] & (1 << 2)) PORTC |= (1 << PC3); else PORTC &= ~(1 << PC3);

Подготавливаемся к приёму следующей команды…

index = 0; //Переводим указатель на начало буфера
rxBuffer[5] = 0; //Очищаем стоповый байт
statusCommand = noCommand; //Буфер данных пуст

Команда обработана, буфер приёмника пуст, ожидаем приёма следующей команды…

//Буфер данных пуст, начать приём...
   UCSRB |= (1 << RXCIE); //Включить прерывание приёмника...

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

Ну а пока на сегодня всё. Я благодарю Вас за внимание. Подписывайтесь на канал ПаяльникTV. Всего хорошего, до свидания!

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

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

Теги:

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

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

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

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

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

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

Набор 4WD Kit Bluetooth
Набор 4WD Kit Bluetooth
Конструктор для сборки: предусилитель на лампе 6N3 Модуль радиореле на 4 канала
вверх