2. ADCSRA (ADC Control and Status Register A) – управляющий регистр, отвечающий за работу АЦП:
ADEN (ADC Enable) – записывая единицу в этот бит, разрешаем использование АЦП.
ADSC – отвечает за начало АЦП преобразования. ADSC (ADC Start Conversion) – записывая единицу в этот бит, мы начинаем очередной цикл преобразования в одиночном режиме работы (или первый цикл при непрерывном), который занимает 13 тактов (первый цикл – 25 тактов, здесь осуществляется первоначальная инициализация АЦП), при условии, что с помощью бита ADEN разрешено использование АЦП. Каждый раз надо ручками ставить 1, так как она сбрасывается после завершения АЦП преобразования.
ADATE (ADC Auto Trigger Enable) – возможность запуска преобразований от внешних источников, таймера и тп.
ADIF (ADC Interrupt Flag) – флаг прерывания по завершению преобразования, когда регистры данных обновились. Автоматически. (вроде как устанавливается в 1 по завершению цикла преобразования)
ADIE (ADC Interrupt Enable) – разрешение прерывания по завершению цикла преобразования.
ADPS2:0 (ADC Prescaler Select Bits) – позволяет выбрать коэффициент делителя тактовых импульсов для установки частоты преобразований (в непрерывном режиме). Значение коэффициента делителя определяется в соответствии с табл. 7.3.
Таблица 7.3. Выбор коэффициента деления
ADPS2 |
ADPS1 |
ADPS0 |
Коэффициент деления |
0 |
0 |
0 |
2 |
0 |
0 |
1 |
2 |
0 |
1 |
0 |
4 |
0 |
1 |
1 |
8 |
1 |
0 |
0 |
16 |
1 |
0 |
1 |
32 |
1 |
1 |
0 |
64 |
1 |
1 |
1 |
128 |
ADFR (ADC Free Running Select) – записывая единицу в этот бит, выбираем непрерывный режим преобразования.
В зависимости от бита в ADLAR (в ADMUX).
Данные с АЦП записываются в регистровую пару ADCH:ADCL, откуда их можно считать для дальнейшей обработки. Причем здесь есть один важный момент. Регистровая пара 16 разрядная, а АЦП имеет разрядность 10 бит. В итоге лишь один регистр занят полностью, а второй занимают лишь оставшиеся два бита. Исходя из этого факта, выравнивание может производиться как по правому краю – старшие два бита в ADCH, а младшие в ADCL, так и по по левому – старшие биты в ADCH, а два младших бита в ADCL:
[9][8][7][6][5][4][3][2]:[1][0][x][x][x][x][x][x]
[x][x][x][x][x][x][9][8]:[7][6][5][4][3][2][1][0]
Для чего же хранение данных АЦП-преобразования организовано именно таким образом? Так как в двух младших битах чаще всего достаточно сложно получить значимые данные (скорее всего, мы получим там всякий мусор и помехи), мы можем использовать выравнивание по правому краю и считывать данные преобразования только из одного регистра ADCH, экономя время и программный код. За выравнивание отвечает бит ADLAR. Записывая в него логический ноль, получаем выравнивание по правой границе, записываем единицу – по левой.
4. ADCSRB – источник запуска АЦП преобразования. В табличке ниже расписано.
6. Передача данных с использованием асинхронного последовательного интерфейса UART. Общая структура асинхронного приёмопередатчика. Протокол передачи данных RS-232. Настройка и программирование интерфейса UART. Скорость передачи данных.
Есть АЦП нет UART и наоборот.
В чем главное отличие между последовательным и параллельным интерфейсом? Параллельные интерфейсы позволяют передавать по несколько бит информации за один раз. Обычно для этого используются шины данных, состоящие из восьми или шестнадцати проводов, поэтому данные передаются большими блоками. Последовательные интерфейсы передают свои данные по одному биту за такт, что в идеале требует всего одного провода.
Рис. 1. Последовательные и параллельные интерфейсы
Параллельные интерфейсы имеют свои преимущества. Они крайне просты в реализации с точки зрения аппаратного и программного обеспечения. Но они требуют слишком много проводов и из-за этого работают слишком медленно.
Все сигналы от передатчика к приёмнику должны поступать одновременно. Но гарантировать время прохождения сигнала для всех линий параллельного интерфейса на больших частотах очень тяжело, при этом неизбежно искажается форма передаваемого сигнала. Таким образом, даже если вы передаете меньше данных за один такт при помощи последовательного интерфейса, становится возможным использовать гораздо более высокие частоты, что и приводит к более высокой скорости передачи данных. Параллельные линии передачи данных, которые рядом, представляют собой распределенную емкость и в зависимости от длины еще и распределенную индуктивность, из-за это возникают искажения (например, как на рисунке).
Также возможна следующая картина
Слева идеальный вариант, у нас чем частота выше, тем больше искажения. Сигнал проходит через своего рода интегратор, он начинает расползаться, фронты нарушаются и тп. В последовательном такого нет.
Сейчас последовательные интерфейсы полностью вытеснили параллельные (для бытового применения). Для персональных компьютеров общим стандартом для обмена данными с периферией стал USB интерфейс, практически полностью заменив собой RS-232. Связь через последовательный порт с использованием интерфейса RS-232 когда-то была популярным методом передачи данных. На задней панели некоторых компьютеров, особенно старых, среди разъёмов можно заметить D-образный штекер с 9 контактами, также известный как COM-порт (от слова communication).
СОМ-ПОРТ
Неотъемлемая часть большинства компьютеров на протяжении последних 30 лет.
Хотя многие новые системы полностью отказались от стандарта RS-232 в пользу USB интерфейса, он до сих пор используется в системах промышленной автоматики, различных исследовательских и измерительных приборах
Просты, надёжны, поддерживаются любой операционной системой, а их функционал очень хорошо стандартизирован.
Последовательный порт не требует дополнительных драйверов или специализированного программного обеспечения
Пользователи могут легко взаимодействовать с COM-портом при помощи распространённых программ, таких как Матлаб и Labview.
Для организации последовательной передачи необходимо много настроек:
Скорость передачи (baudrate)
Количество бит в пакете (обычно 8 бит)
Проверка на четность (для обнаружения ошибок при передаче данных) – проверка на целостность, мы биты данных через побитовую операцию искл. ИЛИ проводим и смотрим количество единичек и в зависимости от режима четности, мы выставляем бит в 0 или 1 (на стороне приемника проверяем, если совпадает, то все нормально)
Стоп-биты отправляются в конце каждого пакета данных
Условное обозначение – данные/четность/стоп биты
Общая структура
Каждый микроконтроллер семейства Mega и некоторые из семейства Tiny имеет в своем составе аппаратный блок универсального последовательного интерфейса – UART. По структуре это обычный асинхронный последовательный протокол как и RS-232, т.е. передающая сторона по очереди выдает в линию нули и единицы, а принимающая отслеживает и запоминает их (нет линии тактовых импульсов – отвечает за скорость передачи данных). Синхронизация идет по времени – мы заранее задаем скорость передачи данных как на стороне передатчика информации, так и на стороне приемника (именно поэтому передача асинхронная – отдельная линия для передачи тактовых синхронизирующих импульсов отсутствует). Это весьма важное замечание, так как расхождение в скоростях передачи может привести к ошибкам в распознавании информации, при этом ошибки будут накапливаться с увеличением скорости передачи данных.
На физическом уровне интерфейс UART крайне прост. Для его аппаратной реализации достаточно всего двух проводов, не считая общего провода, подключаемого обычно к напряжению земли (рис. 3). Эти линии имеют разное назначение – линия RXD используется для приема сообщений (Receiver), а TXD – для передачи сообщений (Transmitter). UART является полнодуплексным интерфейсом. Это значит, что приемник и передатчик работают независимо друг от друга, позволяя одновременно как передавать, так и принимать данные (так называемая полнодуплексная передача данных).
Рис. 3. Аппаратное обеспечение UART
В настоящее время физические интерфейсы на основе RS232 практически исчезли из современных персональных компьютеров. Однако удобство пользования и обилие программного обеспечения, имеющего доступ к внешним устройствам через COM-порт, вынудило разработчиков создать драйвера виртуальных COM-портов.
Виртуальный COM-порт
можно использовать без реального (аппаратного) порта (можно создать любое количество)
может быть назначено любое имя
работает как физический порт
эмулирует все функциональные возможности аппаратного последовательного порта (скорость передачи, биты данных, беты четности, стоповые биты и тп)
единственным ограничением являются доступные ресурсы, такие как оперативная память и вычислительная мощность.
Протокол передачи данных
Передача (соответственно, и прием) сообщений осуществляется фиксированными пакетами битов, такой пакет называют кадром (рис. 1). Кадр состоит из стартового бита (с него начинается каждый кадр), битов данных (их количество можно изменять от 5 до 9), бита проверки четности (проверка правильности передачи данных) и одного или двух стоп-битов (обязательный сигнал окончания кадра).
Вначале передатчик переводит линию в уровень логического нуля – это стартовый бит. Всё время в промежутках между пакетами данных линия передатчика находится в состоянии логической единицы, поэтому зафиксировав появление ноля (тот самый стартовый бит), приемник отсчитывает интервал Т1 и считывает первый бит данных, потом через интервалы Т2 считывает все оставшиеся биты. Последний бит (или два бита) является стоповым. Он сообщает принимающей стороне, что передача данных закончена.
В конце байта, перед стоповым битом, может находиться бит проверки четности. Так называют контрольный бит, служащий для проверки общей чётности двоичного числа (чётности количества единичных битов в числе). Он формируется при выполнении операции «Исключающее-ИЛИ» со всеми передаваемыми битами. Стоповых битовых может быть два, для повышения надежности передачи. Все эти параметры задаются строго перед началом передачи данных и не могут быть изменены в процессе. Самый распространенный формат передачи данных для микроконтроллеров – 8 бит данных, 1 стартовый бит, 1 стоповый бит, без проверки на четность.
Рис. 1. Пакет данных для передачи по интерфейсу UART
Тоже самое, но с мудла (пусть будет)
UART автоматически вставляет в поток синхронизирующие метки, так называемые стартовый и стоповый биты. При приёме эти лишние биты удаляются из потока. Также существует возможность автоматически контролировать целостность данных методом контроля битовой чётности.
Все эти параметры задаются строго перед началом передачи данных и не могут быть изменены в процессе. Самый распространенный формат передачи данных для микроконтроллеров – 8 бит данных, 1 стартовый бит, 1 стоповый бит, без проверки на четность. Передача и прием сообщений осуществляется фиксированными пакетами бит, такой пакет называют кадром (рис. 2). Кадр состоит из стартового бита (с него начинается каждый кадр), битов данных (их количество можно изменяться от 5 до 9), бита проверки четности (проверка правильности передачи данных) и одного или двух стоп-битов (обязательный сигнал окончания кадра).
Рис. 2. Пакеты данных
В конце байта, перед стоповым битом, может находиться бит проверки четности. Так называют контрольный бит, служащий для проверки общей чётности двоичного числа (чётности количества единичных битов в числе). Он формируется при выполнении операции «Исключающее-ИЛИ» со всеми передаваемыми битами.
Настройка и программирование интерфейса UART
Рассмотрим регистры, имеющие отношение к приемопередатчику.
Регистр UDRx (UART Data Registor) – на физическом уровне представляет собой два разных регистра, имеющих одинаковый адрес. (у атмеги, с которой работаем, 8 битный)
| 05_Холера |
| 10.4. Исследование регистров |
| 1112 |
| 12 |
| 1568 |
| 1673 |
| 17 |
| 1703 |
| 2.2. Практическая работа к теме |
| 2091 |