Mirf24

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • Page 2 of 6
golf
Benutzer
Avatar
Gender:
Location: Donauwörth
Age: 71
Posts: 256
Registered: 11 / 2009
Subject:

Re: Mirf24

 · 
Posted: 18.05.2017 - 16:42  ·  #9
Hallo miparo,
ok, dann ist auch gut.
Meine Module haben jedenfalls auf dem IC NRF24L01 aufgrdruckt.
Die Dinger sind ab 0.67€ , free shipping, aus China zu bekommen.
golf
rage
Benutzer
Avatar
Gender: n/a
Age: 65
Homepage: processanalytik.de
Posts: 237
Registered: 02 / 2007
Subject:

Re: Mirf24

 · 
Posted: 22.05.2017 - 08:35  ·  #10
Hallo miparo

Code

mrfSetLocalAddr(0);

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

Ich habe mich da an das Handbuch gehalten, dort steht
Code

procedure mrfSetLocalAddr(adr : byte);
Die Prozedur stellt die lokale Adresse (0..255) ein.

Das sollte zwar nicht zum Problem werden, aber da unsere Sensoren über alle möglichen Interface verfügen und hier meist per RS485 auf Adresse 0 den Master erwarten, habe ich das so übernommen. Damit sollten die Geräte auf Adresse 0 den Cheffe finden. Aber das ist Kummer sein kleinster.

Einen schönen Tag noch
rage
wom
 
Avatar
 
Subject:

Re: Mirf24

 · 
Posted: 29.05.2017 - 17:57  ·  #11
Hallo zusammen,

habe da ein ähnliches Problem. Der uMIRF24 Treiber mit einem xmega32A4 hat da seine Probleme. Er arbeitet nicht. Ich verwende da einen nRF24L01P aufgebaut von MikroeElektronik. Habe da einen Click Steckplatz aufgebaut, was einzelne Komponenten da einfach geprüft werden können. Scheint aber nicht zu arbeiten. Ich verwende den SPI-Port C mit CE auf PortC.4, SS auf PortC.3 und den Int auf PortC.2.

Ich habe vor Jahren von E-Lab die Komponenten mit dem nRT24 verwendet und hatte keine Probleme.

Gruß
WOM
wom
 
Avatar
 
Subject:

Re: Mirf24

 · 
Posted: 02.06.2017 - 09:17  ·  #12
Hallo,
wenn ich mir so die Signale auf CE ansehe, erwartet der Baustein für 10uS einen Puls-high um die Daten zu senden. Das kann ich aber nicht sehen. Dieser ist anscheinend auf 0 für die Zet fest zu liegen.

Gruß
WOM

This operating mode pulses the CE high for at least 10µs. This allows one packet to be transmitted.
This is the normal operating mode. After the packet is transmitted, the nRF24L01+ enters standby-I
mode.
rage
Benutzer
Avatar
Gender: n/a
Age: 65
Homepage: processanalytik.de
Posts: 237
Registered: 02 / 2007
Subject:

Re: Mirf24

 · 
Posted: 02.06.2017 - 11:37  ·  #13
Hey WOM
soweit habe ich das noch garnicht verfolgt, ich war der Hoffnung das das einfach behoben wird. Da ich noch ein paar Tage Zeit habe bis das Problem gelöst sein muß habe ich die Nachforschung erstmal beiseite gelegt. Aber danke für die Infos.

cu rage
wom
 
Avatar
 
Subject:

Re: Mirf24

 · 
Posted: 08.06.2017 - 09:40  ·  #14
Hallo zusammen,

hat schon irgend wer Infos zum MIRF24port mit der uses uMIRF24. Ich bring das mit dem angegebenen Treiber und dem xmega xmega32A4 zum laufen. Ich dachte das hier jemand Infos liefern kann. Es sieht so aus, dass der Sender nicht arbeitet. An der Hardware kann es nicht liegen. Bisher habe ich einige Probleme mit den xmega auch im bereich der I2C Treiber.

