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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-12-29T22:19:28+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=9912&amp;mode</id>
<entry>
<author><name><![CDATA[icer_cmg]]></name></author>
<updated>2014-12-29T22:19:28+01:00</updated>
<published>2014-12-29T22:19:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111180#p111180</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111180#p111180"/>
<title type="html"><![CDATA[Re: SPI - mam już dość]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111180#p111180"><![CDATA[
Po rzucie mój kod zadziałał - i przerwanie i pułapka. Dołożyłem synchronizację przez LT z 585. <br /><br />Juffre - z Twoim kodem również eksperymentowałem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1636">icer_cmg</a> — 29 gru 2014, o 22:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Juffre]]></name></author>
<updated>2014-12-29T21:58:08+01:00</updated>
<published>2014-12-29T21:58:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111170#p111170</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111170#p111170"/>
<title type="html"><![CDATA[Re: SPI - mam już dość]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111170#p111170"><![CDATA[
A sprawdzałeś mój kod?<br />Jeżeli on nie działa to znaczy że masz błąd albo w połączeniach albo w kodzie dla mastera<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=473">Juffre</a> — 29 gru 2014, o 21:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[icer_cmg]]></name></author>
<updated>2014-12-29T22:08:50+01:00</updated>
<published>2014-12-29T16:35:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111067#p111067</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111067#p111067"/>
<title type="html"><![CDATA[Re: SPI - mam już dość]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111067#p111067"><![CDATA[
Master ma 16MHz ale SPI jest F_CPU/128  <br />Slave ma 11,0592<br /><br />Nie uwierzycie. Po rzuceniu o ścianę zadziałało. Problemem było połączenie Atmega32 a podstawka precyzyjna w ATB.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1636">icer_cmg</a> — 29 gru 2014, o 16:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xor]]></name></author>
<updated>2014-12-29T16:06:16+01:00</updated>
<published>2014-12-29T16:06:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111062#p111062</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111062#p111062"/>
<title type="html"><![CDATA[Re: SPI - mam już dość]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111062#p111062"><![CDATA[
Sprawdź połączenia. I upewnij się, że taktowanie SPI nie jest wyższe niż F_CPU/4 slave'a<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1774">xor</a> — 29 gru 2014, o 16:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Juffre]]></name></author>
<updated>2014-12-29T15:52:01+01:00</updated>
<published>2014-12-29T15:52:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111058#p111058</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111058#p111058"/>
<title type="html"><![CDATA[Re: SPI - mam już dość]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111058#p111058"><![CDATA[
Zrób coś takiego jak ja. <br />Zrób sobie zmienną z atrybutem volatile i wykorzystaj ją tylko jako flagę, że masz przerwanie.<br />W pętli głównej sprawdzaj tę flagę. Gdy okaże się że jest == 1 to blinkuj diodę.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=473">Juffre</a> — 29 gru 2014, o 15:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[icer_cmg]]></name></author>
<updated>2014-12-29T15:47:00+01:00</updated>
<published>2014-12-29T15:47:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111050#p111050</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111050#p111050"/>
<title type="html"><![CDATA[Re: SPI - mam już dość]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111050#p111050"><![CDATA[
Fakt, nie było wywołania, ale to nie pomogło.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1636">icer_cmg</a> — 29 gru 2014, o 15:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Juffre]]></name></author>
<updated>2014-12-29T15:34:19+01:00</updated>
<published>2014-12-29T15:34:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111045#p111045</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111045#p111045"/>
<title type="html"><![CDATA[Re: SPI - mam już dość]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111045#p111045"><![CDATA[
Mam kawałek kodu pod atmegę32, która prajcuje jako SLAVE pod SPI.<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2014-12-04<br /> *      Author: Juffre<br /> *<br /> * SPI for slave device<br /> *<br /> */<br /><br /><br />/* HEADERS */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br /><br />/* DECLARATIONS */<br />void SPI_slave_init(void);<br />void TIMER0_init(void);<br /><br />/* VARIABLES */<br />volatile uint8_t flag;// software timer flag<br />volatile uint8_t flaga_spi; // flag of receiving data<br />volatile uint8_t data;// data from spi<br /><br /><br />/* MAIN FUNCTION */<br />int main(void) {<br /><br />/* INITIALIZATION */<br />TIMER0_init();<br />lcd_init();<br />lcd_cls();<br />SPI_slave_init();<br />sei();// enable global interrupts<br /><br />DDRA = 0xff;<br />PORTA = 0xff;<br /><br />lcd_locate(1,0);<br />lcd_str(&quot;SPI:&quot;);<br /><br />while (1) {<br /><br />/* 1Hz flag */<br />if (flag == 1) {<br />flag = 0;<br />    <br />                             // tutaj coś miało być :D<br />}<br /><br />if(flaga_spi==1)<br />{<br />flaga_spi=0;<br />lcd_locate(1,5);<br />lcd_int(data);<br />}<br />} // end of while<br />} // end of main<br /><br />/* BODY OF FUNCTIONS */<br />void SPI_slave_init(void) {<br />DDRB |= (1 &lt;&lt; PB6); // MOSI as output<br />SPCR |= (1 &lt;&lt; SPE) | (1 &lt;&lt; SPIE); // SPI enabled, SLAVE MODE<br />SPDR=0;<br />}<br /><br /><br />void TIMER0_init(void) {<br />TCCR0 |= (1 &lt;&lt; WGM01); // CTC mode<br />TCCR0 |= (1 &lt;&lt; CS02) | (1 &lt;&lt; CS00); // PRESKALER == 1024<br />TIMSK |= (1 &lt;&lt; OCIE0); // enable Compare Match interrupt<br />OCR0 = 156; // frequency == 100Hz<br />}<br /><br />/* INTERRUPTS */<br />ISR(TIMER0_COMP_vect) {<br />/* 1Hz timer */<br />static uint8_t cnt;<br />if (cnt &lt; 100)<br />cnt++;<br />else {<br />cnt = 0;<br />flag = 1;<br />}<br />}<br /><br />ISR(SPI_STC_vect)<br />{<br />flaga_spi=1;<br />data = SPDR;<br /><br />}[/syntax]<br /><br />W Twoim kodzie z przerwaniem w ogóle nie inicjalizujesz SPI. Napisałeś funkcję inicjalizującą SPI ale nigdzie jej nie wywołujesz. Jako SLAVE nie definiujesz użycia SS. <br />Sprawdź czy spiąłeś masy procesorów.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=473">Juffre</a> — 29 gru 2014, o 15:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[icer_cmg]]></name></author>
<updated>2014-12-29T15:47:55+01:00</updated>
<published>2014-12-29T15:19:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111041#p111041</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111041#p111041"/>
<title type="html"><![CDATA[SPI - mam już dość]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9912&amp;p=111041#p111041"><![CDATA[
Od kilku nocy, po raz kolejny, próbuję ogarnąć SPI slave. O ile master mam ogarnięte dzięki Mirkowi i jego poradnikom, to slave mnie powalił. Nie mogę nigdzie znaleźć konkretnego poradnika i możliwe, że mylę się co do pracy tego trybu. <br /><br />Moje założenia: <br />    1. Slave otrzymuje sygnał CLK, co 8 tyknięć jest generowane przerwanie ISR(SPI_STC_vect) lub wychodzimy z pętli  while( !SPSR &amp; (1&lt;&lt;SPIF)) <br />    2. Po otrzymaniu przerwania lub wyjściu z pułapki przepisujemy SPDR do zmiennej<br />    3. Czekamy na kolejne przepisanie zmiennej. <br /><br />Pisałem <span style="color: #0000FF">lub</span> ponieważ próbowałem dwóch metod. <br /><br />Kod slave - przerwanie<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br /><br />#define MOSI (1&lt;&lt;PB5)<br />#define MISO (1&lt;&lt;PB6)<br />#define SCK (1&lt;&lt;PB7)<br />#define CS1 (1&lt;&lt;PB4)<br />#define blink PORTB ^= (1 &lt;&lt; PB0)<br /><br /><br />void InitSpiSlave(void);<br /><br />volatile uint8_t dana=0;<br /><br /><br /><br /><br />int main (void){<br />DDRB |= (1 &lt;&lt; PB0);  //wyjcie<br />        InitSpiSlave();<br />sei();<br /><br />while(1){<br /><br />    <br /><br />}<br /><br />}<br /><br />void InitSpiSlave(void) {<br />DDRB |= MISO;<br />DDRB &amp;= ~(CS1);<br /><br />SPCR |= (1&lt;&lt;SPE) | (1&lt;&lt;SPIE);<br /><br />}<br /><br /><br /><br />ISR(SPI_STC_vect){<br />dana=SPDR;<br />blink;<br />}[/syntax] <br /><br />Kod slave - pułapka programowa:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br /><br />#define MOSI (1&lt;&lt;PB5)<br />#define MISO (1&lt;&lt;PB6)<br />#define SCK (1&lt;&lt;PB7)<br />#define CS1 (1&lt;&lt;PB4)<br />#define blink PORTB ^= (1 &lt;&lt; PB0)<br /><br /><br />void InitSpiSlave(void);<br />uint8_t ReceiveSpi(void);<br />volatile uint8_t dana=0;<br /><br /><br /><br /><br />int main (void){<br />DDRB |= (1 &lt;&lt; PB0);  //wyjcie<br />        InitSpiSlave();<br />sei();<br /><br />while(1){<br /><br />     dana=ReceiveSpi();<br /><br />}<br /><br />}<br /><br /><br /><br /><br /><br />void InitSpiSlave(void) {<br />DDRB |= MISO;<br />DDRB &amp;= ~(CS1);<br /><br />SPCR |= (1&lt;&lt;SPE) ;<br /><br />}<br /><br />uint8_t ReceiveSpi(void){<br /><br />while( !SPSR &amp; (1&lt;&lt;SPIF));<br />blink;<br />        return SPDR;<br />}[/syntax]<br /><br />Połączenia:    <br /><br />[syntax=c]master M16        slave M32        ATB Shield IO<br />PB7                    PB7                  SCK<br />PB5                    PB5                  MOSI<br />PB4                                           LT<br /> -----                  PB4    GND       ----<br /> -----                  PB0    dioda      ----[/syntax]<br /><br />Master wysyła co 500ms, diody na shieldzie migają zgodnie z tym, co wysyła master, dioda cały czas świeci. Chciałem, by dioda zmieniała swój stan po każdym wysłaniu z mastera, więc co 1s. Dlaczego żaden kod slave nie działa?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1636">icer_cmg</a> — 29 gru 2014, o 15:19</p><hr />
]]></content>
</entry>
</feed>