Машинка на ДУ управлінні своїми руками. Апаратна реалізація 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 у вкладенні.
Прикреплені файли:
- remote_control_i2c.rar (97 Кб)