Mam nastepujacy problem: do at89s8252 chce podlaczyc czujnik temperatury na spi, mam nastepujace czesci:
formatting link
formatting link
ds1626
Wedlug not katalogowych (dallas) sa to termometry kompatybilne z trzy zylowa magistrala spi, jednak chyba nie. Wszystkie powyrzsze uklady maja jakies dziwne wyprowadzenia, i nie ma sdi sdo (ani mosi miso) tylko sio. Zastanawiam sie czy jestem w bledzie sadzac ze to spi czy podlacza sie to jakos specjalnie ?
pozdr. LB
Didn't find your answer? Ask the community — no account required.
I
invalid unparseable
U¿ytkownik "drozdu" snipped-for-privacy@wp.pl napisa³ w wiadomo¶ci news:cgmotm$p1a$ snipped-for-privacy@nemesis.news.tpi.pl...
<cut>
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
D
drozdu
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
I
invalid unparseable
U¿ytkownik "drozdu" snipped-for-privacy@wp.pl napisa³ w wiadomo¶ci news:cgn4tn$ou8$ snipped-for-privacy@nemesis.news.tpi.pl... Jak bedzie sie zachowywal ds1306 kiedy obie linie beda spiete
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
D
drozdu
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
I
invalid unparseable
U¿ytkownik "drozdu" snipped-for-privacy@wp.pl napisa³ w wiadomo¶ci news:cgnb76$2l8$ snipped-for-privacy@nemesis.news.tpi.pl... <cut>
Bo gdyby by³o I/O + zegar to ju¿ by by³o IIC (I2C) ;-)
Cieszê siê ¿e mog³em pomóc.
Pozdrawiam Krzysiek
D
drozdu
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)
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
I
invalid unparseable
U¿ytkownik "drozdu" snipped-for-privacy@wp.pl napisa³ w wiadomo¶ci news:cgsbqb$flc$ snipped-for-privacy@nemesis.news.tpi.pl... <cut>
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
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.