mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit RFM02


Autor: Robert Knipp (mr_insanity)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hatte zwar schon mal einen Thread zu dem Thema gestartet und auch 
ein paar Tips bekommen, welche aber noch keinen Erfolg gebracht haben.
Ich verzweifle jedenfalls gerade an einem RFM02. Habe zwei Eval-Boards 
von Pollin mit je einem RFM01 und einem RFM02 und versuche gerade mit 
einem kleinen Testprogramm das RFM02 zum laufen zu bringen. Das Programm 
bleibt aber immer in der Funktion rf02_txdata hängen und ich finde 
einfach nicht heraus, warum.

Hier der Code der Funktion:
void rf02_txdata(unsigned char *data, unsigned char number)
{  unsigned char i,wert;
  wert=0xC6;
  cbi(CS_PORT, CS);
  for (i=0; i<8; i++)
  {  
    if (wert&128)
      sbi(SDI_PORT, SDI);
    else
      cbi(SDI_PORT, SDI);
    sbi(SCK_PORT, SCK);
    wert<<=1;
    _delay_us(0.2);
    cbi(SCK_PORT, SCK);
    
  }
    rf02_shiftout(0xAA);
    rf02_shiftout(0xAA);
    rf02_shiftout(0xAA);
    rf02_shiftout(0x2D);
    rf02_shiftout(0xD4);
  for (i=0; i<number; i++)
    rf02_shiftout(*data++);
  sbi(CS_PORT, CS);
  while(IRQ_PIN&(1<<IRQ));    // wait until transfer done
  rf02_trans(0xC464);      // TX off after 10us
}


und hier mein kleines Testprogramm:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <stdlib.h>
#include <util/delay.h>
#include "global.h"
#include "rf02.h"

#define Taster_PORT PORTB
#define Taster_DDR   DDRB
#define Taster_PIN   PINB
#define Taster 1

#define LED_PORT  PORTD
#define LED_DDR   DDRD
#define LED_PIN   PIND
#define LED 5


unsigned char test[2]="01";

int main(void)
{
  Taster_DDR &= ~(1<<Taster);
  LED_DDR |= (1<<LED);
  
  rf02_init();          // ein paar Register setzen (z.B. CLK auf 10MHz)
  rf02_setfreq(RF02FREQ(433.92));  // Sende/Empfangsfrequenz auf 433,92MHz einstellen
  rf02_setpower(0);        // -0dBm Ausgangangsleistung
  rf02_setmodfreq(3);        // 120kHz Frequenzshift
  rf02_setbaud(19200);      // 19200 Baud
  
  
  while(1)
  {
    if (Taster_PIN & (1<<Taster))
    {
      rf02_txdata(test,2);
      LED_PORT |= (1<<LED);      
      _delay_ms(1000);
      LED_PORT &= ~(1<<LED);
    }
  }
}

Die gesamte Library für das rfm02 habe ich mal in den Anhang gepackt.
Hoffe Ihr könnt mir weiterhelfen. Schon mal vielen Dank für jegliche 
Hilfe.

Autor: Robert Knipp (mr_insanity)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe gerade bei weiterer Suche im Forum gesehen, dass das die Library 
von Benedikt K. ist. (Wusste gar nicht mehr wo ich die her hatte)
Vielleicht hilft das ja weiter...

Autor: Robert Knipp (mr_insanity)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wäre es vielleicht auch möglich, dass das an einem Defekt des RFM liegt?

Autor: Jens Kleemann (studone)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So um mal etwas Hilfe zu geben...

habe mich diese Woche mal intensiv mit dem RFM02 von Pollin beschäftigt.
Versuch auch eine kleine Funkstrecke aufzubauen.

Und auch bei mir blieb er in der "rf02_txdata" Funktion hängen.

diese do geschrieben das nur bei einer steigenden Flanke der nIRQ die 
Daten übernommen werden sollen. Mhm..soweit stehts auch im Datenblatt.
Nun Ist der nIRQ auber immer low....wärend man die Initdaten sendet.
Habs mal aufgezeichnet und die reaktion des Moduls versucht zu verstehn, 
mit der erkenntniss das nicht jeder Befehl akzeptiert wird. :-(

Dann durch zufall...kam ich dahinter... :-)

Das RFM02 modul hat einen internen PLL und muß sich von daher erst 
einschingen. Und wenn man in die C-codes schaut fällt einem auf das man 
bis auf etwas Port-Init nicht viel macht bevor der erste Befehl gesendet 
wird.

Und das ist meinst einer der schon einfach "verschluckt" wird. Lösung 
ist hier einfach das RFM02 Modul sich etwas Einschwingen zu lassen, 
bevor man es anspricht.  Also ne Delay schleife mit 
250msec-500msec...wartezeit vor dem ersten Befehl.

Dann wird auch der nIRQ gleich nach diesem High sein :-)

Und nach dem TX aktiv befehl kommt auch das syn-Signal mittels nIRQ.

Freut mich wenn ich weiter Helfen konnte :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.