Mirf24

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • Seite 1 von 6
rage
Benutzer
Avatar
Geschlecht: keine Angabe
Alter: 65
Homepage: processanalytik.de
Beiträge: 237
Dabei seit: 02 / 2007
Betreff:

Mirf24

 · 
Gepostet: 08.05.2017 - 16:03 Uhr  ·  #1
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.

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
Thomas.AC
Benutzer
Avatar
Geschlecht: keine Angabe
Alter: 44
Beiträge: 308
Dabei seit: 07 / 2013
Betreff:

Re: Mirf24

 · 
Gepostet: 10.05.2017 - 22:38 Uhr  ·  #2
versuche mal folgendes
Code

rxStatus := mrfRxPacket(@rxBuff, 255, rxCnt) 
case rxStatus of
rage
Benutzer
Avatar
Geschlecht: keine Angabe
Alter: 65
Homepage: processanalytik.de
Beiträge: 237
Dabei seit: 02 / 2007
Betreff:

Re: Mirf24

 · 
Gepostet: 11.05.2017 - 08:56 Uhr  ·  #3
Hallo Thomas
es ändert sich nichts, bei der Statusabfrage ist der Status immer wie erwartet. Ich sende immer abwechselnd 1 Broadcast- und 1 Standardpaket. Auf der Empfängerseite wird bei der Statusabfrage das jeweils richtig erkannt, beim Abholen des Paket ist dann alle wie bisher, Status none, Count=0 und der Buffer bleibt auch leer. Da das ja ein Treiber von AVRco ist weiß ich auch nicht wo ich noch suchen soll. Leider habe ich auch keine älteren Boards mehr um einen Gegentest mit einem ATMega machen zu können.

cu rage
golf
Benutzer
Avatar
Geschlecht:
Herkunft: Donauwörth
Alter: 72
Beiträge: 266
Dabei seit: 11 / 2009
Betreff:

Re: Mirf24

 · 
Gepostet: 12.05.2017 - 14:47 Uhr  ·  #4
Hallo rage,
ich hab mich erinnert, irgendwann auch mal solche Module gekauft zu haben. Ich hab deshalb auf die Schnelle auch mal so einen Test gemacht mit ATXmega16A4U. Das Modul sendet, aber ich bekomme mit Deinem Programm ebenfalls keine Daten rein. Bei den Xmega-Demos ist nur die Senderoutine drinnen. Was ich gemerkt habe, ist daß mrfSetFreq(2452,false) scheinbar nicht stimmt. Mit mrfSetChan(mrfChan9, false) sendet das Module aber auf 2452 Mhz. Anbei eine Aufnahme von der Frequenz 2452 MHz mit den Datenpaketen mit Retrys und dann einem Bradcast-Paket. Wenns auch nicht weiterhilft.
golf
Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
rage
Benutzer
Avatar
Geschlecht: keine Angabe
Alter: 65
Homepage: processanalytik.de
Beiträge: 237
Dabei seit: 02 / 2007
Betreff:

Re: Mirf24

 · 
Gepostet: 17.05.2017 - 08:29 Uhr  ·  #5
Guten Morgen

um sicher zustellen, das es nicht am falschen Kanal liegt, habe ich alle möglichen Kominationen durchprobiert. Es bleibt dabei, die Statusabfrage liefert was sie erkennt. Das entspricht auch dem was ich sende abwechselnd 1 Broadcast und ein Standardpaket. Das Einlesen gelingt nie. Was ich nun nicht weiß ist, wie sich der Treiber verhalten sollte, ist bei der Statusabfrage schon das ganze Paket eingelesen und muß nur noch ausgelesen werden, oder ist das die Erkennung es folgt ein Paket? Aber das kann ich nicht beantworten, da brauchte ich mal Hilfe.

Einen schönen Tag
rage
miparo
Schreiberling
Avatar
Geschlecht:
Herkunft: Germany
Alter: 59
Beiträge: 988
Dabei seit: 09 / 2007
Betreff:

Re: Mirf24

 · 
Gepostet: 17.05.2017 - 21:03 Uhr  ·  #6
Hi rage,
Code
  mrfSetLocalAddr(0);

das geht natürlich nicht. Muss größer 0 sein.

Mit dem mrfRxPacket(rxBuf,250,rxCount) ist schon alles erledigt. Sollten Daten empfangen worden sein dann liegen die auch gleich in deinen rxBuf.

Wobei ich gerade einen Fehler im Treiber sehe, da wird die Addr von Pipe0 gesetzt was überhaupt nicht funktioniert, da die unique ist.Sollte eigentlch Pipe1 sein.
Leider finde ich nur noch einen MIRF in der Kiste .. mal schauen.

Gruß
miparo
golf
Benutzer
Avatar
Geschlecht:
Herkunft: Donauwörth
Alter: 72
Beiträge: 266
Dabei seit: 11 / 2009
Betreff:

Re: Mirf24

 · 
Gepostet: 18.05.2017 - 06:29 Uhr  ·  #7
Hallo miparo,

ich kann Dir gerne eines meiner Billig-China-Module zusenden. Die liegen eh nur rum.
golf
miparo
Schreiberling
Avatar
Geschlecht:
Herkunft: Germany
Alter: 59
Beiträge: 988
Dabei seit: 09 / 2007
Betreff:

Re: Mirf24

 · 
Gepostet: 18.05.2017 - 13:21 Uhr  ·  #8
Hi Golf,
Danke . Ich hatte mir schon zwei bestellt.

Dein Chinateil ist dann der Nachbau SE8R01 vom nRF24 ?

Gruß
miparo
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • Seite 1 von 6
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 14 · Cache Hits: 14   141   155 · Page-Gen-Time: 0.032356s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI