<?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=4&amp;t=2848&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-04-15T12:10:50+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=2848&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-04-15T12:10:50+01:00</updated>
<published>2013-04-15T12:10:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2848&amp;p=34353#p34353</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2848&amp;p=34353#p34353"/>
<title type="html"><![CDATA[Re: Programowa obsługa SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2848&amp;p=34353#p34353"><![CDATA[
Przyznam, że kolega (przynajmniej jak dla mnie totalnie przedziwne pytania zadaje - ja nie mogę się połapać - przepraszam) <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />z jednej strony słyszymy że &quot;o dziwo Slave prawidłowo odbiera dane, a po chwili pytanie jak skonfigurować Slave ??? no to działa czy nie działa ??? sorki ale to troszkę tak jakby ktoś napisał:<br /><br />Wszystko działa mi dobrze, tylko dlaczego wszystko nie działa ? <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />a jeśli chodzi o prawidłową synchronizację i chęć sprzęgnięcia programowego SPI ze sprzętowym to nic kolegę nie uchroni przed poczytaniem PDF'a i opisem rejestrów oraz bitów, które odpowiadają za ustawianie fazy sygnały, zboczy które są aktywne itp itd<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 15 kwi 2013, o 12:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kazzik87]]></name></author>
<updated>2013-04-15T08:47:14+01:00</updated>
<published>2013-04-15T08:47:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2848&amp;p=34346#p34346</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2848&amp;p=34346#p34346"/>
<title type="html"><![CDATA[Re: Programowa obsługa SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2848&amp;p=34346#p34346"><![CDATA[
To tak:<br /><br />Slave ma obsługę sprzętową SPI. I ustawione przerwanie w którym po odebraniu bajtu następuje wpisanie do SPDR wartości 0x80. I taką wartość ma odczytać Master.<br />Natomiast Master musi mieć obsługę programową SPI. I chcę w nim zrobić jedną funkcję do nadania i odbioru bajtu. Coś na wzór:<br />[syntax=c]uint8_t Wyslij_Odbierz_spi(uint8_t bajt)<br />{<br />    SPDR = bajt;  <br />    while( !(SPSR &amp; (1 &lt;&lt; SPIF)) );<br />    return SPDR;<br />}[/syntax]<br /><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />jeśli w slave - to proponuję najpierw zająć się sprzętową realizacją slave bo trzeba się dobrze zsynchronizować do mastera żeby poprawnie odebrać dane w slave.<br /></div><br /><br />O dziwo Slave prawidłowo odbiera dane. Jak należy skonfigurować Slave aby synchronizacja z Masterem była poprawna?<br />Ustawienia Slave:<br />[syntax=c]void Inicjacja_spi()<br />{<br />    DDRB = ( 1 &lt;&lt; PB6 );        //MISO jako wyjście  <br />    DDRB &amp;= ~( (1 &lt;&lt; PB5) | (1 &lt;&lt; PB4) | (1 &lt;&lt; PB7) );  <br />    SPCR = ( 1 &lt;&lt; SPE ) | ( 1 &lt;&lt; SPIE );            //Włączamy SPI i przerwania<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=476">kazzik87</a> — 15 kwi 2013, o 08:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-04-15T08:31:52+01:00</updated>
<published>2013-04-15T08:31:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2848&amp;p=34345#p34345</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2848&amp;p=34345#p34345"/>
<title type="html"><![CDATA[Re: Programowa obsługa SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2848&amp;p=34345#p34345"><![CDATA[
<div class="quotetitle">kazzik87 napisał(a):</div><div class="quotecontent"><br />Gdzie robię błąd?<br /></div><br /><br />nie za bardzo rozumiem co to znaczy gdy złączę je w jedno ? gdzie ? w master? czy w slave ?<br /><br />jeśli w slave - to proponuję najpierw zająć się sprzętową realizacją slave bo trzeba się dobrze zsynchronizować do mastera żeby poprawnie odebrać dane w slave.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 15 kwi 2013, o 08:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kazzik87]]></name></author>
<updated>2013-04-12T10:39:49+01:00</updated>
<published>2013-04-12T10:39:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2848&amp;p=34154#p34154</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2848&amp;p=34154#p34154"/>
<title type="html"><![CDATA[Re: Programowa obsługa SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2848&amp;p=34154#p34154"><![CDATA[
Dzięki wielkie. <br />Obie funkcje działają jak ta lala - pojedynczo.<br /><br />Jak złącze je w jedną - czyli chcę wysłać i odebrać jednocześnie to jako zwrot dostaję to co wysłałem bajt wcześniej :-/.<br /><br />Funkcja:<br />[syntax=c]uint8_t spi_rxtx(uint8_t bajt)<br />{<br />        register uint8_t data = 0;<br />        for(uint8_t loop = 0; loop &lt; 8; loop++)<br />        {<br />                SCK_0;<br />// Odebranie<br />data = data &lt;&lt; 1;<br />                if((PINB &amp; (1 &lt;&lt; MISO))) data |= (1 &lt;&lt; 0);<br />// Nadanie<br />if((bajt &amp; 0x80)) MOSI_1;<br />                else MOSI_0;<br />bajt &lt;&lt;= 1;<br />                SCK_1;<br />        }<br />        return data;<br />}[/syntax]<br /><br />Gdzie robię błąd?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=476">kazzik87</a> — 12 kwi 2013, o 10:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kazzik87]]></name></author>
<updated>2013-04-15T08:01:54+01:00</updated>
<published>2013-04-12T08:18:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2848&amp;p=34145#p34145</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2848&amp;p=34145#p34145"/>
<title type="html"><![CDATA[Programowa obsługa SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2848&amp;p=34145#p34145"><![CDATA[
Witam,<br /><br />Mam potrzebę obsługi SPI programowo. <br /><br />Układ to połączone ze sobą dwie Atmegi644PA.<br />Slave ma włączone sprzętowe SPI, natomiast Master musi mieć SPI programowo.<br /><br />I tak ... korzystając z kodu zamieszczonego w niebieskiej książce:<br /><br />[syntax=c]void SPI_Soft_Send(uint8_t bajt)<br />{<br />        uint8_t cnt = 0x80;<br />SCK_0;<br />while(cnt)<br />{<br />if (bajt &amp; cnt) MOSI_1;<br />else MOSI_0;<br />SCK_1;<br />SCK_0;<br />cnt &gt;&gt;= 1;<br />}<br />PORTB |= (1 &lt;&lt; SS);<br />_delay_us(1);<br />PORTB &amp;= ~(1 &lt;&lt; SS);<br />}[/syntax]<br />Slave odbiera dane bez problemu.<br /><br />Natomiast potrzebuje odebrać dane od Slave. I tu pojawia się problem.<br />Przeanalizowałem wszystko i wyszło mi coś takiego:<br /><br />[syntax=c]uint8_t SPI_Soft_Transfer(uint8_t bajt)<br />{<br />        uint8_t cnt = 0x80;<br />SCK_0;<br />while(cnt)<br />{<br />if (bajt &amp; cnt) MOSI_1;<br />else MOSI_0;<br />SCK_1;<br />                if (PORTB &amp; (1&lt;&lt;MISO)) bajt |= cnt; // moje rozwiązanie<br />                else bajt &amp;= ~cnt; // moje rozwiązanie<br />SCK_0;<br />cnt &gt;&gt;= 1;<br />}<br />PORTB |= (1 &lt;&lt; SS);<br />_delay_us(1);<br />PORTB &amp;= ~(1 &lt;&lt; SS);<br />        return bajt; // moje rozwiązanie<br />}[/syntax]<br />W wyniku dostaję 0. Proszę o nakierowanie na dobre tory.<br /><br />Dodam ustawienia pinów Mastera:<br />[syntax=c]#define MOSIPB5<br />#define SCKPB7<br />#define SSPB2<br /><br />#define MISOPB6<br /><br />#define SCK_0PORTB &amp;= ~(1 &lt;&lt; SCK)<br />#define SCK_1PORTB |= (1 &lt;&lt; SCK)<br />#define MOSI_0PORTB &amp;= ~(1 &lt;&lt; MOSI)<br />#define MOSI_1PORTB |= (1 &lt;&lt; MOSI)[/syntax]<br /><br />Kod Slave:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /> <br />void Inicjacja_spi() <br />{ <br />    DDRB = ( 1 &lt;&lt; PB6 );        //MISO jako wyjście   <br />    DDRB &amp;= ~( (1 &lt;&lt; PB5) | (1 &lt;&lt; PB4) | (1 &lt;&lt; PB7) );  <br />    SPCR = ( 1 &lt;&lt; SPE ) | ( 1 &lt;&lt; SPIE );            //Włączamy SPI i przerwania<br />} <br /> <br />ISR(SPI_STC_vect)<br />{<br />uint8_t bajt = SPDR;<br />PORTA = bajt;<br />SPDR = 0x80;<br />}<br /> <br />int main(void)<br />{<br />DDRA = 0xFF;<br />PORTA = 0xFF;<br /> <br />Inicjacja_spi();<br />sei();<br /> <br />SPDR = 0x80;<br /> <br />    while(1)<br />    {<br />        //TODO:: Please write your application code<br /> <br />    }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=476">kazzik87</a> — 12 kwi 2013, o 08:18</p><hr />
]]></content>
</entry>
</feed>