Forum: HF, Funk und Felder RFM70: SPI funktioniert aber senden und empfangen nicht


von Odo M. (odo_m)


Lesenswert?

HAllo,

ich bin gerade dabei, 2 STück RFM70 von HOPERF via Arduino anzusteuern.
Arduino Nano (ATMEGA 328) mit 5V. RFM70 an Nanos 3V, Digi pins sind 
5V-tolerant.

Code habe ich vom Referenzcode nach Arduino transponiert.
Die SPI-Kommunikation mit den Chips funktioniert ohne Probleme. Alle 
RFM70-Register werden gesetzt und ich kann die auch ändern. Aber ich 
habe folgende Probleme:

1: Sende ich ein Packet, welches Autoacknowlege verlangt, dann geht der 
IRQ korrekt auf active low aber der AutoRetryCounter instant auf 15. Der 
Autoretry-Delay wird nicht berücksichtigt, obwohl im Register 
eingestellt.

2: Schicke ich Pakete mit W_TX_PAYLOAD_NOACK, dann bleibt der IRQ aus 
und auch der Retry-Counter bleibt auf 0. Ob verschickt wird, weiss ich 
nicht.

3: Ich empfange in keinem Fall etwas am 2. RFM70 an anderem Arduino. Ist 
auch egal, wer Sender oder Empfänger spielt. Der Empfänger detected auch 
keinen Carrier.

Ich habe verschiede Kanäle und Registereinstellungen probiert.

So initialisiere ich im Moment díe RFM70-Register.

Bank0:

00: 0x0F //reflect RX_DR\TX_DS\MAX_RT,Enable CRC ,2byte,POWER UP,PRX
01: 0x3F //Enable auto acknowledgement data pipe5\4\3\2\1\0
02: 0x3F //Enable RX Addresses pipe5\4\3\2\1\0
03: 0x03 //RX/TX address field width 5 byte
04: 0xFF //auto retransmission delay (4000us),auto retransmission 
count(15)
05: 0x17 //channel 23
06: 0x17 //air data rate-1M,out power 0dbm,setup LNA gain
11: 0x20 //Number of bytes in RX payload in data pipe0(32 byte)
12: 0x20 //Number of bytes in RX payload in data pipe1(32 byte)
13: 0x20 //Number of bytes in RX payload in data pipe2(32 byte)
14: 0x20 //Number of bytes in RX payload in data pipe3(32 byte)
15: 0x20 //Number of bytes in RX payload in data pipe4(32 byte)
16: 0x20 //Number of bytes in RX payload in data pipe5(32 byte)
17: 0x00 //fifo status
1C: 0x3F //Enable dynamic payload length data pipe5,4,3,2,1,0
1D: 0x07 //Enables Dynamic Payload Length,Enables Payload with 
ACK,Enables the W_TX_PAYLOAD_NOACK command


Der Sender hat in Bank 0, Register 0:
00: 0x0E //reflect RX_DR\TX_DS\MAX_RT,Enable CRC ,2byte,POWER UP,PTX



Bank 1:

00: 0x404b01e2
01: 0xc04b0000
02: 0xd0fc8c02
03: 0x99003941
04: 0xf99e860b // Alternativ 0xd9... statt 0xf9...
05: 0x24067fa6
06: 0x00000000
07: 0x00000000
08: 0x00000000
09: 0x00000000
0A: 0x00000000
0B: 0x00000000
0C: 0x00731200
0D: 0x0080b436

0E: 0xFFFFFEF7CF208104082041


Als Adressen nutze ich: RX_ADDR_P0 = TX_ADDR. Die anderen 
Receive-Adresses RX_ADDR_Pn (n=1..5) unterscheiden sich im LSB

Hat jemand eine Idee, was das Problem ist?

Es wirkt auf mich so, als wären zwar SPI-Interface und Registerbänke 
aktiv, aber die State-Control nicht. Interessant ist auch: Der CE-Pin 
(Chip-Enable) macht nicht, was ich erwartet habe. Egal ob ich den Pin 
vom Atmega aus  beschalte oder nicht, immer bekomme ich obiges 
Verhalten. Ud das bei 4 Chips, die ich hier liegen habe.

Hat jemand eine Idee?

Gruß

Odo

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.