Главная » Радиоуправление
Призовой фонд
на июль 2019 г.
1. 1000 руб
Паяльник
2. Регулируемый паяльник 60 Вт
Паяльник
3. 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
Квадрокоптер Syma X11 USB осциллограф DSO-2090
вверх