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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-03-07T12:46:48+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=20371&amp;mode</id>
<entry>
<author><name><![CDATA[skynets]]></name></author>
<updated>2018-03-07T12:46:48+01:00</updated>
<published>2018-03-07T12:46:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20371&amp;p=205094#p205094</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20371&amp;p=205094#p205094"/>
<title type="html"><![CDATA[nrf24L01 Atmega&lt;&gt;Rpi Zero]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20371&amp;p=205094#p205094"><![CDATA[
Witam.<br />Od kilku dni siedzę na próbą komunikacji Atmegi z RPI. Niestety nie działa<br />Komunikacja miedzy AVR&lt;&gt;AVR przebiega pomyślnie wiec układy na pewno działają<br /><br />Póki co dla testów próbuje wysylać dane z RPI do ATMEGI.<br />Ma ktoś jakiś pomysł gdzie popełniłem błąd?<br /><br />Biblioteki pod AVR uzywam: <!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic11377.html" >topic11377.html</a><!-- l --><br />Pod RPI Zero: <!-- m --><a class="postlink" href="https://github.com/BLavery/lib_nrf24" >https://github.com/BLavery/lib_nrf24</a><!-- m --><br /><br />Plik main[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br /><br /><br />#include &quot;usart.h&quot;<br />#include &quot;nRF24L01.h&quot;<br />#include &quot;SPI.h&quot;<br /><br />void moja_funkcja ( void * nRF_RX_buff , uint8_t len );<br /><br />int main (void)<br />{<br />//inicjalizacja usarta/<br /><br />USART_Init(__UBRR);<br /><br />init_SPI();<br /><br />//inicjalizacja nrfa<br />    nRF_init();<br />    register_nRF_RX_Event_Callback(moja_funkcja);<br /><br />    //odpalamy przerwanko<br />    sei();<br /><br />    nRF_RX_Power_Up(); //odpalamy nRFA!<br /><br />while(1)<br />{<br /><br />nRF_RX_EVENT();<br />}<br />}<br /><br /><br />void moja_funkcja( void * nRF_RX_buff, uint8_t len )<br />{<br />char buffer&#91;10&#93;;<br />uart_puts( &quot;ODEBRANO BAJTÓW: &quot; );<br />uart_puts( itoa(len,buffer,10) );<br />uart_putc('\r');<br />uart_putc('\n');<br />uart_puts( (char *) nRF_RX_buff );<br />uart_putc('\r');<br />uart_putc('\n');<br />nRF_SendDataToAir(&quot;DANE OK&quot;);<br />}[/syntax]<br /><br />Funcja Init z AVR do ustawiania parametrów transmisji <br />[syntax=c]void nRF_init( void )<br />{<br /><br />init_SPI(); //initialize SPI (software or hardware, you must choose it in SPI.h file)<br /><br />#if USE_IRQ == 1<br />Initialize_INTERRUPT_For_nRF(); //initialize INTx or PCINTx interrupt for nRF, you must do it on your Own<br />#endif<br /><br />nRF_SET_Transmitter_Adres(PSTR(&quot;ATNEL&quot;));//set transmitter addres<br />nRF_SET_Reciver_Addres(RX_ADDR_P0, PSTR(&quot;ATNEL&quot;));//set reciving addres for datapipe0<br />nRF_SET_Reciver_Addres(RX_ADDR_P1, PSTR(&quot;ATNEL&quot;));<br />nRF_Config_Register( CONFIG, nRF24L01_CONFIG);         //Write interrupt masks nRF_CONFIG to CONGIG register of nRF<br />nRF_Clear_RX();                                           //Clear RX FIFO<br />nRF_Clear_TX();                                            //Clear TX FIFO<br />nRF_Set_State_And_Width_Of_CRC( ONE_BYTE , ON );            //ON == Enable CRC; OFF == disable CRC, ONE_BYTE or TWO_BYTES - width of CRC;<br />nRF_Set_Channel(0x01);                                       //Set channel number<br />    nRF_Set_Active_DataPipe_And_ACK ( ERX_P0, ON, ACK_ON );//Set which datapipe state you want to change, in this case datapipe = 0 (ERX_P0), ON - means enable this datapipe, ACK_ON means to enable ACK for choosen data pipe.<br />nRF_Set_Retransmission_Time_And_Ammount(WAIT_1500uS , RETR_15_TIMES );  //set time between retransmissions and ammount of retranssmisions<br />nRF_Config_Register( RF_SETUP, 0xf1);<br />nRF_Config_Register( DYNPD, 0x3f);<br />nRF_Config_Register( FEATURE, 0x07);<br /><br />RX_flag = 1;//Clear RX flag<br />TX_flag = 0;        //Clear TX flag<br /><br />nRF_Config_Register(STATUS, (1&lt;&lt;TX_DS) | (1&lt;&lt;RX_DR) | (1&lt;&lt;MAX_RT));    //Clear interrupt bits in STATUS register<br /><br />}[/syntax]<br />W terminalu wypluwa takie wartości<br /><br />STATUS: e                                                           <br />RX_ADDR_P0: 41                                                             <br />RX_ADDR_P1: 41                                                            <br />TX_ADDR: 41                                                               <br />EN__AA: 3f                                                                    <br />EN_RXADDR: 3                                                                 <br />RF_CH: 1                                                                    <br />RF_SETUP: f1                                                                  <br />CONFIG: b                                                                  <br />DYNPD: 3f                                                            <br />FEATURE: 7<br /><br />Kod dla Rpi<br />[syntax=python]import RPi.GPIO as GPIO<br />from lib_nrf24 import NRF24<br />import time<br />import spidev<br /> <br />GPIO.setmode(GPIO.BCM)<br />GPIO.setwarnings(False)<br />pipes = &#91;&#91;0x41, 0x54, 0x4e, 0x45, 0x4c &#93;, &#91;0x41, 0x54, 0x4e, 0x45, 0x4c &#93;&#93;<br /><br />radio = NRF24(GPIO, spidev.SpiDev())<br />radio.begin(0,8)<br />radio.setPayloadSize(16)<br />radio.setChannel(0x01)<br />radio.setCRCLength(1)<br /><br />radio.setDataRate(NRF24.BR_250KBPS)<br />radio.setPALevel(NRF24.PA_MIN)<br />radio.setAutoAck(True)<br />radio.enableDynamicPayloads()<br />radio.enableAckPayload()<br /> <br />radio.openWritingPipe(pipes&#91;1&#93;)<br />radio.printDetails()<br /> <br /> <br />flaga=0;<br /> <br />while True:<br />       <br />        if flaga==0:<br />                radio.openWritingPipe(pipes&#91;1&#93;)<br />                message = &#91;0x01, 0, 0, 0, 0&#93;           <br />                radio.write(message)<br />                print(&quot;Wyslano: &quot;)<br />                print(message)<br />                time.sleep(10)[/syntax]<br />W konsoli otrzymuje taki wyniki<br />STATUS   = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0<br />RX_ADDR_P0-1     = 0x41544e454c 0x41544e454c<br />RX_ADDR_P2-5     = 0xc3 0xc4 0xc5 0xc6<br />TX_ADDR          = 0x41544e454c<br />RX_PW_P0-6       = 0x10 0x10 0x00 0x00 0x00 0x00<br />EN_AA            = 0x3f<br />EN_RXADDR        = 0x03<br />RF_CH            = 0x01<br />RF_SETUP         = 0xf1<br />CONFIG           = 0x0a<br />DYNPD/FEATURE    = 0x3f 0x07<br />Data Rate        = 250KBPS<br />Model            = nRF24l01+<br />CRC Length       = 8 bits<br />PA Power         = PA_MIN<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16839">skynets</a> — 7 mar 2018, o 12:46</p><hr />
]]></content>
</entry>
</feed>