RTV forum PL | NewsGroups PL

Jak poprawnie odczytać i zapisać dane z układu DS1307 w protokole I2C?

problem z komunikacją z układem DS1307

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak poprawnie odczytać i zapisać dane z układu DS1307 w protokole I2C?

nuclear
Guest

Sat Feb 24, 2007 6:59 pm   



Witam, próbuję się skomunikować z tym układem, tylko nie bardzo potrafię
zinterpretować pdf-a. Chodzi o to, jak te dane są przesyłane - dobrze
rozumiem ze jak wysyłamy dane, to transmisja wyglada tak, ze mamy start,
potem bajt adresu (0xD0) a potem idą bajty które są zapisywane w kolejnych
komorkach w pamieci układu (00,01,02...) tak długo dopóki master nie skonczy
transmisji? a w drugą stronę to wyglada tak ze master wysyła start i adres
(0xD1) a potem zczytuje po kolei bajty z pamieci w kolejnosci 00,01 itd, tak
długo dopoki slawe nie przerwie transmisji (mo własnie kiedy, po wysłaniu
bajtu 07 ? czy tez działa to jakos inaczej?

Kret
Guest

Sat Feb 24, 2007 9:49 pm   



nuclear napisał(a):
Quote:
Witam, próbuję się skomunikować z tym układem, tylko nie bardzo potrafię
zinterpretować pdf-a. Chodzi o to, jak te dane są przesyłane - dobrze
rozumiem ze jak wysyłamy dane, to transmisja wyglada tak, ze mamy start,
potem bajt adresu (0xD0) a potem idą bajty które są zapisywane w kolejnych
komorkach w pamieci układu (00,01,02...)

Tu jest błąd. Pierwszy bajt po zaadresowaniu układu to adres komórki, do
której zapisujesz.
Pamiętaj, że aby uruchomić licznik musisz ustawić bit 7 w komórce 0x00
(maska 0x80).

tak długo dopóki master nie skonczy
Quote:
transmisji? a w drugą stronę to wyglada tak ze master wysyła start i adres
(0xD1) a potem zczytuje po kolei bajty z pamieci w kolejnosci 00,01 itd, tak
długo dopoki slawe nie przerwie transmisji (mo własnie kiedy, po wysłaniu
bajtu 07 ? czy tez działa to jakos inaczej?




Pozdrawiam
Przemysław Podwapiński

nuclear
Guest

Sat Feb 24, 2007 10:38 pm   



Użytkownik "Kret" <moritz00@poczta.fm> napisał w wiadomości
news:erq8e3$4lq$1@atlantis.news.tpi.pl...
Quote:
nuclear napisał(a):
Witam, próbuję się skomunikować z tym układem, tylko nie bardzo potrafię
zinterpretować pdf-a. Chodzi o to, jak te dane są przesyłane - dobrze
rozumiem ze jak wysyłamy dane, to transmisja wyglada tak, ze mamy start,
potem bajt adresu (0xD0) a potem idą bajty które są zapisywane w
kolejnych komorkach w pamieci układu (00,01,02...)

Tu jest błąd. Pierwszy bajt po zaadresowaniu układu to adres komórki, do
której zapisujesz.
Pamiętaj, że aby uruchomić licznik musisz ustawić bit 7 w komórce 0x00
(maska 0x80).


czyli to ma wygladać tak:

start
bajt abresu ukladu (D0)
bajt adresu komorki (00)
bajt danych komorki 00
bajt danych komorki 01
..
..
..
bajt danych komorki 07
stop

?

a w odczycie tez jest adres?

czyli

start
bajt adresu układu (D1)
bajt adresu komorki (00)
odczyt bajtu z komorki 00
odczyt bajtu z komorki 01
..
..
..
bajt odczytu z komorki 07
stop

?
czy też to samo tylko bez adresu komorki?

a moze coś takiego?

start
bajt adresu układu (D0)
bajt adresu komorki (00)
stop
start
bajt adresu układu (D1)
odczyt bajtu z komorki 00
odczyt bajtu z komorki 01
..
..
..
bajt odczytu z komorki 07
stop

bo zaczynam sie w tym gubić...

Kret
Guest

Sun Feb 25, 2007 1:07 am   



nuclear napisał(a):

Quote:
czyli to ma wygladać tak:

start
bajt abresu ukladu (D0)
bajt adresu komorki (00)
bajt danych komorki 00
bajt danych komorki 01
.
.
.
bajt danych komorki 07
stop

?

a w odczycie tez jest adres?

czyli

start
bajt adresu układu (D1)
bajt adresu komorki (00)
odczyt bajtu z komorki 00
odczyt bajtu z komorki 01
.
.
.
bajt odczytu z komorki 07
stop

?
czy też to samo tylko bez adresu komorki?

a moze coś takiego?

start
bajt adresu układu (D0)
bajt adresu komorki (00)
stop
start
bajt adresu układu (D1)
odczyt bajtu z komorki 00
odczyt bajtu z komorki 01
.
.
.
bajt odczytu z komorki 07
stop

bo zaczynam sie w tym gubić...

Co do zapisu do DS'a to rozumujesz poprawnie.

Przy odczycie nie wysylasz juz adresu komorki. Zaczynasz odczytywac w
miescu, gdzie ostatnio zapisywales.
Jesli chcesz okreslic inny rejestr (tj. sytuacja gdy np. skonczyles
zapis na 8 komorce, a chcesz odczytac 2-ga), to musisz zrobic tzw. 'fake
write' - ustawienie wskaznika komorki, czyli sekwencja polecen jak w
ostatnim przykladzie, ktory podales. Pierwszy stop nie jest konieczny,
wiec moze to wygladac tak:

start
bajt adresu układu (D0)
bajt adresu komorki (00)

start
bajt adresu układu (D1)
odczyt bajtu z komorki 00
odczyt bajtu z komorki 01
..
..
..
bajt odczytu z komorki 07
stop

nuclear
Guest

Sun Feb 25, 2007 1:07 pm   



dobra, wydaje mi sie ze zrozumialem, zapis to faktycznie
start,adres układu(D0),adres pierwszej komorki(00),dane pierwszej
komorki,dane drugiej komorki....i tak dopoki master nie powie stop.
ale z odczytem mam problem, wydaje mi sie ze powinno być
start,(D0),(00),start,(D1), odczyt komorki 00, odczyt komorki 01 itd
a u mnie dziala jedynie kombinacja start,(D0),(nr komorki
odczytywanej),start,dane komorki odczytywanej,stop
i dla kazdej z komorek z osobna musze inicjować komunikacje...całośc dziala
bez zarzuru, ale wydaje mi sie ze mozna by to zrobić prosciej...

Kret
Guest

Sun Feb 25, 2007 1:32 pm   



nuclear napisał(a):

Quote:
czyli to ma wygladać tak:

start
bajt abresu ukladu (D0)
bajt adresu komorki (00)
bajt danych komorki 00
bajt danych komorki 01
.
.
.
bajt danych komorki 07
stop

?

a w odczycie tez jest adres?

czyli

start
bajt adresu układu (D1)
bajt adresu komorki (00)
odczyt bajtu z komorki 00
odczyt bajtu z komorki 01
.
.
.
bajt odczytu z komorki 07
stop

?
czy też to samo tylko bez adresu komorki?

a moze coś takiego?

start
bajt adresu układu (D0)
bajt adresu komorki (00)
stop
start
bajt adresu układu (D1)
odczyt bajtu z komorki 00
odczyt bajtu z komorki 01
.
.
.
bajt odczytu z komorki 07
stop

bo zaczynam sie w tym gubić...


Są jakieś problemy z serwerem news.tpi, więc wysłam jeszcze raz:

Co do zapisu do DS'a to rozumujesz poprawnie.
Przy odczycie nie wysylasz juz adresu komorki. Zaczynasz odczytywac w
miescu, gdzie ostatnio zapisywales.
Jesli chcesz okreslic inny rejestr (tj. sytuacja gdy np. skonczyles
zapis na 8 komorce, a chcesz odczytac 2-ga), to musisz zrobic tzw. 'fake
write' - ustawienie wskaznika komorki, czyli sekwencja polecen jak w
ostatnim przykladzie, ktory podales. Pierwszy stop nie jest konieczny,
wiec moze to wygladac tak:

start
bajt adresu układu (D0)
bajt adresu komorki (00)

start
bajt adresu układu (D1)
odczyt bajtu z komorki 00
odczyt bajtu z komorki 01
..
..
..
bajt odczytu z komorki 07
stop

Podczas odczytu jest możliwość pobrania więcej jak jednego bajtu. W
Twoim poście zasygnalizowałeś problem z odczytem większej ilości komórek
- sprawdź swoje procedury na generowanie ACK i NACK.

nuclear
Guest

Sun Feb 25, 2007 2:50 pm   



Quote:
Ja tylko dodatm od siebie abys nie zapomnial podlaczyc bateri do tego
uklady przy uruchamianiu. Bez niej ten uklad wariuje i wysle ci glupoty.

to juz zauwazyłem - bez bateri w ogole mi nie odpowiadał...

nuclear
Guest

Sun Feb 25, 2007 9:29 pm   



Quote:
Podczas odczytu jest możliwość pobrania więcej jak jednego bajtu. W
Twoim poście zasygnalizowałeś problem z odczytem większej ilości komórek -
sprawdź swoje procedury na generowanie ACK i NACK.

dzieki, pomogło, faktycznie był bład w procedurze odczytu, i zawsze
generował nack.... teraz jest dobrze, odbiera tyle bajtów ile chcę Wink

elektroda NewsGroups Forum Index - Elektronika Polska - Jak poprawnie odczytać i zapisać dane z układu DS1307 w protokole I2C?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map
Nasz serwis wykorzystuje pliki cookies. Korzystanie z witryny oznacza zgodę na ich zapis lub odczyt zgodnie z ustawieniami przeglądarki. Informacja o ciasteczkach