Odp: MAX6662 i SPI oraz podobne



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "drozdu" <lbajger_at_nospam_wp.pl>
Subject: Odp: MAX6662 i SPI oraz podobne
Date: Fri, 27 Aug 2004 13:03:30 +0200


O DS1626/DS1726:
Te układy faktycznie maja dziwnie opisane wyjścia/wejścia SPI, ale 3-Wire
to
3-Wire.
Defakto w Swoim układzie mikroprocesorowym MISO i MOSI musisz spiąć razem
i
podłączyć do pinu DQ. a sygnał zegarowy (np. SCLK) do CLK/!CNV

O MAX6662:
Ten układ także ma SPI, zresztą pisze w nagłówku dokumentacji: "...with
SPI-Compatible Serial Interface"
Oznaczenia: SCLK - zegar, SIO - wejście/wyjście danych, czyli jak
poprzednio
MOSI i MISO spięte razem.

Reasumując jeśli układ ma interfejs 3-Wire to jest kompatybilny z SPI.

Wielu producentów różnie nazywa linie sygnałowe w swoich układach np.
TI: SIMO (Slave Input/Master Output) co jest odpowiednikiem MOSI (Master
OutPut / Slave Input) Atmela.

Pozdrawiam
Krzysiek

Tak wlasnie przypuszczalem ale dodatkowo na magistrale mam podpiety uklad
ds1306 (rtc) ktory te linie ma oddzielnie... Czy to nie bedzie sprawialo
problemow ?
Chyba nie bo w koncu chip wybierany jest przez CS, nie ?

Niestety z tego co pamietam to komunikacja wyglada tak ze przy wysylaniu
danych z
procesora odrazu sa wysylane dane spowrotem czyli jednoczesnie zajete linie
mosi/miso
podczas transferu (zob: multiple byte burst transfer w nocie ds1306), ale
pewno cos zle
wyczytalem. Jak bedzie sie zachowywal ds1306 kiedy obie linie beda spiete
skoro
on wymaga dwoch oddzielnych ?

pozdr.
LB



========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "drozdu" <lbajger_at_nospam_wp.pl>
Subject: Odp: MAX6662 i SPI oraz podobne
Date: Fri, 27 Aug 2004 14:51:59 +0200



Wg. noty katalogowej DS1306 da sie to normalnie zrobic.
Dlatego że do odczytu danych (READ) z RTC jest potrzebny sygnał zegara
SCLK.
A ten można wymusić tylko wysyłając do RTC bajt danych ("dummy byte"), w
Twoim przypadku najlepiej jak to będzie jak będziesz wysyłał 0x00, co
wymusi
sygnał SCLK a nie będzie śmieciło na lini SDO (Figure 8 doc. ds1306) i
dane
będą poprawnie docierać do mikroprocesora.
Jeśli mnie nie rozumiesz powiedz o tym.

Pozdrawiam
Krzysiek

Rozumiem ;) widac tam na sdi jeden bajt, po ktorym nastepuje transmisja na
sdo.
Tylko ze z tego co tam pisze ten bajt nie jest taki dummy, to adres... ;)
jednak
po mimo wszystko moje procedurki podczas odczytywania zeczywiscie wystawiaja
'dummy byte' przed odczytem kazdego bajtu... Jest dokladnie tak jak
napisales.
Tylko po co w takim razie 3 zyly, skoro wystarcza zegar i I/O ?

Dzieki za odpowiedz dzis sprawdze ukladzik.

btw: znalazlem w nocie dla ds1306 przy opisie do rys. 9
"* I/O is SDI and SDO tied together."

pozdr.
LB



========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "drozdu" <lbajger_at_nospam_wp.pl>
Subject: Odp: MAX6662 i SPI oraz podobne
Date: Sun, 29 Aug 2004 12:27:49 +0200


<cut>
Cieszę się że mogłem pomóc.

Polaczylem obie linie i wyglada na to ze wszystko dziala ok, mialem juz
gotowe procedury
dla zegara ds1306 i po polaczeniu dziala on dalej. Jednakze za cholere nie
moge komunikowac sie
z max6662.

procedurka wyglada u mnie tak:

int get_conv(void)
{
bit tmp = EA;
EA = 0;
CS = 0; // cs dla max6662 (p1.2)

******* 1 *******
SPDR = 0xC1; // czytamy rejestr temp.
while ((SPSR & 0x80) == 0)
;

th = SPDR; // odbior msb

*******
2 *******

SPDR = 0x00; // lub 0xFF
while ((SPSR & 0x80) == 0)
;

tl = SPDR; // odbior lsb

CS = 1;
EA = tmp;
return (th << 8 | tl);
}

