Forum: Mikrocontroller und Digitale Elektronik RFM69 Lib von Arduino zu c


von marabou (Gast)


Lesenswert?

Hallo,

ich lese mir gerade die LowPowerLab für das RFM69 Funkmodul durch und 
verstehe eine Sache nicht. Es geht um folgende Zeilen:


https://github.com/LowPowerLab/RFM69/blob/master/RFM69.cpp#L408-L414

https://github.com/LowPowerLab/RFM69/blob/master/RFM69.cpp#L399-L406

Was wird dort mit der Adresse gemacht und warum?

Danke und Gruß M

von Karl H. (kbuchegg)


Lesenswert?

marabou schrieb:

> Was wird dort mit der Adresse gemacht

Dort wird das Bit 7 (das oberste im Byte) entweder auf 1 gesetzt (in der 
Write Routine) bzw. es wird definitiv auf 0 gesetzt (in der Read 
Routine)

> und warum?

Was sagt das Datenblatt zum RFM69 über irgendwelche Besonderheiten im 
Adressbyte?

von Martin (Gast)


Lesenswert?

marabou schrieb:
> Was wird dort mit der Adresse gemacht und warum?
1
void RFM69::writeReg(uint8_t addr, uint8_t value)
2
{
3
  select();                        //Wähle das SPI Gerät 
4
  SPI.transfer(addr | 0x80);       //Wähle das Register "addr" zum schreiben
5
  SPI.transfer(value);             //Schreibe Wert von "value" in das Register
6
  unselect();                      //Wähle das Gerät wieder ab
7
}
8
9
uint8_t RFM69::readReg(uint8_t addr)
10
{
11
  select();                         //Wähle das SPI Gerät 
12
  SPI.transfer(addr & 0x7F);        //Wähle das Register "addr" zum lesen
13
  uint8_t regval = SPI.transfer(0); //Lese den Wert aus dem Register
14
  unselect();                       //Wähle das Gerät wieder ab
15
  return regval;                    //Gib den gelesenen Wert zurück!
16
}

von Martin (Gast)


Lesenswert?

Martin schrieb:
> SPI.transfer(addr & 0x7F);

Allerdings würde ich hier sagen das das
SPI.transfer(addr | 0x7F);
anstatt
SPI.transfer(addr & 0x7F);
sein muss...

von Karl H. (kbuchegg)


Lesenswert?

Martin schrieb:
> Martin schrieb:
>> SPI.transfer(addr & 0x7F);
>
> Allerdings würde ich hier sagen das das
> SPI.transfer(addr | 0x7F);
> anstatt
> SPI.transfer(addr & 0x7F);
> sein muss...

Nein, das würde ich nicht sagen.
Du hast gerade eine fertige Lib unbrauchbar gemacht.

von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz schrieb:

>> und warum?
>
> Was sagt das Datenblatt zum RFM69 über irgendwelche Besonderheiten im
> Adressbyte?

Auf Seite 44, in der unteren Hälfte, steht die Erläuterung zum 'warum' 
in deinem Code.

von Martin (Gast)


Lesenswert?

Karl Heinz schrieb:
> Nein, das würde ich nicht sagen.
> Du hast gerade eine fertige Lib unbrauchbar gemacht.

Warum wird dann zum schreiben
1
SPI.transfer(addr | 0x80);

verwendet und zum lesen
1
SPI.transfer(addr & 0x7F);

?

von Karl H. (kbuchegg)


Lesenswert?

Martin schrieb:
> Karl Heinz schrieb:
>> Nein, das würde ich nicht sagen.
>> Du hast gerade eine fertige Lib unbrauchbar gemacht.
>
> Warum wird dann zum schreiben ...

Lies das verdammte Datenblatt. Der Hersteller hat das nicht deswegen 
herausgegeben, dass man es ignoriert. Wenn ich, der noch nie etwas mit 
dem Baustein zu tun hatte, die gesuchte Information da drinn in unter 60 
Sekunden finden kann, dann kannst du das auch. Zumal aus dem Code heraus 
recht klar ist, wonach man suchen muss.

von Martin (Gast)


Lesenswert?

Martin schrieb:
> Karl Heinz schrieb:
>> Nein, das würde ich nicht sagen.
>> Du hast gerade eine fertige Lib unbrauchbar gemacht.
>
> Warum wird dann zum schreiben
> SPI.transfer(addr | 0x80);
> verwendet und zum lesen
> SPI.transfer(addr & 0x7F);
> ?

Ah habs mir gerade selber beantwortet :)

von marabou (Gast)


Lesenswert?

Ah ok jetzt hab ich es gerafft. Der Bezug von der Zeile Quellcode zu dem 
Teil im DB war für mich zu Beginn nicht so schlüssig. Macht wohl die 
Erfahrung.
Danke für die Tipps ;)

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.