RTV forum PL | NewsGroups PL

I2C z ATmega8 - Problemy z wysyłaniem danych do MAX9850, oscyloskop i kod

I2C - help help

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - I2C z ATmega8 - Problemy z wysyłaniem danych do MAX9850, oscyloskop i kod

Krzysztof
Guest

Tue Feb 07, 2006 11:20 pm   



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
}

AdelA
Guest

Fri Feb 10, 2006 7:10 am   



Widzę że nikt ci nie odpowiada. Na czymś innym niż assembler nie piszę
ale może przyda ci się unit asemblera do I2C. Jak tak to pisz na PRIV.
Może jakaś analiza głębsza itp.


--
AdelA
Mail PRIV na mojej WWW
www.adela.pl

DJ
Guest

Fri Feb 10, 2006 10:52 am   



A jeszcze przed TWCR by sie przydało zdefiniować dla odpowiednich
pinów portu active pullup, czyli np. sbi(port, bit).
ktory to port i bity sprawdz w datasheet.

DJ

Krzysztof
Guest

Sat Feb 11, 2006 9:56 pm   



Quote:
Widzę że nikt ci nie odpowiada. Na czymś innym niż assembler nie piszę
ale może przyda ci się unit asemblera do I2C. Jak tak to pisz na PRIV.
Może jakaś analiza głębsza itp.

Sprawę już rozwiązałem. Przyczyna okazała się trywialna, ale w trakcie
prac wydawało się, że takie podłączenie jest poprawne. Po prostu inny
układ podłączony do magistrali I2C (MAX1980 czy jakoś tak) zwierał
piny do masy... Ten kod, który tu umieściłem jest poprawny.
Dzięki za zainteresowanie moim problemem.

Pzdr.
K.

elektroda NewsGroups Forum Index - Elektronika Polska - I2C z ATmega8 - Problemy z wysyłaniem danych do MAX9850, oscyloskop i kod

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map