Witam, mam problem z wysterowaniem ukladu TDA8425 przez I2C. Procesor ATMEGA32, uklad podlaczony pod sprzetowy I2C (PC0 oraz PC1) razem z RTC PCF8583
RTC 8583 dziala bez najmniejszych problemow..
Procedury ktore uzywam do komunikacji:
void i2c_start(void) {
TWBR = 32; TWSR &= ~0x03;
TWCR= (1 << TWINT) | (1 << TWSTA) | (1 << TWEN); while(! (TWCR & (1 << TWINT)) );
TWCR &= ~((1<<TWSTA)|(1<<TWINT));
}void i2c_stop(void) {
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); while ((TWCR & (1<<TWSTO)));
}unsigned char i2c_write(unsigned char data_byte) {
TWDR = data_byte; TWCR |= 0b10000000;
while (!(TWCR & 0b10000000));
if (((TWSR & 0xF8) != 0x18) && ((TWSR & 0xF8) != 0x28) && ((TWSR &
0xF8) != 0x40)) return 1;return 0;
}nsigned char i2c_read(unsigned char ack) {
if (ack == 1) { TWCR |= 0b10000000; } else { TWCR &= 0b10111111; };
while (!(TWCR & 0b10000000));
if (((TWSR & 0xF8) != 0x50) && ((TWSR & 0xF8) != 0x58)) return 1;
return TWDR;
}Moj problem polega na tym, ze program zapetla sie. W/g noty katalogowej aby np ustawic glosnosc nalezy wyslac:
1) MAD 2) adres komorki w TDA 3) wartoscNo wiec wysylam:
i2c_start(); i2c_write(0x82); // adres i2c_write(0x00); // volume i2c_write(0xFF); // value i2c_stop();
Po wyslaniu 0x00 program zapetla sie. Jezeli zamiast 0x82 wysle kazda inna wartosc to przejdzie dalej, ale dane nie trafia do procka audio...
Czy moglby ktos powiedziec co robie nie tak? Tutaj nota katalogowa TDA8425 --->