Hallo zusammen.
Eigentlich habe ich einen gut laufenden Code für das RFM70 Modul für
meinen Atmega. Das funktioniert soweit auch ganz gut, jedoch ist mir nun
aufgefallen, dass sich meine 4 RFM70 Module etwas unterschiedlich
verhalten.
Ich stecke also nur das RFM70 Modul um, Hardware und Firmware ist
absolut identisch das Verhalten ist jedoch verschieden.
Der Sender sendet alle 20ms ein 8 Byte langes Datenpaket. Wie ich nun
feststellen musste, kommen bei 3 der 4 Module nur sehr sporadisch die
Pakete an. Ich habe teilweise 50-90% Paketverlust. Als Empfänger
funktionieren alle 4 RFM70 Module jedoch gleich gut.
Jedoch ist nur ein RFM70 Modul dabei welches auch zuverlässig die Daten
wegsendet.
Da komische ist, dass die Übertragung manchmal zuverlässiger ist, wenn
ich mit dem Finger auf GND und VCC "patsche", aber sie ist längst nicht
100% zuverlässig.
Als ich das mit dem Finger gemerkt habe, habe ich natürlich auch gleich
zusätlich noch ein paar Abblockkondensatoren mit an VCC und GND direkt
am RFM70 gemacht (100n, 10n). Das hat jedoch auch keine Besserung
gebracht.
In meiner Verzweiflung habe ich dann auch schonmal am undokumentierten
Bank1_Reg4 rum gespielt. Wenn ich den Wert "0x0B869ED9" auf "0x0B869E09"
ändere ist die Sendequalität meist besser als vorher. Leider gibt es
keine Informationen über dieses Register, von daher weiß ich auch nicht
was ich gerade verändert habe :D
Wenn man sich jedoch das Datenblatt des BK2411 ansieht (das RFM70 hat ja
das BK2421 drin), dann ist dort in dem Register auch ein Wert für
"XTALFC", also für "Crystal offset compensation". Ich vermute bald dass
im RFM70 dort etwas Ähnliches "versteckt" ist und deshalb das Ändern des
Registers. Auswirkungen auf die Sendequalität bzw. Frequenz hat.
Hat vielleicht eine Idee woran das liegen könnte?
Als Spannungsquelle dient übrigens ein Lipo-Akku mit nem 3,3V LDO
dahinter.
Meine Bank 0 und Bank 1 vom RFM70 werden so initialisiert 1 | //In the array RegArrFSKAnalog,all the register value is the byte reversed!!!!!!!!!!!!!!!!!!!!!
| 2 | const unsigned long Bank1_Reg0_13[]={ //latest config txt
| 3 | 0xE2014B40,
| 4 | 0x00004BC0,
| 5 | 0x028CFCD0,
| 6 | 0x41390099,
| 7 | 0x0B869ED9,
| 8 | 0xA67F0624,
| 9 | 0x00000000,
| 10 | 0x00000000,
| 11 | 0x00000000,
| 12 | 0x00000000,
| 13 | 0x00000000,
| 14 | 0x00000000,
| 15 | 0x00127300,
| 16 | 0x36B48000,
| 17 | };
| 18 |
| 19 | const uint8_t Bank1_Reg14[]=
| 20 | {
| 21 | 0x41,0x20,0x08,0x04,0x81,0x20,0xCF,0xF7,0xFE,0xFF,0xFF
| 22 | };
| 23 |
| 24 | //Bank0 register initialization value
| 25 | const uint8_t Bank0_Reg[][2]={
| 26 | {0,0x7F},//Enable CRC ,2byte,POWER UP,PRX
| 27 | {1,0x00},//No AutoACK
| 28 | {2,0x3F},//Enable RX Addresses pipe5\4\3\2\1\0
| 29 | {3,0x03},//RX/TX address field width 5byte
| 30 | {4,0xff},//auto retransmission dalay (4000us),auto retransmission count(15)
| 31 | {5,0x17},//23 channel
| 32 | {6,0x37},//air data rate-1M,out power 5dbm,setup LNA gain
| 33 | {7,0x07},//
| 34 | {8,0x00},//
| 35 | {9,0x00},
| 36 | {12,0xc3},//only LSB Receive address data pipe 2, MSB bytes is equal to RX_ADDR_P1[39:8]
| 37 | {13,0xc4},//only LSB Receive address data pipe 3, MSB bytes is equal to RX_ADDR_P1[39:8]
| 38 | {14,0xc5},//only LSB Receive address data pipe 4, MSB bytes is equal to RX_ADDR_P1[39:8]
| 39 | {15,0xc6},//only LSB Receive address data pipe 5, MSB bytes is equal to RX_ADDR_P1[39:8]
| 40 | {17,0x20},//Number of bytes in RX payload in data pipe0(32 byte)
| 41 | {18,0x20},//Number of bytes in RX payload in data pipe1(32 byte)
| 42 | {19,0x20},//Number of bytes in RX payload in data pipe2(32 byte)
| 43 | {20,0x20},//Number of bytes in RX payload in data pipe3(32 byte)
| 44 | {21,0x20},//Number of bytes in RX payload in data pipe4(32 byte)
| 45 | {22,0x20},//Number of bytes in RX payload in data pipe5(32 byte)
| 46 | {23,0x11},//fifo status
| 47 | {28,0x3F},//Enable dynamic payload length data pipe5\4\3\2\1\0
| 48 | {29,0x07}//Enables Dynamic Payload Length,Enables Payload with ACK,Enables the W_TX_PAYLOAD_NOACK command
| 49 | };
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
|