Hier verwende ich den Aufbau von Mikroe.

[url]
http://download.mikroe.com/doc…l-v100.pdf
[/url]

Gruß
WOM
Code
program ModRF_01M;
{$WG}                      {global Warnings on}
Device = xmega32A4, VCC=3.3;
Define_Fuses
  COMport   = USB;
  ProgMode  = PDI;

Import SysTick, TickTimer, SysLEDblink, MIRF24port;
Import WatchDog, SerPortD0, SerPortD1, SPI_C;

From System Import LongWord, LongInt, Float, PIDs;
From SysLEDblink Import LEDmessage, FlashOnce;    // this is optional

Define
// The XMegas don't provide any Oscillator fuses.
// So the application must setup the desired values 
      OSCtype        = int32MHz, PLLmul=4, prescB=1, prescC=1;
      SysTick        = 10;             {msec}
      StackSize      = $0064, iData;
      FrameSize      = $0064, iData;

      WatchDog       = msec2000;                       {2048msec}
      MIRF24port     = SPI_C, PortC, 4, 3, 2; // standard SPI port SS, CE, IRQ;

      SPIorderC      = MSB;
      SPImodeC       = 1;
      SPIprescC      = 1;//, double;    // double speed = optional
      SPI_SSC        = PortC, 4;
//      SPI_SSC        = none;

      SysLedBlink    = mSec25;              {SysTicks}
      SysLedBlink0   = PortR, 0, low;
      SysLedBlink1   = PortE, 0, high;

      // RS232
      SerPortD1     = 115200;
      RxBufferD1    = 30, iData;
      TxBufferD1    = 30, iData;

      // RS485
      SerPortD0     = 115200, Stop1, timeout;   {Baud, StopBits|Parity}
      SerCtrlD0     = PortD, 1, positive;    {XMega control line for RS485 driver}
      RxBufferD0    = 30, iData;
      TxBufferD0    = 30, iData;

      TickTimer   = Timer_C0;    // use Timer_C0 and no PortPin

uses uMIRF24;

Implementation
{--------------------------------------------------------------}
{ Type Declarations }

type

{$IDATA}
{--------------------------------------------------------------}
{ Const Declarations }
Const
     LEDOn  : Boolean = False;
     LEDOff : Boolean = True;

{--------------------------------------------------------------}
{ Var Declarations }
Var
   Timer1  : SysTimer;
   Err     : Byte;
   uMIR_Aktiv        : Boolean;
   uMIR_Mode         : tMRFpkt;
   rxCnt              : byte;
   rxBuff            : array[0..31] of byte;
   rxString[@rxBuff] : string[30];
   txBuff            : array[0..31] of byte;
   txString[@rxBuff] : string[30];

   CE[@PortC,3]  : Bit;  { CE }

{$IDATA}


{--------------------------------------------------------------}
{ functions }

{--------------------------------------------------------------}
{ Initialisieren der CPU                                       }
{--------------------------------------------------------------}
Procedure InitPorts;
Begin
  DDRA    := DDRB AND %00000000;      // Output=1  Input=0
  DDRB    := DDRB AND %11111110;      // Output=1  Input=0
  DDRC    := DDRC OR %11011010;      // Output=1  Input=0
//  DDRE    := DDRE Or %00000001;       // Output=1  Input=0
  PortE   := $01;
  DDRR    := DDRR Or %00000001;       // Output=1  Input=0
End;

{--------------------------------------------------------------}
{--------------------------------------------------------------}
Procedure InitSystem;
Begin
     InitPorts;
     TickTimerTime(10000);            // 10000usec = 10msec
     TickTimerStart;
     FlushBuffer (RxBufferD0);
     FlushBuffer (TxBufferD0);
     FlushBuffer (RxBufferD1);
     FlushBuffer (TxBufferD1);
     mrfSetChan(mrfChan3, false);
     mrfSetPower(mrfdBm0);
     mrfSetLocalAddr(0);
     mrfSetRetryMax(10);
     mrfSetRetryTimeOut(40);                          // 5x 250usec -> 1.25msec
     mrfSetRFspeed(mrfRF2000);
     CE:=True;
     uMIR_Aktiv:=mrfInit;
     CE:=False;
     // wenn der  MIRF24 Treiber/Modul vorhanden ist
     if mrfInit then
       SetSerEnable(UsartD0, True);
       WriteLn(SerOutD0,'uMIR_Aktiv');
       SetSerEnable(UsartD0, False);
     EndIf;
