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


von Jens O. (kekse)


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:
1
...
2
3
void RF02B_SEND(unsigned char aByte)
4
{
5
  unsigned char i;
6
7
  for (i=0; i<8; i++)
8
  {
9
    while (PINB&(1<<RFXX_SDO)); //polling nIRQ, RFXX_SDO = 4
10
    while (!(PINB&(1<<RFXX_SDO)));
11
12
    if (aByte&0x80) {
13
      PORTB |= (1<<RFXX_DATA); // RFXX_DATA = 1
14
    } else {
15
      PORTB &= ~(1<<RFXX_DATA);
16
    }
17
    aByte<<=1;
18
  }
19
}

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??

von Michael U. (amiga)


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

von Jens O. (kekse)


Lesenswert?

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

Jens

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.