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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=13028&amp;mode</id>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2015-10-25T20:09:15+01:00</updated>
<published>2015-10-25T20:09:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13028&amp;p=143354#p143354</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13028&amp;p=143354#p143354"/>
<title type="html"><![CDATA[Re: Atmega128&lt;-&gt;Atmega8- komunikacja SPI.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13028&amp;p=143354#p143354"><![CDATA[
<!-- m --><a class="postlink" href="http://www.sunduino.pl/wordpress/licho-nie-spi/" >http://www.sunduino.pl/wordpress/licho-nie-spi/</a><!-- m --><br /><br />zobacz też to<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 25 paź 2015, o 20:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tomimat]]></name></author>
<updated>2015-10-25T19:42:42+01:00</updated>
<published>2015-10-25T19:42:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13028&amp;p=143349#p143349</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13028&amp;p=143349#p143349"/>
<title type="html"><![CDATA[Re: Atmega128&lt;-&gt;Atmega8- komunikacja SPI.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13028&amp;p=143349#p143349"><![CDATA[
Zobacz poradnik Mirka <br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.de/2013/12/avr-isv-vc-spi-co-wolno-czego-nie-wolno.html" >http://mirekk36.blogspot.de/2013/12/avr ... wolno.html</a><!-- m --><br />od minuty 57 mówi o MISO MOSO w Atmedze 128<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8688">tomimat</a> — 25 paź 2015, o 19:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Sucyn]]></name></author>
<updated>2015-09-25T12:57:23+01:00</updated>
<published>2015-09-25T12:57:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13028&amp;p=140663#p140663</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13028&amp;p=140663#p140663"/>
<title type="html"><![CDATA[Re: Atmega128&lt;-&gt;Atmega8- komunikacja SPI.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13028&amp;p=140663#p140663"><![CDATA[
Znalazłem małą ale może ważną różnicę w PDF'ach atmegi128 i atmegi8 dotyczące połączenia układów MASTER i SLAVE:<br /><br />Atmega128:<br /><a href="https://obrazkiforum.atnel.pl/10670/969ae349e51917069916c548277c5d9c.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/10670/969ae349e51917069916c548277c5d9c.png" alt="Obrazek" /></a><br /><br />Atmega8:<br /><a href="https://obrazkiforum.atnel.pl/10670/34a4e49acc91beabf24e024ee99d2dc8.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/10670/34a4e49acc91beabf24e024ee99d2dc8.png" alt="Obrazek" /></a><br /><br />Ja się tak za bardzo nie znam ale widzę że jest różnica w połączeniu linii SS w obu prockach. Czy to może być powodem mojego problemu?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10670">Sucyn</a> — 25 wrz 2015, o 12:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Sucyn]]></name></author>
<updated>2015-09-25T11:15:05+01:00</updated>
<published>2015-09-25T11:15:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13028&amp;p=140647#p140647</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13028&amp;p=140647#p140647"/>
<title type="html"><![CDATA[Re: Atmega128&lt;-&gt;Atmega8- komunikacja SPI.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13028&amp;p=140647#p140647"><![CDATA[
Przerobiłem kody żeby wysyłać te same ramki w drugą stronę tzn. z at8(slave) do at128(master) i tak samo sterować przekaźnikiem. Niestety at128 nie ma nawet najmniejszego zamiaru słuchać się at8- po prostu brak reakcji na odbierane dane <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br />Proszę więc o podpowiedź, czy dla komunikacji SLAVE&gt;MASTER potrzebne są trochę inne funkcje, ustawienia rejestrów, co jest nie tak ?<br />Oto kody:<br />[syntax=c]//ATMEGA128 MASTER<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define MOSI PB2<br />#define SCK PB1<br />#define CS PB4<br /><br />#define PK (1&lt;&lt;PC0)<br />#define PK_OFF PORTC |= PK<br />#define PK_ON PORTC &amp;= ~PK<br />//ustawienia przekaźnika<br /><br />volatile uint8_t byte&#91;10&#93;={0,0,0,0,0,0,0,0,0,0};<br />//bufor odbiorczy<br />volatile uint8_t coss=0, cnt=0,odbior=0;<br />//coss-flaga odbioru SPI, cnt-licznik odebranych bajtów, odbior-przekazuje odebrane bajty do programu głównego<br /><br />int main(void)<br />{<br />DDRC |= PK;<br />PK_ON;<br /><br />DDRB |= (1&lt;&lt;MOSI) |(1&lt;&lt;SCK) |(1&lt;&lt;CS);<br />SPCR |= (1&lt;&lt;SPE) | (1&lt;&lt;MSTR) | (1&lt;&lt;SPR1) | (1&lt;&lt;SPR0) | (1&lt;&lt;SPIE);<br />sei();<br />//init SPI<br /><br />        while(1)<br />        {<br />if(coss==1) //jeśli coś przyszło<br />{<br />if(byte&#91;0&#93;==222) //jeśli odebrano już pierwszy bajt kontrolny ramki to ładuje następne do bufora &quot;byte&#91;&#93;&quot;<br />{<br />byte&#91;cnt&#93;=odbior;<br />cnt +=1;<br />}<br />if(byte&#91;0&#93;!=222 &amp;&amp; odbior==222) //jeśli właśnie odebrano pierwszy bajt kontrolny a jeszcze nie był zapisany do bufora to go wpisuje<br />{<br />byte&#91;0&#93;=222;<br />cnt=1;<br />}<br />coss=0;<br />}<br /><br />//sprawdź ramkę wyłączania przekaźnika :<br />if(byte&#91;0&#93;==222 &amp;&amp; byte&#91;1&#93;==2 &amp;&amp; byte&#91;2&#93;==2 &amp;&amp; byte&#91;3&#93;==3 &amp;&amp; byte&#91;4&#93;==4 &amp;&amp; byte&#91;5&#93;==5 &amp;&amp; byte&#91;6&#93;==6 &amp;&amp; byte&#91;7&#93;==7 &amp;&amp; byte&#91;8&#93;==100 &amp;&amp; byte&#91;9&#93;==9)<br />{<br />PK_OFF;<br />byte&#91;0&#93;=0;<br />byte&#91;1&#93;=0;<br />byte&#91;2&#93;=0;<br />byte&#91;3&#93;=0;<br />byte&#91;4&#93;=0;<br />byte&#91;5&#93;=0;<br />byte&#91;6&#93;=0;<br />byte&#91;7&#93;=0;<br />byte&#91;8&#93;=0;<br />byte&#91;9&#93;=0;<br />cnt=0;<br />}<br /><br />//sprawdź ramkę włączania przekaźnika :<br />if(byte&#91;0&#93;==222 &amp;&amp; byte&#91;1&#93;==1 &amp;&amp; byte&#91;2&#93;==2 &amp;&amp; byte&#91;3&#93;==3 &amp;&amp; byte&#91;4&#93;==4 &amp;&amp; byte&#91;5&#93;==5 &amp;&amp; byte&#91;6&#93;==6 &amp;&amp; byte&#91;7&#93;==7 &amp;&amp; byte&#91;8&#93;==100 &amp;&amp; byte&#91;9&#93;==9)<br />{<br />PK_ON;<br />byte&#91;0&#93;=0;<br />byte&#91;1&#93;=0;<br />byte&#91;2&#93;=0;<br />byte&#91;3&#93;=0;<br />byte&#91;4&#93;=0;<br />byte&#91;5&#93;=0;<br />byte&#91;6&#93;=0;<br />byte&#91;7&#93;=0;<br />byte&#91;8&#93;=0;<br />byte&#91;9&#93;=0;<br />cnt=0;<br />}<br />        }<br /><br />}<br /><br /><br />ISR(SPI_STC_vect) //przerwanie SPI<br />{<br />odbior=SPDR;<br />coss=1; //jeśli coś odbierze to ustaw flage<br />}[/syntax]<br />[syntax=c]//ATMEGA8 SLAVE<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define MISO PB4<br /><br />uint8_t PK_ON&#91;10&#93;={222,1,2,3,4,5,6,7,100,9},PK_OFF&#91;10&#93;={222,2,2,3,4,5,6,7,100,9};<br />//PK_ON-ramka włączająca przekaźnik, PK_OFF-ramka wyłączająca przekaźnik<br />uint8_t *wsk;<br />//wskaźnik dla ramek<br />uint8_t i;<br /><br />void sendspi(uint8_t bajt);<br />//wysłanie jednego bajtu<br />void sendspibuf(uint8_t *buf, uint8_t len);<br />//wysłanie ramki na podstawie poradnika Pana Mirka<br /><br />int main(void)<br />{<br />DDRB |= (1&lt;&lt;MISO);<br />SPCR |= (1&lt;&lt;SPE) ;<br />//init SPI<br /><br /><br />while(1)<br />{<br />_delay_ms(1000);<br />//po 1sek<br />wsk=&amp;PK_ON&#91;0&#93;;<br />//wstaw adres ramki do wskaźnika<br />sendspibuf(wsk,10);<br />//wyślij ramke 10bajtów<br /><br />_delay_ms(1000);<br />wsk=&amp;PK_OFF&#91;0&#93;;<br />sendspibuf(wsk,10);<br /><br />}<br /><br />}<br /><br />void sendspi(uint8_t bajt)<br />{<br />SPDR=bajt;<br />while( !(SPSR &amp; (1&lt;&lt;SPIF)) );<br />}<br /><br />void sendspibuf(uint8_t *buf, uint8_t len)<br />{<br />for(i=0 ; i&lt;len ; i++)<br />{<br />uint8_t b=*buf++;<br />sendspi(b);<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10670">Sucyn</a> — 25 wrz 2015, o 11:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Sucyn]]></name></author>
<updated>2015-09-24T19:02:16+01:00</updated>
<published>2015-09-24T19:02:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13028&amp;p=140578#p140578</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13028&amp;p=140578#p140578"/>
<title type="html"><![CDATA[Re: Atmega128&lt;-&gt;Atmega8- komunikacja SPI.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13028&amp;p=140578#p140578"><![CDATA[
Chyba już działa!<br />Po każdej funkcji sprawdzającej odebraną ramkę w at8(Slave) wstawiłem zerowanie całej tablicy (bufora odbiorczego &quot;byte[10]&quot;).<br />[syntax=c]...<br />volatile uint8_t byte&#91;10&#93;={0,0,0,0,0,0,0,0,0,0};<br />//bufor odbiorczy<br />...<br /><br />...<br />//sprawdź ramkę wyłączania przekaźnika :<br />if(byte&#91;0&#93;==222 &amp;&amp; byte&#91;1&#93;==2 &amp;&amp; byte&#91;2&#93;==2 &amp;&amp; byte&#91;3&#93;==3 &amp;&amp; byte&#91;4&#93;==4 &amp;&amp; byte&#91;5&#93;==5 &amp;&amp; byte&#91;6&#93;==6 &amp;&amp; byte&#91;7&#93;==7 &amp;&amp; byte&#91;8&#93;==100 &amp;&amp; byte&#91;9&#93;==9)<br />{<br />PK_OFF;<br />byte&#91;0&#93;=0;<br />byte&#91;1&#93;=0;<br />byte&#91;2&#93;=0;<br />byte&#91;3&#93;=0;<br />byte&#91;4&#93;=0;<br />byte&#91;5&#93;=0;<br />byte&#91;6&#93;=0;<br />byte&#91;7&#93;=0;<br />byte&#91;8&#93;=0;<br />byte&#91;9&#93;=0;<br />cnt=0;<br /><br />}<br />//sprawdź ramkę włączania przekaźnika :<br />if(byte&#91;0&#93;==222 &amp;&amp; byte&#91;1&#93;==1 &amp;&amp; byte&#91;2&#93;==2 &amp;&amp; byte&#91;3&#93;==3 &amp;&amp; byte&#91;4&#93;==4 &amp;&amp; byte&#91;5&#93;==5 &amp;&amp; byte&#91;6&#93;==6 &amp;&amp; byte&#91;7&#93;==7 &amp;&amp; byte&#91;8&#93;==100 &amp;&amp; byte&#91;9&#93;==9)<br />{<br />PK_ON;<br />byte&#91;0&#93;=0;<br />byte&#91;1&#93;=0;<br />byte&#91;2&#93;=0;<br />byte&#91;3&#93;=0;<br />byte&#91;4&#93;=0;<br />byte&#91;5&#93;=0;<br />byte&#91;6&#93;=0;<br />byte&#91;7&#93;=0;<br />byte&#91;8&#93;=0;<br />byte&#91;9&#93;=0;<br />cnt=0;<br /><br /><br />}<br />...[/syntax]<br /><br />Ale to chyba powinno być obojętne co było w buforze odbiorczym bo przecierz i tak jest na bierząco zastępowane nowymi przychodzącymi bajtami, tak?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10670">Sucyn</a> — 24 wrz 2015, o 19:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Sucyn]]></name></author>
<updated>2015-09-24T11:18:26+01:00</updated>
<published>2015-09-24T11:18:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13028&amp;p=140551#p140551</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13028&amp;p=140551#p140551"/>
<title type="html"><![CDATA[Atmega128&lt;-&gt;Atmega8- komunikacja SPI.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13028&amp;p=140551#p140551"><![CDATA[
Witam!<br />Napisałem program do komunikacji między dwoma prockami z wykorzystaniem sprzętowego SPI na at128(Master) i at8(Slave). Jak na razie celem było wysłanie z at128 ramki(10bajtów) do at8 która po analizie odebranych danych ma włączać lub wyłączać przekaźnik. Program działa w ten  sposób że pierwsza część wykonuje się prawidłowo czyli at8 po odebraniu pierwszej ramki włącza przekaźnik, ale gdy at128 wyśle kolejną ramkę wyłączającą pk to at8 nie reaguje.<br />Proszę więc o pomoc bo nie wiem dla czego at8 nie chce odbierać kolejnych ramek, czy problem tkwi w procedurze nadawczej czy podczas odbioru na drugim procku.   <br /><br />[syntax=c]//ATMEGA128 MASTER<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define MOSI PB2<br />#define SCK PB1<br />#define CS PB4<br /><br />uint8_t PK_ON&#91;10&#93;={222,1,2,3,4,5,6,7,100,9},PK_OFF&#91;10&#93;={222,2,2,3,4,5,6,7,100,9};<br />//PK_ON-ramka włączająca przekaźnik, PK_OFF-ramka wyłączająca przekaźnik<br />uint8_t *wsk;<br />//wskaźnik dla ramek<br />uint8_t i;<br /><br />void sendspi(uint8_t bajt);<br />//wysłanie jednego bajtu<br />void sendspibuf(uint8_t *buf, uint8_t len);<br />//wysłanie ramki na podstawie poradnika Pana Mirka<br /><br />int main(void)<br />{<br />DDRB |= (1&lt;&lt;MOSI) |(1&lt;&lt;SCK) |(1&lt;&lt;CS);<br />SPCR |= (1&lt;&lt;SPE) | (1&lt;&lt;MSTR) | (1&lt;&lt;SPR1);<br />//init SPI<br /><br /><br />while(1)<br /><br />{<br />_delay_ms(1000);<br />//po 1sek<br />wsk=&amp;PK_ON&#91;0&#93;;<br />//wstaw adres ramki do wskaźnika<br />sendspibuf(wsk,10);<br />//wyślij ramke 10bajtów<br /><br />_delay_ms(1000);<br />wsk=&amp;PK_OFF&#91;0&#93;;<br />sendspibuf(wsk,10);<br /><br />while(1);<br />//zatrzymuje program<br />}<br /><br />}<br /><br /><br /><br /><br />void sendspi(uint8_t bajt)<br />{<br />SPDR=bajt;<br />while( !(SPSR &amp; (1&lt;&lt;SPIF)) );<br />_delay_ms(1);<br />//bez tego opuźnienia czasem Slave mi nie odbiera !!!<br />}<br /><br />void sendspibuf(uint8_t *buf, uint8_t len)<br />{<br />for(i=0 ; i&lt;len ; i++)<br />{<br />uint8_t b=*buf++;<br />sendspi(b);<br />}<br />}[/syntax]<br /><br />[syntax=c]//ATMEGA8 SLAVE<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define MISO PB4<br /><br />#define PK (1&lt;&lt;PB0)<br />#define PK_OFF PORTB |= PK<br />#define PK_ON PORTB &amp;= ~PK<br />//ustawienia przekaźnika<br /><br />volatile uint8_t byte&#91;10&#93;={0,0,0,0,0,0,0,0,0,0};<br />//bufor odbiorczy<br />volatile uint8_t coss=0, cnt=0,odbior=0;<br />//coss-flaga odbioru SPI, cnt-licznik odebranych bajtów, odbior-przekazuje odebrane bajty do programu głównego<br /><br />int main(void)<br />{<br />DDRB |= PK;<br />PK_OFF;<br />//wyłączenie przekaźnika<br /><br />DDRB |= (1&lt;&lt;MISO);<br />SPCR |= (1&lt;&lt;SPE) | (1&lt;&lt;SPIE);<br />sei();<br />//init SPI<br /><br />while(1)<br />{<br />if(coss==1) //jeśli coś przyszło<br />{<br />if(byte&#91;0&#93;==222) //jeśli odebrano już pierwszy bajt kontrolny ramki to ładuje następne do bufora &quot;byte&#91;&#93;&quot;<br />{<br />byte&#91;cnt&#93;=odbior;<br />cnt +=1;<br />}<br />if(byte&#91;0&#93;!=222 &amp;&amp; odbior==222) //jeśli właśnie odebrano pierwszy bajt kontrolny a jeszcze nie był zapisany do bufora to go wpisuje<br />{<br />byte&#91;0&#93;=222;<br />cnt=1;<br />}<br /><br /><br />coss=0;<br />}<br />//sprawdź ramkę wyłączania przekaźnika :<br />if(byte&#91;0&#93;==222 &amp;&amp; byte&#91;1&#93;==2 &amp;&amp; byte&#91;2&#93;==2 &amp;&amp; byte&#91;3&#93;==3 &amp;&amp; byte&#91;4&#93;==4 &amp;&amp; byte&#91;5&#93;==5 &amp;&amp; byte&#91;6&#93;==6 &amp;&amp; byte&#91;7&#93;==7 &amp;&amp; byte&#91;8&#93;==100 &amp;&amp; byte&#91;9&#93;==9)<br />{<br />PK_OFF;<br />byte&#91;0&#93;=0;<br />cnt=0;<br />}<br />//sprawdź ramkę włączania przekaźnika :<br />if(byte&#91;0&#93;==222 &amp;&amp; byte&#91;1&#93;==1 &amp;&amp; byte&#91;2&#93;==2 &amp;&amp; byte&#91;3&#93;==3 &amp;&amp; byte&#91;4&#93;==4 &amp;&amp; byte&#91;5&#93;==5 &amp;&amp; byte&#91;6&#93;==6 &amp;&amp; byte&#91;7&#93;==7 &amp;&amp; byte&#91;8&#93;==100 &amp;&amp; byte&#91;9&#93;==9)<br />{<br />PK_ON;<br />byte&#91;0&#93;=0;<br />cnt=0;<br /><br />}<br />}<br /><br />}<br /><br /><br />ISR(SPI_STC_vect) //przerwanie SPI<br />{<br /><br />odbior=SPDR;<br />coss=1; //jeśli coś odbierze to ustaw flage<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10670">Sucyn</a> — 24 wrz 2015, o 11:18</p><hr />
]]></content>
</entry>
</feed>