Решил сделать программный I2C на Atmega8, несмотря на то, что имеется аппаратный. Но вот проблема, ведомый не хочет принимать ни один байт, все прозвонил на плате, питание есть, шина подтянута к питанию через 4.7 кОм. Вот код:
Код: Выделить всё
#define SDA PORTC.4
#define SCL PORTC.5
void I2C_Start(void) {
SDA=1;
SCL=1;
delay();
if(SDA==0) {er=1;};
if(SCL==0) {er=1;};
if(er==1) {send_lcd_symbol(set_first_line+14, 'X');};
SDA=0;
delay();
SCL=0;
}
void I2C_Send_byte(char byte) {
unsigned int bits;
for(bits=0; bits<8;bits++) {
if((byte&0x80)==0x80) {
SDA=1;
delay();
SCL=1;
delay();
SCL=0;
send_lcd_symbol(set_first_line+bits, '1');
}
else {
SDA=0;
delay();
SCL=1;
delay();
SCL=0;
send_lcd_symbol(set_first_line+bits, '0');
};
byte=byte<<1;
}
SDA=1;
delay();
SCL=1;
delay();
if(SDA==0) {
send_lcd_symbol(set_second_line+15, 'A');
sprintf(lcd_buffer, "TRANSFERRED!");
send_lcd(set_second_line, lcd_buffer);
} else {
send_lcd_symbol(set_first_line+15, 'E');
}
SCL=0;
}