End;

{--------------------------------------------------------------}
{ Main Program }
{$IDATA}

begin
     EnableInts($87);
     InitSystem;
     SysLEDflashOnce(0);
     SetSerEnable(UsartD0, True);
     WriteLn(SerOutD0,'Mod_nRF start');
     SetSysTimer(Timer1,100);
     loop
       // wenn der  MIRF24 Treiber/Modul vorhanden ist
         if mrfInit then
           txString:='Test_1';
           WriteLn(SerOutD0,txString);
           CE:=True;
           If mrfTxPacket(2, @txBuff, 6, True)=False Then
             Case MRFgetState Of
             
             EndCase;
             WriteLn(SerOutD0,'mrfTxPacket=False');
           Else
             WriteLn(SerOutD0,'mrfTxPacket=True');
           EndIf;
           CE:=False;
           mDelay(500);
           txString:='Test_2';
           WriteLn(SerOutD0,txString);
           CE:=True;
           If mrfTxPacket(2, @txBuff,6, False)=False Then
             WriteLn(SerOutD0,'mrfTxPacket=False');
           Else
             WriteLn(SerOutD0,'mrfTxPacket=True');
           EndIf;
           CE:=False;
           mDelay(500);
         Else
           WriteLn(SerOutD0,'uMIR_Aktiv=False');
         EndIf;


         SysLEDflashOnce(0);
       mDelay(100);
     endloop;
end.
golf
Benutzer
Avatar
Gender:
Location: Donauwörth
Age: 71
Posts: 256
Registered: 11 / 2009
Subject:

Re: Mirf24

 · 
Posted: 09.06.2017 - 08:05  ·  #15
hallo wom,
der NRF sendet schon einwandfrei mit dem Source von rage mit uMIRF24. Siehe auch mein PNG vom 12.5.
Als Slave habe ich jetzt testweise mal einen ATmega88 genommen, damit klappt die Verbindung mit Broadcast und ohne zu dem Master mit einem ATxmega32A4U.
Mit dem ATXmega als Slave hats bei mir bisher auch nicht funktioniert. Ob sich nach dem letzten Avrco-Update was verändert hat, kann ich nicht sagen.

golf
wom
 
Avatar
 
Subject:

Re: Mirf24

 · 
Posted: 09.06.2017 - 09:20  ·  #16
Hallo,

mit dieser Implementation arbeitet der Compiler ohne Probleme, aber danach ist ein Programmieren der CPU nicht möglich, und zwar dauerhaft. Der Prommer liefert einen TimeOut error. Ist ärgerlich da es erst nach dem Austauschen der CPU mit einem anderen Programm dann wieder Programmer funktioniert.

Mir ist nicht bekannt das man mit einer Software die keinen Fehler liefert die CPU nicht mehr erreichen kann.

Code

....
{$NoSave}         // standard register save is sufficient
{--------------------------------------------------------------}
{--------------------------------------------------------------}
Interrupt TCD0_INTOVF;
begin
     //ASM: CALL System.$INTERRUPT_SYSTICK_USER;
end;
{--------------------------------------------------------------}
{--------------------------------------------------------------}
Procedure onTickTimer;          // onTickTimer(SaveAllRegs);SaveAllRegs not necessary here
begin
     //ASM: CALL System.$INTERRUPT_SYSTICK_USER;
end;
.....
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • Page 2 of 6
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   137   151 · Page-Gen-Time: 0.043034s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI