MIRF24 in Verbindung mit XMega32A4

Torsten
Benutzer
Avatar
Gender:
Location: Bad Doberan
Age: 59
Posts: 62
Registered: 11 / 2005
Subject:

MIRF24 in Verbindung mit XMega32A4

 · 
Posted: 09.08.2016 - 14:58  ·  #1
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


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.


Torsten
Benutzer
Avatar
Gender:
Location: Bad Doberan
Age: 59
Posts: 62
Registered: 11 / 2005
Subject:

Re: MIRF24 in Verbindung mit XMega32A4

 · 
Posted: 23.09.2016 - 12:49  ·  #2
Hallo,

ich hatte heute noch einen Versuch gestartet, dabei habe ich gesehen, dass es in dem Beispielcode zumindestens einen Fehler gibt.
Der Slave wartet (mrfrxPacket...) auf ein Paket und guckt dann ob es einen Timeout gab oder etwas empfangen wurde.
(Ich hatte mein Projekt etwas vereinfacht und dabei hat sich der Fehler eingeschlichen.)
Bis das erste Paket empfangen wird, wartet der Save auch wirklich. Wenn aber ein Paket empfangen wurde, dann geht etwas schief.
Der Interrupt wird nicht zurückgesetzt, Signal ständig auf low. Der Type des gesendeten Paketes kann abgefragt werden und dieser stimmt auch mit dem gesendeten überein.
Vielleicht mache ich auch einen grundsätzlichen Fehler.

Benutzt jemand den MIRF24 Treiber an einem ATXMega in einem aktuellen Projekt?
Dann hätte ich eine neue Motivation nach dem Fehler weiter zu suchen.

Torsten

Code

{$IFDEF MASTER}
     txString:= 'Hello MIRF24 Data ';
     writeln(SeroutE0,'MIRF tx');
     if mrfTxPacket(2, @txBuff, 30, FALSE) then
        LEDgn := FALSE;
        mDelay(50);            // wait for the slave beep!
        LEDgn := TRUE;
        writeln(SeroutE0,'MIRF tx okay');
     else
        LEDrt := FALSE;
        mDelay(50);
        LEDrt := TRUE;
        writeln(SeroutE0,'MIRF tx ERROR');
     endif;
//     mrfGetState;
     mdelay(100);
{$ELSE}
// SLAVE --------------------------------------------------------------
    repeat
       mrfRxPacket(@rxBuff, 200, rxCnt);
       status := mrfGetRxType;
      // toggle(LEDrt);
    until status <> mrfPKTnone;


    case  status of
       mrfPKTnone  : //LEDrt := FALSE;
                     mDelay(1);
                     //LEDrt := TRUE;
                    |
        mrfPKTdata  : // a data packet received
                      LEDgn := FALSE;
                      mDelay(200);
                      LEDgn :=TRUE;
                    |
        mrfPKTbcast : // a broadcast packet received
                      LEDgn := FALSE;
                      mDelay(20);
                      LEDgn :=TRUE;
                    |
      endcase;


{$ENDIF}

Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   51   65 · Page-Gen-Time: 0.066759s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI