Problemy z I2C i PCF8574AP

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Problemy z I2C i PCF8574AP

Post autor: M@ciej » 05 gru 2007, 14:38

Witam wszystkich :)

Mam mały problem. Zbudowałem urządzenie sterowane mikrokontrolerem Atmega16. w którym zastosowałem PCF8574AP. Niestety próba wysłania czegokolwiek na port I2C niczym nie skutkuje. Do 8 linii wyjściowych mam podłączone diody LED przez tranzystory sterujące, więc poziom 1 odpowiadałby zaświeceniu diody. linie adresowe mam zwarte wszystkie do masy. Program napisałem w Bascomie. Oto fragment:

Kod: Zaznacz cały

$regfile = "m16def.dat"
$crystal = 12000000

Config Sda = Portc.1
Config Scl = Portc.0

Const 74adres = &B01110000 

 I2cstart
 I2csend 74adres , 0
 I2cstop

do
loop
end


Diody LED cały czas świecą i nie da się ich wygasić, wysyłając do kostki wartość 0, na wyjściach układu panuje niezmienne napięcie 1,56V. Próbowałem jako adres wysłać &H40 (odnaleziony w książce "Programowanie w języku Bascom"), oraz &H38 (odnaleziony w nocie katalogowej PCF8574A).
Linie magistrali mam podciągnięte rezystorami 4k3 (SMD).

Nie wiem, dlaczego nie chce to działać, pomóżcie!

[ Dodano: 2007-12-05, 15:10 ]
Gwoli jasności zamieszczam skrócony schemat urządzenia.
Załączniki
I2C.jpg

ZbeeGin

Post autor: ZbeeGin » 05 gru 2007, 18:13

M@ciej pisze: I2csend 74adres , 0
A próbowałeś wersji pełnej?:

Kod: Zaznacz cały

I2csend 74adres, 0, 1
Wyłączyłeś JTAG-a dla pewności?

A tak wogóle to kompilator przełknął stałą której nazwa rozpoczyna się od liczby? :roll:

Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Post autor: M@ciej » 05 gru 2007, 22:07

Niestety instrukcja z 3-cim parametrem powoduje wystąpienie błędu"Invalid datatype",

ale poradziłem sobie z problemem w inny sposób. Do urządzenia mam dołączony także wyświetlacz LCD i kilka przycisków. Napisałem programik, w którym przyciskiem można przeszukać wszystkie adresy i za każdym razem wysyłać 0 do kostki. Diody zgasły przy wartości 128! Sprawdziłem, to jest adres tej kostki, trochę dziwny, ale najważniejsze, że działa! :)

[ Dodano: 2007-12-05, 23:00 ]
Znalazłem w tym całym układzie jeszcze jeden szkopuł: wszystkie bity przesunięte są o 1 w lewo. Dioda od D7 świeci cały czas i nie da się jej zgasić, a np.:

Dioda przy D0 świeci dla wartości &B00000010, zamiast &B00000001
Dioda na D1 świeci po podaniu wartości &B00000100, zamiast &B00000010.

Dalej nie sprawdzałem, ale wygląda to dość podejrzanie :(

ODPOWIEDZ