Guten Tag
Nachdem ich nun endlich mal den Mirf-Empfänger für unsere Sensoren fertig gelötet habe, gibt es nun doch noch ein kleines Problem.
program NRF;
{$NOSHADOW}
{ $WG} {global Warnings off}
Device = xmega32E5, VCC=3.3;
{ $BOOTRST $04000} {Reset Jump to $04000}
Define_Fuses
// Override_Fuses;
NoteBook = A;
COMport = USB;
LockBits0 = [];
FuseBits1 = [];
FuseBits2 = [];
Import SysTick,MIRF24port;
From System Import ;
Define
OSCtype = int32MHz, PLLmul=4, prescB=1, prescC=1;
SysTick = 10; {msec}
StackSize = $0200, iData;
FrameSize = $0200, iData;
MIRF24port = SPI_C, PortC, 4, 3, 2; // standard SPI port SS, CE, IRQ
// SS, CE, IRQ
uses uMIRF24;
Implementation
{$IDATA}
{--------------------------------------------------------------}
{ Type Declarations }
type
{--------------------------------------------------------------}
{ Const Declarations }
{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
var
RunTimeFlags : Byte;
InitNRFOK [@RunTimeFlags,0]: Bit;
{$EEPROM}
{--------------------------------------------------------------}
{ functions }
{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
var
txBuff : array[0..31] of byte;
txString[@txBuff] : string[30];
rxBuff : array[0..31] of byte;
rxString[@rxBuff] : string[30];
rxCnt,uCount : byte;
rec : tMRFpkt;
begin
InitNRFOK:=False;
EnableInts($87);
mrfSetChan(tMRFchan(1), false);
mrfSetPower(tMRFpwr(1));
mrfSetLocalAddr(0);
mrfSetRetryMax(4);
mrfSetRetryTimeOut(4); // 5x 250usec -> 1.25msec
mrfSetRFspeed(tMRFrfSpeed(1));
InitNRFOK:=mrfInit;
loop
if InitNRFOK then
rec:=mrfGetRxType; //<------------Hier erkennt der Chip Korrekt Broadcast oder Data
if rec <> mrfPKTnone then
case mrfRxPacket(@rxBuff, 255, rxCnt) of //<--------Hier kommen keine Daten an
mrfPKTnone : // timeout, nothing received
|
mrfPKTdata : // a data packet received
rxCnt:=1;
|
mrfPKTbcast : // a broadcast packet received
rxCnt:=0;
|
endcase;
endif;
endif;
endloop;
end NRF.
Der Treiber erkennt eingehende Daten, und unterscheidet auch ob Broadcast oder nur Daten kommen, beim Auslesen der Daten ist das Ergebnis immer mrfPKTnone.
Versuchsweise auch mit einem XMEGA256A3U getestet, das Ergebnis bleibt das gleiche.
Hat jemand damit Erfahrung?
Danke und cu
rage
Nachdem ich nun endlich mal den Mirf-Empfänger für unsere Sensoren fertig gelötet habe, gibt es nun doch noch ein kleines Problem.
Code
program NRF;
{$NOSHADOW}
{ $WG} {global Warnings off}
Device = xmega32E5, VCC=3.3;
{ $BOOTRST $04000} {Reset Jump to $04000}
Define_Fuses
// Override_Fuses;
NoteBook = A;
COMport = USB;
LockBits0 = [];
FuseBits1 = [];
FuseBits2 = [];
Import SysTick,MIRF24port;
From System Import ;
Define
OSCtype = int32MHz, PLLmul=4, prescB=1, prescC=1;
SysTick = 10; {msec}
StackSize = $0200, iData;
FrameSize = $0200, iData;
MIRF24port = SPI_C, PortC, 4, 3, 2; // standard SPI port SS, CE, IRQ
// SS, CE, IRQ
uses uMIRF24;
Implementation
{$IDATA}
{--------------------------------------------------------------}
{ Type Declarations }
type
{--------------------------------------------------------------}
{ Const Declarations }
{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
var
RunTimeFlags : Byte;
InitNRFOK [@RunTimeFlags,0]: Bit;
{$EEPROM}
{--------------------------------------------------------------}
{ functions }
{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
var
txBuff : array[0..31] of byte;
txString[@txBuff] : string[30];
rxBuff : array[0..31] of byte;
rxString[@rxBuff] : string[30];
rxCnt,uCount : byte;
rec : tMRFpkt;
begin
InitNRFOK:=False;
EnableInts($87);
mrfSetChan(tMRFchan(1), false);
mrfSetPower(tMRFpwr(1));
mrfSetLocalAddr(0);
mrfSetRetryMax(4);
mrfSetRetryTimeOut(4); // 5x 250usec -> 1.25msec
mrfSetRFspeed(tMRFrfSpeed(1));
InitNRFOK:=mrfInit;
loop
if InitNRFOK then
rec:=mrfGetRxType; //<------------Hier erkennt der Chip Korrekt Broadcast oder Data
if rec <> mrfPKTnone then
case mrfRxPacket(@rxBuff, 255, rxCnt) of //<--------Hier kommen keine Daten an
mrfPKTnone : // timeout, nothing received
|
mrfPKTdata : // a data packet received
rxCnt:=1;
|
mrfPKTbcast : // a broadcast packet received
rxCnt:=0;
|
endcase;
endif;
endif;
endloop;
end NRF.
Der Treiber erkennt eingehende Daten, und unterscheidet auch ob Broadcast oder nur Daten kommen, beim Auslesen der Daten ist das Ergebnis immer mrfPKTnone.
Versuchsweise auch mit einem XMEGA256A3U getestet, das Ergebnis bleibt das gleiche.
Hat jemand damit Erfahrung?
Danke und cu
rage