Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / 4 / МПС_ИДЗ4

.docx
Скачиваний:
0
Добавлен:
12.02.2026
Размер:
200.49 Кб
Скачать

Задачи:

  • Познакомиться с работой АЦП и интерфейса UART

  • Научиться писать код «с нуля»

  • Поработать с datasheet на микроконтроллер

Работа:

1. На макетных платах (можно использовать Elvis'ы) собрать схему резистивного делителя на потенциометре. Среднюю точку подключить к выводу PA6 микроконтроллера (см. документацию на отладочную плату). На верхнее плечо делителя подключить вывод VUSB отладочной платы.

2. Настроить АЦП контроллера на оцифровку напряжения с резистивного делителя на потенциометре. Визуализировать данные требуется изменяя яркость светодиода с помощью настройки скважности ШИМ-сигнала. Для этого:

  • Установить делитель частоты ядра в положение 1:1.

  • Настроить таймер в режим Fast PWM, инверсный режим (как в л.р. 3). Значение TOP определяется значением в регистре ICR0 => режим 14, регистры TCCR0A, TCCR0B.

  • Настроить предделитель таймера и значение регистра ICR0 так, чтобы прерывания по переполнению вызывались 100 раз в секунду => регистры TCCR0B и ICR0.

  • Включить прерывание таймера по переполнению => регистр TIMSK.

  • Настроить АЦП: включить блок АЦП, делитель АЦП 1:16, прерывание по выполнению АЦП-преобразования => регистр ADCSRA.

  • Включить оцифровку сигнала с ножки PA6 => регистр ADMUX.

  • В прерывании таймера по переполнению — раз в 20 прерываний запускаем единичное АЦП-преобразование => регистр ADCSRA.

  • В прерывании по выполнению АЦП-преобразования — изменяем скважность ШИМ-сигнала согласно результату оцифровки => регистры OCR0B, ADCL, ADCH.

Убедиться, что светодиод меняет свою яркость при изменении положения потенциометра.

3. Оцифрованные данные необходимо отправлять по интерфейсу UART (в данной работе приёмником будет компьютер). Для этого понадобится:

  • Задать частоту переполнения таймера: #define ADC_FS 5, значение в регистре ICR0 таймера должно рассчитываться автоматически на основании этой константы. С этой же частотой должно выполняться АЦП-преобразование и передаваться данные на ПК.

  • Включить автозапуск АЦП-преобразования по правильному событию таймера, установить выравнивание результата преобразования по левому краю => регистры ADCSRA, ADCSRB.

  • Полностью удалить обработчик прерывания по переполнению таймера

  • Настроить режим работы UART: 8-битная посылка, без проверки чётности, 1 стоп-бит. Установить baud rate prescaler в значение, соответствующее частоте передачи 9600 бод/с, включить режим отправки данных => регистры UBBR0, UCSR0B, UCSR0C.

  • В прерывании по выполнению АЦП-преобразования отправляем 8 старших бит результата по UART => регистры ADCH, UDR0.

Для проверки правильности работы требуется получить на ПК график, соответствующий значениям АЦП преобразования. Для этого после загрузки прошивки в МК необходимо перейти в меню Tools => Data Visualizer. В открывшемся окне в области Serial Port Control Panel выбрать порт, соответствующий отладочной плате, снять галочку с “Autodetect protocols“, установить правильный Baudrate. После этого нажать на кнопку Connect. Должно открыться чёрное окно-терминал.

Если все сделано правильно, то при изменении положения потенциометра в терминале будут выводиться разные символы.

После этого слева в меню инструментов необходимо найти Visualization => Graph и дважды кликнуть на него. Появится новая область для рисования графика. Для того чтобы данные, полученные по Serial соединению визуализировать в виде графика необходимо в области Serial Port Control Panel найти иконку штекера, и мышью перетащить её в “разъём” New Plot под графиком.

Интерфейс делали явно под чем-то, так что если непонятно или не получается, лучше спросите у кого-нибудь из преподавателей.

В конце файла - шаблон для написания кода на языке С, где прописан импорт библиотек, некоторые константы и определены вектора прерываний.

Вопросы к защите:

  • Перечислить виды АЦП (как минимум 4), знать их преимущества и недостатки, уметь располагать по разрядности и быстродействию.

  • Подробно рассказать об одном из видов АЦП по выбору преподавателя.

  • Рассказать об одном из цифровых интерфейсов UART, SPI, I2C: какие линии используются, как по ним передается информация, структура посылки с данными, что там можно менять, что значит синхронный/асинхронный, полно- и полу- дуплексный интерфейс.

  • Задача на расчёт пропускной способности системы из нескольких датчиков. Пример: требуется проводить опрос N датчиков, передающих 16 бит данных с частотой 100 Гц. Далее все собранные данные отправляются на другое вычислительное устройство по интерфейсу UART с конфигурацией <baudrate = 115200, 8 бит данных, без проверки чётности, 2 стоп-бита>. Определите максимальное N, если считать, что единственным ограничением является пропускная способность используемого интерфейса UART.

Шаблон кода на языке C:

#include <avr/io.h>

#include <avr/interrupt.h>

#define F_CPU 8000000

#define USART_BAUDRATE 9600

#define BAUD_PRESCALE ((F_CPU / (USART_BAUDRATE * 16UL)) - 1)

int main(void)

{

while (1)

{

}

}

ISR(TIM0_OVF_vect)

{

}

ISR(ADC_vect)

{

uint16_t analogReading;

}

Соседние файлы в папке 4