Машинка на ДУ управлінні своїми руками. Апаратна реалізація I2C. Приймач на AVR

На цьому уроці ми з Вами розглянемо варіант апаратної реалізації приймача за послідовним інтерфейсом I2C мікроконтролера AVR.

Ініціалізується інтерфейс приймача аналогічно передавачу. Очікуємо прийом адреси приймача…

TWCR = (1 << TWINT)|(1 << TWEN)|(1 << TWEA); //Прийом адреси пристрою + підтвердження!
while (!(TWCR & (1 << TWINT)));

Виводимо значення регістра стану в термінал, для контролю прийому...

USART_TransmitByte(TWSR);

Регістр стану повертає код #60, прийнято власний АДРЕС і біт для задання типу операції, повернено ПІДТВЕРДЖЕННЯ. Приймаємо дані…

TWCR = (1 << TWINT)|(1 << TWEN)|(1 << TWEA); //Прийом байта буфера команд
while (!(TWCR & (1 << TWINT)));

Виводимо значення регістра стану і прийнятий байт в термінал...

USART_TransmitByte(TWSR);
USART_TransmitByte(TWDR);

Регістр стану повертає код #80, прийнято дані, повернено ПІДТВЕРДЖЕННЯ. Завантажуємо прийняті дані в буфер…

commandBuffer = TWDR;

Після закінчення прийому даних очікуємо команду СТОП…

TWCR = (1 << TWINT)|(1 << TWEN); //Прийом команди стоп
while (!(TWCR & (1 << TWINT)));

Виводимо значення регістра стану в термінал...

USART_TransmitByte(TWSR);

Виконуємо прийняті команди…

//Завантажуємо значення потужності
OCR2 = TWDR;

//Виконуємо команди напрямку руху і повороту
if (commandBuffer & (1 << 0)) PORTC |= (1 << PC1); else PORTC &= ~(1 << PC1);
if (commandBuffer & (1 << 1)) PORTC |= (1 << PC2); else PORTC &= ~(1 << PC2);
if (commandBuffer & (1 << 2)) PORTC |= (1 << PC3); else PORTC &= ~(1 << PC3);

Кілька слів на завершення. У наступному відео ми портируемо програму приймача і передавача на основі апаратного модуля I2C на МК PIC.

ПРОЕКТ З ІСХОДНИМ КОДОМ І СИМУЛЯЦІЯ В PROTEUS у вкладенні.

Прикреплені файли:

Top