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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=5714&amp;mode</id>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-01-29T22:00:45+01:00</updated>
<published>2014-01-29T22:00:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67330#p67330</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67330#p67330"/>
<title type="html"><![CDATA[Re: RFM22B 868 problem z komunikacja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67330#p67330"><![CDATA[
Wystarczy zmienić bit hbsel czyli 1 linijkę w tym kodzie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 29 sty 2014, o 22:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[cybertom]]></name></author>
<updated>2014-01-29T16:20:05+01:00</updated>
<published>2014-01-29T16:20:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67238#p67238</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67238#p67238"/>
<title type="html"><![CDATA[Re: RFM22B 868 problem z komunikacja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67238#p67238"><![CDATA[
mam pytanie dotyczacych tych lini konfiguracji<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">    write(0x75, 0x53);        // frequency set to 434MHz <br />    write(0x76, 0x64);        // frequency set to 434MHz <br />    write(0x77, 0x00);        // frequency set to 434Mhz <br /></div><br /><br />chce zmienic zeby pracowally na 868Mhz bo takie posiadam. zmieniamy rejestr write(0x75, 0x53);  na write(0x75, 0x73); tylko w tej lini czy we wszystkich trzech. Nie bardzo rozumiem wg datasheetu jak to sie ustawia. Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2040">cybertom</a> — 29 sty 2014, o 16:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wireless]]></name></author>
<updated>2014-01-28T16:50:54+01:00</updated>
<published>2014-01-28T16:50:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67088#p67088</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67088#p67088"/>
<title type="html"><![CDATA[Re: RFM22B 868 problem z komunikacja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67088#p67088"><![CDATA[
<div class="quotetitle">cybertom napisał(a):</div><div class="quotecontent"><br />to jaki jest teraz nastepca ?<br /></div>RFM69 wygląda fajnie i jest tańszy, jest nawet wersja odpowiadająca pinowo RFM22<br />wpisz ten kod ze znacznikami, albo go wywal<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=380">wireless</a> — 28 sty 2014, o 16:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[cybertom]]></name></author>
<updated>2014-01-28T15:54:55+01:00</updated>
<published>2014-01-28T15:54:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67084#p67084</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67084#p67084"/>
<title type="html"><![CDATA[Re: RFM22B 868 problem z komunikacja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67084#p67084"><![CDATA[
to jaki jest teraz nastepca ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2040">cybertom</a> — 28 sty 2014, o 15:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wireless]]></name></author>
<updated>2014-01-28T16:53:38+01:00</updated>
<published>2014-01-28T15:40:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67080#p67080</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67080#p67080"/>
<title type="html"><![CDATA[Re: RFM22B 868 problem z komunikacja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67080#p67080"><![CDATA[
<div class="quotetitle">tomwisnia napisał(a):</div><div class="quotecontent"><br />gdzie można kupić te moduły?<br /></div>tme albo maritex, ale pamietaj, że kończy się jego produkcja<br />cybertom wpisz ten kod ze znacznikami, albo go wywal<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=380">wireless</a> — 28 sty 2014, o 15:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tomwisnia]]></name></author>
<updated>2014-01-28T15:11:46+01:00</updated>
<published>2014-01-28T15:11:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67074#p67074</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67074#p67074"/>
<title type="html"><![CDATA[Re: RFM22B 868 problem z komunikacja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67074#p67074"><![CDATA[
gdzie można kupić te moduły?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=183">tomwisnia</a> — 28 sty 2014, o 15:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wireless]]></name></author>
<updated>2014-01-28T13:42:32+01:00</updated>
<published>2014-01-28T13:42:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67064#p67064</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67064#p67064"/>
<title type="html"><![CDATA[Re: RFM22B 868 problem z komunikacja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67064#p67064"><![CDATA[
te kody się u mnie sprawdziły<br /><!-- m --><a class="postlink" href="http://www.ulrichradig.de/home/index.php/avr/rfm22-und-atmega88" >http://www.ulrichradig.de/home/index.ph ... d-atmega88</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=380">wireless</a> — 28 sty 2014, o 13:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[cybertom]]></name></author>
<updated>2014-01-28T17:33:43+01:00</updated>
<published>2014-01-28T13:12:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67062#p67062</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67062#p67062"/>
<title type="html"><![CDATA[RFM22B 868 problem z komunikacja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5714&amp;p=67062#p67062"><![CDATA[
Witam<br />Na wstępie przepraszam jeśli w złym dziale pisze. Próbuje zmusić do skomunikowania się ze sobą dwóch avr ATMEGA328P taktowane 1mhz. użyłem do tego przykładowych kodów. Ponieważ nie używam ARDUINO tylko same procki (nowiutkie) które są taktowane 1Mhz wiec dopisałem linie #define F_CPU 1000000UL.<br />kod nadajnika:<br /><br /><br />[syntax=cpp]/*<br />    Created on: Mar. 30, 2010<br />Under project: RFM22<br />Author: Jim Lindblom<br />RFM22 Transmit Example<br /><br />Hardware: Arduino Pro (ATmega328) running at 8Mhz, 3.3V<br />Wiring:<br />RFM22 BOB|Arduino Pro<br />----------------------------<br />GND|GND<br />3.3V|3.3V<br />GPIO0|NC<br />GPIO1|NC<br />GPIO2|NC<br />RXANT|PD6 (D6)<br />TXANT|PD5 (D5)<br />IRQ|PD4 (D4)<br />CSN|PB0 (D8)<br />SCK|PB4 (D13)<br />SDI|PB2 (D11)<br />SDO|PB3 (D12)<br /><br />Antenna is a 17cm piece of wire sticking straight up into the air.<br />*/<br /><br />//======================//<br />//======================//<br />#include &lt;avr/io.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &quot;RFM22.h&quot;<br />//======================//<br />//======================//<br />#define F_CPU 1000000UL<br />#define sbi(var, mask)   ((var) |= (uint8_t)(1 &lt;&lt; mask))<br />#define cbi(var, mask)   ((var) &amp;= (uint8_t)~(1 &lt;&lt; mask))<br /><br />//======================//<br />//Arduino Pro Specific Defines<br />#define LED 5<br /><br />//RFM22 Defines<br />#define CS 0 //pin for chip select<br />#define NIRQ 4<br />#define TXANT 5// PD5<br />#define RXANT 6// PD6<br /><br />//======================//<br />//======================//<br /><br />void ioinit(void);<br />void delay_ms(uint16_t x);<br />void delay_us(uint16_t x);<br /><br />//======================//<br />//======================//<br /><br />static int uart_putchar(char c, FILE *stream);<br />uint8_t uart_getchar(void);<br />static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);<br /><br />//======================//<br />//======================//<br /><br />void init_SPI(void);<br />void init_RFM22(void);<br />void to_tx_mode(void);<br />void checkINT(void);<br />void get_packet(void);<br />void txdata(char data);<br />char rxdata(void);<br />char read(uint8_t address);<br />void write(uint8_t address, char data);<br /><br />//======================//<br />//Global Variables<br />unsigned char tx_buf&#91;17&#93; = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x78};<br /><br />int main(void)<br />{<br />char temp, inkey;<br />unsigned char i;<br /><br />ioinit();<br />init_SPI();<br />sbi(PORTB,CS);<br />printf(&quot;/n/n********RFM22 Communication Test********\n&quot;);<br /><br />//====================//<br />//Communications Test<br /><br />temp = read(DTYPE);<br />temp = read(DVERS);<br />temp = read(INTEN1);<br />temp = read(INTEN2);<br />temp = read(OMFC1);<br />temp = read(OMFC2);<br /><br />printf(&quot;*****************************************\n\n&quot;);<br /><br />init_RFM22();// Initialize all RFM22 registers<br /><br /><br />// This exampes sends '0123456789:;&lt;=&gt;?' once a second<br />while(1)<br />{<br />to_tx_mode();<br />printf(&quot;Transmit Done\n&quot;);<br />delay_ms(1000);<br />}<br /><br /><br />// This example allows you to enter a 16-byte packet to send<br />printf(&quot;Entering TX Mode...Give me a 16-byte packet\n\n&quot;);<br />while(1)<br />{<br /><br />get_packet();<br />printf(&quot;Transmitting: &quot;);<br />for (i=0; i&lt;17; i++)<br />printf(&quot;%c&quot;, tx_buf&#91;i&#93;);<br />printf(&quot;\n&quot;);<br />to_tx_mode();<br />printf(&quot;Transmit done...Press any key to transmit again\n\n&quot;);<br />}<br /><br />/*<br />// This example sends a 'beep' to the terminal every second<br />// You'll love it...<br />int count = 0;<br />unsigned char chksum;<br /><br />for (i=0; i&lt;15; i++)<br />tx_buf&#91;i&#93; = 0x07;<br />tx_buf&#91;15&#93; = 0x31;<br /><br />chksum = 0;<br />for(i=0; i&lt;16; i++)<br />chksum += tx_buf&#91;i&#93;;<br /><br />tx_buf&#91;16&#93; = chksum;<br />printf(&quot;chksum == %x\r&quot;, tx_buf&#91;16&#93;);<br /><br />while(1)<br />{<br />to_tx_mode();<br />delay_ms(1000);<br /><br />printf(&quot;Transmission Complete...%d\n&quot;, count);<br />count++;<br /><br />}*/<br />}<br /><br />// Initialize the RFM22 for transmitting<br />void init_RFM22(void)<br />{<br />write(INTEN2, 0x00);// Disable all interrupts<br />write(OMFC1, 0x01);// Set READY mode<br />write(0x09, 0x7F);// Cap = 12.5pF<br />write(0x0A, 0x05);// Clk output is 2MHz<br /><br />write(0x0B, 0xF4);// GPIO0 is for RX data output<br />write(0x0C, 0xEF);// GPIO1 is TX/RX data CLK output<br />write(0x0D, 0x00);// GPIO2 for MCLK output<br />write(0x0E, 0x00);// GPIO port use default value<br /><br />write(0x0F, 0x70);// NO ADC used<br />write(0x10, 0x00);// no ADC used<br />write(0x12, 0x00);// No temp sensor used<br />write(0x13, 0x00);// no temp sensor used<br /><br />write(0x70, 0x20);// No manchester code, no data whiting, data rate &lt; 30Kbps<br /><br />write(0x1C, 0x1D);// IF filter bandwidth<br />write(0x1D, 0x40);// AFC Loop<br />//write(0x1E, 0x0A);// AFC timing<br /><br />write(0x20, 0xA1);// clock recovery<br />write(0x21, 0x20);// clock recovery<br />write(0x22, 0x4E);// clock recovery<br />write(0x23, 0xA5);// clock recovery<br />write(0x24, 0x00);// clock recovery timing<br />write(0x25, 0x0A);// clock recovery timing<br /><br />//write(0x2A, 0x18);<br />write(0x2C, 0x00);<br />write(0x2D, 0x00);<br />write(0x2E, 0x00);<br /><br />write(0x6E, 0x27);// TX data rate 1<br />write(0x6F, 0x52);// TX data rate 0<br /><br />write(0x30, 0x8C);// Data access control<br /><br />write(0x32, 0xFF);// Header control<br /><br />write(0x33, 0x42);// Header 3, 2, 1, 0 used for head length, fixed packet length, synchronize word length 3, 2,<br /><br />write(0x34, 64);// 64 nibble = 32 byte preamble<br />write(0x35, 0x20);// 0x35 need to detect 20bit preamble<br />write(0x36, 0x2D);// synchronize word<br />write(0x37, 0xD4);<br />write(0x38, 0x00);<br />write(0x39, 0x00);<br />write(0x3A, 's');// set tx header 3<br />write(0x3B, 'o');// set tx header 2<br />write(0x3C, 'n');// set tx header 1<br />write(0x3D, 'g');// set tx header 0<br />write(0x3E, 17);// set packet length to 17 bytes<br /><br />write(0x3F, 's');// set rx header<br />write(0x40, 'o');<br />write(0x41, 'n');<br />write(0x42, 'g');<br />write(0x43, 0xFF);// check all bits<br />write(0x44, 0xFF);// Check all bits<br />write(0x45, 0xFF);// check all bits<br />write(0x46, 0xFF);// Check all bits<br /><br />write(0x56, 0x01);<br /><br />write(0x6D, 0x07);// Tx power to max<br /><br />write(0x79, 0x00);// no frequency hopping<br />write(0x7A, 0x00);// no frequency hopping<br /><br />write(0x71, 0x22);// GFSK, fd&#91;8&#93;=0, no invert for TX/RX data, FIFO mode, txclk--&gt;gpio<br /><br />write(0x72, 0x48);// Frequency deviation setting to 45K=72*625<br /><br />write(0x73, 0x00);// No frequency offset<br />write(0x74, 0x00);// No frequency offset<br /><br />write(0x75, 0x53);// frequency set to 434MHz<br />write(0x76, 0x64);// frequency set to 434MHz<br />write(0x77, 0x00);// frequency set to 434Mhz<br /><br />write(0x5A, 0x7F);<br />write(0x59, 0x40);<br />write(0x58, 0x80);<br /><br />write(0x6A, 0x0B);<br />write(0x68, 0x04);<br />write(0x1F, 0x03);<br />}<br /><br />void to_tx_mode(void)<br />{<br />unsigned char i;<br /><br />write(0x07, 0x01);// To ready mode<br />cbi(PORTD, RXANT);<br />sbi(PORTD, TXANT);<br />delay_ms(50);<br /><br />write(0x08, 0x03);// FIFO reset<br />write(0x08, 0x00);// Clear FIFO<br /><br />write(0x34, 64);// preamble = 64nibble<br />write(0x3E, 17);// packet length = 17bytes<br />for (i=0; i&lt;17; i++)<br />{<br />write(0x7F, tx_buf&#91;i&#93;);// send payload to the FIFO<br />}<br /><br />write(0x05, 0x04);// enable packet sent interrupt<br />i = read(0x03);// Read Interrupt status1 register<br />i = read(0x04);<br /><br />write(0x07, 9);// Start TX<br /><br />while ((PIND &amp; (1&lt;&lt;NIRQ)) != 0)<br />; // need to check interrupt here<br /><br />write(0x07, 0x01);// to ready mode<br /><br />cbi(PORTD, RXANT);// disable all interrupts<br />cbi(PORTD, TXANT);<br />}<br /><br />void get_packet(void)<br />{<br />unsigned char i, chksum;<br /><br />for(i=0; i&lt;16; i++)<br />{<br />tx_buf&#91;i&#93; = uart_getchar();<br />printf(&quot;Received %c, %d characters remaining for packet\n&quot;, tx_buf&#91;i&#93;, 15-i);<br />}<br /><br />chksum = 0;<br />for(i=0; i&lt;16; i++)<br />chksum += tx_buf&#91;i&#93;;<br /><br />tx_buf&#91;16&#93; = chksum;<br />}<br /><br />void checkINT(void)<br />{<br />if ((PIND &amp; (1&lt;&lt;NIRQ)) == 0)<br />printf(&quot;INT == 0\n&quot;);<br />else<br />printf(&quot;INT == 1\n&quot;);<br />}<br /><br />void write(uint8_t address, char data)<br />{<br />//write any data byte to any single address<br />//adds a 0 to the MSB of the address byte (WRITE mode)<br /><br />address |= 0x80;<br /><br />cbi(PORTB,CS);<br />delay_ms(1);<br />txdata(address);<br />delay_ms(1);<br />txdata(data);<br />delay_ms(1);<br />sbi(PORTB,CS);<br />}<br /><br />char read(uint8_t address)<br />{<br />//returns the contents of any 1 byte register from any address<br />//sets the MSB for every address byte (READ mode)<br /><br />char byte;<br /><br />address &amp;= 0x7F;<br /><br />cbi(PORTB,CS);<br />txdata(address);<br />byte = rxdata();<br />sbi(PORTB,CS);<br /><br />return byte;<br />}<br /><br />char rxdata(void)<br />{<br />SPDR = 0x55;<br />while((SPSR&amp;0x80) == 0x00)<br />;<br /><br />return SPDR;<br />}<br /><br />void txdata(char data)<br />{<br />SPDR = data;<br />while((SPSR&amp;0x80) == 0x00);<br />}<br /><br />void init_SPI(void)<br />{<br />// enable SPI<br />// make SPI master<br />// SCLK idle low<br />// sample data on rising edge<br />// Fosc/4 is SPI frequency = 2MHz<br />//SPCR |= 0b01010000;// Fosc/4<br />SPCR |= 0b01010011;// Fosc/128<br />}<br /><br />static int uart_putchar(char c, FILE *stream)<br />{<br />    if (c == '\n') uart_putchar('\r', stream);<br /><br />    loop_until_bit_is_set(UCSR0A, UDRE0);<br />    UDR0 = c;<br /><br />    return 0;<br />}<br /><br />uint8_t uart_getchar(void)<br />{<br />    while( !(UCSR0A &amp; (1&lt;&lt;RXC0)) );<br />    return(UDR0);<br />}<br /><br /><br />void ioinit (void)<br />{<br />    //1 = output, 0 = input<br />    DDRB = 0b11101111; //MISO input<br />    DDRC = 0b11111111; //All outputs<br />    DDRD = 0b11101110; //PORTD (RX on PD0), PD4 input<br />stdout = &amp;mystdout; //Required for printf init<br />int MYUBRR = 103;<br />UBRR0H = (MYUBRR) &gt;&gt; 8;<br />UBRR0L = MYUBRR;<br />UCSR0B = (1&lt;&lt;RXEN0)|(1&lt;&lt;TXEN0);<br />UCSR0C = (3&lt;&lt;UCSZ00);<br />UCSR0A = (1&lt;&lt;U2X0);<br /><br />TCCR2B = (1&lt;&lt;CS21);<br /><br />cbi(PORTD, TXANT);<br />cbi(PORTD, RXANT);<br />}<br /><br />//General short delays<br />void delay_ms(uint16_t x)<br />{<br />    for (; x &gt; 0 ; x--)<br />        delay_us(1000);<br />}<br /><br />//General short delays<br />void delay_us(uint16_t x)<br />{<br />    while(x &gt; 256)<br />    {<br />        TIFR2 = (1&lt;&lt;TOV2); //Clear any interrupt flags on Timer2<br />        TCNT2 = 0; //256 - 125 = 131 : Preload timer 2 for x clicks. Should be 1us per click<br />        while( (TIFR2 &amp; (1&lt;&lt;TOV2)) == 0);<br /><br />        x -= 256;<br />    }<br /><br />    TIFR2 = (1&lt;&lt;TOV2); //Clear any interrupt flags on Timer2<br />    TCNT2= 256 - x; //256 - 125 = 131 : Preload timer 2 for x clicks. Should be 1us per click<br />    while( (TIFR2 &amp; (1&lt;&lt;TOV2)) == 0);<br />}[/syntax]<br />Kod odbiornika:<br />[syntax=cpp]/*<br />    Created on: Mar. 30, 2010<br />Under project: RFM22<br />Author: Jim Lindblom<br />RFM22 Receive Example<br /><br />Hardware: Arduino Pro (ATmega328) running at 8Mhz, 3.3V<br />Wiring:<br />RFM22 BOB|Arduino Pro<br />----------------------------<br />GND|GND<br />3.3V|3.3V<br />GPIO0|NC<br />GPIO1|NC<br />GPIO2|NC<br />RXANT|PD6 (D6)<br />TXANT|PD5 (D5)<br />IRQ|PD4 (D4)<br />CSN|PB0 (D8)<br />SCK|PB4 (D13)<br />SDI|PB2 (D11)<br />SDO|PB3 (D12)<br /><br />Antenna is a 17cm piece of wire sticking straight up into the air.<br />*/<br /><br />//======================//<br />//======================//<br />#include &lt;avr/io.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &quot;RFM22.h&quot;<br />//======================//<br />//======================//<br />#define F_CPU 1000000UL<br />#define sbi(var, mask)   ((var) |= (uint8_t)(1 &lt;&lt; mask))<br />#define cbi(var, mask)   ((var) &amp;= (uint8_t)~(1 &lt;&lt; mask))<br /><br />//======================//<br />//Arduino Pro Specific Defines<br />#define LED 5<br /><br />//RFM22 Defines<br />#define CS 0 //pin for chip select<br />#define TXANT 5// PD5<br />#define RXANT 6// PD6<br />#define NIRQ 4// PD4<br /><br />//======================//<br />//======================//<br /><br />void ioinit(void);<br />void delay_ms(uint16_t x);<br />void delay_us(uint16_t x);<br /><br />//======================//<br />//======================//<br /><br />static int uart_putchar(char c, FILE *stream);<br />uint8_t uart_getchar(void);<br />static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);<br /><br />//======================//<br />//======================//<br /><br />void init_SPI(void);<br />void init_RFM22(void);<br />void to_rx_mode(void);<br />void rx_reset(void);<br />void checkINT(void);<br />void txdata(char data);<br />char rxdata(void);<br />char read(uint8_t address);<br />void write(uint8_t address, char data);<br /><br />//======================//<br />//Global Variables<br />unsigned char RF_RXBUF&#91;35&#93;;<br /><br />int main(void)<br />{<br />unsigned char i, chksum;<br /><br />ioinit();<br />init_SPI();<br />sbi(PORTB,CS);<br />printf(&quot;********RFM22 Communication Test********\n&quot;);<br /><br />//====================//<br />//Communications Test<br />printf(&quot;Reading DTYPE register, should be 0x08: %d&quot;, read(DTYPE));<br /><br />printf(&quot;\n*****************************************\n\n&quot;);<br /><br />init_RFM22();// Initialize all RFM22 registers<br />printf(&quot;Entering RX Mode...\n&quot;);<br />to_rx_mode();<br /><br />while(1)<br />{<br />if((PIND &amp; (1&lt;&lt;NIRQ)) == 0)//Interrupt will be generated if data is recieved<br />{<br />// Read 18-byte packet into RF_RXBUF&#91;&#93;:<br />for(i=0; i&lt;17; i++)<br />{<br />RF_RXBUF&#91;i&#93; = read(0x7F);<br />}<br /><br />// Check that the checksum matches up:<br />chksum = 0;<br />for(i=0; i&lt;16; i++)<br />chksum += RF_RXBUF&#91;i&#93;;<br /><br />// If checksum is good, print out what was received into the terminal<br />if(chksum == RF_RXBUF&#91;16&#93;)<br />{<br />write(0x07, 0x01);// To ready mode<br />printf(&quot;Received: &quot;);<br />for(i=0; i&lt;17; i++)<br />printf(&quot;%c&quot;, RF_RXBUF&#91;i&#93;);// Print characters if passed the checksum<br />printf(&quot;\n&quot;);<br />//printf(&quot;To Ready mode\n&quot;);<br />}<br />// otherwise reset and start listening again<br />else<br />{<br />rx_reset();<br />//printf(&quot;Bad checksum RX RESET...Listening again\n&quot;);<br />}<br />delay_ms(50);<br />}<br />}<br />}<br /><br />// Initialize the RFM22 for transmitting<br />void init_RFM22(void)<br />{<br />write(INTEN2, 0x00);// Disable all interrupts<br />write(OMFC1, 0x01);// Set READY mode<br />write(0x09, 0x7F);// Cap = 12.5pF<br />write(0x0A, 0x05);// Clk output is 2MHz<br /><br />write(0x0B, 0xF4);// GPIO0 is for RX data output<br />write(0x0C, 0xEF);// GPIO1 is TX/RX data CLK output<br />write(0x0D, 0x00);// GPIO2 for MCLK output<br />write(0x0E, 0x00);// GPIO port use default value<br /><br />write(0x0F, 0x70);// NO ADC used<br />write(0x10, 0x00);// no ADC used<br />write(0x12, 0x00);// No temp sensor used<br />write(0x13, 0x00);// no temp sensor used<br /><br />write(0x70, 0x20);// No manchester code, no data whiting, data rate &lt; 30Kbps<br /><br />write(0x1C, 0x1D);// IF filter bandwidth<br />write(0x1D, 0x40);// AFC Loop<br />//write(0x1E, 0x0A);// AFC timing<br /><br />write(0x20, 0xA1);// clock recovery<br />write(0x21, 0x20);// clock recovery<br />write(0x22, 0x4E);// clock recovery<br />write(0x23, 0xA5);// clock recovery<br />write(0x24, 0x00);// clock recovery timing<br />write(0x25, 0x0A);// clock recovery timing<br /><br />//write(0x2A, 0x18);<br />write(0x2C, 0x00);<br />write(0x2D, 0x00);<br />write(0x2E, 0x00);<br /><br />write(0x6E, 0x27);// TX data rate 1<br />write(0x6F, 0x52);// TX data rate 0<br /><br />write(0x30, 0x8C);// Data access control<br /><br />write(0x32, 0xFF);// Header control<br /><br />write(0x33, 0x42);// Header 3, 2, 1, 0 used for head length, fixed packet length, synchronize word length 3, 2,<br /><br />write(0x34, 64);// 64 nibble = 32 byte preamble<br />write(0x35, 0x20);// 0x35 need to detect 20bit preamble<br />write(0x36, 0x2D);// synchronize word<br />write(0x37, 0xD4);<br />write(0x38, 0x00);<br />write(0x39, 0x00);<br />write(0x3A, 's');// set tx header 3<br />write(0x3B, 'o');// set tx header 2<br />write(0x3C, 'n');// set tx header 1<br />write(0x3D, 'g');// set tx header 0<br />write(0x3E, 17);// set packet length to 17 bytes<br /><br />write(0x3F, 's');// set rx header<br />write(0x40, 'o');<br />write(0x41, 'n');<br />write(0x42, 'g');<br />write(0x43, 0xFF);// check all bits<br />write(0x44, 0xFF);// Check all bits<br />write(0x45, 0xFF);// check all bits<br />write(0x46, 0xFF);// Check all bits<br /><br />write(0x56, 0x01);<br /><br />write(0x6D, 0x07);// Tx power to max<br /><br />write(0x79, 0x00);// no frequency hopping<br />write(0x7A, 0x00);// no frequency hopping<br /><br />write(0x71, 0x22);// GFSK, fd&#91;8&#93;=0, no invert for TX/RX data, FIFO mode, txclk--&gt;gpio<br /><br />write(0x72, 0x48);// Frequency deviation setting to 45K=72*625<br /><br />write(0x73, 0x00);// No frequency offset<br />write(0x74, 0x00);// No frequency offset<br /><br />write(0x75, 0x53);// frequency set to 434MHz<br />write(0x76, 0x64);// frequency set to 434MHz<br />write(0x77, 0x00);// frequency set to 434Mhz<br /><br />write(0x5A, 0x7F);<br />write(0x59, 0x40);<br />write(0x58, 0x80);<br /><br />write(0x6A, 0x0B);<br />write(0x68, 0x04);<br />write(0x1F, 0x03);<br />}<br /><br />void to_rx_mode(void)<br />{<br />write(0x07, 0x01);// to ready mode<br /><br />sbi(PORTD, RXANT);<br />cbi(PORTD, TXANT);<br />delay_ms(50);<br />rx_reset();<br />}<br /><br />void rx_reset(void)<br />{<br />unsigned char i;<br /><br />write(0x07, 0x01);// to ready mode<br /><br />i = read(0x03);<br />i = read(0x04);<br /><br />write(0x7E, 17);<br /><br />write(0x08, 0x03);<br />write(0x08, 0x00);<br /><br />write(0x07, 5);<br /><br />write(0x05, 2);<br />}<br /><br />void checkINT(void)<br />{<br />if ((PIND &amp; (1&lt;&lt;NIRQ)) == 0)<br />printf(&quot;INT == 0\n&quot;);<br />else<br />printf(&quot;INT == 1\n&quot;);<br />}<br /><br />void write(uint8_t address, char data)<br />{<br />//write any data byte to any single address<br />//adds a 0 to the MSB of the address byte (WRITE mode)<br /><br />address |= 0x80;<br /><br />cbi(PORTB,CS);<br />delay_ms(1);<br />txdata(address);<br />delay_ms(1);<br />txdata(data);<br />delay_ms(1);<br />sbi(PORTB,CS);<br />}<br /><br />char read(uint8_t address)<br />{<br />//returns the contents of any 1 byte register from any address<br />//sets the MSB for every address byte (READ mode)<br /><br />char byte;<br /><br />address &amp;= 0x7F;<br /><br />cbi(PORTB,CS);<br />txdata(address);<br />byte = rxdata();<br />sbi(PORTB,CS);<br /><br />return byte;<br />}<br /><br />char rxdata(void)<br />{<br />SPDR = 0x55;<br />while((SPSR&amp;0x80) == 0x00);<br /><br />return SPDR;<br />}<br /><br />void txdata(char data)<br />{<br />SPDR = data;<br />while((SPSR&amp;0x80) == 0x00);<br />}<br /><br />void init_SPI(void)<br />{<br />// enable SPI<br />// make SPI master<br />// SCLK idle low<br />// sample data on rising edge<br />// SPCR |= 0b01010011;// SPIclk = FOSC/128<br />SPCR |= 0b01010000;// SPIclk = Fosc/4<br />}<br /><br />static int uart_putchar(char c, FILE *stream)<br />{<br />    if (c == '\n') uart_putchar('\r', stream);<br /><br />    loop_until_bit_is_set(UCSR0A, UDRE0);<br />    UDR0 = c;<br /><br />    return 0;<br />}<br /><br />uint8_t uart_getchar(void)<br />{<br />    while( !(UCSR0A &amp; (1&lt;&lt;RXC0)) );<br />    return(UDR0);<br />}<br /><br /><br />void ioinit (void)<br />{<br />    //1 = output, 0 = input<br />    DDRB = 0b11101111; //MISO input<br />    DDRC = 0b11111111; //All outputs<br />    DDRD = 0b11101110; //PORTD (RX on PD0), PD4 input<br />stdout = &amp;mystdout; //Required for printf init<br />int MYUBRR = 103;<br />UBRR0H = (MYUBRR) &gt;&gt; 8;<br />UBRR0L = MYUBRR;<br />UCSR0B = (1&lt;&lt;RXEN0)|(1&lt;&lt;TXEN0);<br />UCSR0C = (3&lt;&lt;UCSZ00);<br />UCSR0A = (1&lt;&lt;U2X0);<br /><br />TCCR2B = (1&lt;&lt;CS21);<br /><br />cbi(PORTD, TXANT);<br />cbi(PORTD, RXANT);<br />}<br /><br />//General short delays<br />void delay_ms(uint16_t x)<br />{<br />    for (; x &gt; 0 ; x--)<br />        delay_us(1000);<br />}<br /><br />//General short delays<br />void delay_us(uint16_t x)<br />{<br />    while(x &gt; 256)<br />    {<br />        TIFR2 = (1&lt;&lt;TOV2); //Clear any interrupt flags on Timer2<br />        TCNT2 = 0; //256 - 125 = 131 : Preload timer 2 for x clicks. Should be 1us per click<br />        while( (TIFR2 &amp; (1&lt;&lt;TOV2)) == 0);<br /><br />        x -= 256;<br />    }<br /><br />    TIFR2 = (1&lt;&lt;TOV2); //Clear any interrupt flags on Timer2<br />    TCNT2= 256 - x; //256 - 125 = 131 : Preload timer 2 for x clicks. Should be 1us per click<br />    while( (TIFR2 &amp; (1&lt;&lt;TOV2)) == 0);<br />}[/syntax]<br /><br />W czym problem ? Otoz komunikacja sie nawiazuje czasami odbiera bez problemu ciag znakow co sekunde  czasami tylko raz odbierze potem nic. Ciekawostka chcialem zmierzy pobor pradu przez caly uklad atmega i RFM wiec podlaczylem miliamperomierz wtedy za kazdym razem wysyla tylko raz,przerwa 1s znow wysyla  wzrasta pobor do 15mA i juz tak wisi, pomaga wylaczenie i wlaczenie zasilanie calegu ukladu lub tylko RFM. Zastanawiam się czy moze nie sa uszkodzone uklady RFM poniewaz zdarzylo sie mi przez pomylke podlaczyc pod 5V. Prosze o jakieś sugestie.<br />P.S. Moze ewentualnie ktoś posiada jakiś działający poprawnie kod ? chyba ze faktycznie moje RFM uszkodziłem.<br />Pozdrawiam<br /><br /><span style="color: #FF0000">Kody wklejamy przy pomocy [syntax=cpp] - Różowy J.</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2040">cybertom</a> — 28 sty 2014, o 13:12</p><hr />
]]></content>
</entry>
</feed>