<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=44&amp;t=10368&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-01-25T20:58:32+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=44&amp;t=10368&amp;mode</id>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-01-25T20:58:32+01:00</updated>
<published>2015-01-25T20:58:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115887#p115887</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115887#p115887"/>
<title type="html"><![CDATA[Re: PIC32 problem z komunikacją SPI MCP23S17]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115887#p115887"><![CDATA[
Napisz tą funkcję w oparciu o przerwania. Jedne od przesunięcia danych z rejestru SPIxBUF do SPIxSR dla pierwszych 2 bajtów i od wysunięcia w świat wszystkich bitów z SPIxSR dla 3 bajtu. Potrzebna będzie jakaś zmienna licząca bajty.<br />W takim układzie pierwsze przerwania zapewnią wysyłanie 3 bajtów bez zwłoki, a 3 zwolnienie CS.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 25 sty 2015, o 20:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dexter]]></name></author>
<updated>2015-01-25T20:46:04+01:00</updated>
<published>2015-01-25T20:46:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115881#p115881</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115881#p115881"/>
<title type="html"><![CDATA[Re: PIC32 problem z komunikacją SPI MCP23S17]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115881#p115881"><![CDATA[
Ustawienie tego bitu FRMSYPW nie powoduje żadnych zmian, próbowałem ustawić ramkę z aktywnym stanem LOW, generowaną po każdej wysłanej danej do tego trwającą  przez całą wysyłaną daną i nic to nie dało... Impuls generuje sie na oko po pierwszym bajcie a potem jest ciągle zero do końca transmsji.<br /><br />Co do oczekiwania to na początku nie robi to żadnego problemu bo setup jest wykonywany tylko raz gorzej później gdy muszę ustawić jakieś wyjścia albo w przerwaniu odczytać wejścia. Tu już nie może być oczekiwania.<br /><br />Kombinuję jeszcze nad funkcją która pobierałaby po jednym bacie ze zmiennej bufor_spi następnie blokowała się aż do wysłania tego bajtu po czym po zakończeniu nadawania pobierałaby kolejny bajt i tak w koło macieju do opróżnienia bufora. Nie wiem tylko jak zachowa się program jeśli w czasie wysyłania wystąpi jakieś zdarzenie i powrót do pobrania kolejnego bajtu zajmie prockowi troche wiecej czasu. Wtedy odstęp np. w połowie ramki będzie dłuższy i prawie losowy. Obawiam się że ekspander tego nie przyjmie. No ale próba nie strzelba <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=907">dexter</a> — 25 sty 2015, o 20:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-01-25T20:24:29+01:00</updated>
<published>2015-01-25T20:24:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115874#p115874</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115874#p115874"/>
<title type="html"><![CDATA[Re: PIC32 problem z komunikacją SPI MCP23S17]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115874#p115874"><![CDATA[
<div class="quotetitle">dexter napisał(a):</div><div class="quotecontent"><br />Dziwne jest to że bez względu na to ile danych wysyłam, sygnał CS generowany jest po 1 bajcie a dalej pozostaje niski do końca transmisji.<br /></div><br />To zrób tak:<br />[syntax=c]void MCP23S17_write(unsigned char address, unsigned char value)<br />{<br />   SPI1BUF = IO_DEVICE_ADDRESS_WRITE&lt;&lt;24 | address&lt;&lt;16 | value&lt;&lt;8 | value;<br />}[/syntax]<br />Jest jeszcze taki bit FRMSYPW:<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />FRMSYPW: Frame Sync Pulse Width bit<br />1 = Frame sync pulse is one character wide<br />0 = Frame sync pulse is one clock wide<br /></div><br />Nie mam po ręką tych funkcji więc napiszę tak:<br />[syntax=c]SPI1CONbits.FRMSYPW = 1; //Frame sync pulse is one character wide[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 pikosekundzie ]</span></strong><br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />procek wysyła dłużej dane niż siedzi w tej funkcji.<br /></div><br />No rzeczywiście tak jest. Zapomniałem o tym. Można by w przerwaniu po zakończeniu wysyłania ustawiać ten pin, ale to będzie działać tylko jak wysyłasz raz na jakiś czas jedną ramkę. Podczas startowej konfiguracji robisz to 3 razy i tam należałoby czekać co można zrobić bo to wykonuje się raz przy starcie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 25 sty 2015, o 20:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dexter]]></name></author>
<updated>2015-01-25T19:48:13+01:00</updated>
<published>2015-01-25T19:48:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115864#p115864</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115864#p115864"/>
<title type="html"><![CDATA[Re: PIC32 problem z komunikacją SPI MCP23S17]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115864#p115864"><![CDATA[
Też o tym pomyślałem i napisałem dokładnie taką samą funkcję tylko że też nie działa. Pin CS jest przemiatany tak jak sie spodziewałem ale w trakcie transmisji, tzn. procek wysyła dłużej dane niż siedzi w tej funkcji. <br /><br />Objawia się to przemiataniem pinu CS ale zupełnie niezgodnie z tym co aktualnie wysyła SPI, pomogło dodanie oczekiwania po każdym putcSPI1 aż transmisja się zakończy. To działa świetnie ale wtedy pada USB bo procek oczekuje przy SPI.<br /><br />Jedyny sposób to pełna sprzętowa obsługa transmisji<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=907">dexter</a> — 25 sty 2015, o 19:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-01-25T19:42:58+01:00</updated>
<published>2015-01-25T19:42:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115863#p115863</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115863#p115863"/>
<title type="html"><![CDATA[Re: PIC32 problem z komunikacją SPI MCP23S17]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115863#p115863"><![CDATA[
Pozostaje samemu sterować CS. Nie ma aż tak dużo roboty. Tylko:<br />[syntax=c]PLIB_SPI_SlaveSelectDisable(SPI_ID_1);[/syntax]<br />oraz:<br />[syntax=c]void MCP23S17_write(unsigned char address, unsigned char value)<br />{<br />   SPI_CS_LOW; //odpowiednie makro<br />   putcSPI1(IO_DEVICE_ADDRESS_WRITE);<br />   putcSPI1(address);<br />   putcSPI1(value);<br />   SPI_CS_HIGH;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 25 sty 2015, o 19:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dexter]]></name></author>
<updated>2015-01-25T17:28:29+01:00</updated>
<published>2015-01-25T17:28:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115841#p115841</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115841#p115841"/>
<title type="html"><![CDATA[Re: PIC32 problem z komunikacją SPI MCP23S17]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115841#p115841"><![CDATA[
Zmiana na 32 bajty powoduje tylko wydłużenie transmisji, niestety pin CS jest w stanie niskim przez całą transmisję więc ekspander nie reaguje.<br /><br />Dziwne jest to że bez względu na to ile danych wysyłam, sygnał CS generowany jest po 1 bajcie a dalej pozostaje niski do końca transmisji.<br />Próbowałem pozmieniać ustawienia ramki według noty tak żeby mikrokontroler generował sygnał synchronizacji po każdym bajcie i trwający przez cały bajt ale procek w ogóle nie reaguje na takie ustawienia.<br /><br />Albo ja coś robię nie tak albo działa tu jakaś kosmiczna upierdliwa energia...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=907">dexter</a> — 25 sty 2015, o 17:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-01-24T23:12:48+01:00</updated>
<published>2015-01-24T23:12:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115764#p115764</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115764#p115764"/>
<title type="html"><![CDATA[Re: PIC32 problem z komunikacją SPI MCP23S17]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115764#p115764"><![CDATA[
To zmień długość na 32 i wysyłaj jeszcze 4 bajt taki jak 3:<br />[syntax=c]PLIB_SPI_CommunicationWidthSelect(SPI_ID_1, SPI_COMMUNICATION_WIDTH_32BITS);[/syntax]<br />bo wydaje mi się że nie można tam wstawić 24 bity<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 24 sty 2015, o 23:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dexter]]></name></author>
<updated>2015-01-24T22:53:03+01:00</updated>
<published>2015-01-24T22:53:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115760#p115760</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115760#p115760"/>
<title type="html"><![CDATA[Re: PIC32 problem z komunikacją SPI MCP23S17]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115760#p115760"><![CDATA[
Niestety włączenie tego narobiło jeszcze większego bałaganu, teraz procek przemiata CS co kilka bitów.<br /><br />W moim kodzie zmienia stan CS na niski tylko na początku transmisji i przywraca stan wysoki po zakończeniu bez względu na to ile danych wysyłam. Powinien zmieniać stan CS za każdym razem gdy chcę wysłać nowe dane.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=907">dexter</a> — 24 sty 2015, o 22:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-01-24T22:45:22+01:00</updated>
<published>2015-01-24T22:45:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115758#p115758</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115758#p115758"/>
<title type="html"><![CDATA[Re: PIC32 problem z komunikacją SPI MCP23S17]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115758#p115758"><![CDATA[
<div class="quotetitle">dexter napisał(a):</div><div class="quotecontent"><br />Teraz pytanie czy da się to jakoś zrobić sprzętowo?<br /></div><br />Włącz Frame Sync Pulse<br />[syntax=c]PLIB_SPI_FramedCommunicationEnable( SPI_ID_1  );[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 24 sty 2015, o 22:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dexter]]></name></author>
<updated>2015-01-24T22:13:06+01:00</updated>
<published>2015-01-24T22:13:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115756#p115756</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115756#p115756"/>
<title type="html"><![CDATA[Re: PIC32 problem z komunikacją SPI MCP23S17]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115756#p115756"><![CDATA[
Doszukałem się co jest nie tak dzięki analizie oscyloskopem tego co leci po SPI.<br /><br />Okazało się że procek automatycznie nie dzieli transmisji na poszczególne tylko wysyła wszystko jak leci przy jednym stanie na pinie CS. <br />Czyli dla <br />[syntax=c]MCP23S17_write(IOCON,0x18);<br />   MCP23S17_write(IODIRA,0x00);<br />   MCP23S17_write(OLATA,0xFF);[/syntax]<br /><br />wystawia stan niski na CS i śle wszystko a powinien za każdym razem gdy wchodzi do wysyłania przemiatać pinem CS. <br /><br />Teraz pytanie czy da się to jakoś zrobić sprzętowo? Bo nie uśmiecha mi się przemiatanie tym pinem programowo gdy transmisja jest sprzętowa.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=907">dexter</a> — 24 sty 2015, o 22:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2015-01-24T20:59:02+01:00</updated>
<published>2015-01-24T20:59:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115743#p115743</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115743#p115743"/>
<title type="html"><![CDATA[Re: PIC32 problem z komunikacją SPI MCP23S17]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115743#p115743"><![CDATA[
<!-- m --><a class="postlink" href="https://gitorious.org/pic32mx/tft/source/9ca0e73050a33e246dd3b084defcb1be3e23ea9a:MCP23S17defs.h" >https://gitorious.org/pic32mx/tft/sourc ... 3S17defs.h</a><!-- m -->  <br />zobacz to<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 24 sty 2015, o 20:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dexter]]></name></author>
<updated>2015-01-24T20:38:04+01:00</updated>
<published>2015-01-24T20:38:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115738#p115738</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115738#p115738"/>
<title type="html"><![CDATA[PIC32 problem z komunikacją SPI MCP23S17]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10368&amp;p=115738#p115738"><![CDATA[
Witam wszystkich, jako że nie widzę na forum działu dla PIC'ów napiszę w tym temacie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Od kilkunastu dni, jak pewnie niektórzy z czatu wiedzą walczę z komunikacją PIC32MX250F128B za pomocą SPI z ekspanderem MCP23S17. Wreszcie udało mi się zmusić go do jakiejkolwiek reakcji na przesyłane dane. Wysyłałem mu rozkaz ustawienia wszystkich portów jako wyjścia w stanie 1. <br />Ekspander ustawia 1 ale tylko na niektórych pinach co mnie nieźle zaskoczyło i całkiem zbiło z tropu... Mógłby ktoś bardziej doświadczony rzucić okiem i podpowiedzieć gdzie zrobiłem błąd? Procek pracuje na 40MHz.<br /><br />SPI konfiguruję tak:<br />[syntax=c]PLIB_SPI_Disable(SPI_ID_1);<br />    PLIB_SPI_MasterEnable(SPI_ID_1);<br />    PLIB_SPI_SlaveSelectEnable(SPI_ID_1);<br />    PLIB_SPI_StopInIdleDisable(SPI_ID_1);<br />    PLIB_SPI_ClockPolaritySelect(SPI_ID_1, SPI_CLOCK_POLARITY_IDLE_LOW);<br />    PLIB_SPI_OutputDataPhaseSelect(SPI_ID_1, SPI_OUTPUT_DATA_PHASE_ON_IDLE_TO_ACTIVE_CLOCK);<br />    PLIB_SPI_InputSamplePhaseSelect(SPI_ID_1, SPI_INPUT_SAMPLING_PHASE_AT_END);<br />    PLIB_SPI_CommunicationWidthSelect(SPI_ID_1, SPI_COMMUNICATION_WIDTH_8BITS);<br />    PLIB_SPI_FramedCommunicationDisable( SPI_ID_1  );<br />    PLIB_SPI_FIFODisable( SPI_ID_1  );<br />    PLIB_SPI_BaudRateSet(SPI_ID_1, 40000000, 100000);<br />    PLIB_SPI_Enable(SPI_ID_1);[/syntax]<br /><br />A do ekspandera wysyłam dane tak:<br />[syntax=c]#define IO_DEVICE_ADDRESS_WRITE   0x40<br />#define IO_DEVICE_ADDRESS_READ    0x41<br /> <br />#define IODIRA        0x00      //Data Direction Register for PORTA<br />#define IODIRB        0x01      //Data Direction Register for PORTB<br />#define IPOLA         0x02      //Input Polarity Register for PORTA<br />#define IPOLB         0x03      //Input Polarity Register for PORTB<br />#define GPINTENA      0x04      //Interrupt-on-change enable Register for PORTA<br />#define GPINTENB      0x05      //Interrupt-on-change enable Register for PORTB<br />#define DEFVALA       0x06      //Default Value Register for PORTA<br />#define DEFVALB       0x07      //Default Value Register for PORTB<br />#define INTCONA       0x08      //Interrupt-on-change control Register for PORTA<br />#define INTCONB       0x09      //Interrupt-on-change control Register for PORTB<br />#define IOCON         0x0A      //Configuration register for device<br />#define GPPUA         0x0C      //100kOhm pullup resistor register for PORTA (sets pin to input when set)<br />#define GPPUB         0x0D      //100kOhm pullup resistor register for PORTB (sets pin to input when set)<br />#define INTFA         0x0E      //Interrupt flag Register for PORTA<br />#define INTFB         0x0F      //Interrupt flag Register for PORTB<br />#define INTCAPA       0x10      //Interrupt captured value Register for PORTA<br />#define INTCAPB       0x11      //Interrupt captured value Register for PORTB<br />#define GPIOA         0x12      //General purpose I/O Register for PORTA<br />#define GPIOB         0x13      //General purpose I/O Register for PORTB<br />#define OLATA         0x14      //Output latch Register for PORTA<br />#define OLATB         0x15      //Output latch Register for PORTB<br /><br />void setup_MCP23S17()<br />{<br />   MCP23S17_write(IOCON,0x18);<br />   MCP23S17_write(IODIRA,0x00);<br />   MCP23S17_write(OLATA,0xFF);<br /> <br />   MCP23S17_write(IODIRB,0x00);<br />   MCP23S17_write(OLATB,0xFF);<br /> <br /> <br />}<br /> <br /> <br />void MCP23S17_write(unsigned char address, unsigned char value)<br />{<br /> <br />   putcSPI1(IO_DEVICE_ADDRESS_WRITE);<br />   putcSPI1(address);<br />   putcSPI1(value);<br /> <br />}[/syntax]<br /><br />Funkcja setup_MCP23S17() jest umieszczona przed pętlą while w pliku main i wykonuje się tylko raz. Ekspander reaguje ale nie rozumiem dlaczego nie tak jak mu kazałem.<br /><br />Pozdrawiam Dexter<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=907">dexter</a> — 24 sty 2015, o 20:38</p><hr />
]]></content>
</entry>
</feed>