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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-04-17T08:22:14+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=2886&amp;mode</id>
<entry>
<author><name><![CDATA[kazzik87]]></name></author>
<updated>2013-04-17T08:22:14+01:00</updated>
<published>2013-04-17T08:22:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2886&amp;p=34520#p34520</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2886&amp;p=34520#p34520"/>
<title type="html"><![CDATA[Dodatkowe tyknięcie CLK w połączeniu SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2886&amp;p=34520#p34520"><![CDATA[
Witam,<br />połączyłem ze sobą Atmegę644PA(Master) oraz Atmegę128L(Slave). Obsługuje je sprzętowym SPI.<br /><br />Master F_CPU = 8 MHz<br />Slave F_CPU = 8 MHz<br /><br />Master ma wysyłać do Slave cyfry od 0 do 255. W efekcie dostaję:<br /><br />0<br />1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />8        // Tu się zaczynają kwiatki<br />137 <br />9<br />138<br />10<br />139<br />11<br />140<br />12<br />141<br />13<br />142<br />14<br />143<br />15<br />144<br />16<br />145<br />17<br />146<br />18<br /><br />Wychodzi mi że wartości są przesunięte o bit. A raczej na końcu dodany jest bit. <br />Jak prawidłowo zsynchronizować połączenie?<br /><br />Dodam że jak połączę ze sobą dwie Atmegi644PA, z dowolnym ustawieniem prędkości CLK, to nie ma takich problemów. Wszystko działa prawidłowo.<br /><br />Master:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt; <br />#include &lt;avr/interrupt.h&gt;<br /><br />#define MOSIPB5<br />#define SCKPB7<br />#define SSPB4<br /><br />#define MISOPB6<br /><br />void Init_SPI() <br />{ <br />    DDRB |= ( 1 &lt;&lt; MOSI) | ( 1 &lt;&lt; SCK ) | (1 &lt;&lt; SS);<br />    SPCR = ( 1 &lt;&lt; SPE ) | ( 1 &lt;&lt; MSTR ) | ( 1 &lt;&lt; SPR1 ) | ( 1 &lt;&lt; SPR0 );   //Włączamy SPI, układ Master, najmniejsza częstotliwość SCK fosc / 128<br />} <br /><br />void Send_SPI(uint8_t bajt)<br />{<br />SPDR = bajt;<br />while( !(SPSR &amp; (1 &lt;&lt; SPIF)) );<br />} <br /><br />int main(void)<br />{<br />Init_SPI();<br /><br />uint8_t licznik = 0;<br /><br />while(1)<br />    {<br />        //TODO:: Please write your application code <br />Send_SPI(licznik);<br />licznik++;<br />_delay_ms(500);<br />    }<br />}[/syntax]<br /><br />Slave:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#include &quot;UART/mkuart.h&quot;<br /><br />// Przypisanie pinów do definicji - Atmega128L<br />#define MOSIPINB2<br />#define MISOPINB3<br />#define SCKPINB1<br />#define SSPINB0<br /><br />void Init_SPI(void) <br />{ <br />    /* Set MISO output, all others input */<br />DDRB = (1 &lt;&lt; MISO);<br />DDRB &amp;= ~( (1 &lt;&lt; SS) | (1 &lt;&lt; MOSI) | (1 &lt;&lt; SCK) );<br />/* Enable SPI */<br />SPCR = (1 &lt;&lt; SPE) | (1 &lt;&lt; SPIE);<br />} <br /><br />volatile uint8_t flaga;<br />volatile uint8_t spistat;<br /><br />ISR(SPI_STC_vect)<br />{<br />spistat = SPDR;<br />SPDR = 0x80;<br />flaga = 1;<br />}<br /><br />int main(void)<br />{<br /><br />Init_SPI();<br /><br />USART_Init(__UBRR);<br />sei();<br /><br />    while(1)<br />    {<br />        //TODO:: Please write your application code <br />if (flaga)<br />{<br />uart_putint(spistat,10);<br />uart_puts(&quot;\n\r&quot;);<br />flaga = 0;<br />}<br />    }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=476">kazzik87</a> — 17 kwi 2013, o 08:22</p><hr />
]]></content>
</entry>
</feed>