0
TWI 마스터에서 버스로 연결을 초기화하려고하면 어리석은 오류가 발생합니다. 시작 조건은 전송되지만 프로세서는 버스에 슬레이브 주소를 보내기 시작하는 무한 루프 루프에서 기다립니다.TWI on ATMega 2560 wait in 무한대 루프
또한 버스의 신호를 분석했는데 하나의 결과는 시계가 실행 중이지만 버스에 데이터가 전송되지 않는다는 것입니다.
표시된 화살표가있는 프로세서 대기 시간입니다.
우리는
void i2c_master_init() {
TWBR = (uint8_t)TWBR_val;
}
void i2c_master_stop() {
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
}
uint8_t i2c_master_start(uint8_t address) {
TWCR = 0;
TWCR |= (1<<TWSTA);
TWCR |= (1<<TWEN);
TWCR |= (1<<TWINT);
while(!(TWCR & (1<<TWINT))); <--
[...]
}
현재 모르겠어요 ...를 시작하고 버스를 초기화하려면 다음 코드를 사용, 잘못된 코드에 무슨 일이 일어나고 있는지. 아니면 뭔가 잘못하고있는 것입니다. 누구든지 나를 도울 수 있습니까?
미리 감사드립니다.
도움을 주셔서 감사합니다. - 그러나 우리는 현재 다른 문제를 발견했습니다. 클라이언트 (슬레이브)는 16MHz로 실행되고 호스트 (마스터)는 8MHz로 실행됩니다. 이것은 또한 문제입니다. 따라서 두 시스템은 통신 할 수 없습니다. – FoxPixel
그러나 지금까지만 문제를 발견했습니다. – FoxPixel
데이터 시트 장 24.5.2에 표시된대로 TWI가 'TWBR'및 'TWPS'레지스터를 구성하는 버스 속도 (최대 400kHz)를 설정할 수있는 동안 CPU 클럭에 대해 이야기하고 있습니다. 어떻게 계산되는지 [도서관 구현] (https://github.com/maximecb/AVR-Alarm-Clock/blob/master/i2cmaster.c)에서 살펴보십시오. – andy