Drugie popo³udnie zastanawiam siê, dlaczego metoda wys³ania danych przez I2C, podana w nocie katalogowej ATmega8 nie chce dzia³aæ. Mam pod³±czony oscyloskop + podci±gaj±ce rezystory 10k dla nó¿ej SDA i SCL, ale wywo³anie tej funkcji z odpowiednimi parametrami, nie powoduje jakiejkolwiek zmiany na tych pinach.
Czy ustawienie: TWCR = (1<<TWEN) // prze³±czenie pinów PC4 i PC5 na sprzêtowe TWI
powinno ustawiæ te wyj¶cia w stan wysoki? U mnie mimo rezystorów, stan jest niski. Poni¿ej uproszczony kod, który nic nie robi...
void SendI2C(char rejestr, char dana) {
char SLA_W = 0x20; // adres uk³ad MAX9850 char DATAR = rejestr; // adres rejestru char DATA = dana; // dana do zapisu
//ustalanie prêdko¶ci transmisji I2C TWBR = 0x10; TWSR |= 0x03;
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); //Send START condition
while (!(TWCR & (1<<TWINT)));
// ########################################### // ## slave adress ### TWDR = SLA_W; // przepisanie bajtu adresu do wys³ania TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
// ########################################### // ## register adress ### TWDR = DATAR; // przepisanie bajtu danych do wys³ania TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
// ########################################### // ## data byte ###
TWDR = DATA; // przepisanie bajtu danych do wys³ania TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); //Transmit STOP condition }