i to nie daje mi nic. Nie mam niestety mozliwosci sprawdzenia co leci na
spi.
Podobnie wyglada kod dla ds1306 i dziala, co robie zle ?

pozdr.
LB



========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!agh.edu.pl!news.agh.edu.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Krzysztof Gawryś" <profrookTOWYTNIJ_at_nospam_o2.pl>
Subject: Re: MAX6662 i SPI oraz podobne
Date: Sun, 29 Aug 2004 17:16:41 +0200



Użytkownik "drozdu" <lbajger_at_nospam_wp.pl> napisał w wiadomości
news:cgsbqb$flc$1_at_nospam_nemesis.news.tpi.pl...
<cut>
procedurka wyglada u mnie tak:

int get_conv(void)
{
bit tmp = EA;
EA = 0;
CS = 0; // cs dla max6662 (p1.2)

*******
1 *******
SPDR = 0xC1; // czytamy rejestr temp.
while ((SPSR & 0x80) == 0)
;

th = SPDR; // odbior msb

*******
2 *******

SPDR = 0x00; // lub 0xFF
while ((SPSR & 0x80) == 0)
;

tl = SPDR; // odbior lsb

CS = 1;
EA = tmp;
return (th << 8 | tl);
}

troche źle to wygląda, jak dla mnie.
niewysyłasz pierwszego "dummy byte".
Musisz po wysłaniu polecenia 0xC1 do MAX6662 wysłać dodatkowy bajt,
i dopiero wtedy mozesz odczytywać msb.
Dlaczego tak? Ano dlatego żeby wymusić sygnał zegarowy potrzebny do
transmisji danych z MAX6662.
Sprawdz to, ale pamiętaj że niemożesz zbyt szybko wysłać tego "dummy byte",
najlepiej sprawdź w rejestrach SPI procesora czy bajt polecenia 0xC1 już
został wysłany i wtedy wyślij kolejny bajt, tym razem 0x00 i reszta Twojego
kodu...
Przykład:
*******
1 *******
SPDR = 0xC1; // czytamy rejestr temp.
// tu chwilkę zaczekaj lub sprawdź czy 0xC1 już zostało wysłane
SPDR = 0x00; // dummy byte, potrzebny do wymuszenia sygnalu zegara
while ((SPSR & 0x80) == 0)
;

th = SPDR; // odbior msb

*******
2 *******
...reszta kodu...

Krzysiek



========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Krzysztof Gawryś" <profrook_at_nospam_o2.pl>
Subject: Re: MAX6662 i SPI oraz podobne
Date: Fri, 27 Aug 2004 16:00:09 +0200



Użytkownik "drozdu" <lbajger_at_nospam_wp.pl> napisał w wiadomości
news:cgnb76$2l8$1_at_nospam_nemesis.news.tpi.pl...
<cut>
Tylko po co w takim razie 3 zyly, skoro wystarcza zegar i I/O ?

Dzieki za odpowiedz dzis sprawdze ukladzik.


Bo gdyby było I/O + zegar to już by było IIC (I2C) ;-)

Cieszę się że mogłem pomóc.

Pozdrawiam
Krzysiek



========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!opal.futuro.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Krzysztof Gawryś" <profrook_at_nospam_o2.pl>
Subject: Re: MAX6662 i SPI oraz podobne
Date: Fri, 27 Aug 2004 14:37:28 +0200



Użytkownik "drozdu" <lbajger_at_nospam_wp.pl> napisał w wiadomości
news:cgn4tn$ou8$1_at_nospam_nemesis.news.tpi.pl...
Jak bedzie sie zachowywal ds1306 kiedy obie linie beda spiete
skoro
on wymaga dwoch oddzielnych ?

pozdr.
LB


Wg. noty katalogowej DS1306 da sie to normalnie zrobic.
Dlatego że do odczytu danych (READ) z RTC jest potrzebny sygnał zegara SCLK.
A ten można wymusić tylko wysyłając do RTC bajt danych ("dummy byte"), w
Twoim przypadku najlepiej jak to będzie jak będziesz wysyłał 0x00, co wymusi
sygnał SCLK a nie będzie śmieciło na lini SDO (Figure 8 doc. ds1306) i dane
będą poprawnie docierać do mikroprocesora.
Jeśli mnie nie rozumiesz powiedz o tym.

Pozdrawiam
Krzysiek




========
Path: news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!newsfeed.pionier.net.pl!newsfeed.media.kyoto-u.ac.jp!newsfeed.icl.net!newsfeed.fjserv.net!newsfeed00.sul.t-online.de!newsfeed01.sul.t-online.de!t-online.de!newsfeed.tpinternet.pl!atlantis.ne