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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-10-20T19:49:12+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=8722&amp;mode</id>
<entry>
<author><name><![CDATA[The River]]></name></author>
<updated>2014-10-20T19:49:12+01:00</updated>
<published>2014-10-20T19:49:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=99896#p99896</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=99896#p99896"/>
<title type="html"><![CDATA[Re: nRF24L01 problem z komunikacją w dwie strony]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=99896#p99896"><![CDATA[
<div class="quotetitle">RafPe napisał(a):</div><div class="quotecontent"><br />Hej ,<br /><br />Moze troche off topic ale patrzac na informacje to nrf24l01 sa na 3,3V ? Czy tam trzeba uzywac ko nwersji napiec ? Bo na schemacie zalaczonym na mikrokontroler.net z tego co wyczytalem uzyto tam napiecia 3,3V do procka i do modulu<br /></div><br /><br />Jeśli chodzi o zasilanie tego modułu to maksymalne napięcie wynosi 3,3V (nie radzę go przekraczać) natomiast pozostałe linie tolerują napięcie 5V więc nic się nie statnie jak podłączyć je do ATmegi zasilanej z 5V, więc tak jak kolega wyżej napisał, dodatkowe bufory są zbędne.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=508">The River</a> — 20 paź 2014, o 19:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wilu88]]></name></author>
<updated>2014-10-16T10:16:57+01:00</updated>
<published>2014-10-16T10:16:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=99277#p99277</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=99277#p99277"/>
<title type="html"><![CDATA[Re: nRF24L01 problem z komunikacją w dwie strony]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=99277#p99277"><![CDATA[
Powiem tak u mnie wystarczyło zasilanie 3V3 ale reszta komunikacja szła normalnie na 5V bez żądnych buforów.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=743">Wilu88</a> — 16 paź 2014, o 10:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RafPe]]></name></author>
<updated>2014-10-16T10:04:54+01:00</updated>
<published>2014-10-16T10:04:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=99275#p99275</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=99275#p99275"/>
<title type="html"><![CDATA[Re: nRF24L01 problem z komunikacją w dwie strony]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=99275#p99275"><![CDATA[
Hej ,<br /><br />Moze troche off topic ale patrzac na informacje to nrf24l01 sa na 3,3V ? Czy tam trzeba uzywac ko nwersji napiec ? Bo na schemacie zalaczonym na mikrokontroler.net z tego co wyczytalem uzyto tam napiecia 3,3V do procka i do modulu<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4344">RafPe</a> — 16 paź 2014, o 10:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[The River]]></name></author>
<updated>2014-10-06T09:05:01+01:00</updated>
<published>2014-10-06T09:05:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=97775#p97775</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=97775#p97775"/>
<title type="html"><![CDATA[Re: nRF24L01 problem z komunikacją w dwie strony]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=97775#p97775"><![CDATA[
Działa Panowie, zastosowałem się do waszych wskazówek i dodatkowo nie miałem włączonych automatycznych potwierdzeń w rejestrze EN_AA. <br /><br />Teraz funkcje inicjalizująca moduł oraz wysyłająca dane po modyfikacji wyglądają następująco:<br /><br />[syntax=c]void nrf_init(uint8_t channel)<br />{<br />NRF_DDR |= (1&lt;&lt;CSN);<br />NRF_DDR |= (1&lt;&lt;CE);<br />CE_LOW;<br />CSN_HIGH;<br />_delay_ms(50);<br />//write_register(RF_CH, mirf_CH);// Ustaw kanał RF<br />write_register(RF_CH, channel);<br />write_register(RX_PW_P0, mirf_PAYLOAD);<br />write_register(EN_AA, ENAA_P0);                                                       // Auto ACK dla DataPipe0<br />RX_POWERUP;<br />CE_HIGH;<br />}[/syntax]<br /><br />[syntax=c]void send_nrf_data(uint8_t data)<br />{<br />uint8_t status;<br />CE_LOW;// TX activated/* zakomentowano */<br />TX_POWERUP;<br /><br />CSN_LOW;// SS in SPI<br />spi_send(FLUSH_TX);// send command to flush fifo register<br />CSN_HIGH;<br /><br />CSN_LOW;<br />spi_send(W_TX_PAYLOAD);// send command to write payload<br />spi_send(data);// send data<br />CE_HIGH;<br />CSN_HIGH;<br /><br />do<br />{<br />status = spi_transfer_byte(NOP);               // Read status register<br />}while(status &amp; (1&lt;&lt;TX_DS));<br />write_register(STATUS, (1&lt;&lt;TX_DS));// Reset status register<br /><br />//CE_HIGH;<br />_delay_ms(10);<br />RX_POWERUP;<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=508">The River</a> — 6 paź 2014, o 09:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krafin]]></name></author>
<updated>2014-10-06T01:58:24+01:00</updated>
<published>2014-10-06T01:58:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=97768#p97768</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=97768#p97768"/>
<title type="html"><![CDATA[Re: nRF24L01 problem z komunikacją w dwie strony]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=97768#p97768"><![CDATA[
Bo musisz zaczekać, aż moduł wyśle dane, albo odczytując rejestr statusowy, albo załączyć przerwanie od końca wysyłania i w nim ustawiać moduł w tryb odbioru.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=487">krafin</a> — 6 paź 2014, o 01:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[The River]]></name></author>
<updated>2014-10-05T20:49:34+01:00</updated>
<published>2014-10-05T20:49:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=97755#p97755</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=97755#p97755"/>
<title type="html"><![CDATA[Re: nRF24L01 problem z komunikacją w dwie strony]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=97755#p97755"><![CDATA[
Też tak myślałem dlatego próbowałem modyfikować funkcję do wysyłania w ten sposób:<br /><br />[syntax=c]void send_nrf_data(uint8_t data)<br />{<br />CE_LOW;// TX activated/* zakomentowano */<br />TX_POWERUP;<br />CE_HIGH;/* dodano */<br />_delay_us(100);/* dodano */<br />CE_LOW;/* dodano */<br /><br />CSN_LOW;// SS in SPI<br />spi_send(FLUSH_TX);// send command to flush fifo register<br />CSN_HIGH;<br /><br />CSN_LOW;<br />spi_send(W_TX_PAYLOAD);// send command to write payload<br />spi_send(data);// send data<br />CSN_HIGH;<br /><br />CE_HIGH;<br />RX_POWERUP;/* dodano */<br /><br /><br />}[/syntax]<br /><br />Ale nic to nie dało. A nawet wręcz przeciwnie, jak za dużo kombinowałem to transmisja całkiem przestawała działać. <br />Bardziej mi się wydaje że problem jest przy przejściu z trybu RX MODE do TX MODE tylko że gdy na poczatku funkcji inicjalizuje moduł w trybie RX i potem coś wysyłam cały czas na żądanie to jest ok, natomiast gdy po inicjalizacji w trybie RX coś odbiorę a potem próbuję wysłać to jest problem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=508">The River</a> — 5 paź 2014, o 20:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-10-05T20:06:36+01:00</updated>
<published>2014-10-05T20:06:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=97751#p97751</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=97751#p97751"/>
<title type="html"><![CDATA[Re: nRF24L01 problem z komunikacją w dwie strony]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=97751#p97751"><![CDATA[
Jak to jest cały twój kod to brakuje załączania trybu odbioru po tym jak już dane zostaną wysłane. Zgodnie ze schematem po zakończeniu nadawania lub odbierania moduł wraca do trybu Standby-I.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 5 paź 2014, o 20:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[The River]]></name></author>
<updated>2014-10-05T18:04:04+01:00</updated>
<published>2014-10-05T18:04:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=97744#p97744</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=97744#p97744"/>
<title type="html"><![CDATA[nRF24L01 problem z komunikacją w dwie strony]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8722&amp;p=97744#p97744"><![CDATA[
Witam <br /><br />Korzystając m.in. z informacji zawartych w tym temacie <br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/post84301.html?hilit=nRF24L01#p84301" >post84301.html?hilit=nRF24L01#p84301</a><!-- l --><br />udało mi się uruchomić komunikację bezprzewodową za pomocą modułów nRF24L01 z tym że działa to tylko w jedną stronę.<br /><br />Mam dwa układy, ATmega32 i podpięty nRF24L01 i drugi układ składający się z ATmegi8 i nRF24L01. <br />I teraz tak , komunikacja działa ładnie kiedy jeden z tych układów pracuje cały czas jako nadajnik a drugi jako odbiornik. Bez względu na to czy to ATmega32 czy ATmega8 odbiera czy nadaje. <br /><br />Problem natomiast pojawia się w takie sytuacji gdy np. ATmega32 wyśle jakiś bajt do ATmegi 8. ATmega8 to odbiera i odsyła inny bajt. Wtedy ten nie dociera. Reset ATmegi8 nie pomaga, dopiero odłączenie i podłączenie zasilania poduje że ATmega8 w końcu wyśle dane do ATmegi 32. <br /><br />Gdy zamienie role i to ATmega8 najpierw wysyła dane a potem czeka na odpowiedź od ATmegi32 sytuacja wygląda tak samo. Doszedłem więc do wniosku że  nRF24L01 po odebraniu danych ma problem z nadawaniem, bo kiedy po starcie zasilania pracuje tylko jako nadajnik wszystko gra. Szukam przyczyny w kodzie ale nie mogę jej znaleść. Funkcje do wysyłania i odbierania wyglądają tak:<br /><br />[syntax=c]void send_nrf_data(uint8_t data)<br />{<br />CE_LOW;// TX activated<br />TX_POWERUP;<br /><br />CSN_LOW;// SS in SPI<br />spi_send(FLUSH_TX);// send command to flush fifo register<br />CSN_HIGH;<br /><br />CSN_LOW;<br />spi_send(W_TX_PAYLOAD);// send command towrite payload<br />spi_send(data);// send data<br />CSN_HIGH;<br /><br />CE_HIGH;<br />}[/syntax]<br /><br />[syntax=c]extern uint8_t nrf_data_ready()<br />{<br />    uint8_t status;<br />    CSN_LOW;                                // Pull down chip select<br />    status = spi_transfer_byte(NOP);               // Read status register<br />    CSN_HIGH;                               // Pull up chip select<br />    return status &amp; (1&lt;&lt;RX_DR);<br />}<br /><br /><br />extern void nrf_get_data(uint8_t * data)<br />{<br />    CSN_LOW;                              // Pull down chip select<br />    spi_transfer_byte( R_RX_PAYLOAD );           // Send cmd to read rx payload<br />    spi_transfer_multi(data,data,mirf_PAYLOAD); // Read payload<br />    CSN_HIGH;                              // Pull up chip select<br />    write_register(STATUS, (1&lt;&lt;RX_DR));// Reset status register<br />}[/syntax]<br /><br />Rekomendowane w dokumentacji kolejności przejść pomiędzy trybami pracy są zachowane więc nie powinno być problemu z przełączaniem się pomiędzy nadawaniem i odbieraniem<br /><a href="http://forum.atnel.pl/_obrazki/o/508/21b99f587bed1616d417bfecdfdd8a9b.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/508/21b99f587bed1616d417bfecdfdd8a9b.png" alt="Obrazek" /></a><br /><br />Liczę na to że ktoś z was spotkał się już wcześniej z tym problemem i coś podpowie bo wyczerpują mi się już pomysły.<br />Biblioteka której używam powstała w oparciu <!-- m --><a class="postlink" href="http://www.tinkerer.eu/AVRLib/nRF24L01" >http://www.tinkerer.eu/AVRLib/nRF24L01</a><!-- m --> (Adam Peterwas)<br />i wygląda ona tak:<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 29-03-2013<br /> *      Author: Karol Mika<br /> *      na podstawie   http://www.tinkerer.eu/AVRLib/nRF24L01 (Adam Peterwas)<br /> *<br /> */<br /><br />#include &quot;../NRF24L01/nrf24l01.h&quot;<br />#include &quot;../NRF24L01/nrf24l01_reg.h&quot;<br />#include &quot;../SPI/spi.h&quot;<br />#include &quot;../SPI/spi.h&quot;<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />void nrf_init(void)/***** Wczeniej musi być SPI zainicjalizowane ****/<br />{<br />NRF_DDR |= (1&lt;&lt;CSN);<br />NRF_DDR |= (1&lt;&lt;CE);<br />CE_LOW;<br />CSN_HIGH;<br />//spi_init();<br />_delay_ms(50);<br />write_register(RF_CH, mirf_CH);// Ustaw kanał RF<br />write_register(RX_PW_P0, mirf_PAYLOAD);<br />RX_POWERUP;<br />CE_HIGH;<br />}<br /><br />extern uint8_t nrf_data_ready()<br />{<br />    uint8_t status;<br />    CSN_LOW;                                // Pull down chip select<br />    status = spi_transfer_byte(NOP);               // Read status register<br />    CSN_HIGH;                               // Pull up chip select<br />    return status &amp; (1&lt;&lt;RX_DR);<br />}<br /><br /><br />extern void nrf_get_data(uint8_t * data)<br />{<br />    CSN_LOW;                              // Pull down chip select<br />    spi_transfer_byte( R_RX_PAYLOAD );           // Send cmd to read rx payload<br />    spi_transfer_multi(data,data,mirf_PAYLOAD); // Read payload<br />    CSN_HIGH;                              // Pull up chip select<br />    write_register(STATUS, (1&lt;&lt;RX_DR));// Reset status register<br />}<br /><br />void write_register(uint8_t reg, uint8_t value)<br />{<br />CSN_LOW;<br />spi_send(W_REGISTER | reg);<br />spi_send(value);<br />CSN_HIGH;<br />}<br /><br />void send_nrf_data(uint8_t data)<br />{<br />CE_LOW;// TX activated<br />TX_POWERUP;<br /><br />CSN_LOW;// SS in SPI<br />spi_send(FLUSH_TX);// send command to flush fifo register<br />CSN_HIGH;<br /><br />CSN_LOW;<br />spi_send(W_TX_PAYLOAD);// send command towrite payload<br />spi_send(data);// send data<br />CSN_HIGH;<br /><br />CE_HIGH;<br />}[/syntax]<br /><br />[syntax=c]*<br /> * main.c<br /> *<br /> *  Created on: 29-03-2013<br /> *      Author: Karol Mika<br /> *      na podstawie   http://www.tinkerer.eu/AVRLib/nRF24L01 (Adam Peterwas)<br /> *<br /> */<br /><br />#ifndef _MIRF_H_<br />#define _MIRF_H_<br /><br />#include &lt;avr/io.h&gt;<br /><br />// Mirf settings<br />#define mirf_CH         2<br />#define mirf_PAYLOAD    1  // długośc bloku danych<br />#define mirf_AUTOACK1  // ustawia liczbę prób odebrania danych<br /><br /><br />// Definicje do ustawiania rejestrów MiRF dla trybu transmisji lub odbierania<br />#define mirf_CONFIG     ((1&lt;&lt;MASK_RX_DR) | (1&lt;&lt;EN_CRC) | (0&lt;&lt;CRCO)) // CRC - 1 byte<br />#define TX_POWERUP write_register(CONFIG, mirf_CONFIG | ( (1&lt;&lt;PWR_UP) | (0&lt;&lt;PRIM_RX) ) )<br />#define RX_POWERUP write_register(CONFIG, mirf_CONFIG | ( (1&lt;&lt;PWR_UP) | (1&lt;&lt;PRIM_RX) ) ) // 01001011<br /><br />extern uint8_t nrf_data_ready();<br />extern void nrf_get_data(uint8_t * data);<br /><br /><br />/* Connection */<br />#define NRF_DDRDDRB<br />#define NRF_PORTPORTB<br />#define CEPB3// Chib Enable Activates RX or TX mode<br />#define CSNPB4// pin SS dla SPI<br />#define IRQPB2// Active low<br />#define TRANSMIT1<br />#define RECEIVE2<br />#define CSN_HIGHNRF_PORT |= (1&lt;&lt;CSN)<br />#define CSN_LOWNRF_PORT &amp;= ~(1&lt;&lt;CSN)<br />#define CE_HIGHNRF_PORT |= (1&lt;&lt;CE)// RX activated<br />#define CE_LOWNRF_PORT &amp;= ~(1&lt;&lt;CE)// TX activated<br /><br />/* Obszar deklaracji funkcji */<br />void send_nrf_data(uint8_t data);<br />void nrf_init(void);<br />void write_register(uint8_t reg, uint8_t value);<br /><br />#endif /* _MIRF_H_ */[/syntax]<br /><br />[syntax=c]/*<br />    Copyright (c) 2007 Stefan Engelke &lt;mbox@stefanengelke.de&gt;<br />    http://www.tinkerer.eu/AVRLib/nRF24L01<br />*/<br /><br />/* Memory Map */<br />#define CONFIG      0x00<br />#define EN_AA       0x01<br />#define EN_RXADDR   0x02<br />#define SETUP_AW    0x03<br />#define SETUP_RETR  0x04<br />#define RF_CH       0x05<br />#define RF_SETUP    0x06<br />#define STATUS      0x07<br />#define OBSERVE_TX  0x08<br />#define CD          0x09<br />#define RX_ADDR_P0  0x0A<br />#define RX_ADDR_P1  0x0B<br />#define RX_ADDR_P2  0x0C<br />#define RX_ADDR_P3  0x0D<br />#define RX_ADDR_P4  0x0E<br />#define RX_ADDR_P5  0x0F<br />#define TX_ADDR     0x10<br />#define RX_PW_P0    0x11<br />#define RX_PW_P1    0x12<br />#define RX_PW_P2    0x13<br />#define RX_PW_P3    0x14<br />#define RX_PW_P4    0x15<br />#define RX_PW_P5    0x16<br />#define FIFO_STATUS 0x17<br /><br />/* Bit Mnemonics */<br />#define MASK_RX_DR  6<br />#define MASK_TX_DS  5<br />#define MASK_MAX_RT 4<br />#define EN_CRC      3<br />#define CRCO        2<br />#define PWR_UP      1<br />#define PRIM_RX     0<br />#define ENAA_P5     5<br />#define ENAA_P4     4<br />#define ENAA_P3     3<br />#define ENAA_P2     2<br />#define ENAA_P1     1<br />#define ENAA_P0     0<br />#define ERX_P5      5<br />#define ERX_P4      4<br />#define ERX_P3      3<br />#define ERX_P2      2<br />#define ERX_P1      1<br />#define ERX_P0      0<br />#define AW          0<br />#define ARD         4<br />#define ARC         0<br />#define PLL_LOCK    4<br />#define RF_DR       3<br />#define RF_PWR      1<br />#define LNA_HCURR   0<br />#define RX_DR       6<br />#define TX_DS       5<br />#define MAX_RT      4<br />#define RX_P_NO     1<br />#define TX_FULL     0<br />#define PLOS_CNT    4<br />#define ARC_CNT     0<br />#define TX_REUSE    6<br />#define FIFO_FULL   5<br />#define TX_EMPTY    4<br />#define RX_FULL     1<br />#define RX_EMPTY    0<br /><br />/* Instruction Mnemonics */<br />#define R_REGISTER    0x00<br />#define W_REGISTER    0x20<br />#define REGISTER_MASK 0x1F<br />#define R_RX_PAYLOAD  0x61<br />#define W_TX_PAYLOAD  0xA0<br />#define FLUSH_TX      0xE1<br />#define FLUSH_RX      0xE2<br />#define REUSE_TX_PL   0xE3<br />#define NOP           0xFF[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=508">The River</a> — 5 paź 2014, o 18:04</p><hr />
]]></content>
</entry>
</feed>