www.mikrocontroller.net

Forum: HF, Funk und Felder ISM BAND FSK TRANSMITTER MODULE RFM02 - C Problem


Autor: Jens O. (kekse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich hoffe ich bin hier im richtigen Forum gelandet.
Ich möchte in meiner Schaltung gerne das Funk-Modul "ISM BAND FSK 
TRANSMITTER MODULE RFM02" nutzen. Die Anleitung hierzu findet man unter:

https://www.it-wns.de/data/datenblatt_0000019_1.pdf

Die Anleitung ansich ist bereits sehr hilfreich! Allerdings gibt es 
weiter unten in dem C-Beispiel zu AVR-Controllern eine Stelle die ich 
nicht ganz nachvollziehen kann.

Code Auszug:
...

void RF02B_SEND(unsigned char aByte)
{
  unsigned char i;

  for (i=0; i<8; i++)
  {
    while (PINB&(1<<RFXX_SDO)); //polling nIRQ, RFXX_SDO = 4
    while (!(PINB&(1<<RFXX_SDO)));

    if (aByte&0x80) {
      PORTB |= (1<<RFXX_DATA); // RFXX_DATA = 1
    } else {
      PORTB &= ~(1<<RFXX_DATA);
    }
    aByte<<=1;
  }
}

In dieser Funktion werden zu Anfang zwei Schleifen durchlaufen. Erst 
solange Bit 4 an PortB gesetzt ist, und dann solange Bit 4 an PortB 
nicht gesetzt ist. Ich vermute Mal diese Vorgehensweise soll immer erst 
das nächste Bit senden/setzen wenn das vorherige abgesendet wurde.

Was ich nicht verstehe ist warum dafür 2 Schleifen benötigt werden und 
wann und an welcher Stelle dieses Bit gesetzt wird. Wird das von dem 
Funkmodul gesetzt über den Interrupt? Wenn ja, wann wird dieser 
ausgelöst. Und wenn nicht, an welcher Stelle wird dieses Bit gesetzt??

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

im Datenblatt sollten die Timingdiagramme sein.

Als Kurzfassung: das RFM02 will die seriellen Bits alle einzeln angelegt 
haben, den Takt für die Baudrate zum Senden erzeugt es aber selbst.
Damit der Controller weiß, wann das nächste Bit angelegt werden muß, 
gibt das RFM auf nIRQ eine Low-Impuls aus.

Damit steht der Ablauf fest: warte bis nIRQ auf H ist (das ist der 
Grundzustand von nIRQ).
Dann warte bis nIRQ auf Low ist und damit der RFM anzeigt, daß er ein 
Bit haben will.
Bit an die Leitung anlegen.
Wenn noch nicht alle 8 Bit raus -> wieder von vorn.
Und hier kommt die Bedeutung der Abfrage auf nIRQ High ins Spiel:
der Schleifendurchlauf der for-Schleife kann schneller sein als die 
maximale Länge des Impulses vom RFM. Da würde dann also im nächsten 
Durchlauf immernoch Low anliegen und sofort das nächste Bit angelegt 
werden.
Darf aber nicht, darf es erst nach der nächsten H/L Flanke.

Gruß aus Berlin
Michael

Autor: Jens O. (kekse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die ausführliche Antwort. Das bringt mich ein gutes 
Stück weiter. Danke

Jens

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.