Hallo liebe AVRCo-Gemeinde,
ich versuche ein kleines Funknetzwerk aufzubauen. Habe mir dazu den MIRF24 Treiber ausgeguckt.
Am PortC des XMega32 habe ich diesen angeschlossen.
Die Funktion mrfInit gibt mir auch ein TRUE zurück, damit schollte das Modul wohl richtig angeschlossen sein.
Ich habe bei dem Empfänger gesehen, dass der IRQ ausgelöst wird mehr passiert aber nicht, Signal ist nach der Initialisierung auf high und geht dann auf low wenn ein Paket gesendet wurde. In diesem Zustand verbleibt das Signal dann.
Die Paket-Sendefunktion gibt auch immer ein FALSE zurück.
Läuft der Treiber an allen XMegas's?
Ich habe mich bei meinem Testprogramm an den Beispielen versucht zu orientieren.
Hat vielleicht jemand ein kleines Beispiel oder arbeitet momentan auch mit dem Treiber und einem XMega?
Torsten
program Funk1;
{$NOSHADOW}
{ $WG} {global Warnings off}
Device = xmega32A4, VCC=3.3;
{ $BOOTRST $04000} {Reset Jump to $04000}
{$DEFINE MASTER}
Define_Fuses
// Override_Fuses;
NoteBook = A;
COMport = USB;
LockBits0 = [];
FuseBits0 = [];
FuseBits1 = [];
FuseBits2 = [];
ProgMode = PDI;
Import SysTick,MIRF24Port;
From System Import ;
Define
// The XMegas don't provide any Oscillator fuses.
// So the application must setup the desired values
// possible OSC types: extXTAL, extClock, ext32kHz, int32Khz, int2MHz, int32MHz
OSCtype = int2MHz,
PLLmul = 8,
prescB = 1,
prescC = 1, overdrive;
SysTick = 10; {msec}
StackSize = $0100, iData;
FrameSize = $0100, iData;
MIRF24Port = SPI_C,PortC,4,1,0; // SS,CE,IRQ
// MIRF24port = SPI_Soft,PortC,7,5,6,4,1,0;
uses uMIRF24;
Implementation
{$IDATA}
{--------------------------------------------------------------}
{ Type Declarations }
type
{--------------------------------------------------------------}
{ Const Declarations }
{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
var
LED1[@PortB,1] : bit;
LED2[@PortB,2] : bit;
txBuff : array[0..31] of byte;
txString[@txBuff] : string[30];
rxBuff : array[0..31] of byte;
rxCnt : byte;
rxString[@rxBuff] : string[30];
idx : byte;
{--------------------------------------------------------------}
{ functions }
procedure InitPorts;
begin
DDRB:= %00000110;
DDRC:= %10111010;
LED1:= TRUE;
LED2:= TRUE;
end InitPorts;
{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
InitPorts;
EnableInts($87);
mrfSetChan(mrfChan9, false);
mrfSetPower(mrfdBm18);
{$IFDEF MASTER}
mrfSetLocalAddr(0);
{$ELSE}
mrfSetLocalAddr(1);
{$ENDIF}
mrfSetRetryMax(10);
mrfSetRetryTimeOut(4); // 5x 250usec -> 1.25msec
mrfSetRFspeed(mrfRF250);
if mrfInit then
LED1:= FALSE;
endif;
txString:='MIRF24';
mdelay(1000);
loop
{$IFDEF MASTER}
if mrfTxPacket(1,@txBuff,6,false) then
else
toggle(LED2);
endif;
mdelay(100);
{$ELSE}
repeat
until mrfPKTnone <> mrfPKTnone;
toggle(LED1);
mrfRxPacket(@rxBuff,6,rxCnt);
if rxCnt <>0 then
toggle(LED2);
endif;
mdelay(50);
{$ENDIF}
endloop;
end Funk1.
ich versuche ein kleines Funknetzwerk aufzubauen. Habe mir dazu den MIRF24 Treiber ausgeguckt.
Am PortC des XMega32 habe ich diesen angeschlossen.
Die Funktion mrfInit gibt mir auch ein TRUE zurück, damit schollte das Modul wohl richtig angeschlossen sein.
Ich habe bei dem Empfänger gesehen, dass der IRQ ausgelöst wird mehr passiert aber nicht, Signal ist nach der Initialisierung auf high und geht dann auf low wenn ein Paket gesendet wurde. In diesem Zustand verbleibt das Signal dann.
Die Paket-Sendefunktion gibt auch immer ein FALSE zurück.
Läuft der Treiber an allen XMegas's?
Ich habe mich bei meinem Testprogramm an den Beispielen versucht zu orientieren.
Hat vielleicht jemand ein kleines Beispiel oder arbeitet momentan auch mit dem Treiber und einem XMega?
Torsten
Code
program Funk1;
{$NOSHADOW}
{ $WG} {global Warnings off}
Device = xmega32A4, VCC=3.3;
{ $BOOTRST $04000} {Reset Jump to $04000}
{$DEFINE MASTER}
Define_Fuses
// Override_Fuses;
NoteBook = A;
COMport = USB;
LockBits0 = [];
FuseBits0 = [];
FuseBits1 = [];
FuseBits2 = [];
ProgMode = PDI;
Import SysTick,MIRF24Port;
From System Import ;
Define
// The XMegas don't provide any Oscillator fuses.
// So the application must setup the desired values
// possible OSC types: extXTAL, extClock, ext32kHz, int32Khz, int2MHz, int32MHz
OSCtype = int2MHz,
PLLmul = 8,
prescB = 1,
prescC = 1, overdrive;
SysTick = 10; {msec}
StackSize = $0100, iData;
FrameSize = $0100, iData;
MIRF24Port = SPI_C,PortC,4,1,0; // SS,CE,IRQ
// MIRF24port = SPI_Soft,PortC,7,5,6,4,1,0;
uses uMIRF24;
Implementation
{$IDATA}
{--------------------------------------------------------------}
{ Type Declarations }
type
{--------------------------------------------------------------}
{ Const Declarations }
{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
var
LED1[@PortB,1] : bit;
LED2[@PortB,2] : bit;
txBuff : array[0..31] of byte;
txString[@txBuff] : string[30];
rxBuff : array[0..31] of byte;
rxCnt : byte;
rxString[@rxBuff] : string[30];
idx : byte;
{--------------------------------------------------------------}
{ functions }
procedure InitPorts;
begin
DDRB:= %00000110;
DDRC:= %10111010;
LED1:= TRUE;
LED2:= TRUE;
end InitPorts;
{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
InitPorts;
EnableInts($87);
mrfSetChan(mrfChan9, false);
mrfSetPower(mrfdBm18);
{$IFDEF MASTER}
mrfSetLocalAddr(0);
{$ELSE}
mrfSetLocalAddr(1);
{$ENDIF}
mrfSetRetryMax(10);
mrfSetRetryTimeOut(4); // 5x 250usec -> 1.25msec
mrfSetRFspeed(mrfRF250);
if mrfInit then
LED1:= FALSE;
endif;
txString:='MIRF24';
mdelay(1000);
loop
{$IFDEF MASTER}
if mrfTxPacket(1,@txBuff,6,false) then
else
toggle(LED2);
endif;
mdelay(100);
{$ELSE}
repeat
until mrfPKTnone <> mrfPKTnone;
toggle(LED1);
mrfRxPacket(@rxBuff,6,rxCnt);
if rxCnt <>0 then
toggle(LED2);
endif;
mdelay(50);
{$ENDIF}
endloop;
end Funk1.