0
I2C 비트를 구현하여 PIC 18F4520의 OLED와 통신하려고합니다. 'clock stretching'이 없어도 잘 작동하지만 'clock stretching'을 넣으면 작동하지 않습니다. 또한 나는 ACK 펄스 전후에 '시계 늘이기'블록을 넣으려고했는데 두 가지 모두 작동하지 않습니다. 내 시계가 길게 늘어나는 이유는 무엇입니까 ??클럭 스트레칭으로 I2C 비트가 작동하지 않음
void send_packet(){
/* Soft_I2C_Start(); //Here its working fine
Soft_I2C_Write(0x78);
Soft_I2C_Write(tx_packet[0]);
Soft_I2C_Write(tx_packet[1]);
Soft_I2C_Stop();*/
unsigned char i,temp=0x78; //Slave Address with write permission
ASDA=1; //Start Condition
ASCL=1;
delay_ms(1);
ASDA=0;
ASCL=0;
for(i=0;i<8;i++){
if(temp & 0x80){
ASDA=1;
}
else{
ASDA=0;
}
temp=temp<<1;
ASCL=1;
ASCL=0;
}
ASCL=1; //Acknowledgment Pulse
ASCL=0;
while(PORTC.RC4==0); //Clock Stretching
for(i=0;i<8;i++){
if(tx_packet[0] & 0x80){
ASDA=1;
}
else{
ASDA=0;
}
tx_packet[0]=tx_packet[0]<<1;
ASCL=1;
ASCL=0;
}
ASCL=1; //Acknowledgment Pulse
ASCL=0;
while(PORTC.RC4==0); //Clock Stretching
for(i=0;i<8;i++){
if(tx_packet[1] & 0x80){
ASDA=1;
}
else{
ASDA=0;
}
tx_packet[1]=tx_packet[1]<<1;
ASCL=1;
ASCL=0;
}
ASCL=1; //Acknowledgment Pulse
ASCL=0;
while(PORTC.RC4==0); //Clock Stretching
ASCL=1; //Stop Condition
ASDA=1;
}
감사합니다. . . 나는 그 오류를 정정하지만 여전히 작동하지 않는다. . . 편집 된 코드 –
을 업데이트했습니다. . . 문제는 시계 스트레칭 라인입니다. . 나는 그것과 그 일을 삭제했다. . . 하지만 여전히 의심의 여지가 있습니다. –
내 질문도 업데이트되었습니다. –