Машинка на ДУ управлении своими руками. Аппаратная реализация 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 во вложении.