На этом уроке мы с Вами разберём вариант аппаратной реализации приёмника по последовательному интерфейсу 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 во вложении.