Problemy z transmisją danych I2C w ATmega8 - brak sygnału na pinach SDA/SCL

I2C - help help





Poprzedni Następny
Wiadomość
Spis treści
From: "Krzysztof" <krzysztof.gedroyc_at_nospam_wp.pl>
Subject: I2C - help help
Date: Wed, 8 Feb 2006 00:20:01 +0100


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
}



Poprzedni Następny
Wiadomość
Spis treści
From: AdelA <a_at_nospam_b.c>
Subject: Re: I2C - help help
Date: Fri, 10 Feb 2006 08:10:14 +0100


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


Poprzedni Następny
Wiadomość
Spis treści
From: "Krzysztof" <krzysztof.gedroyc_at_nospam_wp.pl>
Subject: Re: I2C - help help
Date: Sat, 11 Feb 2006 22:56:51 +0100


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.