Машинка на ДУ управлінні своїми руками. Апаратна реалізація. 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 у вкладенні.
Прикреплені файли:
- remote_control_uart.rar (85 Кб)