support: Устройство 8 битного таймера
Инфа за 2 часа до экзамена
Как определить время в секундах:
F - тактовая частота
1/f - время выполнения 1 такта
Частота не фиксирована, допустим F = 8Мгц
Тогда период время выполнения одного такта 12.25E-8 c
количество тактов = кол-во секунд/период. Например, 1 секунда это 8000000 тактов. Это больше чем 2 байта, поэтому можно часть закинуть на предделитель.
Получается деление в 256, а оставшееся кол-во тактов - 31250
Глава в даташите System Clock and Clock Options
Обнова за 2 часа до экзамена
Clock Distribution показывает как идет распределение частоты
Внизу источники частоты, вверху потребители. AVR Clock control unit берет потребляемую чатоту и дополнительно делит её на количество, необходимое для каждого потребителя. С помощью clock multiplexor выбирается источник.
AVR Clock Control Unit - модуль управления тактовыми сигналами (часами).
ADC - аналого-цифровой преобразователь.
General I/O Modules - общие модули ввода-вывода.
CPU Core - ядро процессора.
18. USART
КРАТКО:
UDR - dara register, туда кладешь, оттуда забираешь. На физическом уровне это 2 регистра (один для передачи, другой для приема)
UCSRA - управления (хотя в основном тут флаги)
RXC - флаг завершения приема
TXC - флаг завершения передачи
UDRE - буферный байт освободился, можно положить новое значение
FE - флаг = 1 если стоп бит кривой
Объяснение на руссоком
https://www.youtube.com/watch?v=EN0nUflF-FU
Тоже объяснение
https://www.youtube.com/watch?v=dmLZTI9qZTw
[name=Дарья Воронская] это uart, а не usart, но usart это частично uart, так что ролик все равно будет полезным
[name=Дарья Воронская] Что есть контроль четности?. а нашёл. контроль чётности - это когда у тебя есть дополнительный бит, который равен тому, чета ли сумма бит данных. соответственно если данные дополнительного бита и чётности суммы битов данных не совпадают - есть ошибка.
[name=Дарья Воронская] Инфы про JTAG пока не нашел. Но вроде как это отладчик
::: spoiler Оригинал на инглише
During Reset, all I/O Registers are set to their initial values, and the program starts execution from the Reset Vector. The instruction placed at the Reset Vector must be a JMP – absolute jump – instruction to the reset handling routine. If the program never enables an interrupt
source, the Interrupt Vectors are not used, and regular program code can be placed at these locations. This is also the case if the Reset Vector is in the Application section while the Interrupt Vectors are in the Boot section or vice versa. The circuit diagram in Figure 15 shows the reset logic. Table 15 defines the electrical parameters of the reset circuitry. The I/O ports of the AVR are immediately reset to their initial state when a reset source goes active. This does not require any clock source to be running. After all reset sources have gone inactive, a delay counter is invoked, stretching the Internal Reset. This allows the power to reach a stable level before normal operation starts. The time-out period of the delay counter is defined by the user through the CKSEL Fuses. The different selections for the delay period are presented in “Clock Sources” on page 25.
:::
Во время сброса все регистры ввода-вывода устанавливаются в свои начальные значения, и программа начинает выполнение с вектора сброса. Инструкция, размещенная в векторе сброса, должна быть JMP (абсолютный переход) к процедуре обработки сброса. Если программа не активирует источник прерывания, векторы прерывания не используются, и в эти места может быть помещен обычный программный код. Порты ввода/вывода AVR немедленно сбрасываются в исходное состояние, когда становится активным источник сброса. Это не требует, чтобы какой-либо источник синхронизации работал. После того, как все источники сброса станут неактивными, вызывается счетчик задержки (delay counter), растягивающий внутренний сброс. Это позволяет питанию достичь стабильного уровня перед началом нормальной работы. Время ожидания счетчика задержки определяется пользователем через предохранители CKSEL. Различные варианты выбора периода задержки представлены в разделе «Источники синхронизации» (clock sources) на стр. 25.
Объяснение на русском
https://www.youtube.com/watch?v=Ceu2wJLiXXg
Теория
16. Таймер и счетчик со сторожевым регистром
Регистр WDTCR
Очень кратко:
7-5 - Не нужны
4 WDTOE - (turn off enable) - если 1, то можно выключить
3 WDE- (enable) - если 1, то работает. Если 0, то не работает только если у 4 - 1
2-0 WDP (timer prescaler) - число от 0 до 7 определяющее время для сброса. Минимальное для 0 - 16тиков (17мс), каждое последующее значение увеличивает время в 2 раза
Умножение целого на целое (беззначные)
; умножение - это сложение числа с самим собой n раз
ldi r22, n;
clr r18
mulR18:
add r18, r16 ; складываем с с самим собой
dec r22 ; уменьшаем счетчик цикла
cp r22, 0; проверяем, что в регистре 0
brne mulR18 ; если счетчик не кончился - считаем дальше
Схема на английском языке
Хорошее объяснение на английском https://www.youtube.com/watch?v=itYs-vz-E08
Схема на русском языке
Объяснение на русском
https://www.youtube.com/watch?v=PAHQaU3iY28&t=446s
Конспект
Ядро состоит, в первую очередь, из памяти программ (Flash Programm Memory) и Арифметико-логического устройства (ALU), блока управления (на диаграмме не показан) и программного счетчик (Program Counter). Также есть тактовый генератор, задающий импульсы относительно которых работают блоки микроконтроллера.
20. Схема АЦП (Аналогово-цифровой преобразователь)
ACSR - регистр управления аналогового компаратора
Аналоговый компаратор - позволяет сравнивать 2 числа и выносить вердикт, какое из них больше: 0 - первый больше второго, 1 - второй больше первого.
Биты:
ACD включение компаратора 0 включен, 1 выключен. По дефолту там ноль, а значит при старте компаратор включен.
ACBG — подключение к прямому входу компаратора внутреннего источника опорного напряжения (ИОН) на 1.22+(-)0.05V. Если 0 то ИОН не подключен.
объяснение на руссоком
https://www.youtube.com/watch?v=ncA_T1s2iYc
Конспект (в процессе)
Преобразователь аналога в цифры
Бывает нескольких типов
Например АЦП слежения
Если частота выше - поднять на 1. Если ниже - опустить на 1. Хорошо работает с небольшими изменениями, плохо с крутыми. Организация архитектуры простая, время быстрое
В авр используется АЦП последовательного приближения: подразрядного уравновешивания. Всего 4 бита.
Доп. инфа о прерываниях
Обработка
Вообще есть такой способ задать прерывания: тобишь вектор прерывания задает адресс команды, которая выполнится при прерывании.
Но, полностью заполненная таблица прерываний никому не нужна, поэтому вроде как можно написать
.org 0x(program adress) jmp ADC
TODO
:::danger
:watch: - над этим я в процессе работы или нашел какие-то вещи, которые не объяснены
:sunglasses: - то, что расписано прям от души, уверен как в своем имени
:::
[x] Вопрос 1 :sunglasses:
[x] Вопрос 2
[x] Вопрос 3 :sunglasses:
[x] Вопрос 4 :sunglasses:
в даташите страница 172
Объяснение на русском
этот ролик не по конкретно avr, но смысл объясняет верно, тем более, что это интерфейс, а интерфейсы на то и интерфейсы, чтобы быть реализованными схожим образом https://www.youtube.com/watch?v=_4KD29qnhNM
Интерфейс/шина для связи с другими устройствами, например, для записи данных в ROM
Этот интерфейс передает данные по проводам. По SDA идут данные, по SCL- импульсы тактирования
R1, R2 - подтягивающие регистры
Интерфейс I2C является широко распространенным и популярным стандартом передачи данных между устройствами.
Кратко
TWBR - bit rate register - скорость передачи. Нужна формула.
TWCR - control register
TWINT - флаг прерывания
TWEA - acknowledge bit
TWSTA - start bit
TWSTO - stop bit
TWWC - флаг конфликта записи. Этот флаг устанавливается аппаратно, когда выполняется запись в регистр данных (TWDR) при низком значении бита TWINT. То есть когда TWI модуль уже выполняет какие-то операции.
Объяснение на русском языке
https://www.youtube.com/watch?v=ceXdmGyizRw
Краткий конспект
Нельзя просто передать сигнал от одного устройства к другому, так как есть помехи, сигнал на старте устройств, и пр. Нужно какое-то вторичное отображение того, что сейчас идёт передача сигнала
После начала реального действия сигнала должен поступить некий импульс который идёт До окончания его реального действия. Приёмник должен успеть увидеть этот импульс, отреагировать на него. Импульс - clock или serial clock.
Если приёмник медленный, то действие сигнала нужно искуственно продлить
Можно работать как по фронту, так и по уровню импульса. Это настраивается в программе
Самый надёжный вариант, когда импульс синхронизации полностью находится внутри действия сигнала и определение идёт по уровню
Последовательный интерфейс, когда данные большого размера передаются по маленькому каналу последовательно (разбиваются и кусками передаются)
Регистр состояния MCUCSR предоставляет данные о том, какой источник сброса вызвал сброс микроконтроллера.
7 и 4 относятся к JTAG
[name=Дарья Воронская] про JTAG прогуглить
Bit 7 – JTD: JTAG Interface Disable
Когда этот бит равен нулю, интерфейс JTAG включен, если запрограммирован JTAGEN Fuse. Если этот бит равен единице, интерфейс JTAG отключен. Во избежание непреднамеренного отключения или включения
В интерфейсе JTAG при изменении этого бита должна соблюдаться временная последовательность: прикладное программное обеспечение должно дважды записать в этот бит желаемое значение в течение четырех циклов, чтобы изменить его значение.
Если интерфейс JTAG остается неподключенным к другим схемам JTAG, бит JTD должен быть установлен в единицу. Это делается для того, чтобы избежать статического тока на выводе TDO в интерфейсе JTAG.
support: Устройство таймера
Источники:
studfile.net
Даташит
Назначение
Cторожевой таймер , который представляет собой аппаратно-реализованную схему контроля над зависанием системы. Это таймер, который периодически сбрасывается контролируемой системой. Если вдруг сброса не произошло за определённый интервал времени после предыдущего сброса данного таймера, то происходит принудительная перезагрузка системы.
Это может быть полезно, когда мы ждем от другого устройства данных, потому что они могут и не прийти, или например, когда у нас есть цикл, из которого мы никогда не выходим. и если бы не система WDT, то это было бы зависание системы навечно. После того, как данные приходят - обновляем сброс (таким образом показываем WDT, что все збс, программа будет работать дальше). Сбрасывать WDT нужно регулярно
На микроконтроллере Atmega16 находятся 4 порта вврода/вывода: PortA, PortB, PortC и PortD. Каждый порт состоит из 8 независимых пинов и 3 регистров.
Объяснение на русском
https://www.youtube.com/watch?v=E_G8mUHlDWM=
Предназначены для обработки цифровой информации
Соотношение регистров
Как видно по схеме, данные всегда попадают в pinx.