RFM01 NIRQ immer high

OP #2627298
Hallo an alle

Wer hätte es gedacht, auch ich habe Probleme eine Funkstrecke mit den 
Modulen RFM01 und RFM02 aufzubauen. Mir ist bewusst, dass das Thema hier 
schon mehr als oft behandelt wurde. Ich habe auch so ziemlich alle 
Beiträge dazu gelesen aber komme einfach nicht weiter. Der Empfänger 
will einfach nichts empfangen. Dass er defekt ist schliesse ich aus, da 
er wie in der Datei "RFM01 status read" zu sehen ist, auf den Befehl 
Status read reagiert. Die gesamte Initialisierung des Empfängers ist in 
Bild "RFM01 init" zu sehen. Der Sender sendet ca. alle 390ms Daten wie 
in Bild "RFM02 übermittlung" zu sehen ist. Die gesendeten Daten sind in 
Bild " RFM02 data" zu sehen. Die SPI Kommunikation schliesse ich als 
Problem aus.

Zum Code.
Sender:

void RFM02_INIT(void)     // Funkmodul initialisieren
  {
  spi_init(0xCC,0x00);
  spi_init(0x8B,0x81);
  spi_init(0xA6,0x40);
  spi_init(0xC8,0x23);
  spi_init(0xD0,0x40);
  spi_init(0xC2,0x20);
  spi_init(0xC0,0x01);
  }

// Prozedur um Daten über FSK zu senden
void send(char data)
  {
  spi_init(0xC0,0x39);
  for (i=0; i<8; i++)
    {
    while (!NIRQ) {};
    while (NIRQ) {};
    if(data&0x80) {FSK=1;}
    else {FSK=0;}
    data=data<<1;
    }

  Delay10TCYx(20);
  spi_init(0xC0,0x01);
  }

Folgende Daten werden in einem Abstand von ca. 390ms immer wieder 
gesendet:

send(0xAA);
send(0xAA);
send(0xAA);

send(0x2D);
send(0xD4);

send(0x69);
send(0xAA);



Empfänger:

void RFM01_INIT(void)     // Funkmodul initialisieren
  {
  spi_init(0x00,0x00);  //
  spi_init(0x89,0x8A);  // 433 Band, 134kHz
  spi_init(0xA6,0x40);  // 434 MHz
  spi_init(0xC8,0x47);  // 9,6kbps
  spi_init(0xC6,0x9B);  // AFC setting
  spi_init(0xC4,0x2A);  // Clock recovery manual control, Digital 
filter, DQD=4
  spi_init(0xC2,0x40);  // output 1,66MHz
  spi_init(0xC0,0x80);
  spi_init(0xCE,0x84);  // use FIFO
  spi_init(0xCE,0x87);
  spi_init(0xC0,0x81);
  }


Daraufhin bleibt der µC immer in folgender Schleife hängen, da NIRQ 
immer high bleibt:

  while (!NIRQ)
  {
  wert=spi_read();
  spi_init(0xCE, 0x84);  // FIFO sync word
  spi_init(0xCE, 0x87);  // FIFO fill und enable
  }




Der Aufbau benutzt als antenne einen Draht von ca. 17cm. Der Abstand 
Sender Empfäner beträgt ca 10cm. Ich denke, dass auf diese Distanz nicht 
mal eine Antenne nötig wäre. Ich hoffe jemand kann mir helfen.

Gruss und Dank im vorraus Marc
Angehängte Dateien:
OP #2627346
Hier die Routinen spi_init und spi_read:

// Prozedur um SPI Init zu schreiben
void spi_init(unsigned char txdata, unsigned char txdata2)       // 
schreiben von Daten
{
    unsigned char rxdata;

  LATCbits.LATC6=0;
  Delay10TCYx(1);
  rxdata = SSPBUF;            // Puffer und BF Bit wird gelöscht
  SSPBUF = txdata;            // Puffer wird geladen
  while(!SSPSTATbits.BF) {}   // Warten bis Übertragung komplett
  rxdata = SSPBUF;
  SSPBUF = txdata2;
  while(!SSPSTATbits.BF) {}
  rxdata = SSPBUF;
  Delay10TCYx(1);
  LATCbits.LATC6=1;
}

// Prozedur um SPI Daten zu lesen
unsigned char spi_read(void)  //schreiben und zurückgeben der 
empfangenen Daten
{
    unsigned char rxdata;

  LATCbits.LATC6=0;
  Delay10TCYx(1);
  rxdata = SSPBUF;            // Puffer und BF Bit wird gelöscht
  SSPBUF = 0x00;              // Puffer wird geladen
  while(!SSPSTATbits.BF) {}   // Warten bis Übertragung komplett
  rxdata = SSPBUF;
  SSPBUF = 0x00;
  while(!SSPSTATbits.BF) {}
  rxdata = SSPBUF;
  SSPBUF = 0x00;
  while(!SSPSTATbits.BF) {}
  rxdata = SSPBUF;
  Delay10TCYx(1);
  LATCbits.LATC6=1;
  return (rxdata);            // Empfangene Daten übergeben, BF Bit 
löschen
}
OP #2627431
Das mit dem soft SPI kann ich mir nicht vorstellen aber ich probiers mal 
aus. Dennoch müsste der NIRQ Pin auf low gehen wenn korrekte Daten 
empfangen wurden was er aber nicht tut. Auch das FFIT Bit bleibt auf 0. 
Ich weiss nicht ob das ein Software oder Hardwareproblem ist.
OP #2627458
Aber die Datenrate ist doch identisch. Beim Sender wird sie so 
eingestellt:

WriteCMD( 0xC823 ); //9.6kbps
WriteCMD( 0xD040 ); //half data rate command,for example:if you want to 
set the data rate to 4.8k, you must confige the command with 9.6K,
then add half data rate command,the really data rate will
4.8kbps.

Und beim Empfanger so:

WriteCMD(0xC847);//4.8kbps
#2627526
hab noch mal das Bild aus dem 1.Post angeschaut, es sind 4.8kBd!
Aber wie Holger schon schreibt, die Daten kommen nicht kontinuierlich.

Du must den Sender 1x Einschalten (0xC039), dann alle Bytes senden und 
dann wieder ausschalten (0xC001)!

Sascha
Gast #2666987
Kannst du mal deine funktionierende Version von Sender und Emfänger 
posten? Du würdest bestimmt sehr vielen einen Riesen gefallen tun.

Danke im Voraus!

LG

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.