# 8. Устройство управления контроллером ШИМ.

## TODO:
- ## Нормализовать отправку команд, добиться согласованности в отправке и чтении, пока с этим проблемы
- ## Переделать отправку значение с мастера на слейв, брать состояния с текущего устройства, сначала их изменять по нажатию кнопки и только потом передавать модифицированные значения на slave
- ## Переделать обработку команд,сделать более удобной
- ## Убрать говнокод хд
- ## Перетащить проект в Microchip Studio, вынести все .h и .c файлы по проекту

## Описание

### Устройство представляет из себя I2C ведущее устройство.

### Управляет устройством из задания 7. Имеет 6 кнопок:

- #### Включить ШИМ.
- #### Выключить ШИМ.
- #### Увеличить частоту на 25% от текущего.
- #### Уменьшить частоту на 20% от текущего.
- #### Увеличить скважность на 10% от текущего.
- #### Уменьшить скважность на 10% от текущего.

### Пояснения к заданию

- #### Состояние ШИМ брать с Master устройста и передавать на Slave устройство.

- #### Отправляемые команды - 16 бит, число с фиксированной запятой (12 бит целое, 4 - дробная часть).

### Набор команд

| Команда | Описание                                  |
|:--------|:------------------------------------------|
| 0x01:   | Включить ШИМ.                             |
| 0x02:   | Выключить ШИМ.                            |
| 0x03:   | Увеличить частоту на 25% от текущего.     |
| 0x04:   | Уменьшить частоту на 20% от текущего.     |
| 0x05:   | Увеличить скважность на 10% от текущего   |
| 0x06:   | Уменьшить скважность. на 10% от текущего  |

### Описание регистров для I2C

| Регистр | Описание                                                                                                                                                              |
|:--------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| TWBR    | Отвечает за задание битрейта передачи данных. Его значение вычисляется по следующей формуле: ((F_CPU / I2C_FREQ) - 16) / 2. Формула производит округление результата. |
| TWCR    | Регистр управления. Содержит в себе биты управления.                                                                                                                  |
| TWDR    | Отвечает за передаваемые или принимаемые данные. В этом регистре хранится один байт данных в памяти.                                                                  |
| TWAR    | Cодержит адрес устройства, по которому микроконтроллер может быть доступен в сети I2C.                                                                                |
| TODO:   | N/A                                                                                                                                                                   |

### Описание флагов

| Флаг  | Описание                                                                         |
|:------|:---------------------------------------------------------------------------------|
| TWINT | Флаг TWINT (TWI Interrupt Flag), показывающий, что операция TWI была выполнена.  |
| TWEN  | флаг TWEN (TWI Enable), включающий работу TWI интерфейса.                        |
| TWEA  | флаг TWEA (TWI Enable Acknowledge), чтобы включить ответное подтверждение (ACK). |
| TODO: | N/A                                                                              |

### Иформация по TW

**TWI (Two-Wire Interface)** - это двухпроводный последовательный интерфейс для обмена данными, основанный на
коммуникационном стандарте I2C (Inter-Integrated Circuit). TWI был разработан компанией Atmel (теперь Microchip
Technology) и является улучшенной версией I2C.

TWI обеспечивает ориентированную на сообщения линию связи с возможностью мастер-ведомый обмен. Обычно в TWI существует
одно устройство, которое устанавливает шину (master), и одно или несколько устройств, которые подключаются к шине в
качестве активных (ved) узлов.

TWI работает со скоростями передачи данных от 100 кбит/с до 400 кбит/с, хотя некоторые устройства могут поддерживать
скорость в 1 Мбит/с.

Принцип работы TWI основан на использовании двух проводов - SDA (Serial Data) и SCL (Serial Clock). SDA - это линия для
передачи данных, а SCL - это линия для синхронизации передачи данных. Модулем TWI можно передавать данные и исполнять
команды чтения/записи, после чего мастер подтверждает успешность операции.

TWI нашел широкое применение во многих устройствах, таких как датчики, LCD-экраны, термометры, акселерометры, сенсорные
панели, электронные блоки питания и т.д.