Siemanko, mam problem z zapisem i odczytem danych z eepromu. Mam Atmegę168 taktowaną kwarcem 16MHz i mam w niej funkcje zapisu do zewnętrznego eepromu 24C64. Jednak program dochodzi tylko do momentu wysyłania 0xA0 i koniec... cisza. Gdy zmieniałem kwarc na 4Mhz Zapis i odczyt ładnie się wykonał.
// procedura transmisji sygnału START
void TWI_start(void)
{
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while (!(TWCR & (1<<TWINT)));
}
// procedura transmisji sygnału STOP
void TWI_stop(void)
{
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
while ((TWCR & (1<<TWSTO)));
}
// procedura transmisji bajtu danych
void TWI_write(char data)
{
TWDR = data;
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
}
//procedura odczytu bajtu danych
unsigned char TWI_read(unsigned char ack)
{
TWCR = (1<<TWINT) | (ack<<TWEA) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
return TWDR;
}
void EEPROM_Write(int adres, unsigned char dane)
{
TWI_start();
TWI_write(0xA0);
TWI_write((adres & 0xFF00) >> 8);
TWI_write(adres & 0x00FF);
TWI_write(dane);
TWI_stop();
_delay_ms(15);
}
unsigned char EEPROM_Read(int adres)
{
unsigned char odczyt;
TWI_start();
TWI_write(0xA0);
TWI_write((adres & 0xFF00) >> 8);
TWI_write(adres & 0x00FF);
TWI_start();
TWI_write(0xA1);
odczyt = TWI_read(0);
TWI_stop();
return odczyt;
}